diff options
author | Andres Rodriguez <[email protected]> | 2017-01-27 00:03:07 -0500 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2017-01-30 08:44:07 +0100 |
commit | 7b890a36dfec3cc2249d61f7eb57bba637b3debb (patch) | |
tree | abcad16f7763b85d4342dfea431d6484c97110fb | |
parent | 4eae3597eb390171f165d2bb62c2d48cc0b18a7d (diff) |
radv: Fix vkCmdCopyImage for 2d slices into 3d Images
Previously the z offset of the destination image was being ignored. It
should be taken into account when copying into a 3d target.
Also, img_extent_el.depth was being incorrectly clamped to 1 due to the
source image being VK_IMAGE_TYPE_2D. This would result in the blit
failing to iterate over all the 3d slices. Instead we clamp to the
destination image type.
Fixes failures in CTS tests:
dEQP-VK.api.copy_and_blit.image_to_image.3d_images.*
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_meta_copy.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c index 64e0ea8648f..2bd20b5ed27 100644 --- a/src/amd/vulkan/radv_meta_copy.c +++ b/src/amd/vulkan/radv_meta_copy.c @@ -369,7 +369,7 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, const VkOffset3D src_offset_el = meta_region_offset_el(src_image, &pRegions[r].srcOffset); const VkExtent3D img_extent_el = - meta_region_extent_el(src_image, &pRegions[r].extent); + meta_region_extent_el(dest_image, &pRegions[r].extent); /* Start creating blit rect */ struct radv_meta_blit2d_rect rect = { @@ -377,6 +377,9 @@ meta_copy_image(struct radv_cmd_buffer *cmd_buffer, .height = img_extent_el.height, }; + if (dest_image->type == VK_IMAGE_TYPE_3D) + b_dst.layer = dst_offset_el.z; + /* Loop through each 3D or array slice */ unsigned num_slices_3d = img_extent_el.depth; unsigned num_slices_array = pRegions[r].dstSubresource.layerCount; |