vk/meta: Fix buffer -> image copy using a graphics pipeline

Unlike 3D image views, 2D array image views created by meta_copy only
contain the layers needed for rendering, so we shouldn't consider the
base layer an image offset.

Fixes: 07c6459cd8 ("vk/meta: Add copy/fill/update helpers")
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31439>
This commit is contained in:
Boris Brezillon 2024-09-25 17:23:23 +02:00 committed by Marge Bot
parent 7dc6826bc3
commit 767a7d785b

View file

@ -1193,14 +1193,6 @@ copy_buffer_image_prepare_gfx_push_const(
{
struct vk_device *dev = cmd->base.device;
const struct vk_device_dispatch_table *disp = &dev->dispatch_table;
uint32_t depth_or_layer_count =
MAX2(region->imageExtent.depth,
vk_image_subresource_layer_count(img, &region->imageSubresource));
VkImageViewType img_view_type =
vk_image_render_view_type(img, depth_or_layer_count);
VkOffset3D img_offs =
base_layer_as_offset(img_view_type, region->imageOffset,
region->imageSubresource.baseArrayLayer);
/* vk_meta_copy_buffer_image_info::image_stride is 32-bit for now.
* We might want to make it a 64-bit integer (and patch the shader code
@ -1216,9 +1208,9 @@ copy_buffer_image_prepare_gfx_push_const(
VK_WHOLE_SIZE),
},
.img.offset = {
.x = img_offs.x,
.y = img_offs.y,
.z = img_offs.z,
.x = region->imageOffset.x,
.y = region->imageOffset.y,
.z = region->imageOffset.z,
},
};