Changeset 286835 in webkit
- Timestamp:
- Dec 10, 2021, 12:11:25 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
-
ChangeLog (modified) (1 diff)
-
css/CSSFilterImageValue.cpp (modified) (1 diff)
-
rendering/RenderLayerFilters.cpp (modified) (1 diff)
-
rendering/RenderMenuList.cpp (modified) (1 diff)
-
rendering/RenderObject.cpp (modified) (1 diff)
-
rendering/RenderObject.h (modified) (2 diffs)
-
rendering/RenderSearchField.cpp (modified) (1 diff)
-
rendering/svg/RenderSVGResourceClipper.cpp (modified) (1 diff)
-
rendering/svg/RenderSVGResourceFilter.cpp (modified) (2 diffs)
-
rendering/svg/RenderSVGResourceMasker.cpp (modified) (1 diff)
-
rendering/svg/SVGRenderingContext.cpp (modified) (3 diffs)
-
rendering/svg/SVGRenderingContext.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286831 r286835 1 2021-12-10 Said Abou-Hallawa <said@apple.com> 2 3 [GPU Process] [Filters] Enable Filter rendering in GPU Process 4 https://bugs.webkit.org/show_bug.cgi?id=233989 5 6 Reviewed by Cameron McCormack. 7 8 This will move applying the CSSFilterImageValue, the CSSFilter and the 9 SVGFilter to GPUProcess. 10 11 * css/CSSFilterImageValue.cpp: 12 (WebCore::CSSFilterImageValue::image): 13 * rendering/RenderLayerFilters.cpp: 14 (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded): 15 * rendering/RenderMenuList.cpp: 16 (RenderMenuList::hostWindow const): 17 Change the implementation to call RenderObject::hostWindow() since it is 18 now defined to be virtual in the two base classes. 19 20 * rendering/RenderObject.cpp: 21 (WebCore::RenderObject::hostWindow const): 22 * rendering/RenderObject.h: 23 Add the helper function RenderObject::hostWindow() since it is being 24 requested in many places because of creating ImageBuffer for GPUProcess. 25 26 * rendering/RenderSearchField.cpp: 27 (WebCore::RenderSearchField::hostWindow const): 28 Change the implementation to call RenderObject::hostWindow() since it is 29 now defined to be virtual in the two base classes. 30 31 * rendering/svg/RenderSVGResourceClipper.cpp: 32 (WebCore::RenderSVGResourceClipper::applyClippingToContext): 33 * rendering/svg/RenderSVGResourceFilter.cpp: 34 (WebCore::RenderSVGResourceFilter::applyResource): 35 (WebCore::RenderSVGResourceFilter::postApplyResource): 36 * rendering/svg/RenderSVGResourceMasker.cpp: 37 (WebCore::RenderSVGResourceMasker::applyResource): 38 filterData.sourceGraphicBuffer will have to stay around because caching 39 the filter result has not been implemented yet. 40 41 * rendering/svg/SVGRenderingContext.cpp: 42 (WebCore::SVGRenderingContext::createImageBuffer): 43 * rendering/svg/SVGRenderingContext.h: 44 1 45 2021-12-09 Wenson Hsieh <wenson_hsieh@apple.com> 2 46 -
trunk/Source/WebCore/css/CSSFilterImageValue.cpp
r286546 r286835 118 118 // FIXME (149424): This buffer should not be unconditionally unaccelerated. 119 119 auto renderingMode = RenderingMode::Unaccelerated; 120 auto sourceImage = ImageBuffer::create(size, renderingMode, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);120 auto sourceImage = ImageBuffer::create(size, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8, renderer.hostWindow()); 121 121 if (!sourceImage) 122 122 return &Image::nullImage(); -
trunk/Source/WebCore/rendering/RenderLayerFilters.cpp
r286546 r286835 140 140 #else 141 141 UNUSED_PARAM(targetContext); 142 m_sourceImage = ImageBuffer::create(logicalSize, filter.renderingMode(), 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);142 m_sourceImage = ImageBuffer::create(logicalSize, filter.renderingMode(), ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8, m_layer.renderer().hostWindow()); 143 143 #endif 144 144 if (auto context = inputContext()) -
trunk/Source/WebCore/rendering/RenderMenuList.cpp
r284093 r286835 550 550 HostWindow* RenderMenuList::hostWindow() const 551 551 { 552 return view().frameView().hostWindow();552 return RenderFlexibleBox::hostWindow(); 553 553 } 554 554 -
trunk/Source/WebCore/rendering/RenderObject.cpp
r286672 r286835 1455 1455 } 1456 1456 1457 HostWindow* RenderObject::hostWindow() const 1458 { 1459 return view().frameView().root() ? view().frameView().root()->hostWindow() : nullptr; 1460 } 1461 1457 1462 bool RenderObject::isRooted() const 1458 1463 { -
trunk/Source/WebCore/rendering/RenderObject.h
r286743 r286835 55 55 class HitTestRequest; 56 56 class HitTestResult; 57 class HostWindow; 57 58 class LegacyInlineBox; 58 59 class Path; … … 453 454 454 455 RenderView& view() const { return *document().renderView(); }; 456 HostWindow* hostWindow() const; 455 457 456 458 // Returns true if this renderer is rooted. -
trunk/Source/WebCore/rendering/RenderSearchField.cpp
r283851 r286835 356 356 HostWindow* RenderSearchField::hostWindow() const 357 357 { 358 return view().frameView().hostWindow();358 return RenderTextControlSingleLine::hostWindow(); 359 359 } 360 360 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
r284336 r286835 155 155 if (!clipperData.isValidForGeometry(objectBoundingBox, clippedContentBounds, absoluteTransform)) { 156 156 // FIXME (149469): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks nested clipping, though. 157 auto maskImage = SVGRenderingContext::createImageBuffer(clippedContentBounds, absoluteTransform, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated, &context);157 auto maskImage = SVGRenderingContext::createImageBuffer(clippedContentBounds, absoluteTransform, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated, nullptr, &context); 158 158 if (!maskImage) 159 159 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r286546 r286835 155 155 auto colorSpace = DestinationColorSpace::SRGB(); 156 156 #endif 157 auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, filterData->filter->renderingMode(), context);157 auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, filterData->filter->renderingMode(), renderer.hostWindow(), context); 158 158 if (!sourceGraphic) { 159 159 ASSERT(m_rendererFilterDataMap.contains(&renderer)); … … 218 218 context->drawFilteredImageBuffer(filterData.sourceGraphicBuffer.get(), filterData.drawingRegion, *filterData.filter); 219 219 } 220 221 filterData.sourceGraphicBuffer = nullptr;222 220 223 221 LOG_WITH_STREAM(Filters, stream << "RenderSVGResourceFilter " << this << " postApplyResource done\n"); -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
r283851 r286835 85 85 86 86 // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though. 87 maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskColorSpace, RenderingMode::Unaccelerated, context);87 maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskColorSpace, RenderingMode::Unaccelerated, nullptr, context); 88 88 if (!maskerData->maskImage) 89 89 return false; -
trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp
r286795 r286835 227 227 } 228 228 229 RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const GraphicsContext* context)229 RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const HostWindow* hostWindow, const GraphicsContext* context) 230 230 { 231 231 IntRect paintRect = calculateImageBufferRect(targetRect, absoluteTransform); … … 238 238 if (ImageBuffer::sizeNeedsClamping(clampedSize, scale)) 239 239 clampedSize = clampedSize * scale; 240 241 #if USE(DIRECT2D) 242 auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace, PixelFormat::BGRA8); 243 #else 244 UNUSED_PARAM(context); 245 auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, ShouldUseDisplayList::No, RenderingPurpose::DOM, 1, colorSpace, PixelFormat::BGRA8, hostWindow); 246 #endif 247 if (!imageBuffer) 248 return nullptr; 249 250 AffineTransform transform; 251 transform.scale(scale).translate(-paintRect.location()).multiply(absoluteTransform); 252 253 GraphicsContext& imageContext = imageBuffer->context(); 254 imageContext.concatCTM(transform); 255 256 return imageBuffer; 257 } 258 259 RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const FloatRect& clampedRect, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const GraphicsContext* context) 260 { 261 IntSize clampedSize = roundedIntSize(clampedRect.size()); 262 FloatSize unclampedSize = roundedIntSize(targetRect.size()); 263 264 // Don't create empty ImageBuffers. 265 if (clampedSize.isEmpty()) 266 return nullptr; 240 267 241 268 #if USE(DIRECT2D) … … 248 275 return nullptr; 249 276 250 AffineTransform transform;251 transform.scale(scale).translate(-paintRect.location()).multiply(absoluteTransform);252 253 GraphicsContext& imageContext = imageBuffer->context();254 imageContext.concatCTM(transform);255 256 return imageBuffer;257 }258 259 RefPtr<ImageBuffer> SVGRenderingContext::createImageBuffer(const FloatRect& targetRect, const FloatRect& clampedRect, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, const GraphicsContext* context)260 {261 IntSize clampedSize = roundedIntSize(clampedRect.size());262 FloatSize unclampedSize = roundedIntSize(targetRect.size());263 264 // Don't create empty ImageBuffers.265 if (clampedSize.isEmpty())266 return nullptr;267 268 #if USE(DIRECT2D)269 auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, context, 1, colorSpace, PixelFormat::BGRA8);270 #else271 UNUSED_PARAM(context);272 auto imageBuffer = ImageBuffer::create(clampedSize, renderingMode, 1, colorSpace, PixelFormat::BGRA8);273 #endif274 if (!imageBuffer)275 return nullptr;276 277 277 GraphicsContext& imageContext = imageBuffer->context(); 278 278 -
trunk/Source/WebCore/rendering/svg/SVGRenderingContext.h
r281064 r286835 61 61 bool isRenderingPrepared() const { return m_renderingFlags & RenderingPrepared; } 62 62 63 static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace&, RenderingMode, const GraphicsContext* = nullptr);63 static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform, const DestinationColorSpace&, RenderingMode, const HostWindow* = nullptr, const GraphicsContext* = nullptr); 64 64 static RefPtr<ImageBuffer> createImageBuffer(const FloatRect& targetRect, const FloatRect& clampedRect, const DestinationColorSpace&, RenderingMode, const GraphicsContext* = nullptr); 65 65
Note:
See TracChangeset
for help on using the changeset viewer.