[go: up one dir, main page]

Adjust rectangle for flipped sources in TexImage2D

When the source is a WebGL canvas the rectangle must
be adjusted for flipping with MESA_framebuffer_flip_y.

BUG=964010
TEST=https://www.khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html?version=2.0.1

(cherry picked from commit b6ab4acc0ac3a4b2c72bbe92e73f50b067de5d5c)

Change-Id: I20f5ac0a5049b23b3033a6d46f53606886f4e4f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1627555
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Fritz Koenig <frkoenig@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#665193}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1660960
Cr-Commit-Position: refs/branch-heads/3809@{#325}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index 655e77f..b1566fba 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -5420,7 +5420,12 @@
 
     // The GPU-GPU copy path uses the Y-up coordinate system.
     IntRect adjusted_source_sub_rectangle = source_sub_rectangle;
-    if (!unpack_flip_y_) {
+
+    bool should_adjust_source_sub_rectangle = !unpack_flip_y_;
+    if (is_origin_top_left_ && source_canvas_webgl_context)
+      should_adjust_source_sub_rectangle = !should_adjust_source_sub_rectangle;
+
+    if (should_adjust_source_sub_rectangle) {
       adjusted_source_sub_rectangle.SetY(context_host->Size().Height() -
                                          adjusted_source_sub_rectangle.MaxY());
     }