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 <marek.olsak@amd.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18484>
This commit is contained in:
Pierre-Eric Pelloux-Prayer
2022-09-08 09:47:59 +02:00
committed by Marge Bot
parent a6e6ffb703
commit a5b1a81105

View File

@@ -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);