Title: [273301] trunk
Revision
273301
Author
[email protected]
Date
2021-02-23 00:58:30 -0800 (Tue, 23 Feb 2021)

Log Message

HTMLCanvasElement::copiedImage() contains old image with GPU Process on
https://bugs.webkit.org/show_bug.cgi?id=222101

Patch by Kimmo Kinnunen <[email protected]> on 2021-02-23
Reviewed by Simon Fraser.

Source/WebKit:

Implement RemoteImageBufferProxy::copyImage and
RemoteImageBufferProxy::copyNativeImage.
Implement by asking the data from the GPU process.

Previously, with AcceleratedImageBufferShareableMappedBackend
the HTMLCanvasElement::copiedImage() would construct the copy
by copying the CGContext backed by the IOSurface that is accessible
by both processes. This would succeed. After a draw to the image,
the second copy would not reflect the draw but contain the same
image as the first copy.

Fix by not using the fact that the IOSurface is accessible by both
processes. In the end, IOSurfaces will not be available in
Web process.

Converts NativeImage to ShareableBitmap with WebCore::CompositeOperator::Copy
since the ImageBuffers might have unpremultiplied contents. Also, ShareableBitmap
does not have contents, so blending is overhead.

No new tests, enables ~150 tests.

* GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
(WebKit::RemoteGraphicsContextGL::copyTextureFromMedia):
* GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::getShareableBitmapForImageBuffer):
* GPUProcess/graphics/RemoteRenderingBackend.h:
* GPUProcess/graphics/RemoteRenderingBackend.messages.in:
* WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::getShareableBitmap):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:

LayoutTests:

* gpu-process/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (273300 => 273301)


--- trunk/LayoutTests/ChangeLog	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/LayoutTests/ChangeLog	2021-02-23 08:58:30 UTC (rev 273301)
@@ -1,3 +1,12 @@
+2021-02-23  Kimmo Kinnunen  <[email protected]>
+
+        HTMLCanvasElement::copiedImage() contains old image with GPU Process on
+        https://bugs.webkit.org/show_bug.cgi?id=222101
+
+        Reviewed by Simon Fraser.
+
+        * gpu-process/TestExpectations:
+
 2021-02-22  Said Abou-Hallawa  <[email protected]>
 
         [GPU Process] Implement the ClipToDrawingCommands item by using begin and end markers

Modified: trunk/LayoutTests/gpu-process/TestExpectations (273300 => 273301)


--- trunk/LayoutTests/gpu-process/TestExpectations	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/LayoutTests/gpu-process/TestExpectations	2021-02-23 08:58:30 UTC (rev 273301)
@@ -9,29 +9,19 @@
 fast/canvas/canvas-arc-360-winding.html [ Failure ]
 fast/canvas/canvas-arc-connecting-line.html [ Failure ]
 fast/canvas/canvas-arc-zero-lineto.html [ Failure ]
-fast/canvas/canvas-bezier-same-endpoint.html [ Failure ]
-fast/canvas/canvas-blend-image.html [ Failure ]
-fast/canvas/canvas-blend-solid.html [ Failure ]
-fast/canvas/canvas-blending-clipping.html [ Failure ]
-fast/canvas/canvas-blending-color-over-color.html [ Failure ]
-fast/canvas/canvas-blending-color-over-gradient.html [ Failure ]
+fast/canvas/canvas-bezier-same-endpoint.html [ Failure Pass ]
+fast/canvas/canvas-blend-image.html [ Failure Pass ]
+fast/canvas/canvas-blend-solid.html [ Failure Pass ]
 fast/canvas/canvas-drawImage-composite-copy.html [ ImageOnlyFailure ]
 fast/canvas/canvas-large-dimensions.html [ Failure ]
 fast/canvas/canvas-render-layer.html [ Failure ]
 fast/canvas/hidpi-repaint-on-retina-leaves-bits-behind.html [ ImageOnlyFailure ]
-fast/canvas/webgl/canvas-2d-webgl-texture.html [ Failure ]
 fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565.html [ Failure ]
 fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444.html [ Failure ]
 fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551.html [ Failure ]
 fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html [ Failure ]
-fast/canvas/webgl/tex-image-webgl.html [ Failure ]
-fast/canvas/webgl/texImage2D-mse-flipY-false.html [ Failure ]
-fast/canvas/webgl/texImage2D-mse-flipY-true.html [ Failure ]
-fast/canvas/webgl/texImage2D-video-flipY-true.html [ Failure ]
-fast/canvas/webgl/texture-active-bind.html [ Failure ]
 
 # webkit.org/b/220806
-fast/canvas/canvas-blending-color-over-image.html [ Timeout ]
 fast/canvas/webgl/context-update-on-display-configuration.html [ Timeout ]
 fast/canvas/webgl/texImage2D-video-flipY-false.html [ Timeout ]
 fast/canvas/webgl/webglcontextchangedevent.html [ Timeout ]
@@ -166,43 +156,18 @@
 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html [ Failure ]
 
 # webkit.org/b/220333
-webgl/1.0.3/conformance/extensions/oes-texture-float-with-canvas.html [ Failure ]
 webgl/1.0.3/conformance/extensions/oes-texture-float-with-video.html [ Failure ]
-webgl/1.0.3/conformance/extensions/oes-texture-half-float-with-canvas.html [ Failure ]
 webgl/1.0.3/conformance/extensions/oes-texture-half-float-with-video.html [ Failure ]
 webgl/1.0.3/conformance/state/gl-object-get-calls.html [ Timeout ]
-webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html [ Failure ]
-webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html [ Failure ]
-webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html [ Failure ]
-webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html [ Failure ]
 webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html [ Failure ]
 webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html [ Failure ]
 webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html [ Failure ]
 webgl/1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html [ Failure ]
-webgl/1.0.3/conformance/textures/tex-image-webgl.html [ Failure ]
-webgl/1.0.3/conformance/textures/texparameter-test.html [ Failure ]
-webgl/1.0.3/conformance/textures/texture-active-bind-2.html [ Failure ]
-webgl/1.0.3/conformance/textures/texture-active-bind.html [ Failure ]
 webgl/1.0.3/conformance/uniforms/uniform-samplers-test.html [ Slow ]
-webgl/2.0.0/conformance/extensions/oes-texture-float-with-canvas.html [ Failure ]
 webgl/2.0.0/conformance/extensions/oes-texture-float-with-video.html [ Failure ]
-webgl/2.0.0/conformance/extensions/oes-texture-half-float-with-canvas.html [ Failure ]
 webgl/2.0.0/conformance/extensions/oes-texture-half-float-with-video.html [ Failure ]
 webgl/2.0.0/conformance/reading/read-pixels-test.html [ Failure ]
 webgl/2.0.0/conformance/state/gl-object-get-calls.html [ Timeout ]
-webgl/2.0.0/conformance/textures/canvas/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance/textures/canvas/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance/textures/image_bitmap_from_image_bitmap/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance/textures/image_bitmap_from_image_bitmap/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance/textures/image_bitmap_from_image_bitmap/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance/textures/image_bitmap_from_image_bitmap/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance/textures/image_bitmap_from_image_bitmap/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance/textures/misc/tex-image-webgl.html [ Failure ]
-webgl/2.0.0/conformance/textures/misc/texture-active-bind-2.html [ Failure ]
-webgl/2.0.0/conformance/textures/misc/texture-active-bind.html [ Failure ]
 webgl/2.0.0/conformance/textures/video/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ]
 webgl/2.0.0/conformance/textures/video/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ]
 webgl/2.0.0/conformance/textures/video/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ]
@@ -211,134 +176,6 @@
 webgl/2.0.0/conformance/uniforms/uniform-samplers-test.html [ Slow ]
 webgl/2.0.0/conformance2/reading/read-pixels-pack-parameters.html [ Failure ]
 webgl/2.0.0/conformance2/state/gl-object-get-calls.html [ Timeout ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r16f-red-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r32f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8-red-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-r8ui-red_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg16f-rg-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg32f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8-rg-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rg8ui-rg_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb16f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb32f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba16f-rgba-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba32f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r16f-red-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r32f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8-red-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-r8ui-red_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg16f-rg-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg32f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8-rg-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rg8ui-rg_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb16f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb32f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba16f-rgba-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba32f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r16f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r16f-red-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r32f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r8-red-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-r8ui-red_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg16f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg16f-rg-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg32f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg8-rg-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rg8ui-rg_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb16f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb16f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb32f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb5_a1-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb9_e5-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgb9_e5-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba16f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba16f-rgba-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba32f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba4-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-srgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r16f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r16f-red-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r32f-red-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r8-red-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-r8ui-red_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg16f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg16f-rg-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg32f-rg-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg8-rg-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rg8ui-rg_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb16f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb16f-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb32f-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb5_a1-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb9_e5-rgb-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgb9_e5-rgb-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba16f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba16f-rgba-half_float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba32f-rgba-float.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba4-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba8-rgba-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-srgb8-rgb-unsigned_byte.html [ Failure ]
-webgl/2.0.0/conformance2/textures/image_bitmap_from_image_bitmap/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html [ Failure ]
 webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-float.html [ Failure ]
 webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-half_float.html [ Failure ]
 webgl/2.0.0/conformance2/textures/video/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html [ Failure ]
@@ -418,3 +255,7 @@
 webrtc/h264-high.html [ Failure ]
 webrtc/video-rotation-no-cvo.html [ Timeout ]
 imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack.https.html [ Timeout ]
+
+webkit.org/b/221825 fast/canvas/webgl/texImage2D-video-flipY-true.html [ Pass ]
+webkit.org/b/221791 fast/canvas/webgl/texImage2D-mse-flipY-false.html [ Pass ]
+webkit.org/b/221791 fast/canvas/webgl/texImage2D-mse-flipY-true.html [ Pass ]

Modified: trunk/Source/WebKit/ChangeLog (273300 => 273301)


--- trunk/Source/WebKit/ChangeLog	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/ChangeLog	2021-02-23 08:58:30 UTC (rev 273301)
@@ -1,3 +1,42 @@
+2021-02-23  Kimmo Kinnunen  <[email protected]>
+
+        HTMLCanvasElement::copiedImage() contains old image with GPU Process on
+        https://bugs.webkit.org/show_bug.cgi?id=222101
+
+        Reviewed by Simon Fraser.
+
+        Implement RemoteImageBufferProxy::copyImage and
+        RemoteImageBufferProxy::copyNativeImage.
+        Implement by asking the data from the GPU process.
+
+        Previously, with AcceleratedImageBufferShareableMappedBackend
+        the HTMLCanvasElement::copiedImage() would construct the copy
+        by copying the CGContext backed by the IOSurface that is accessible
+        by both processes. This would succeed. After a draw to the image,
+        the second copy would not reflect the draw but contain the same
+        image as the first copy.
+
+        Fix by not using the fact that the IOSurface is accessible by both
+        processes. In the end, IOSurfaces will not be available in
+        Web process.
+
+        Converts NativeImage to ShareableBitmap with WebCore::CompositeOperator::Copy
+        since the ImageBuffers might have unpremultiplied contents. Also, ShareableBitmap
+        does not have contents, so blending is overhead.
+
+        No new tests, enables ~150 tests.
+
+        * GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
+        (WebKit::RemoteGraphicsContextGL::copyTextureFromMedia):
+        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
+        (WebKit::RemoteRenderingBackend::getShareableBitmapForImageBuffer):
+        * GPUProcess/graphics/RemoteRenderingBackend.h:
+        * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
+        * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+        (WebKit::RemoteRenderingBackendProxy::getShareableBitmap):
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
+
 2021-02-22  Don Olmstead  <[email protected]>
 
         Non-unified build fixes late February 2021 edition

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp (273300 => 273301)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2021-02-23 08:58:30 UTC (rev 273301)
@@ -349,6 +349,32 @@
     completionHandler(WTFMove(data));
 }
 
+void RemoteRenderingBackend::getShareableBitmapForImageBuffer(WebCore::RenderingResourceIdentifier identifier, WebCore::PreserveResolution preserveResolution, CompletionHandler<void(ShareableBitmap::Handle&&)>&& completionHandler)
+{
+    ASSERT(!RunLoop::isMain());
+
+    ShareableBitmap::Handle handle;
+    [&]() {
+        auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(identifier);
+        if (!imageBuffer)
+            return;
+        auto image = imageBuffer->copyNativeImage(WebCore::BackingStoreCopy::DontCopyBackingStore);
+        if (!image)
+            return;
+        auto backendSize = imageBuffer->backendSize();
+        auto resultSize = preserveResolution == WebCore::PreserveResolution::Yes ? backendSize : imageBuffer->logicalSize();
+        auto bitmap = ShareableBitmap::createShareable(resultSize, { });
+        if (!bitmap)
+            return;
+        auto context = bitmap->createGraphicsContext();
+        if (!context)
+            return;
+        context->drawNativeImage(*image, resultSize, FloatRect { { }, resultSize }, FloatRect { { }, backendSize }, { WebCore::CompositeOperator::Copy });
+        bitmap->createHandle(handle);
+    }();
+    completionHandler(WTFMove(handle));
+}
+
 void RemoteRenderingBackend::cacheNativeImage(const ShareableBitmap::Handle& handle, RenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(!RunLoop::isMain());

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h (273300 => 273301)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2021-02-23 08:58:30 UTC (rev 273301)
@@ -118,6 +118,7 @@
     void getDataURLForImageBuffer(const String& mimeType, Optional<double> quality, WebCore::PreserveResolution, WebCore::RenderingResourceIdentifier, CompletionHandler<void(String&&)>&&);
     void getDataForImageBuffer(const String& mimeType, Optional<double> quality, WebCore::RenderingResourceIdentifier, CompletionHandler<void(Vector<uint8_t>&&)>&&);
     void getBGRADataForImageBuffer(WebCore::RenderingResourceIdentifier, CompletionHandler<void(Vector<uint8_t>&&)>&&);
+    void getShareableBitmapForImageBuffer(WebCore::RenderingResourceIdentifier, WebCore::PreserveResolution, CompletionHandler<void(ShareableBitmap::Handle&&)>&&);
     void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void cacheFont(Ref<WebCore::Font>&&);
     void deleteAllFonts();

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in (273300 => 273301)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2021-02-23 08:58:30 UTC (rev 273301)
@@ -29,6 +29,7 @@
     GetDataURLForImageBuffer(String mimeType, Optional<double> quality, enum:uint8_t WebCore::PreserveResolution preserveResolution, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) -> (String urlString) Synchronous
     GetDataForImageBuffer(String mimeType, Optional<double> quality, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) -> (Vector<uint8_t> data) Synchronous
     GetBGRADataForImageBuffer(WebCore::RenderingResourceIdentifier renderingResourceIdentifier) -> (Vector<uint8_t> data) Synchronous
+    GetShareableBitmapForImageBuffer(WebCore::RenderingResourceIdentifier imageBuffer, enum:uint8_t WebCore::PreserveResolution preserveResolution) -> (WebKit::ShareableBitmap::Handle handle) Synchronous
     CacheNativeImage(WebKit::ShareableBitmap::Handle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
     CacheFont(IPC::FontReference font)
     DeleteAllFonts()

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h (273300 => 273301)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h	2021-02-23 08:58:30 UTC (rev 273301)
@@ -172,7 +172,28 @@
 
         return m_remoteRenderingBackendProxy->getBGRADataForImageBuffer(m_renderingResourceIdentifier);
     }
+    RefPtr<WebCore::NativeImage> copyNativeImage(WebCore::BackingStoreCopy = WebCore::BackingStoreCopy::CopyBackingStore) const override
+    {
+        if (UNLIKELY(!m_remoteRenderingBackendProxy))
+            return { };
+        const_cast<RemoteImageBufferProxy*>(this)->flushDrawingContext();
+        auto bitmap = m_remoteRenderingBackendProxy->getShareableBitmap(m_renderingResourceIdentifier, WebCore::PreserveResolution::Yes);
+        if (!bitmap)
+            return { };
+        return WebCore::NativeImage::create(bitmap->createPlatformImage());
+    }
 
+    RefPtr<WebCore::Image> copyImage(WebCore::BackingStoreCopy = WebCore::BackingStoreCopy::CopyBackingStore, WebCore::PreserveResolution preserveResolution = WebCore::PreserveResolution::No) const override
+    {
+        if (UNLIKELY(!m_remoteRenderingBackendProxy))
+            return { };
+        const_cast<RemoteImageBufferProxy*>(this)->flushDrawingContext();
+        auto bitmap = m_remoteRenderingBackendProxy->getShareableBitmap(m_renderingResourceIdentifier, preserveResolution);
+        if (!bitmap)
+            return { };
+        return bitmap->createImage();
+    }
+
     void putImageData(WebCore::AlphaPremultiplication inputFormat, const WebCore::ImageData& imageData, const WebCore::IntRect& srcRect, const WebCore::IntPoint& destPoint = { }, WebCore::AlphaPremultiplication destFormat = WebCore::AlphaPremultiplication::Premultiplied) override
     {
         // The math inside ImageData::create() doesn't agree with the math inside ImageBufferBackend::putImageData() about how m_resolutionScale interacts with the data in the ImageBuffer.

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (273300 => 273301)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2021-02-23 08:58:30 UTC (rev 273301)
@@ -179,6 +179,18 @@
     return data;
 }
 
+RefPtr<ShareableBitmap> RemoteRenderingBackendProxy::getShareableBitmap(RenderingResourceIdentifier imageBuffer, PreserveResolution preserveResolution)
+{
+    sendDeferredWakeupMessageIfNeeded();
+
+    ShareableBitmap::Handle handle;
+    auto sendResult = sendSync(Messages::RemoteRenderingBackend::GetShareableBitmapForImageBuffer(imageBuffer, preserveResolution), Messages::RemoteRenderingBackend::GetShareableBitmapForImageBuffer::Reply(handle), m_renderingBackendIdentifier, 1_s);
+    if (handle.isNull())
+        return { };
+    ASSERT_UNUSED(sendResult, sendResult);
+    return ShareableBitmap::create(handle);
+}
+
 void RemoteRenderingBackendProxy::cacheNativeImage(const ShareableBitmap::Handle& handle, RenderingResourceIdentifier renderingResourceIdentifier)
 {
     send(Messages::RemoteRenderingBackend::CacheNativeImage(handle, renderingResourceIdentifier), m_renderingBackendIdentifier);

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h (273300 => 273301)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2021-02-23 08:58:30 UTC (rev 273301)
@@ -86,6 +86,7 @@
     Vector<uint8_t> getDataForImageBuffer(const String& mimeType, Optional<double> quality, WebCore::RenderingResourceIdentifier);
     Vector<uint8_t> getBGRADataForImageBuffer(WebCore::RenderingResourceIdentifier);
     WebCore::DisplayList::FlushIdentifier flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, WebCore::RenderingResourceIdentifier);
+    RefPtr<ShareableBitmap> getShareableBitmap(WebCore::RenderingResourceIdentifier, WebCore::PreserveResolution);
     void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void cacheFont(Ref<WebCore::Font>&&);
     void deleteAllFonts();

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp (273300 => 273301)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2021-02-23 08:20:01 UTC (rev 273300)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2021-02-23 08:58:30 UTC (rev 273301)
@@ -73,7 +73,7 @@
     if (!context)
         return nullptr;
 
-    context->drawNativeImage(image, imageSize, FloatRect({ }, imageSize), FloatRect({ }, imageSize));
+    context->drawNativeImage(image, imageSize, FloatRect({ }, imageSize), FloatRect({ }, imageSize), { WebCore::CompositeOperator::Copy });
     return bitmap;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to