WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
NEW
215957
CoreImage Implementation of CSS Filter blur()
https://bugs.webkit.org/show_bug.cgi?id=215957
Summary
CoreImage Implementation of CSS Filter blur()
frankhome61
Reported
2020-08-28 16:29:31 PDT
Implementing CSS filter blur, using CoreImage
Attachments
Patch
(9.60 KB, patch)
2020-08-31 14:25 PDT
,
frankhome61
no flags
Details
Formatted Diff
Diff
Patch
(8.70 KB, patch)
2020-09-09 10:22 PDT
,
frankhome61
no flags
Details
Formatted Diff
Diff
Patch
(8.62 KB, patch)
2020-09-09 10:57 PDT
,
frankhome61
no flags
Details
Formatted Diff
Diff
Patch
(8.58 KB, patch)
2020-09-09 11:11 PDT
,
frankhome61
no flags
Details
Formatted Diff
Diff
Work in progress (don't review yet)
(8.84 KB, patch)
2020-09-09 16:32 PDT
,
frankhome61
no flags
Details
Formatted Diff
Diff
Patch (Work in Progress)
(8.84 KB, patch)
2020-09-10 10:06 PDT
,
frankhome61
frankhome61: review?
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
Valuable CSS/SVG tests
(1.19 MB, application/zip)
2020-09-11 10:25 PDT
,
frankhome61
no flags
Details
Show Obsolete
(4)
View All
Add attachment
proposed patch, testcase, etc.
Radar WebKit Bug Importer
Comment 1
2020-08-28 16:30:06 PDT
<
rdar://problem/67968258
>
frankhome61
Comment 2
2020-08-31 14:25:58 PDT
Created
attachment 407626
[details]
Patch
Simon Fraser (smfr)
Comment 3
2020-08-31 14:36:01 PDT
Comment on
attachment 407626
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=407626&action=review
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:60 > static bool supportsCoreImageRendering(FilterEffect&); > static bool canRenderUsingCIFilters(FilterEffect&); > > + CIImage* feGaussianBlurImage(FilterEffect&, Vector<CIImage*>&, int);
The should take a const FilterEffect&
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:63 > + HashMap<int, Vector<RetainPtr<CIFilter>>> m_ciFilterStorageMap;
I don't like the int as the key.
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:136 > + Vector<RetainPtr<CIFilter>> cachedCIFilters = m_ciFilterStorageMap.get(traversalOrder);
This line is repeated at 143.
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:138 > + FEGaussianBlur& blurEffect = static_cast<FEGaussianBlur&>(effect);
downcast<>, you need to add the macros.
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:146 > + gaussianBlurFilter = [CIFilter filterWithName:@"CIGaussianBlurXY"];
RetainPtr<>. Can we make CIFilters without autorelease?
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:149 > + filtersToBeCached.insert(0, gaussianBlurFilter); > + m_ciFilterStorageMap.add(traversalOrder, filtersToBeCached);
There's a way to do this with ensure().
Sam Weinig
Comment 4
2020-08-31 15:03:17 PDT
Comment on
attachment 407626
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=407626&action=review
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:55 > + CIImage* connectCIFilters(FilterEffect&, int);
The int parameter here should have a parameter name, as it is not clear from context what it means.
>> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:138 >> + FEGaussianBlur& blurEffect = static_cast<FEGaussianBlur&>(effect); > > downcast<>, you need to add the macros.
Also probably better to do this in the caller and change the parameter to be a const FEGaussianBlur&.
frankhome61
Comment 5
2020-08-31 17:55:44 PDT
(In reply to Simon Fraser (smfr) from
comment #3
)
> Comment on
attachment 407626
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=407626&action=review
> > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:60 > > static bool supportsCoreImageRendering(FilterEffect&); > > static bool canRenderUsingCIFilters(FilterEffect&); > > > > + CIImage* feGaussianBlurImage(FilterEffect&, Vector<CIImage*>&, int); > > The should take a const FilterEffect& > > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.h:63 > > + HashMap<int, Vector<RetainPtr<CIFilter>>> m_ciFilterStorageMap; > > I don't like the int as the key. > > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:136 > > + Vector<RetainPtr<CIFilter>> cachedCIFilters = m_ciFilterStorageMap.get(traversalOrder); > > This line is repeated at 143. > > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:138 > > + FEGaussianBlur& blurEffect = static_cast<FEGaussianBlur&>(effect); > > downcast<>, you need to add the macros. > > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:146 > > + gaussianBlurFilter = [CIFilter filterWithName:@"CIGaussianBlurXY"]; > > RetainPtr<>. Can we make CIFilters without autorelease?
Unfortunately, CIFilter can only be obtained by calling [CIFilter filterWithName:] which returns an autoreleased pointer. Same applies to obtaining the output CIImage from a given filter, fooFilter.outputImage
> > > Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:149 > > + filtersToBeCached.insert(0, gaussianBlurFilter); > > + m_ciFilterStorageMap.add(traversalOrder, filtersToBeCached); > > There's a way to do this with ensure().
frankhome61
Comment 6
2020-09-09 10:22:21 PDT
Created
attachment 408337
[details]
Patch
Simon Fraser (smfr)
Comment 7
2020-09-09 10:37:36 PDT
Comment on
attachment 408337
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=408337&action=review
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:264 > + effect.setIsAlphaImage(effect.inputEffect(0)->isAlphaImage());
Is this necessary? I would expect we'd need to change any state on the FEGaussianBlur to make the CIFilter for it.
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:272 > + FloatRect outputExtent = FloatRect(gaussianBlurFilter.outputImage.extent);
auto outputExtent = FloatRect { gaussianBlurFilter.outputImage.extent) };
> LayoutTests/css3/filters/effect-blur-square-expected.html:4 > + <title>CSS Filter Test: Test for Saturate short hand</title>
That title seems wrong.
> LayoutTests/css3/filters/effect-blur-square.html:4 > + <title>CSS Filter Test: Test for Saturate short hand</title>
Nope.
> LayoutTests/css3/filters/effect-blur-square.html:22 > +.container{ > + position:relative; > + width:600px; > + height:600px; > + overflow:hidden; > +} > + > +#background { > + background: red; > + left:-15px; > + right:-15px; > + top:-15px; > + bottom:-15px; > + filter: blur(10px); > + position: absolute; > +}
We normally indent the CSS. No blank lines at the ends.
> LayoutTests/css3/filters/effect-blur-square.html:27 > + <p>You should see a red rectangle.</p>
Successful tests should never show red. You should use green.
Simon Fraser (smfr)
Comment 8
2020-09-09 10:41:20 PDT
(In reply to Simon Fraser (smfr) from
comment #7
)
> Is this necessary? I would expect we'd need to change any state on the > FEGaussianBlur to make the CIFilter for it.
I would *not* expect.
frankhome61
Comment 9
2020-09-09 10:57:06 PDT
Created
attachment 408346
[details]
Patch
frankhome61
Comment 10
2020-09-09 11:11:27 PDT
Created
attachment 408348
[details]
Patch
Simon Fraser (smfr)
Comment 11
2020-09-09 11:18:31 PDT
Comment on
attachment 408348
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=408348&action=review
> Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:260 > +RetainPtr<CIImage> FilterEffectRendererCoreImage::imageForFEGaussianBlur(FEGaussianBlur& effect, const Vector<RetainPtr<CIImage>>& inputImages)
Argument can now be const FEGaussianBlur&.
> LayoutTests/css3/filters/effect-blur-square.html:21 > + .container{ > + position:relative; > + width:400px; > + height:400px; > + overflow:hidden; > + } > + > + #background { > + background: green; > + left:-25px; > + right:-25px; > + top:-25px; > + bottom:-25px; > + filter: blur(5px); > + position: absolute; > + }
Be consistent with your formatting. Space after : I don't see how this test tests blurring. It would also pass if there were no filter applied.
frankhome61
Comment 12
2020-09-09 16:32:59 PDT
Created
attachment 408383
[details]
Work in progress (don't review yet)
frankhome61
Comment 13
2020-09-10 10:06:58 PDT
Created
attachment 408455
[details]
Patch (Work in Progress)
frankhome61
Comment 14
2020-09-10 10:11:56 PDT
2 tests failing on iOS and 4 tests failing on Mac-wk2. css3/filters/filters-on-svg-root.html: very minor pixel difference around the circle fast/filter-image/filter-image-blur.html: the blur amount looks different, however the render result looks different between Minibrowser vs. Safari. css3/filters/svg-blur-filter-clipped.html and css3/filters/effect-blur-square.html: cannot reproduce the result on Jazz/GoldenGate. Might be a bug in Mojave that was later fixed in Jazz. As my internship is ending in 2 days, I am leaving all relevant code & comments here in case I am not able to fix this tomorrow.
frankhome61
Comment 15
2020-09-11 10:25:15 PDT
Created
attachment 408542
[details]
Valuable CSS/SVG tests I have attached some valuable test html on CSS and SVG filters.
Peng Liu
Comment 16
2020-09-11 16:20:44 PDT
Comment on
attachment 408455
[details]
Patch (Work in Progress) View in context:
https://bugs.webkit.org/attachment.cgi?id=408455&action=review
> LayoutTests/css3/filters/effect-blur-square-expected.html:1 > +<!DOCTYPE html>
The file name must be effect-blur-square-expected.txt?
Peng Liu
Comment 17
2020-09-11 16:23:01 PDT
Comment on
attachment 408455
[details]
Patch (Work in Progress) View in context:
https://bugs.webkit.org/attachment.cgi?id=408455&action=review
>> LayoutTests/css3/filters/effect-blur-square-expected.html:1 >> +<!DOCTYPE html> > > The file name must be effect-blur-square-expected.txt?
Oh, sorry, please ignore this comment.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug