[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