diff --git a/.pick_status.json b/.pick_status.json index 4d0093b376a..ef9c284c2d3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2560,7 +2560,7 @@ "description": "radv: fix copying 2D to 3D images", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/meta/radv_meta_copy.c b/src/amd/vulkan/meta/radv_meta_copy.c index 1d665531cfc..f1b64b7ff5e 100644 --- a/src/amd/vulkan/meta/radv_meta_copy.c +++ b/src/amd/vulkan/meta/radv_meta_copy.c @@ -497,19 +497,17 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, .height = img_extent_el.height, }; - if (src_image->vk.image_type == VK_IMAGE_TYPE_3D) + unsigned num_slices = region->srcSubresource.layerCount; + + if (src_image->vk.image_type == VK_IMAGE_TYPE_3D) { b_src.layer = src_offset_el.z; + num_slices = img_extent_el.depth; + } if (dst_image->vk.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 = region->dstSubresource.layerCount; - unsigned slice_3d = 0; - unsigned slice_array = 0; - while (slice_3d < num_slices_3d && slice_array < num_slices_array) { - + for (unsigned slice = 0; slice < num_slices; slice++) { /* Finish creating blit rect */ rect.dst_x = dst_offset_el.x; rect.dst_y = dst_offset_el.y; @@ -529,10 +527,6 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, b_src.layer++; b_dst.layer++; - if (dst_image->vk.image_type == VK_IMAGE_TYPE_3D) - slice_3d++; - else - slice_array++; } }