From a5b1a811053eef74e8e0353ebbe2bb9c68e5c26b Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Thu, 8 Sep 2022 09:47:59 +0200 Subject: [PATCH] mesa: avoid reading back textures from VRAM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Emma Anholt Part-of: --- src/mesa/main/texstore.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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);