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&);