Module: Mesa Branch: main Commit: a5b1a811053eef74e8e0353ebbe2bb9c68e5c26b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a5b1a811053eef74e8e0353ebbe2bb9c68e5c26b
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> --- 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);
