[webkit-changes] [WebKit/WebKit] fc46a3: [Materials] Add rendering support for blur effects
Aditya Keerthi
noreply at github.com
Thu Dec 19 15:23:13 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: fc46a347192024cf8083fb284cd815e0e399eb2f
https://github.com/WebKit/WebKit/commit/fc46a347192024cf8083fb284cd815e0e399eb2f
Author: Aditya Keerthi <akeerthi at apple.com>
Date: 2024-12-19 (Thu, 19 Dec 2024)
Changed paths:
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-chrome-expected.txt
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-chrome.html
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-expected.txt
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thick-expected.txt
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thick.html
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thin-expected.txt
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thin.html
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin-expected.txt
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin.html
A LayoutTests/apple-visual-effects/apple-visual-effect-blur-material.html
A LayoutTests/apple-visual-effects/backdrop-filter-with-apple-visual-effect-expected.html
A LayoutTests/apple-visual-effects/backdrop-filter-with-apple-visual-effect.html
A LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-chrome-expected.txt
A LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-expected.txt
A LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-thick-expected.txt
A LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-thin-expected.txt
A LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin-expected.txt
M Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj
M Source/WebCore/PAL/pal/PlatformMac.cmake
A Source/WebCore/PAL/pal/cocoa/CoreMaterialSoftLink.h
A Source/WebCore/PAL/pal/cocoa/CoreMaterialSoftLink.mm
A Source/WebCore/PAL/pal/spi/cocoa/CoreMaterialSPI.h
M Source/WebCore/page/FrameSnapshotting.cpp
M Source/WebCore/platform/cocoa/AppleVisualEffect.cpp
M Source/WebCore/platform/cocoa/AppleVisualEffect.h
M Source/WebCore/platform/graphics/GraphicsLayer.cpp
M Source/WebCore/platform/graphics/GraphicsLayer.h
M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
M Source/WebCore/platform/graphics/ca/PlatformCALayer.h
M Source/WebCore/platform/graphics/ca/PlatformCALayer.mm
M Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h
M Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderElementInlines.h
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderLayer.h
M Source/WebCore/rendering/RenderLayerBacking.cpp
M Source/WebCore/rendering/RenderLayerBacking.h
M Source/WebCore/rendering/RenderLayerCompositor.cpp
M Source/WebCore/rendering/RenderLayerInlines.h
M Source/WebCore/rendering/style/RenderStyle.cpp
M Source/WebCore/rendering/style/RenderStyle.h
M Source/WebCore/rendering/style/RenderStyleInlines.h
M Source/WebCore/style/StyleAdjuster.cpp
M Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.serialization.in
M Source/WebKit/Shared/RemoteLayerTree/LayerProperties.h
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTree.serialization.in
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm
M Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm
M Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h
M Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm
Log Message:
-----------
[Materials] Add rendering support for blur effects
https://bugs.webkit.org/show_bug.cgi?id=284729
rdar://141527633
Reviewed by Simon Fraser.
Create and display `MTMaterialLayer`s when using `-apple-visual-effect` with
one of the `-apple-system-blur-` keywords. Note that this is not web-exposed.
`MTMaterialLayer`s are backdrop layers with a specific set of `CAFilter`s,
depending on the blur effect.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-chrome-expected.txt: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-chrome.html: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-expected.txt: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thick-expected.txt: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thick.html: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thin-expected.txt: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-thin.html: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin-expected.txt: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin.html: Added.
* LayoutTests/apple-visual-effects/apple-visual-effect-blur-material.html: Added.
* LayoutTests/apple-visual-effects/backdrop-filter-with-apple-visual-effect-expected.html: Added.
* LayoutTests/apple-visual-effects/backdrop-filter-with-apple-visual-effect.html: Added.
* LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-chrome-expected.txt: Added.
* LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-expected.txt: Added.
* LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-thick-expected.txt: Added.
* LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-thin-expected.txt: Added.
* LayoutTests/platform/ios/apple-visual-effects/apple-visual-effect-blur-material-ultra-thin-expected.txt: Added.
* Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj:
* Source/WebCore/PAL/pal/PlatformMac.cmake:
* Source/WebCore/PAL/pal/cocoa/CoreMaterialSoftLink.h: Copied from Source/WebCore/platform/cocoa/AppleVisualEffect.h.
* Source/WebCore/PAL/pal/cocoa/CoreMaterialSoftLink.mm: Copied from Source/WebCore/platform/cocoa/AppleVisualEffect.h.
* Source/WebCore/PAL/pal/spi/cocoa/CoreMaterialSPI.h: Copied from Source/WebCore/platform/cocoa/AppleVisualEffect.h.
* Source/WebCore/page/FrameSnapshotting.cpp:
(WebCore::styleContainsComplexBackground):
* Source/WebCore/platform/cocoa/AppleVisualEffect.cpp:
(WebCore::appleVisualEffectNeedsBackdrop):
Add a helper method to distinguish visual effects which create a backdrop (blur)
from those that do not (vibrancy). Support for vibrancy will be added in a
subsequent patch.
* Source/WebCore/platform/cocoa/AppleVisualEffect.h:
* Source/WebCore/platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::needsBackdrop const):
(WebCore::GraphicsLayer::dumpProperties const):
* Source/WebCore/platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::appleVisualEffect const):
(WebCore::GraphicsLayer::setAppleVisualEffect):
Specify `BackdropFiltersChanged` in addition to `AppleVisualEffectChanged`, as
material blurs set filters on a backdrop. A structural layer must be created,
and the backdrop filter rect must also be updated.
(WebCore::GraphicsLayer::needsBackdrop const): Deleted.
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::setAppleVisualEffect):
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
(WebCore::GraphicsLayerCA::updateBackdropFilters):
(WebCore::GraphicsLayerCA::updateAppleVisualEffect):
Only support backdrop effects for now. Foreground effects (vibrancy) will be
implemented in a subsequent patch.
(WebCore::GraphicsLayerCA::purposeNameForInnerLayer const):
(WebCore::GraphicsLayerCA::layerChangeAsString):
(WebCore::GraphicsLayerCA::changeLayerTypeTo):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:
* Source/WebCore/platform/graphics/ca/PlatformCALayer.h:
Introduce a new layer type for materials.
* Source/WebCore/platform/graphics/ca/PlatformCALayer.mm:
(WebCore::operator<<):
* Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
* Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
(WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
(WebCore::PlatformCALayerCocoa::clone const):
(WebCore::PlatformCALayerCocoa::appleVisualEffect const):
(WebCore::PlatformCALayerCocoa::setAppleVisualEffect):
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::repaintBeforeStyleChange):
(WebCore::RenderElement::adjustFragmentedFlowStateOnContainingBlockChangeIfNeeded):
* Source/WebCore/rendering/RenderElement.h:
* Source/WebCore/rendering/RenderElementInlines.h:
(WebCore::RenderElement::hasAppleVisualEffect const):
(WebCore::RenderElement::hasAppleVisualEffectRequiringBackdropFilter const):
(WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
(WebCore::RenderElement::canContainFixedPositionObjects const):
(WebCore::RenderElement::createsGroupForStyle):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::canCreateStackingContext):
(WebCore::RenderLayer::computeCanBeBackdropRoot const):
(WebCore::RenderLayer::debugDescription const):
* Source/WebCore/rendering/RenderLayer.h:
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
(WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
(WebCore::RenderLayerBacking::updateAppleVisualEffect):
(WebCore::RenderLayerBacking::updateConfigurationAfterStyleChange):
(WebCore::RenderLayerBacking::updateGeometry):
* Source/WebCore/rendering/RenderLayerBacking.h:
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::CompositingState::updateWithDescendantStateAndLayer):
(WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
(WebCore::RenderLayerCompositor::reasonsForCompositing const):
(WebCore::RenderLayerCompositor::requiresCompositingForFilters const):
* Source/WebCore/rendering/RenderLayerInlines.h:
(WebCore::RenderLayer::hasAppleVisualEffect const):
(WebCore::RenderLayer::hasAppleVisualEffectRequiringBackdropFilter const):
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::rareDataChangeRequiresLayout):
* Source/WebCore/rendering/style/RenderStyle.h:
* Source/WebCore/rendering/style/RenderStyleInlines.h:
(WebCore::RenderStyle::hasAppleVisualEffect const):
(WebCore::RenderStyle::hasAppleVisualEffectRequiringBackdropFilter const):
* Source/WebCore/style/StyleAdjuster.cpp:
(WebCore::Style::Adjuster::adjust const):
* Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.serialization.in:
* Source/WebKit/Shared/RemoteLayerTree/LayerProperties.h:
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
(WebKit::RemoteLayerBackingStore::drawInContext):
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTree.serialization.in:
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm:
(WebKit::materialRecipeForAppleVisualEffect):
(WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
Set a "recipe" on `MTMaterialLayer` to achieve the blur effect.
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
(WebKit::dumpChangedLayers):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
(WebKit::RemoteLayerTreeHost::makeNode):
* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
(WebKit::RemoteLayerTreeHost::makeNode):
* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h:
* Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm:
(WebKit::PlatformCALayerRemote::appleVisualEffect const):
(WebKit::PlatformCALayerRemote::setAppleVisualEffect):
Canonical link: https://commits.webkit.org/288125@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list