Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 891d1c8d9a920432b96bb52e1aafe554c408a120
https://github.com/WebKit/WebKit/commit/891d1c8d9a920432b96bb52e1aafe554c408a120
Author: Nikolas Zimmermann <[email protected]>
Date: 2026-09-21 (Mon, 21 Sep 2026)
Changed paths:
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale-expected.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale-ref.html
A
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/ios/TestExpectations
M LayoutTests/platform/mac/TestExpectations
M Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp
M Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.h
M
Source/WebCore/platform/graphics/skia/SkiaCompositingLayerOverlapRegions.cpp
M Source/WebCore/platform/graphics/skia/SkiaCompositingLayerOverlapRegions.h
Log Message:
-----------
[GTK][WPE] Fix SkiaCompositingLayer filter rendering under transforms
https://bugs.webkit.org/show_bug.cgi?id=323693
Reviewed by Fujii Hironori.
On GTK and WPE an element with both a filter and a transform is drawn wrongly:
drop-shadow always falls in the same direction on screen instead of turning with
the element, blur is scaled neither by the transform nor by the device scale
factor, and perspective is not handled at all. The same applies to
backdrop-filter.
Such a layer was painted into an offscreen surface with the transform already
applied on the canvas, and the filter was applied while drawing that surface
back with no transform on the canvas, so Skia had nothing to map the filter
parameters through.
Paint the subtree with the layer transform on the canvas instead, into a surface
in the layer plane at a fixed scale (the 2D scale of the layer transform, or of
the nearest ancestor without a perspective), apply the filter there and draw the
result with the layer transform, as Chromium does. SkCanvas::saveLayer() would
instead pick the resolution at the center of the bounds, which under a
perspective can be far off the resolution anywhere else.
Mapping a device point back into a tilted layer plane can land arbitrarily far
away, and the points that do not land on the plane at all form the horizon of
the plane on screen. Map only the part of the device clip that stays one device
pixel away from the horizon, which keeps the bounds of the subtree finite.
The overlap region code can no longer treat layer space and device space as the
same modulo a translation now that a filtered subtree is painted with a
transform on the canvas - adapt it.
The new WPT tests cover filters under 2D transforms and perspective,
backdrop-filter under a transform, 3D children behind, spanning or crossing the
eye plane, filtered layers inside 3D transformed or 3D filtered ancestors, and
layer planes with zero area. They include the cases reported by Fujii Hironori
and Jani Hautakangas in the ticket.
filter-in-3d-transformed-ancestor-child-near-eye-plane.html needs the
clampedBoundsOfProjectedQuad() fix from webkit.org/b/324623 as well, so it is
marked ImageOnlyFailure on GTK/WPE until that one lands.
Now passing on GTK/WPE:
- css/css-transforms/transform3d-rotatex-perspective-003.html
- css/filter-effects: backdrop-filter-edge-behavior.html,
drop-shadow-currentcolor-dynamic-003.html
Tests:
imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap.html
imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform.html
imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer.html
imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop.html
imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane.html
imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor.html
imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane.html
imported/w3c/web-platform-tests/css/filter-effects/invert-scale.html
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/backdrop-filter-on-transformed-layer.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-rotation.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective-scale.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-perspective.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-scale.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-in-opacity-overlap.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/drop-shadow-transform.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-behind-eye-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-in-3d-filtered-layer.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-child-spanning-eye-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-3d-children-crossing-eye-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-backdrop.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-degenerate-layer-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-crossing-eye-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-child-near-eye-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-in-3d-transformed-ancestor.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filter-unbounded-child-in-layer-plane.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale-expected.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale-ref.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/invert-scale.html:
Added.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac/TestExpectations:
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.cpp:
(WebCore::SkiaCompositingLayer::paintedLayerRect const):
(WebCore::SkiaCompositingLayer::collectFrameDamage):
(WebCore::SkiaCompositingLayer::collectBackdropDamage):
(WebCore::SkiaCompositingLayer::addGroupDamage):
(WebCore::SkiaCompositingLayer::stopPaintingIntoBackdropIfNeeded):
(WebCore::SkiaCompositingLayer::paintSelfAndChildren):
(WebCore::clipRectIgnoringCanvasMatrix):
(WebCore::SkiaCompositingLayer::paintWithIntermediateSurface):
(WebCore::inverseLayerPlaneTransform):
(WebCore::SkiaCompositingLayer::paintBackdrop):
(WebCore::maxFilterSurfaceSize):
(WebCore::SkiaCompositingLayer::paintWithFilter):
(WebCore::transform2DScaleComponents):
(WebCore::SkiaCompositingLayer::filterSurfaceScale const):
(WebCore::SkiaCompositingLayer::paintWithFilterAndMask):
(WebCore::SkiaCompositingLayer::computeConsolidatedOverlapRegionRects):
(WebCore::SkiaCompositingLayer::computeOverlapRegions):
(WebCore::SkiaCompositingLayer::paintWithOpacity):
(WebCore::SkiaCompositingLayer::paintWithBlendMode):
(WebCore::expandByOutsets): Deleted.
(WebCore::SkiaCompositingLayer::clipBounds const): Deleted.
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayer.h:
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayerOverlapRegions.cpp:
(WebCore::projectedBoundingBox):
(WebCore::layerPlaneClipBounds):
(WebCore::ComputeOverlapRegionData::transformedBoundingBox const): Deleted.
* Source/WebCore/platform/graphics/skia/SkiaCompositingLayerOverlapRegions.h:
Canonical link: https://commits.webkit.org/321515@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications