gallium: handle copy_image of depth textures

copy_image calls blit now for multisampled images, including
depth. But blit explicitly uses only PIPE_MASK_RGBA, so it is
incapable of copying depth buffers.

This patch checks the destination format and uses PIPE_MASK_ZS if
it is a depth or stencil. Ideally we would simply use PIPE_MASK_RGBAZS
always, but not all drivers actually handle getting this mask
(they probably should, but that's another story).

The change to copy_image was in 5027b5aa2, so in some sense this
patch "fixes" that. In fact though the issue wasn't in the copy_image
change, it was always latent in blit().

Fixes: 5027b5aa28 ("gallium: stop calling resource_copy_region for multisampled copy_image")
Signed-off-by: Eric R. Smith <eric.smith@collabora.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28585>
This commit is contained in:
Eric R. Smith 2024-04-04 17:22:15 -03:00 committed by Marge Bot
parent d5aefb7a16
commit 0cb852050d

View File

@ -282,7 +282,10 @@ blit(struct pipe_context *pipe,
blit.src.box = *src_box;
u_box_3d(dstx, dsty, dstz, src_box->width, src_box->height,
src_box->depth, &blit.dst.box);
blit.mask = PIPE_MASK_RGBA;
if (util_format_is_depth_or_stencil(dst_format))
blit.mask = PIPE_MASK_ZS;
else
blit.mask = PIPE_MASK_RGBA;
blit.filter = PIPE_TEX_FILTER_NEAREST;
pipe->blit(pipe, &blit);