Title: [286835] trunk/Source/WebCore
Revision
286835
Author
s...@apple.com
Date
2021-12-10 00:11:25 -0800 (Fri, 10 Dec 2021)

Log Message

[GPU Process] [Filters] Enable Filter rendering in GPU Process
https://bugs.webkit.org/show_bug.cgi?id=233989

Reviewed by Cameron McCormack.

This will move applying the CSSFilterImageValue, the CSSFilter and the
SVGFilter to GPUProcess.

* css/CSSFilterImageValue.cpp:
(WebCore::CSSFilterImageValue::image):
* rendering/RenderLayerFilters.cpp:
(WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded):
* rendering/RenderMenuList.cpp:
(RenderMenuList::hostWindow const):
Change the implementation to call RenderObject::hostWindow() since it is
now defined to be virtual in the two base classes.

* rendering/RenderObject.cpp:
(WebCore::RenderObject::hostWindow const):
* rendering/RenderObject.h:
Add the helper function RenderObject::hostWindow() since it is being
requested in many places because of creating ImageBuffer for GPUProcess.

* rendering/RenderSearchField.cpp:
(WebCore::RenderSearchField::hostWindow const):
Change the implementation to call RenderObject::hostWindow() since it is
now defined to be virtual in the two base classes.

* rendering/svg/RenderSVGResourceClipper.cpp:
(WebCore::RenderSVGResourceClipper::applyClippingToContext):
* rendering/svg/RenderSVGResourceFilter.cpp:
(WebCore::RenderSVGResourceFilter::applyResource):
(WebCore::RenderSVGResourceFilter::postApplyResource):
* rendering/svg/RenderSVGResourceMasker.cpp:
(WebCore::RenderSVGResourceMasker::applyResource):
filterData.sourceGraphicBuffer will have to stay around because caching
the filter result has not been implemented yet.

* rendering/svg/SVGRenderingContext.cpp:
(WebCore::SVGRenderingContext::createImageBuffer):
* rendering/svg/SVGRenderingContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286834 => 286835)


--- trunk/Source/WebCore/ChangeLog	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/ChangeLog	2021-12-10 08:11:25 UTC (rev 286835)
@@ -1,3 +1,47 @@
+2021-12-10  Said Abou-Hallawa  <s...@apple.com>
+
+        [GPU Process] [Filters] Enable Filter rendering in GPU Process
+        https://bugs.webkit.org/show_bug.cgi?id=233989
+
+        Reviewed by Cameron McCormack.
+
+        This will move applying the CSSFilterImageValue, the CSSFilter and the
+        SVGFilter to GPUProcess.
+
+        * css/CSSFilterImageValue.cpp:
+        (WebCore::CSSFilterImageValue::image):
+        * rendering/RenderLayerFilters.cpp:
+        (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded):
+        * rendering/RenderMenuList.cpp:
+        (RenderMenuList::hostWindow const):
+        Change the implementation to call RenderObject::hostWindow() since it is
+        now defined to be virtual in the two base classes.
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::hostWindow const):
+        * rendering/RenderObject.h:
+        Add the helper function RenderObject::hostWindow() since it is being 
+        requested in many places because of creating ImageBuffer for GPUProcess.
+
+        * rendering/RenderSearchField.cpp:
+        (WebCore::RenderSearchField::hostWindow const):
+        Change the implementation to call RenderObject::hostWindow() since it is
+        now defined to be virtual in the two base classes.
+
+        * rendering/svg/RenderSVGResourceClipper.cpp:
+        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
+        * rendering/svg/RenderSVGResourceFilter.cpp:
+        (WebCore::RenderSVGResourceFilter::applyResource):
+        (WebCore::RenderSVGResourceFilter::postApplyResource):
+        * rendering/svg/RenderSVGResourceMasker.cpp:
+        (WebCore::RenderSVGResourceMasker::applyResource):
+        filterData.sourceGraphicBuffer will have to stay around because caching
+        the filter result has not been implemented yet.
+
+        * rendering/svg/SVGRenderingContext.cpp:
+        (WebCore::SVGRenderingContext::createImageBuffer):
+        * rendering/svg/SVGRenderingContext.h:
+
 2021-12-09  Wenson Hsieh  <wenson_hs...@apple.com>
 
         Add a new WKWebpagePreferences SPI for modal container observation policies

Modified: trunk/Source/WebCore/css/CSSFilterImageValue.cpp (286834 => 286835)


--- trunk/Source/WebCore/css/CSSFilterImageValue.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/css/CSSFilterImageValue.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -117,7 +117,7 @@
     // Transform Image into ImageBuffer.
     // FIXME (149424): This buffer should not be unconditionally unaccelerated.
     auto renderingMode = RenderingMode::Unaccelerated;
-    auto sourceImage = ImageBuffer::create(size, renderingMode, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);
+    auto sourceImage = ImageBuffer::create(size, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8, renderer.hostWindow());
     if (!sourceImage)
         return &Image::nullImage();
 

Modified: trunk/Source/WebCore/rendering/RenderLayerFilters.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/RenderLayerFilters.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/RenderLayerFilters.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -139,7 +139,7 @@
         m_sourceImage = ImageBuffer::create(logicalSize, filter.renderingMode(), &targetContext, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);
 #else
         UNUSED_PARAM(targetContext);
-        m_sourceImage = ImageBuffer::create(logicalSize, filter.renderingMode(), 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);
+        m_sourceImage = ImageBuffer::create(logicalSize, filter.renderingMode(), ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8, m_layer.renderer().hostWindow());
 #endif
         if (auto context = inputContext())
             context->scale(filter.filterScale());

Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/RenderMenuList.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -549,7 +549,7 @@
 
 HostWindow* RenderMenuList::hostWindow() const
 {
-    return view().frameView().hostWindow();
+    return RenderFlexibleBox::hostWindow();
 }
 
 Ref<Scrollbar> RenderMenuList::createScrollbar(ScrollableArea& scrollableArea, ScrollbarOrientation orientation, ScrollbarControlSize controlSize)

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -1454,6 +1454,11 @@
     return offset;
 }
 
+HostWindow* RenderObject::hostWindow() const
+{
+    return view().frameView().root() ? view().frameView().root()->hostWindow() : nullptr;
+}
+
 bool RenderObject::isRooted() const
 {
     return isDescendantOf(&view());

Modified: trunk/Source/WebCore/rendering/RenderObject.h (286834 => 286835)


--- trunk/Source/WebCore/rendering/RenderObject.h	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2021-12-10 08:11:25 UTC (rev 286835)
@@ -54,6 +54,7 @@
 class HitTestLocation;
 class HitTestRequest;
 class HitTestResult;
+class HostWindow;
 class LegacyInlineBox;
 class Path;
 class Position;
@@ -452,6 +453,7 @@
     inline bool preservesNewline() const;
 
     RenderView& view() const { return *document().renderView(); };
+    HostWindow* hostWindow() const;
 
     // Returns true if this renderer is rooted.
     bool isRooted() const;

Modified: trunk/Source/WebCore/rendering/RenderSearchField.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/RenderSearchField.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/RenderSearchField.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -355,7 +355,7 @@
 
 HostWindow* RenderSearchField::hostWindow() const
 {
-    return view().frameView().hostWindow();
+    return RenderTextControlSingleLine::hostWindow();
 }
 
 Ref<Scrollbar> RenderSearchField::createScrollbar(ScrollableArea& scrollableArea, ScrollbarOrientation orientation, ScrollbarControlSize controlSize)

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -154,7 +154,7 @@
     AffineTransform absoluteTransform = SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(renderer);
     if (!clipperData.isValidForGeometry(objectBoundingBox, clippedContentBounds, absoluteTransform)) {
         // FIXME (149469): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks nested clipping, though.
-        auto maskImage = SVGRenderingContext::createImageBuffer(clippedContentBounds, absoluteTransform, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated, &context);
+        auto maskImage = SVGRenderingContext::createImageBuffer(clippedContentBounds, absoluteTransform, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated, nullptr, &context);
         if (!maskImage)
             return false;
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -154,7 +154,7 @@
 #else
     auto colorSpace = DestinationColorSpace::SRGB();
 #endif
-    auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, filterData->filter->renderingMode(), context);
+    auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, filterData->filter->renderingMode(), renderer.hostWindow(), context);
     if (!sourceGraphic) {
         ASSERT(m_rendererFilterDataMap.contains(&renderer));
         filterData->savedContext = context;
@@ -218,8 +218,6 @@
         context->drawFilteredImageBuffer(filterData.sourceGraphicBuffer.get(), filterData.drawingRegion, *filterData.filter);
     }
 
-    filterData.sourceGraphicBuffer = nullptr;
-
     LOG_WITH_STREAM(Filters, stream << "RenderSVGResourceFilter " << this << " postApplyResource done\n");
 }
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -84,7 +84,7 @@
 #endif
 
         // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though.
-        maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskColorSpace, RenderingMode::Unaccelerated, context);
+        maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskColorSpace, RenderingMode::Unaccelerated, nullptr, context);
         if (!maskerData->maskImage)
             return false;
 

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp (286834 => 286835)


--- trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp	2021-12-10 08:11:25 UTC (rev 286835)
@@ -226,7 +226,7 @@
     return absoluteTransform;
 }
 
-RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const GraphicsContext* context)
+RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const HostWindow* hostWindow, const GraphicsContext* context)
 {
     IntRect paintRect = calculateImageBufferRect(targetRect, absoluteTransform);
     // Don't create empty ImageBuffers.
@@ -242,7 +242,7 @@
     auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace, PixelFormat::BGRA8);
 #else
     UNUSED_PARAM(context);
-    auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace, PixelFormat::BGRA8);
+    auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, colorSpace, PixelFormat::BGRA8, hostWindow);
 #endif
     if (!imageBuffer)
         return nullptr;

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderingContext.h (286834 => 286835)


--- trunk/Source/WebCore/rendering/svg/SVGRenderingContext.h	2021-12-10 06:55:24 UTC (rev 286834)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderingContext.h	2021-12-10 08:11:25 UTC (rev 286835)
@@ -60,7 +60,7 @@
     void prepareToRenderSVGContent(RenderElement&, PaintInfo&, NeedsGraphicsContextSave = DontSaveGraphicsContext);
     bool isRenderingPrepared() const { return m_renderingFlags & RenderingPrepared; }
 
-    static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace&, RenderingMode, const GraphicsContext* = nullptr);
+    static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace&, RenderingMode, const HostWindow* = nullptr, const GraphicsContext* = nullptr);
     static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const FloatRect& clampedRect, const DestinationColorSpace&, RenderingMode, const GraphicsContext* = nullptr);
 
     static void renderSubtreeToContext(GraphicsContext&, RenderElement&, const AffineTransform&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to