diff --git a/src/vulkan/runtime/vk_meta_blit_resolve.c b/src/vulkan/runtime/vk_meta_blit_resolve.c index 4616931b0b2..fa264eb26e0 100644 --- a/src/vulkan/runtime/vk_meta_blit_resolve.c +++ b/src/vulkan/runtime/vk_meta_blit_resolve.c @@ -771,12 +771,24 @@ vk_meta_blit_image(struct vk_command_buffer *cmd, uint32_t dst_layer_count; if (src_image->image_type == VK_IMAGE_TYPE_3D) { + /* We need to fixup to handle the 3D-->2D Array case */ + unsigned dst_z_or_layer_offsets[] = { + regions[r].dstOffsets[0].z, + regions[r].dstOffsets[1].z + }; + + if (dst_image->image_type != VK_IMAGE_TYPE_3D) { + /* baseArrayLayer applied outside so we just need the count */ + dst_z_or_layer_offsets[0] = 0; + dst_z_or_layer_offsets[1] = dst_subres.layerCount; + } + uint32_t layer0, layer1; compute_off_scale(src_extent.depth, regions[r].srcOffsets[0].z, regions[r].srcOffsets[1].z, - regions[r].dstOffsets[0].z, - regions[r].dstOffsets[1].z, + dst_z_or_layer_offsets[0], + dst_z_or_layer_offsets[1], &layer0, &layer1, &push.z_off, &push.z_scale); dst_rect.layer = layer0;