[webkit-changes] [WebKit/WebKit] 4df939: Regression(280901 at main)? [WPE][TextureMapper] Inco...
Miguel Gómez
noreply at github.com
Tue Nov 5 05:14:24 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4df9391bfafa06f4869c34e701cc1ee6c94caf14
https://github.com/WebKit/WebKit/commit/4df9391bfafa06f4869c34e701cc1ee6c94caf14
Author: Miguel Gomez <magomez at igalia.com>
Date: 2024-11-05 (Tue, 05 Nov 2024)
Changed paths:
M Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
M Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h
M Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayer.h
M Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferHolePunch.cpp
M Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferHolePunch.h
Log Message:
-----------
Regression(280901 at main)? [WPE][TextureMapper] Incorrect extra hole punches with fixed body position
https://bugs.webkit.org/show_bug.cgi?id=281309
Reviewed by Carlos Garcia Campos.
When rendering into a preserves3D subtree, we're rendering into an intermediate surface
that, once ready, is blended into the main framebuffer.
To make holepunching work in this situation we need to render the transparent rectangle
in the intermediate surface, but also in the main framebuffer. To achieve this, when
rendering into the intermediate surface we keep a vector of rects that need to be painted
to the main framebuffer just before blending the intermediate surface.
There are a couple of points that need to be taken into account though: the intermediate
surface rendering is tiled, so the same TextureMapperLayer can be rendered several times,
and it will receive an offset to compensate the rendering into the intermediate surface.
In order to notify the video sink and render the transparent rectange in the main
framebuffer, we need to use a transform that doesn't include the intermediate surface
offset. But to paint into the intermediate surface we need to use the offsetted transform.
To achieve this, we calculate the non offsetted transform in the first tile, and use it
to notify the real video position to the video sink and the main framebuffer. Then
we use the normal transform to paint the transparent rectangle into the intermediate
surface.
* Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp:
(WebCore::TextureMapperLayer::paintSelf):
(WebCore::TextureMapperLayer::paintPreserves3DHolePunch):
(WebCore::TextureMapperLayer::paintWith3DRenderingContext):
* Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h:
* Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayer.h:
(WebCore::TextureMapperPlatformLayer::notifyVideoPosition):
(WebCore::TextureMapperPlatformLayer::paintTransparentRectangle):
* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferHolePunch.cpp:
(WebCore::CoordinatedPlatformLayerBufferHolePunch::notifyVideoPosition):
(WebCore::CoordinatedPlatformLayerBufferHolePunch::paintTransparentRectangle):
* Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedPlatformLayerBufferHolePunch.h:
Canonical link: https://commits.webkit.org/286146@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