Module: Mesa
Branch: staging/22.2
Commit: 6ce21ce91043b9e67ae307b889a0947fb565b2cd
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6ce21ce91043b9e67ae307b889a0947fb565b2cd

Author: Pierre-Eric Pelloux-Prayer <[email protected]>
Date:   Thu Sep  8 09:47:59 2022 +0200

mesa: avoid reading back textures from VRAM

This can be very slow on dGPU.

I tried a different version that would allocate a full row
and then do a single memcpy per row but the performance
was similar so I kept the simple version.

Cc: mesa-stable

Reviewed-by: Marek Olšák <[email protected]>
Reviewed-by: Emma Anholt <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18484>
(cherry picked from commit a5b1a811053eef74e8e0353ebbe2bb9c68e5c26b)

---

 .pick_status.json        | 2 +-
 src/mesa/main/texstore.c | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 38e82725b4f..5038058cdac 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -526,7 +526,7 @@
         "description": "mesa: avoid reading back textures from VRAM",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index 7caaa62f20f..8679b52bb77 100755
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -449,7 +449,7 @@ _mesa_texstore_s8_z24(TEXSTORE_PARAMS)
             /* the 24 depth bits will be in the low position: */
             _mesa_unpack_depth_span(ctx, srcWidth,
                                     GL_UNSIGNED_INT, /* dst type */
-                                    keepstencil ? depth : dstRow, /* dst addr 
*/
+                                    depth, /* dst addr */
                                     depthScale,
                                     srcType, src, srcPacking);
 
@@ -463,7 +463,9 @@ _mesa_texstore_s8_z24(TEXSTORE_PARAMS)
 
          /* merge stencil values into depth values */
          for (i = 0; i < srcWidth; i++) {
-            if (keepstencil)
+            if (!keepstencil && !keepdepth)
+               dstRow[i] = depth[i] | (stencil[i] << 24);
+            else if (keepstencil)
                dstRow[i] = depth[i] | (dstRow[i] & 0xFF000000);
             else
                dstRow[i] = (dstRow[i] & 0xFFFFFF) | (stencil[i] << 24);

Reply via email to