[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