radv: Only use PLANE_0 in meta when actually needed
authorJason Ekstrand <jason.ekstrand@collabora.com>
Fri, 25 Mar 2022 23:56:38 +0000 (18:56 -0500)
committerMarge Bot <emma+marge@anholt.net>
Tue, 17 May 2022 18:14:55 +0000 (18:14 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16376>

src/amd/vulkan/radv_meta_copy.c
src/amd/vulkan/radv_meta_etc_decode.c

index 08e09c2..fda0cb3 100644 (file)
@@ -460,16 +460,24 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
       }
    }
 
-   VkImageAspectFlags src_aspects[3] = {VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT,
-                                        VK_IMAGE_ASPECT_PLANE_2_BIT};
-   VkImageAspectFlags dst_aspects[3] = {VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT,
-                                        VK_IMAGE_ASPECT_PLANE_2_BIT};
-   unsigned aspect_count =
-      region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT ? src_image->plane_count : 1;
-   if (region->srcSubresource.aspectMask != VK_IMAGE_ASPECT_COLOR_BIT)
-      src_aspects[0] = region->srcSubresource.aspectMask;
-   if (region->dstSubresource.aspectMask != VK_IMAGE_ASPECT_COLOR_BIT)
-      dst_aspects[0] = region->dstSubresource.aspectMask;
+   VkImageAspectFlags src_aspects[3] = { region->srcSubresource.aspectMask };
+   VkImageAspectFlags dst_aspects[3] = { region->dstSubresource.aspectMask };
+   unsigned aspect_count = 1;
+
+   if (region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT &&
+       src_image->plane_count > 1) {
+      static const VkImageAspectFlags all_planes[3] = {
+         VK_IMAGE_ASPECT_PLANE_0_BIT,
+         VK_IMAGE_ASPECT_PLANE_1_BIT,
+         VK_IMAGE_ASPECT_PLANE_2_BIT
+      };
+
+      aspect_count = src_image->plane_count;
+      for (unsigned i = 0; i < aspect_count; i++) {
+         src_aspects[i] = all_planes[i];
+         dst_aspects[i] = all_planes[i];
+      }
+   }
 
    for (unsigned a = 0; a < aspect_count; ++a) {
       /* Create blit surfaces */
index f8d8013..c9e6ccc 100644 (file)
@@ -746,7 +746,7 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
          .format = load_format,
          .subresourceRange =
             {
-               .aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT,
+               .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
                .baseMipLevel = subresource->mipLevel,
                .levelCount = 1,
                .baseArrayLayer = 0,