anv: fix up blit src for emulated formats
authorChia-I Wu <olvaffe@gmail.com>
Thu, 28 Sep 2023 18:20:31 +0000 (11:20 -0700)
committerMarge Bot <emma+marge@anholt.net>
Sat, 14 Oct 2023 02:36:40 +0000 (02:36 +0000)
When the blit src has an emulated format, redirect to the hidden plane.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25467>

src/intel/vulkan/anv_blorp.c

index e1d6e98..1440c13 100644 (file)
@@ -745,8 +745,23 @@ blit_image(struct anv_cmd_buffer *cmd_buffer,
                                    VK_IMAGE_USAGE_TRANSFER_DST_BIT,
                                    dst_image_layout, ISL_AUX_USAGE_NONE, &dst);
 
+      VkFormat src_vk_format = src_image->vk.format;
+
+      if (src_image->emu_plane_format != VK_FORMAT_UNDEFINED) {
+         /* redirect src to the hidden plane */
+         const uint32_t plane = src_image->n_planes;
+         const struct anv_surface *surface =
+            &src_image->planes[plane].primary_surface;
+         const struct anv_address address =
+            anv_image_address(src_image, &surface->memory_range);
+         src.surf = &surface->isl,
+         src.addr.offset = address.offset;
+
+         src_vk_format = src_image->emu_plane_format;
+      }
+
       struct anv_format_plane src_format =
-         anv_get_format_aspect(cmd_buffer->device->info, src_image->vk.format,
+         anv_get_format_aspect(cmd_buffer->device->info, src_vk_format,
                                1U << aspect_bit, src_image->vk.tiling);
       struct anv_format_plane dst_format =
          anv_get_format_aspect(cmd_buffer->device->info, dst_image->vk.format,