Changeset 286193 in webkit
- Timestamp:
- Nov 27, 2021, 8:28:11 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 added
- 4 deleted
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286191 r286193 1 2021-11-27 Said Abou-Hallawa <said@apple.com> 2 3 [GPU Process] Implement FilterEffect CoreImage appliers 4 https://bugs.webkit.org/show_bug.cgi?id=232831 5 6 Reviewed by Cameron McCormack. 7 8 This will allow applying the CoreImage filters through FilterEffect::apply(). 9 It will also allow passing FilterImages to the FilterEffect CoreImage 10 appliers. This will require adding a CIImage as a possible result to 11 FilterImage. 12 13 If the CoreImage filters are enabled, the Filter will check if all the 14 FilterEffects supports CoreImage rendering. And if one if them does not 15 support it, the renderingMode will be switched to Unaccelerated. 16 17 * Sources.txt: 18 * SourcesCocoa.txt: 19 * WebCore.xcodeproj/project.pbxproj: 20 * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp. 21 * platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm: Added. 22 (WebCore::FEColorMatrixCoreImageApplier::FEColorMatrixCoreImageApplier): 23 (WebCore::FEColorMatrixCoreImageApplier::supportsCoreImageRendering): 24 (WebCore::FEColorMatrixCoreImageApplier::apply const): 25 * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.h: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.h. 26 * platform/graphics/coreimage/FEComponentTransferCoreImageApplier.mm: Added. 27 (WebCore::FEComponentTransferCoreImageApplier::FEComponentTransferCoreImageApplier): 28 (WebCore::FEComponentTransferCoreImageApplier::supportsCoreImageRendering): 29 (WebCore::FEComponentTransferCoreImageApplier::apply const): 30 * platform/graphics/coreimage/FilterEffectRendererCoreImage.h: Removed. 31 * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm: Removed. 32 * platform/graphics/coreimage/FilterImageCoreImage.mm: Added. 33 (WebCore::sharedCIContext): 34 (WebCore::FilterImage::setCIImage): 35 (WebCore::FilterImage::imageBufferFromCIImage): 36 * platform/graphics/coreimage/SourceGraphicCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp. 37 * platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp. 38 (WebCore::SourceGraphicCoreImageApplier::apply const): 39 * platform/graphics/cv/CVUtilities.mm: 40 * platform/graphics/filters/FEColorMatrix.cpp: 41 (WebCore::FEColorMatrix::supportsCoreImageRendering const): 42 (WebCore::FEColorMatrix::createApplier const): 43 * platform/graphics/filters/FEColorMatrix.h: 44 * platform/graphics/filters/FEComponentTransfer.cpp: 45 (WebCore::FEComponentTransfer::supportsCoreImageRendering const): 46 (WebCore::FEComponentTransfer::createApplier const): 47 * platform/graphics/filters/FEComponentTransfer.h: 48 * platform/graphics/filters/Filter.h: 49 (WebCore::Filter::Filter): 50 (): Deleted. 51 * platform/graphics/filters/FilterFunction.h: 52 (WebCore::FilterFunction::supportsCoreImageRendering const): 53 * platform/graphics/filters/FilterImage.cpp: 54 (WebCore::FilterImage::imageBuffer): 55 (WebCore::FilterImage::imageBufferFromPixelBuffer): 56 * platform/graphics/filters/FilterImage.h: 57 (WebCore::FilterImage::ciImage const): 58 * platform/graphics/filters/SourceGraphic.cpp: 59 (WebCore::SourceGraphic::createApplier const): 60 * platform/graphics/filters/SourceGraphic.h: 61 * platform/mac/ScrollingEffectsController.mm: 62 * rendering/CSSFilter.cpp: 63 (WebCore::CSSFilter::create): 64 (WebCore::CSSFilter::CSSFilter): 65 (WebCore::createSVGFilter): 66 (WebCore::CSSFilter::buildFilterFunctions): 67 (WebCore::CSSFilter::allocateBackingStoreIfNeeded): 68 (WebCore::CSSFilter::supportsCoreImageRendering const): 69 (WebCore::CSSFilter::apply): 70 (WebCore::CSSFilter::output): 71 (WebCore::CSSFilter::outputRect): 72 * rendering/CSSFilter.h: 73 * rendering/svg/RenderSVGResourceFilter.cpp: 74 (WebCore::RenderSVGResourceFilter::applyResource): 75 * rendering/svg/SVGRenderTreeAsText.cpp: 76 (WebCore::writeSVGResourceContainer): 77 * svg/graphics/filters/SVGFilter.cpp: 78 (WebCore::SVGFilter::create): 79 (WebCore::SVGFilter::SVGFilter): 80 (WebCore::SVGFilter::supportsCoreImageRendering const): 81 * svg/graphics/filters/SVGFilter.h: 82 1 83 2021-11-27 Sam Weinig <weinig@apple.com> 2 84 -
trunk/Source/WebCore/Sources.txt
r286152 r286193 2102 2102 platform/graphics/filters/FETurbulence.cpp 2103 2103 platform/graphics/filters/FilterEffect.cpp 2104 platform/graphics/filters/FilterEffectRenderer.cpp2105 2104 platform/graphics/filters/FilterFunction.cpp 2106 2105 platform/graphics/filters/FilterImage.cpp -
trunk/Source/WebCore/SourcesCocoa.txt
r286167 r286193 403 403 platform/graphics/cv/PixelBufferConformerCV.cpp 404 404 platform/graphics/cv/GraphicsContextGLCVANGLE.cpp 405 platform/graphics/coreimage/FilterEffectRendererCoreImage.mm 405 platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm 406 platform/graphics/coreimage/FEComponentTransferCoreImageApplier.mm 407 platform/graphics/coreimage/FilterImageCoreImage.mm 408 platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm 406 409 platform/graphics/gpu/cocoa/GPUPrewarmingMetal.mm 407 410 platform/graphics/ios/DisplayRefreshMonitorIOS.mm -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r286171 r286193 489 489 1A4A2DF00A1B852A00C807F8 /* JSHTMLAnchorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4A2DEC0A1B852A00C807F8 /* JSHTMLAnchorElement.h */; }; 490 490 1A4A954E0B4EDCCB002D8C3C /* SharedBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4A954C0B4EDCCB002D8C3C /* SharedBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; }; 491 51FA2EDF27506FDE0011C15D /* SharedBufferChunkReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FA2ED6274F78370011C15D /* SharedBufferChunkReader.h */; settings = {ATTRIBUTES = (Private, ); }; };492 491 1A4DA4221CDD3A8300F4473C /* LinkIconCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4DA4201CDD3A8300F4473C /* LinkIconCollector.h */; settings = {ATTRIBUTES = (Private, ); }; }; 493 492 1A569D120D7E2B82007C3983 /* objc_class.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A569CE30D7E2B82007C3983 /* objc_class.h */; }; … … 770 769 2B365C841525119E0091D27B /* RenderSVGEllipse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4235A015250F6000DBBCD8 /* RenderSVGEllipse.h */; }; 771 770 2BE8E2C712A589EC00FAD550 /* HTMLMetaCharsetParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BE8E2C612A589EC00FAD550 /* HTMLMetaCharsetParser.h */; }; 772 2C85653424C0F73C00A37673 /* FilterEffectRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */; };773 2CAA4A3A24BE18B7009DEE70 /* FilterEffectRendererCoreImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CAA4A3924BE18B7009DEE70 /* FilterEffectRendererCoreImage.h */; };774 771 2D0621441DA639B600A7FB26 /* WebKitMediaKeyMessageEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D0621421DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.cpp */; }; 775 772 2D0621451DA639BA00A7FB26 /* WebKitMediaKeyMessageEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D0621431DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.h */; }; … … 1690 1687 51F886C01F32923100C193EF /* JSNavigatorServiceWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F886BF1F32920700C193EF /* JSNavigatorServiceWorker.h */; }; 1691 1688 51FA2D78152132B300C1BA0B /* DOMWindowExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 517FBA18151AA71B00B57959 /* DOMWindowExtension.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1689 51FA2EDF27506FDE0011C15D /* SharedBufferChunkReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FA2ED6274F78370011C15D /* SharedBufferChunkReader.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1692 1690 51FB5504113E3E9100821176 /* JSCloseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FB5502113E3E9100821176 /* JSCloseEvent.h */; }; 1693 1691 51FB67DC1AE6B82F00D06C5A /* ContentExtensionStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FB67DA1AE6B5E400D06C5A /* ContentExtensionStyleSheet.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 7660 7658 2BE8E2C612A589EC00FAD550 /* HTMLMetaCharsetParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMetaCharsetParser.h; sourceTree = "<group>"; }; 7661 7659 2BE8E2C812A58A0100FAD550 /* HTMLMetaCharsetParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLMetaCharsetParser.cpp; sourceTree = "<group>"; }; 7662 2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterEffectRenderer.h; sourceTree = "<group>"; };7663 2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilterEffectRenderer.cpp; sourceTree = "<group>"; };7664 2CAA4A3724BE18A1009DEE70 /* FilterEffectRendererCoreImage.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilterEffectRendererCoreImage.mm; sourceTree = "<group>"; };7665 2CAA4A3924BE18B7009DEE70 /* FilterEffectRendererCoreImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterEffectRendererCoreImage.h; sourceTree = "<group>"; };7666 7660 2D0621421DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitMediaKeyMessageEvent.cpp; sourceTree = "<group>"; }; 7667 7661 2D0621431DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitMediaKeyMessageEvent.h; sourceTree = "<group>"; }; … … 10936 10930 72B4EF75274E233400293C2F /* FEBlendSoftwareApplier.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FEBlendSoftwareApplier.cpp; sourceTree = "<group>"; }; 10937 10931 72B4EF7C274EE37F00293C2F /* FilterImageVector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterImageVector.h; sourceTree = "<group>"; }; 10932 72B8B0142751084D00F752AA /* SourceGraphicCoreImageApplier.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SourceGraphicCoreImageApplier.mm; sourceTree = "<group>"; }; 10933 72B8B0162751086A00F752AA /* SourceGraphicCoreImageApplier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceGraphicCoreImageApplier.h; sourceTree = "<group>"; }; 10934 72B8B01B2751B6BC00F752AA /* FEComponentTransferCoreImageApplier.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FEComponentTransferCoreImageApplier.mm; sourceTree = "<group>"; }; 10935 72B8B01D2751B82B00F752AA /* FEComponentTransferCoreImageApplier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FEComponentTransferCoreImageApplier.h; sourceTree = "<group>"; }; 10936 72B8B01E2751B91000F752AA /* FEColorMatrixCoreImageApplier.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FEColorMatrixCoreImageApplier.mm; sourceTree = "<group>"; }; 10937 72B8B01F2751B92800F752AA /* FEColorMatrixCoreImageApplier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FEColorMatrixCoreImageApplier.h; sourceTree = "<group>"; }; 10938 72B8B0202751C4B700F752AA /* FilterImageCoreImage.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FilterImageCoreImage.mm; sourceTree = "<group>"; }; 10938 10939 72BAC3A423E17327008D741C /* ImageBufferBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferBackend.cpp; sourceTree = "<group>"; }; 10939 10940 72BAC3A523E17328008D741C /* ImageBufferBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferBackend.h; sourceTree = "<group>"; }; … … 20215 20216 isa = PBXGroup; 20216 20217 children = ( 20217 2CAA4A3924BE18B7009DEE70 /* FilterEffectRendererCoreImage.h */, 20218 2CAA4A3724BE18A1009DEE70 /* FilterEffectRendererCoreImage.mm */, 20218 72B8B01F2751B92800F752AA /* FEColorMatrixCoreImageApplier.h */, 20219 72B8B01E2751B91000F752AA /* FEColorMatrixCoreImageApplier.mm */, 20220 72B8B01D2751B82B00F752AA /* FEComponentTransferCoreImageApplier.h */, 20221 72B8B01B2751B6BC00F752AA /* FEComponentTransferCoreImageApplier.mm */, 20222 72B8B0202751C4B700F752AA /* FilterImageCoreImage.mm */, 20223 72B8B0162751086A00F752AA /* SourceGraphicCoreImageApplier.h */, 20224 72B8B0142751084D00F752AA /* SourceGraphicCoreImageApplier.mm */, 20219 20225 ); 20220 20226 path = coreimage; … … 26027 26033 08C925180FCC7C4A00480DEC /* FilterEffect.h */, 26028 26034 72A13A9F274C5CC700E2A88E /* FilterEffectApplier.h */, 26029 2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */,26030 2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */,26031 26035 7214B9B7274458FA003BE6DF /* FilterEffectVector.h */, 26032 26036 7262D757272A174100C56A09 /* FilterFunction.cpp */, … … 33567 33571 845E72F80FD261EE00A87D79 /* Filter.h in Headers */, 33568 33572 08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */, 33569 2C85653424C0F73C00A37673 /* FilterEffectRenderer.h in Headers */,33570 2CAA4A3A24BE18B7009DEE70 /* FilterEffectRendererCoreImage.h in Headers */,33571 33573 49ECEB6E1499790D00CDD3A4 /* FilterOperation.h in Headers */, 33572 33574 49ECEB701499790D00CDD3A4 /* FilterOperations.h in Headers */, -
trunk/Source/WebCore/platform/graphics/cv/CVUtilities.mm
r284439 r286193 27 27 #import "CVUtilities.h" 28 28 29 #import "ColorSpaceCG.h" 29 30 #import <wtf/StdLibExtras.h> 30 31 #import "CoreVideoSoftLink.h" -
trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp
r286186 r286193 28 28 #include "Filter.h" 29 29 #include <wtf/text/TextStream.h> 30 31 #if USE(CORE_IMAGE) 32 #include "FEColorMatrixCoreImageApplier.h" 33 #endif 30 34 31 35 namespace WebCore { … … 95 99 } 96 100 101 #if USE(CORE_IMAGE) 102 bool FEColorMatrix::supportsCoreImageRendering() const 103 { 104 return FEColorMatrixCoreImageApplier::supportsCoreImageRendering(*this); 105 } 106 #endif 107 97 108 bool FEColorMatrix::resultIsAlphaImage() const 98 109 { … … 103 114 { 104 115 #if USE(CORE_IMAGE) 105 // FIXME: return FEColorMatrixCoreImageApplier.106 116 if (filter.renderingMode() == RenderingMode::Accelerated) 107 return nullptr;117 return FilterEffectApplier::create<FEColorMatrixCoreImageApplier>(*this); 108 118 #endif 109 119 return FilterEffectApplier::create<FEColorMatrixSoftwareApplier>(*this); -
trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h
r286186 r286193 53 53 FEColorMatrix(ColorMatrixType, Vector<float>&&); 54 54 55 #if USE(CORE_IMAGE) 56 bool supportsCoreImageRendering() const override; 57 #endif 58 55 59 bool resultIsAlphaImage() const override; 56 60 -
trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp
r286186 r286193 30 30 #include <wtf/text/TextStream.h> 31 31 32 #if USE(CORE_IMAGE) 33 #include "FEComponentTransferCoreImageApplier.h" 34 #endif 35 32 36 namespace WebCore { 33 37 … … 46 50 } 47 51 52 #if USE(CORE_IMAGE) 53 bool FEComponentTransfer::supportsCoreImageRendering() const 54 { 55 return FEComponentTransferCoreImageApplier::supportsCoreImageRendering(*this); 56 } 57 #endif 58 48 59 std::unique_ptr<FilterEffectApplier> FEComponentTransfer::createApplier(const Filter& filter) const 49 60 { 50 61 #if USE(CORE_IMAGE) 51 // FIXME: return FEComponentTransferCoreImageApplier.52 62 if (filter.renderingMode() == RenderingMode::Accelerated) 53 return nullptr;63 return FilterEffectApplier::create<FEComponentTransferCoreImageApplier>(*this); 54 64 #endif 55 65 return FilterEffectApplier::create<FEComponentTransferSoftwareApplier>(*this); -
trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h
r286186 r286193 63 63 FEComponentTransfer(const ComponentTransferFunction& redFunc, const ComponentTransferFunction& greenFunc, const ComponentTransferFunction& blueFunc, const ComponentTransferFunction& alphaFunc); 64 64 65 #if USE(CORE_IMAGE) 66 bool supportsCoreImageRendering() const override; 67 #endif 68 65 69 std::unique_ptr<FilterEffectApplier> createApplier(const Filter&) const override; 66 70 -
trunk/Source/WebCore/platform/graphics/filters/Filter.h
r286172 r286193 55 55 56 56 protected: 57 Filter(Filter::Type filterType, const FloatSize& filterScale)57 Filter(Filter::Type filterType, RenderingMode renderingMode, const FloatSize& filterScale) 58 58 : FilterFunction(filterType) 59 , m_renderingMode(renderingMode) 59 60 , m_filterScale(filterScale) 60 61 { 61 62 } 62 63 63 Filter(Filter::Type filterType, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion)64 Filter(Filter::Type filterType, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion) 64 65 : FilterFunction(filterType) 66 , m_renderingMode(renderingMode) 65 67 , m_filterScale(filterScale) 66 68 , m_sourceImageRect(sourceImageRect) … … 70 72 71 73 private: 74 RenderingMode m_renderingMode; 75 72 76 FloatSize m_filterScale; 73 77 FloatRect m_sourceImageRect; … … 75 79 76 80 RefPtr<ImageBuffer> m_sourceImage; 77 RenderingMode m_renderingMode { RenderingMode::Unaccelerated };78 81 }; 79 82 -
trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h
r285916 r286193 85 85 AtomString filterName() const { return filterName(m_filterType); } 86 86 87 #if USE(CORE_IMAGE) 88 virtual bool supportsCoreImageRendering() const { return false; } 89 #endif 90 87 91 virtual bool apply(const Filter&) { return false; } 88 92 virtual IntOutsets outsets() const { return { }; } -
trunk/Source/WebCore/platform/graphics/filters/FilterImage.cpp
r286172 r286193 66 66 ImageBuffer* FilterImage::imageBuffer() 67 67 { 68 #if USE(CORE_IMAGE) 69 if (m_ciImage) 70 return imageBufferFromCIImage(); 71 #endif 72 return imageBufferFromPixelBuffer(); 73 } 74 75 ImageBuffer* FilterImage::imageBufferFromPixelBuffer() 76 { 68 77 if (m_imageBuffer) 69 78 return m_imageBuffer.get(); -
trunk/Source/WebCore/platform/graphics/filters/FilterImage.h
r286176 r286193 32 32 #include <wtf/Vector.h> 33 33 34 #if USE(CORE_IMAGE) 35 OBJC_CLASS CIImage; 36 #endif 37 34 38 namespace WebCore { 35 39 … … 62 66 void transformToColorSpace(const DestinationColorSpace&); 63 67 68 #if USE(CORE_IMAGE) 69 RetainPtr<CIImage> ciImage() const { return m_ciImage; } 70 void setCIImage(RetainPtr<CIImage>&&); 71 #endif 72 64 73 private: 65 74 FilterImage(const FloatRect& primitiveSubregion, const IntRect& absoluteImageRect, bool isAlphaImage, RenderingMode, const DestinationColorSpace&); 66 75 67 76 std::optional<PixelBuffer>& pixelBufferSlot(AlphaPremultiplication); 77 78 ImageBuffer* imageBufferFromPixelBuffer(); 79 80 #if USE(CORE_IMAGE) 81 ImageBuffer* imageBufferFromCIImage(); 82 #endif 68 83 69 84 bool requiresPixelBufferColorSpaceConversion(std::optional<DestinationColorSpace>) const; … … 79 94 std::optional<PixelBuffer> m_unpremultipliedPixelBuffer; 80 95 std::optional<PixelBuffer> m_premultipliedPixelBuffer; 96 97 #if USE(CORE_IMAGE) 98 RetainPtr<CIImage> m_ciImage; 99 #endif 81 100 }; 82 101 -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp
r286186 r286193 26 26 #include <wtf/text/TextStream.h> 27 27 28 #if USE(CORE_IMAGE) 29 #include "SourceGraphicCoreImageApplier.h" 30 #endif 31 28 32 namespace WebCore { 29 33 … … 49 53 // FIXME: return SourceGraphicCoreImageApplier. 50 54 if (filter.renderingMode() == RenderingMode::Accelerated) 51 return nullptr;55 return FilterEffectApplier::create<SourceGraphicCoreImageApplier>(*this); 52 56 #endif 53 57 return FilterEffectApplier::create<SourceGraphicSoftwareApplier>(*this); -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h
r286186 r286193 35 35 SourceGraphic(); 36 36 37 #if USE(CORE_IMAGE) 38 bool supportsCoreImageRendering() const override { return true; } 39 #endif 40 37 41 void determineAbsolutePaintRect(const Filter&) override; 38 42 -
trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm
r286035 r286193 31 31 #import "ScrollAnimationRubberBand.h" 32 32 #import "ScrollExtents.h" 33 #import "ScrollableArea.h" 33 34 #import "WheelEventDeltaFilter.h" 34 35 #import <pal/spi/mac/NSScrollViewSPI.h> -
trunk/Source/WebCore/rendering/CSSFilter.cpp
r286172 r286193 33 33 #include "FEGaussianBlur.h" 34 34 #include "FEMerge.h" 35 #include "FilterEffectRenderer.h"36 35 #include "FilterOperations.h" 37 36 #include "GraphicsContext.h" … … 56 55 bool hasFilterThatShouldBeRestrictedBySecurityOrigin = operations.hasFilterThatShouldBeRestrictedBySecurityOrigin(); 57 56 58 auto filter = adoptRef(*new CSSFilter(hasFilterThatMovesPixels, hasFilterThatShouldBeRestrictedBySecurityOrigin, scaleFactor)); 59 60 filter->setRenderingMode(renderingMode); 61 return filter; 62 } 63 64 CSSFilter::CSSFilter(bool hasFilterThatMovesPixels, bool hasFilterThatShouldBeRestrictedBySecurityOrigin, float scaleFactor) 65 : Filter(Filter::Type::CSSFilter, FloatSize { scaleFactor, scaleFactor }) 57 return adoptRef(*new CSSFilter(renderingMode, scaleFactor, hasFilterThatMovesPixels, hasFilterThatShouldBeRestrictedBySecurityOrigin)); 58 } 59 60 CSSFilter::CSSFilter(RenderingMode renderingMode, float scaleFactor, bool hasFilterThatMovesPixels, bool hasFilterThatShouldBeRestrictedBySecurityOrigin) 61 : Filter(Filter::Type::CSSFilter, renderingMode, FloatSize { scaleFactor, scaleFactor }) 66 62 , m_hasFilterThatMovesPixels(hasFilterThatMovesPixels) 67 63 , m_hasFilterThatShouldBeRestrictedBySecurityOrigin(hasFilterThatShouldBeRestrictedBySecurityOrigin) … … 226 222 227 223 SVGFilterBuilder builder; 228 return SVGFilter::create(*filterElement, builder, filter. filterScale(), filter.sourceImageRect(), filter.filterRegion(), previousEffect);224 return SVGFilter::create(*filterElement, builder, filter.renderingMode(), filter.filterScale(), filter.sourceImageRect(), filter.filterRegion(), previousEffect); 229 225 } 230 226 … … 330 326 331 327 #if USE(CORE_IMAGE) 332 if (! m_filterRenderer)333 m_filterRenderer = FilterEffectRenderer::tryCreate(renderer.settings().coreImageAcceleratedFilterRenderEnabled(), *lastEffect());328 if (!supportsCoreImageRendering()) 329 setRenderingMode(RenderingMode::Unaccelerated); 334 330 #endif 331 335 332 return true; 336 333 } … … 368 365 #else 369 366 UNUSED_PARAM(targetContext); 370 RenderingMode mode = m_filterRenderer ? RenderingMode::Accelerated : renderingMode(); 371 setSourceImage(ImageBuffer::create(logicalSize, mode, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8)); 367 setSourceImage(ImageBuffer::create(logicalSize, renderingMode(), 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8)); 372 368 #endif 373 369 if (auto context = inputContext()) … … 389 385 return downcast<FilterEffect>(function.ptr()); 390 386 } 387 388 #if USE(CORE_IMAGE) 389 bool CSSFilter::supportsCoreImageRendering() const 390 { 391 if (renderingMode() == RenderingMode::Unaccelerated) 392 return false; 393 394 for (auto& function : m_functions) { 395 if (!function->supportsCoreImageRendering()) 396 return false; 397 } 398 399 return true; 400 } 401 #endif 391 402 392 403 void CSSFilter::determineFilterPrimitiveSubregion() … … 411 422 bool CSSFilter::apply() 412 423 { 413 auto effect = lastEffect();414 if (m_filterRenderer) {415 m_filterRenderer->applyEffects(*this, *effect);416 if (m_filterRenderer->hasResult()) {417 effect->transformResultColorSpace(DestinationColorSpace::SRGB());418 return true;419 }420 }421 422 424 for (auto& function : m_functions) { 423 425 if (!function->apply(*this)) … … 425 427 } 426 428 427 effect->transformResultColorSpace(DestinationColorSpace::SRGB());429 lastEffect()->transformResultColorSpace(DestinationColorSpace::SRGB()); 428 430 return true; 429 431 } … … 441 443 ImageBuffer* CSSFilter::output() 442 444 { 443 if (m_filterRenderer && m_filterRenderer->hasResult())444 return m_filterRenderer->output();445 446 445 if (auto result = lastEffect()->filterImage()) 447 446 return result->imageBuffer(); … … 472 471 auto effect = lastEffect(); 473 472 474 if ( effect->hasResult() || (m_filterRenderer && m_filterRenderer->hasResult()))475 return effect->absolutePaintRect() - IntPoint(filterRegion().location());473 if (auto result = effect->filterImage()) 474 return result->absoluteImageRect() - IntPoint(filterRegion().location()); 476 475 477 476 return { }; -
trunk/Source/WebCore/rendering/CSSFilter.h
r285916 r286193 34 34 35 35 class FilterEffect; 36 class FilterEffectRenderer;37 36 class FilterOperations; 38 37 class GraphicsContext; … … 72 71 73 72 private: 74 CSSFilter(bool hasFilterThatMovesPixels, bool hasFilterThatShouldBeRestrictedBySecurityOrigin, float scaleFactor); 73 CSSFilter(RenderingMode, float scaleFactor, bool hasFilterThatMovesPixels, bool hasFilterThatShouldBeRestrictedBySecurityOrigin); 74 75 #if USE(CORE_IMAGE) 76 bool supportsCoreImageRendering() const override; 77 #endif 75 78 76 79 bool m_graphicsBufferAttached { false }; … … 81 84 82 85 mutable IntOutsets m_outsets; 83 84 std::unique_ptr<FilterEffectRenderer> m_filterRenderer;85 86 }; 86 87 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r286164 r286193 127 127 ImageBuffer::sizeNeedsClamping(absoluteDrawingRegion.size(), filterScale); 128 128 129 // Set the rendering mode from the page's settings. 130 auto renderingMode = renderer.settings().acceleratedFiltersEnabled() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated; 131 129 132 // Create the SVGFilter object. 130 133 filterData->builder = makeUnique<SVGFilterBuilder>(); 131 filterData->filter = SVGFilter::create(filterElement(), *filterData->builder, filterScale, absoluteDrawingRegion, filterData->boundaries, targetBoundingBox);134 filterData->filter = SVGFilter::create(filterElement(), *filterData->builder, renderingMode, filterScale, absoluteDrawingRegion, filterData->boundaries, targetBoundingBox); 132 135 if (!filterData->filter) { 133 136 m_rendererFilterDataMap.remove(&renderer); … … 161 164 AffineTransform effectiveTransform = AffineTransform(filterScale.width(), 0, 0, filterScale.height(), 0, 0); 162 165 163 auto renderingMode = renderer.settings().acceleratedFiltersEnabled() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;164 166 #if ENABLE(DESTINATION_COLOR_SPACE_LINEAR_SRGB) 165 167 auto colorSpace = DestinationColorSpace::LinearSRGB(); … … 167 169 auto colorSpace = DestinationColorSpace::SRGB(); 168 170 #endif 169 auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, renderingMode, context);171 auto sourceGraphic = SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, colorSpace, filterData->filter->renderingMode(), context); 170 172 if (!sourceGraphic) { 171 173 ASSERT(m_rendererFilterDataMap.contains(&renderer)); … … 174 176 } 175 177 176 // Set the rendering mode from the page's settings.177 filterData->filter->setRenderingMode(renderingMode);178 179 178 GraphicsContext& sourceGraphicContext = sourceGraphic->context(); 180 179 -
trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp
r286113 r286193 432 432 FloatSize dummyScale(1, 1); 433 433 SVGFilterBuilder builder; 434 auto dummyFilter = SVGFilter::create(filter.filterElement(), builder, dummyScale, dummyRect, dummyRect, dummyRect);434 auto dummyFilter = SVGFilter::create(filter.filterElement(), builder, RenderingMode::Unaccelerated, dummyScale, dummyRect, dummyRect, dummyRect); 435 435 if (dummyFilter) { 436 436 TextStream::IndentScope indentScope(ts); -
trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp
r285916 r286193 29 29 namespace WebCore { 30 30 31 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect)31 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect) 32 32 { 33 return create(filterElement, builder, filterScale, sourceImageRect, filterRegion, filterRegion, &previousEffect);33 return create(filterElement, builder, renderingMode, filterScale, sourceImageRect, filterRegion, filterRegion, &previousEffect); 34 34 } 35 35 36 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox)36 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox) 37 37 { 38 return create(filterElement, builder, filterScale, sourceImageRect, filterRegion, targetBoundingBox, nullptr);38 return create(filterElement, builder, renderingMode, filterScale, sourceImageRect, filterRegion, targetBoundingBox, nullptr); 39 39 } 40 40 41 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect)41 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect) 42 42 { 43 43 bool primitiveBoundingBoxMode = filterElement.primitiveUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; 44 44 45 auto filter = adoptRef(*new SVGFilter( filterScale, sourceImageRect, filterRegion, targetBoundingBox, primitiveBoundingBoxMode));45 auto filter = adoptRef(*new SVGFilter(renderingMode, filterScale, sourceImageRect, filterRegion, targetBoundingBox, primitiveBoundingBoxMode)); 46 46 47 47 if (!previousEffect) … … 63 63 ASSERT(!expression.isEmpty()); 64 64 filter->setExpression(WTFMove(expression)); 65 66 #if USE(CORE_IMAGE) 67 if (!filter->supportsCoreImageRendering()) 68 filter->setRenderingMode(RenderingMode::Unaccelerated); 69 #endif 70 65 71 return filter; 66 72 } 67 73 68 SVGFilter::SVGFilter( const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, bool effectBBoxMode)69 : Filter(Filter::Type::SVGFilter, filterScale, sourceImageRect, filterRegion)74 SVGFilter::SVGFilter(RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, bool effectBBoxMode) 75 : Filter(Filter::Type::SVGFilter, renderingMode, filterScale, sourceImageRect, filterRegion) 70 76 , m_targetBoundingBox(targetBoundingBox) 71 77 , m_effectBBoxMode(effectBBoxMode) … … 80 86 return Filter::scaledByFilterScale(size); 81 87 } 88 89 #if USE(CORE_IMAGE) 90 bool SVGFilter::supportsCoreImageRendering() const 91 { 92 if (renderingMode() == RenderingMode::Unaccelerated) 93 return false; 94 95 ASSERT(!m_expression.isEmpty()); 96 for (auto& effect : m_expression) { 97 if (!effect->supportsCoreImageRendering()) 98 return false; 99 } 100 101 return true; 102 } 103 #endif 82 104 83 105 bool SVGFilter::apply(const Filter& filter) -
trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h
r285916 r286193 34 34 class SVGFilter final : public Filter { 35 35 public: 36 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect);37 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox);38 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect);36 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, RenderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect); 37 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, RenderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox); 38 static RefPtr<SVGFilter> create(SVGFilterElement&, SVGFilterBuilder&, RenderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect); 39 39 40 40 FloatSize scaledByFilterScale(FloatSize) const final; … … 47 47 48 48 private: 49 SVGFilter(const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode); 49 SVGFilter(RenderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode); 50 51 #if USE(CORE_IMAGE) 52 bool supportsCoreImageRendering() const override; 53 #endif 50 54 51 55 bool apply(const Filter&) override;
Note:
See TracChangeset
for help on using the changeset viewer.