diff --git a/src/amd/vulkan/meta/radv_meta_blit2d.c b/src/amd/vulkan/meta/radv_meta_blit2d.c index ef627e9a2ac..0ff0c69f7b9 100644 --- a/src/amd/vulkan/meta/radv_meta_blit2d.c +++ b/src/amd/vulkan/meta/radv_meta_blit2d.c @@ -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); diff --git a/src/amd/vulkan/meta/radv_meta_bufimage.c b/src/amd/vulkan/meta/radv_meta_bufimage.c index dee717c5225..5190908386d 100644 --- a/src/amd/vulkan/meta/radv_meta_bufimage.c +++ b/src/amd/vulkan/meta/radv_meta_bufimage.c @@ -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(