radv: adjust the source aspect for color to depth/stencil image copies

The opposite is already supported. Note that only one aspect (depth or
stencil) is supported when it's a copy<->depth/stencil copy, and
multiplanar images aren't supported.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33091>
This commit is contained in:
Samuel Pitoiset 2024-10-21 18:21:58 +02:00 committed by Marge Bot
parent 3be1e9ee4d
commit 40131ddadc
2 changed files with 20 additions and 3 deletions

View file

@ -162,6 +162,14 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, struct radv_meta
else if (src_img)
src_aspect_mask = src_img->aspect_mask;
/* Adjust the aspect for color to depth/stencil image copies. */
if (src_img) {
if (vk_format_is_color(src_img->image->vk.format) && vk_format_is_depth_or_stencil(dst->image->vk.format)) {
assert(src_img->aspect_mask == VK_IMAGE_ASPECT_COLOR_BIT);
src_aspect_mask = src_img->aspect_mask;
}
}
struct radv_image_view dst_iview;
create_iview(cmd_buffer, dst, &dst_iview, depth_format, aspect_mask);
@ -233,8 +241,9 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, struct radv_meta
vertex_push_constants);
struct blit2d_src_temps src_temps;
blit2d_bind_src(cmd_buffer, layout, src_img, src_buf, &src_temps, src_type, depth_format, src_aspect_mask,
log2_samples);
blit2d_bind_src(cmd_buffer, layout, src_img, src_buf, &src_temps, src_type,
(src_aspect_mask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) ? depth_format : 0,
src_aspect_mask, log2_samples);
radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info);

View file

@ -1340,7 +1340,15 @@ radv_meta_image_to_image_cs(struct radv_cmd_buffer *cmd_buffer, struct radv_meta
src_aspect_mask = src->aspect_mask;
}
create_iview(cmd_buffer, src, &src_view, depth_format, src_aspect_mask);
/* Adjust the aspect for color to depth/stencil image copies. */
if (vk_format_is_color(src->image->vk.format) && vk_format_is_depth_or_stencil(dst->image->vk.format)) {
assert(src->aspect_mask == VK_IMAGE_ASPECT_COLOR_BIT);
src_aspect_mask = src->aspect_mask;
}
create_iview(cmd_buffer, src, &src_view,
(src_aspect_mask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) ? depth_format : 0,
src_aspect_mask);
create_iview(cmd_buffer, dst, &dst_view, depth_format, dst_aspect_mask);
radv_meta_push_descriptor_set(