Changeset 286193 in webkit


Ignore:
Timestamp:
Nov 27, 2021, 8:28:11 PM (4 years ago)
Author:
Said Abou-Hallawa
Message:

[GPU Process] Implement FilterEffect CoreImage appliers
https://bugs.webkit.org/show_bug.cgi?id=232831

Reviewed by Cameron McCormack.

This will allow applying the CoreImage filters through FilterEffect::apply().
It will also allow passing FilterImages to the FilterEffect CoreImage
appliers. This will require adding a CIImage as a possible result to
FilterImage.

If the CoreImage filters are enabled, the Filter will check if all the
FilterEffects supports CoreImage rendering. And if one if them does not
support it, the renderingMode will be switched to Unaccelerated.

  • Sources.txt:
  • SourcesCocoa.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • platform/graphics/coreimage/FEColorMatrixCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.
  • platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm: Added.

(WebCore::FEColorMatrixCoreImageApplier::FEColorMatrixCoreImageApplier):
(WebCore::FEColorMatrixCoreImageApplier::supportsCoreImageRendering):
(WebCore::FEColorMatrixCoreImageApplier::apply const):

  • platform/graphics/coreimage/FEComponentTransferCoreImageApplier.h: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.h.
  • platform/graphics/coreimage/FEComponentTransferCoreImageApplier.mm: Added.

(WebCore::FEComponentTransferCoreImageApplier::FEComponentTransferCoreImageApplier):
(WebCore::FEComponentTransferCoreImageApplier::supportsCoreImageRendering):
(WebCore::FEComponentTransferCoreImageApplier::apply const):

  • platform/graphics/coreimage/FilterEffectRendererCoreImage.h: Removed.
  • platform/graphics/coreimage/FilterEffectRendererCoreImage.mm: Removed.
  • platform/graphics/coreimage/FilterImageCoreImage.mm: Added.

(WebCore::sharedCIContext):
(WebCore::FilterImage::setCIImage):
(WebCore::FilterImage::imageBufferFromCIImage):

  • platform/graphics/coreimage/SourceGraphicCoreImageApplier.h: Copied from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.
  • platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm: Renamed from Source/WebCore/platform/graphics/filters/FilterEffectRenderer.cpp.

(WebCore::SourceGraphicCoreImageApplier::apply const):

  • platform/graphics/cv/CVUtilities.mm:
  • platform/graphics/filters/FEColorMatrix.cpp:

(WebCore::FEColorMatrix::supportsCoreImageRendering const):
(WebCore::FEColorMatrix::createApplier const):

  • platform/graphics/filters/FEColorMatrix.h:
  • platform/graphics/filters/FEComponentTransfer.cpp:

(WebCore::FEComponentTransfer::supportsCoreImageRendering const):
(WebCore::FEComponentTransfer::createApplier const):

  • platform/graphics/filters/FEComponentTransfer.h:
  • platform/graphics/filters/Filter.h:

(WebCore::Filter::Filter):
(): Deleted.

  • platform/graphics/filters/FilterFunction.h:

(WebCore::FilterFunction::supportsCoreImageRendering const):

  • platform/graphics/filters/FilterImage.cpp:

(WebCore::FilterImage::imageBuffer):
(WebCore::FilterImage::imageBufferFromPixelBuffer):

  • platform/graphics/filters/FilterImage.h:

(WebCore::FilterImage::ciImage const):

  • platform/graphics/filters/SourceGraphic.cpp:

(WebCore::SourceGraphic::createApplier const):

  • platform/graphics/filters/SourceGraphic.h:
  • platform/mac/ScrollingEffectsController.mm:
  • rendering/CSSFilter.cpp:

(WebCore::CSSFilter::create):
(WebCore::CSSFilter::CSSFilter):
(WebCore::createSVGFilter):
(WebCore::CSSFilter::buildFilterFunctions):
(WebCore::CSSFilter::allocateBackingStoreIfNeeded):
(WebCore::CSSFilter::supportsCoreImageRendering const):
(WebCore::CSSFilter::apply):
(WebCore::CSSFilter::output):
(WebCore::CSSFilter::outputRect):

  • rendering/CSSFilter.h:
  • rendering/svg/RenderSVGResourceFilter.cpp:

(WebCore::RenderSVGResourceFilter::applyResource):

  • rendering/svg/SVGRenderTreeAsText.cpp:

(WebCore::writeSVGResourceContainer):

  • svg/graphics/filters/SVGFilter.cpp:

(WebCore::SVGFilter::create):
(WebCore::SVGFilter::SVGFilter):
(WebCore::SVGFilter::supportsCoreImageRendering const):

  • svg/graphics/filters/SVGFilter.h:
Location:
trunk/Source/WebCore
Files:
7 added
4 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286191 r286193  
     12021-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
    1832021-11-27  Sam Weinig  <weinig@apple.com>
    284
  • trunk/Source/WebCore/Sources.txt

    r286152 r286193  
    21022102platform/graphics/filters/FETurbulence.cpp
    21032103platform/graphics/filters/FilterEffect.cpp
    2104 platform/graphics/filters/FilterEffectRenderer.cpp
    21052104platform/graphics/filters/FilterFunction.cpp
    21062105platform/graphics/filters/FilterImage.cpp
  • trunk/Source/WebCore/SourcesCocoa.txt

    r286167 r286193  
    403403platform/graphics/cv/PixelBufferConformerCV.cpp
    404404platform/graphics/cv/GraphicsContextGLCVANGLE.cpp
    405 platform/graphics/coreimage/FilterEffectRendererCoreImage.mm
     405platform/graphics/coreimage/FEColorMatrixCoreImageApplier.mm
     406platform/graphics/coreimage/FEComponentTransferCoreImageApplier.mm
     407platform/graphics/coreimage/FilterImageCoreImage.mm
     408platform/graphics/coreimage/SourceGraphicCoreImageApplier.mm
    406409platform/graphics/gpu/cocoa/GPUPrewarmingMetal.mm
    407410platform/graphics/ios/DisplayRefreshMonitorIOS.mm
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r286171 r286193  
    489489                1A4A2DF00A1B852A00C807F8 /* JSHTMLAnchorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4A2DEC0A1B852A00C807F8 /* JSHTMLAnchorElement.h */; };
    490490                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, ); }; };
    492491                1A4DA4221CDD3A8300F4473C /* LinkIconCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4DA4201CDD3A8300F4473C /* LinkIconCollector.h */; settings = {ATTRIBUTES = (Private, ); }; };
    493492                1A569D120D7E2B82007C3983 /* objc_class.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A569CE30D7E2B82007C3983 /* objc_class.h */; };
     
    770769                2B365C841525119E0091D27B /* RenderSVGEllipse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4235A015250F6000DBBCD8 /* RenderSVGEllipse.h */; };
    771770                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 */; };
    774771                2D0621441DA639B600A7FB26 /* WebKitMediaKeyMessageEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D0621421DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.cpp */; };
    775772                2D0621451DA639BA00A7FB26 /* WebKitMediaKeyMessageEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D0621431DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.h */; };
     
    16901687                51F886C01F32923100C193EF /* JSNavigatorServiceWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F886BF1F32920700C193EF /* JSNavigatorServiceWorker.h */; };
    16911688                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, ); }; };
    16921690                51FB5504113E3E9100821176 /* JSCloseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FB5502113E3E9100821176 /* JSCloseEvent.h */; };
    16931691                51FB67DC1AE6B82F00D06C5A /* ContentExtensionStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FB67DA1AE6B5E400D06C5A /* ContentExtensionStyleSheet.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    76607658                2BE8E2C612A589EC00FAD550 /* HTMLMetaCharsetParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLMetaCharsetParser.h; sourceTree = "<group>"; };
    76617659                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>"; };
    76667660                2D0621421DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitMediaKeyMessageEvent.cpp; sourceTree = "<group>"; };
    76677661                2D0621431DA6398800A7FB26 /* WebKitMediaKeyMessageEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitMediaKeyMessageEvent.h; sourceTree = "<group>"; };
     
    1093610930                72B4EF75274E233400293C2F /* FEBlendSoftwareApplier.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FEBlendSoftwareApplier.cpp; sourceTree = "<group>"; };
    1093710931                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>"; };
    1093810939                72BAC3A423E17327008D741C /* ImageBufferBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferBackend.cpp; sourceTree = "<group>"; };
    1093910940                72BAC3A523E17328008D741C /* ImageBufferBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferBackend.h; sourceTree = "<group>"; };
     
    2021520216                        isa = PBXGroup;
    2021620217                        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 */,
    2021920225                        );
    2022020226                        path = coreimage;
     
    2602726033                                08C925180FCC7C4A00480DEC /* FilterEffect.h */,
    2602826034                                72A13A9F274C5CC700E2A88E /* FilterEffectApplier.h */,
    26029                                 2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */,
    26030                                 2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */,
    2603126035                                7214B9B7274458FA003BE6DF /* FilterEffectVector.h */,
    2603226036                                7262D757272A174100C56A09 /* FilterFunction.cpp */,
     
    3356733571                                845E72F80FD261EE00A87D79 /* Filter.h in Headers */,
    3356833572                                08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */,
    33569                                 2C85653424C0F73C00A37673 /* FilterEffectRenderer.h in Headers */,
    33570                                 2CAA4A3A24BE18B7009DEE70 /* FilterEffectRendererCoreImage.h in Headers */,
    3357133573                                49ECEB6E1499790D00CDD3A4 /* FilterOperation.h in Headers */,
    3357233574                                49ECEB701499790D00CDD3A4 /* FilterOperations.h in Headers */,
  • trunk/Source/WebCore/platform/graphics/cv/CVUtilities.mm

    r284439 r286193  
    2727#import "CVUtilities.h"
    2828
     29#import "ColorSpaceCG.h"
    2930#import <wtf/StdLibExtras.h>
    3031#import "CoreVideoSoftLink.h"
  • trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp

    r286186 r286193  
    2828#include "Filter.h"
    2929#include <wtf/text/TextStream.h>
     30
     31#if USE(CORE_IMAGE)
     32#include "FEColorMatrixCoreImageApplier.h"
     33#endif
    3034
    3135namespace WebCore {
     
    9599}
    96100
     101#if USE(CORE_IMAGE)
     102bool FEColorMatrix::supportsCoreImageRendering() const
     103{
     104    return FEColorMatrixCoreImageApplier::supportsCoreImageRendering(*this);
     105}
     106#endif
     107
    97108bool FEColorMatrix::resultIsAlphaImage() const
    98109{
     
    103114{
    104115#if USE(CORE_IMAGE)
    105     // FIXME: return FEColorMatrixCoreImageApplier.
    106116    if (filter.renderingMode() == RenderingMode::Accelerated)
    107         return nullptr;
     117        return FilterEffectApplier::create<FEColorMatrixCoreImageApplier>(*this);
    108118#endif
    109119    return FilterEffectApplier::create<FEColorMatrixSoftwareApplier>(*this);
  • trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h

    r286186 r286193  
    5353    FEColorMatrix(ColorMatrixType, Vector<float>&&);
    5454
     55#if USE(CORE_IMAGE)
     56    bool supportsCoreImageRendering() const override;
     57#endif
     58   
    5559    bool resultIsAlphaImage() const override;
    5660
  • trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp

    r286186 r286193  
    3030#include <wtf/text/TextStream.h>
    3131
     32#if USE(CORE_IMAGE)
     33#include "FEComponentTransferCoreImageApplier.h"
     34#endif
     35
    3236namespace WebCore {
    3337
     
    4650}
    4751
     52#if USE(CORE_IMAGE)
     53bool FEComponentTransfer::supportsCoreImageRendering() const
     54{
     55    return FEComponentTransferCoreImageApplier::supportsCoreImageRendering(*this);
     56}
     57#endif
     58
    4859std::unique_ptr<FilterEffectApplier> FEComponentTransfer::createApplier(const Filter& filter) const
    4960{
    5061#if USE(CORE_IMAGE)
    51     // FIXME: return FEComponentTransferCoreImageApplier.
    5262    if (filter.renderingMode() == RenderingMode::Accelerated)
    53         return nullptr;
     63        return FilterEffectApplier::create<FEComponentTransferCoreImageApplier>(*this);
    5464#endif
    5565    return FilterEffectApplier::create<FEComponentTransferSoftwareApplier>(*this);
  • trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h

    r286186 r286193  
    6363    FEComponentTransfer(const ComponentTransferFunction& redFunc, const ComponentTransferFunction& greenFunc, const ComponentTransferFunction& blueFunc, const ComponentTransferFunction& alphaFunc);
    6464
     65#if USE(CORE_IMAGE)
     66    bool supportsCoreImageRendering() const override;
     67#endif
     68
    6569    std::unique_ptr<FilterEffectApplier> createApplier(const Filter&) const override;
    6670
  • trunk/Source/WebCore/platform/graphics/filters/Filter.h

    r286172 r286193  
    5555
    5656protected:
    57     Filter(Filter::Type filterType, const FloatSize& filterScale)
     57    Filter(Filter::Type filterType, RenderingMode renderingMode, const FloatSize& filterScale)
    5858        : FilterFunction(filterType)
     59        , m_renderingMode(renderingMode)
    5960        , m_filterScale(filterScale)
    6061    {
    6162    }
    6263
    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)
    6465        : FilterFunction(filterType)
     66        , m_renderingMode(renderingMode)
    6567        , m_filterScale(filterScale)
    6668        , m_sourceImageRect(sourceImageRect)
     
    7072
    7173private:
     74    RenderingMode m_renderingMode;
     75
    7276    FloatSize m_filterScale;
    7377    FloatRect m_sourceImageRect;
     
    7579
    7680    RefPtr<ImageBuffer> m_sourceImage;
    77     RenderingMode m_renderingMode { RenderingMode::Unaccelerated };
    7881};
    7982
  • trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h

    r285916 r286193  
    8585    AtomString filterName() const { return filterName(m_filterType); }
    8686
     87#if USE(CORE_IMAGE)
     88    virtual bool supportsCoreImageRendering() const { return false; }
     89#endif
     90
    8791    virtual bool apply(const Filter&) { return false; }
    8892    virtual IntOutsets outsets() const { return { }; }
  • trunk/Source/WebCore/platform/graphics/filters/FilterImage.cpp

    r286172 r286193  
    6666ImageBuffer* FilterImage::imageBuffer()
    6767{
     68#if USE(CORE_IMAGE)
     69    if (m_ciImage)
     70        return imageBufferFromCIImage();
     71#endif
     72    return imageBufferFromPixelBuffer();
     73}
     74
     75ImageBuffer* FilterImage::imageBufferFromPixelBuffer()
     76{
    6877    if (m_imageBuffer)
    6978        return m_imageBuffer.get();
  • trunk/Source/WebCore/platform/graphics/filters/FilterImage.h

    r286176 r286193  
    3232#include <wtf/Vector.h>
    3333
     34#if USE(CORE_IMAGE)
     35OBJC_CLASS CIImage;
     36#endif
     37
    3438namespace WebCore {
    3539
     
    6266    void transformToColorSpace(const DestinationColorSpace&);
    6367
     68#if USE(CORE_IMAGE)
     69    RetainPtr<CIImage> ciImage() const { return m_ciImage; }
     70    void setCIImage(RetainPtr<CIImage>&&);
     71#endif
     72
    6473private:
    6574    FilterImage(const FloatRect& primitiveSubregion, const IntRect& absoluteImageRect, bool isAlphaImage, RenderingMode, const DestinationColorSpace&);
    6675
    6776    std::optional<PixelBuffer>& pixelBufferSlot(AlphaPremultiplication);
     77
     78    ImageBuffer* imageBufferFromPixelBuffer();
     79
     80#if USE(CORE_IMAGE)
     81    ImageBuffer* imageBufferFromCIImage();
     82#endif
    6883
    6984    bool requiresPixelBufferColorSpaceConversion(std::optional<DestinationColorSpace>) const;
     
    7994    std::optional<PixelBuffer> m_unpremultipliedPixelBuffer;
    8095    std::optional<PixelBuffer> m_premultipliedPixelBuffer;
     96
     97#if USE(CORE_IMAGE)
     98    RetainPtr<CIImage> m_ciImage;
     99#endif
    81100};
    82101
  • trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp

    r286186 r286193  
    2626#include <wtf/text/TextStream.h>
    2727
     28#if USE(CORE_IMAGE)
     29#include "SourceGraphicCoreImageApplier.h"
     30#endif
     31
    2832namespace WebCore {
    2933
     
    4953    // FIXME: return SourceGraphicCoreImageApplier.
    5054    if (filter.renderingMode() == RenderingMode::Accelerated)
    51         return nullptr;
     55        return FilterEffectApplier::create<SourceGraphicCoreImageApplier>(*this);
    5256#endif
    5357    return FilterEffectApplier::create<SourceGraphicSoftwareApplier>(*this);
  • trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h

    r286186 r286193  
    3535    SourceGraphic();
    3636
     37#if USE(CORE_IMAGE)
     38    bool supportsCoreImageRendering() const override { return true; }
     39#endif
     40
    3741    void determineAbsolutePaintRect(const Filter&) override;
    3842
  • trunk/Source/WebCore/platform/mac/ScrollingEffectsController.mm

    r286035 r286193  
    3131#import "ScrollAnimationRubberBand.h"
    3232#import "ScrollExtents.h"
     33#import "ScrollableArea.h"
    3334#import "WheelEventDeltaFilter.h"
    3435#import <pal/spi/mac/NSScrollViewSPI.h>
  • trunk/Source/WebCore/rendering/CSSFilter.cpp

    r286172 r286193  
    3333#include "FEGaussianBlur.h"
    3434#include "FEMerge.h"
    35 #include "FilterEffectRenderer.h"
    3635#include "FilterOperations.h"
    3736#include "GraphicsContext.h"
     
    5655    bool hasFilterThatShouldBeRestrictedBySecurityOrigin = operations.hasFilterThatShouldBeRestrictedBySecurityOrigin();
    5756
    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
     60CSSFilter::CSSFilter(RenderingMode renderingMode, float scaleFactor, bool hasFilterThatMovesPixels, bool hasFilterThatShouldBeRestrictedBySecurityOrigin)
     61    : Filter(Filter::Type::CSSFilter, renderingMode, FloatSize { scaleFactor, scaleFactor })
    6662    , m_hasFilterThatMovesPixels(hasFilterThatMovesPixels)
    6763    , m_hasFilterThatShouldBeRestrictedBySecurityOrigin(hasFilterThatShouldBeRestrictedBySecurityOrigin)
     
    226222
    227223    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);
    229225}
    230226
     
    330326
    331327#if USE(CORE_IMAGE)
    332     if (!m_filterRenderer)
    333         m_filterRenderer = FilterEffectRenderer::tryCreate(renderer.settings().coreImageAcceleratedFilterRenderEnabled(), *lastEffect());
     328    if (!supportsCoreImageRendering())
     329        setRenderingMode(RenderingMode::Unaccelerated);
    334330#endif
     331
    335332    return true;
    336333}
     
    368365#else
    369366        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));
    372368#endif
    373369        if (auto context = inputContext())
     
    389385    return downcast<FilterEffect>(function.ptr());
    390386}
     387
     388#if USE(CORE_IMAGE)
     389bool 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
    391402
    392403void CSSFilter::determineFilterPrimitiveSubregion()
     
    411422bool CSSFilter::apply()
    412423{
    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 
    422424    for (auto& function : m_functions) {
    423425        if (!function->apply(*this))
     
    425427    }
    426428
    427     effect->transformResultColorSpace(DestinationColorSpace::SRGB());
     429    lastEffect()->transformResultColorSpace(DestinationColorSpace::SRGB());
    428430    return true;
    429431}
     
    441443ImageBuffer* CSSFilter::output()
    442444{
    443     if (m_filterRenderer && m_filterRenderer->hasResult())
    444         return m_filterRenderer->output();
    445 
    446445    if (auto result = lastEffect()->filterImage())
    447446        return result->imageBuffer();
     
    472471    auto effect = lastEffect();
    473472
    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());
    476475
    477476    return { };
  • trunk/Source/WebCore/rendering/CSSFilter.h

    r285916 r286193  
    3434
    3535class FilterEffect;
    36 class FilterEffectRenderer;
    3736class FilterOperations;
    3837class GraphicsContext;
     
    7271
    7372private:
    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
    7578
    7679    bool m_graphicsBufferAttached { false };
     
    8184
    8285    mutable IntOutsets m_outsets;
    83 
    84     std::unique_ptr<FilterEffectRenderer> m_filterRenderer;
    8586};
    8687
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp

    r286164 r286193  
    127127    ImageBuffer::sizeNeedsClamping(absoluteDrawingRegion.size(), filterScale);
    128128
     129    // Set the rendering mode from the page's settings.
     130    auto renderingMode = renderer.settings().acceleratedFiltersEnabled() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;
     131
    129132    // Create the SVGFilter object.
    130133    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);
    132135    if (!filterData->filter) {
    133136        m_rendererFilterDataMap.remove(&renderer);
     
    161164    AffineTransform effectiveTransform = AffineTransform(filterScale.width(), 0, 0, filterScale.height(), 0, 0);
    162165
    163     auto renderingMode = renderer.settings().acceleratedFiltersEnabled() ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;
    164166#if ENABLE(DESTINATION_COLOR_SPACE_LINEAR_SRGB)
    165167    auto colorSpace = DestinationColorSpace::LinearSRGB();
     
    167169    auto colorSpace = DestinationColorSpace::SRGB();
    168170#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);
    170172    if (!sourceGraphic) {
    171173        ASSERT(m_rendererFilterDataMap.contains(&renderer));
     
    174176    }
    175177   
    176     // Set the rendering mode from the page's settings.
    177     filterData->filter->setRenderingMode(renderingMode);
    178 
    179178    GraphicsContext& sourceGraphicContext = sourceGraphic->context();
    180179 
  • trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp

    r286113 r286193  
    432432        FloatSize dummyScale(1, 1);
    433433        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);
    435435        if (dummyFilter) {
    436436            TextStream::IndentScope indentScope(ts);
  • trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp

    r285916 r286193  
    2929namespace WebCore {
    3030
    31 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect)
     31RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, FilterEffect& previousEffect)
    3232{
    33     return create(filterElement, builder, filterScale, sourceImageRect, filterRegion, filterRegion, &previousEffect);
     33    return create(filterElement, builder, renderingMode, filterScale, sourceImageRect, filterRegion, filterRegion, &previousEffect);
    3434}
    3535
    36 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox)
     36RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox)
    3737{
    38     return create(filterElement, builder, filterScale, sourceImageRect, filterRegion, targetBoundingBox, nullptr);
     38    return create(filterElement, builder, renderingMode, filterScale, sourceImageRect, filterRegion, targetBoundingBox, nullptr);
    3939}
    4040
    41 RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect)
     41RefPtr<SVGFilter> SVGFilter::create(SVGFilterElement& filterElement, SVGFilterBuilder& builder, RenderingMode renderingMode, const FloatSize& filterScale, const FloatRect& sourceImageRect, const FloatRect& filterRegion, const FloatRect& targetBoundingBox, FilterEffect* previousEffect)
    4242{
    4343    bool primitiveBoundingBoxMode = filterElement.primitiveUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
    4444
    45     auto filter = adoptRef(*new SVGFilter(filterScale, sourceImageRect, filterRegion, targetBoundingBox, primitiveBoundingBoxMode));
     45    auto filter = adoptRef(*new SVGFilter(renderingMode, filterScale, sourceImageRect, filterRegion, targetBoundingBox, primitiveBoundingBoxMode));
    4646
    4747    if (!previousEffect)
     
    6363    ASSERT(!expression.isEmpty());
    6464    filter->setExpression(WTFMove(expression));
     65   
     66#if USE(CORE_IMAGE)
     67    if (!filter->supportsCoreImageRendering())
     68        filter->setRenderingMode(RenderingMode::Unaccelerated);
     69#endif
     70
    6571    return filter;
    6672}
    6773
    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)
     74SVGFilter::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)
    7076    , m_targetBoundingBox(targetBoundingBox)
    7177    , m_effectBBoxMode(effectBBoxMode)
     
    8086    return Filter::scaledByFilterScale(size);
    8187}
     88
     89#if USE(CORE_IMAGE)
     90bool 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
    82104
    83105bool SVGFilter::apply(const Filter& filter)
  • trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h

    r285916 r286193  
    3434class SVGFilter final : public Filter {
    3535public:
    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);
    3939
    4040    FloatSize scaledByFilterScale(FloatSize) const final;
     
    4747
    4848private:
    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
    5054
    5155    bool apply(const Filter&) override;
Note: See TracChangeset for help on using the changeset viewer.