Mesa (main): venus: override aspectMask for internal tiling modifier

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 21 01:35:54 UTC 2022


Module: Mesa
Branch: main
Commit: 09cee71e80d26671d3ab6374a7a2535885c497dc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=09cee71e80d26671d3ab6374a7a2535885c497dc

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Tue Apr 19 16:50:13 2022 -0700

venus: override aspectMask for internal tiling modifier

WSI images and Android AHBs can have tiling modifier overrides, thus we
must override the aspectMask upon image subresource layout query.

Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15993>

---

 src/virtio/vulkan/vn_image.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c
index 5927eedff5e..18541d8fb2c 100644
--- a/src/virtio/vulkan/vn_image.c
+++ b/src/virtio/vulkan/vn_image.c
@@ -523,6 +523,38 @@ vn_GetImageSubresourceLayout(VkDevice device,
                              VkSubresourceLayout *pLayout)
 {
    struct vn_device *dev = vn_device_from_handle(device);
+   struct vn_image *img = vn_image_from_handle(image);
+
+   /* override aspect mask for wsi/ahb images with tiling modifier */
+   VkImageSubresource local_subresource;
+   if ((img->wsi.is_wsi && img->wsi.tiling_override ==
+                              VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) ||
+       img->deferred_info) {
+      VkImageAspectFlags aspect = pSubresource->aspectMask;
+      switch (aspect) {
+      case VK_IMAGE_ASPECT_COLOR_BIT:
+      case VK_IMAGE_ASPECT_DEPTH_BIT:
+      case VK_IMAGE_ASPECT_STENCIL_BIT:
+      case VK_IMAGE_ASPECT_PLANE_0_BIT:
+         aspect = VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT;
+         break;
+      case VK_IMAGE_ASPECT_PLANE_1_BIT:
+         aspect = VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT;
+         break;
+      case VK_IMAGE_ASPECT_PLANE_2_BIT:
+         aspect = VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT;
+         break;
+      default:
+         break;
+      }
+
+      /* only handle supported aspect override */
+      if (aspect != pSubresource->aspectMask) {
+         local_subresource = *pSubresource;
+         local_subresource.aspectMask = aspect;
+         pSubresource = &local_subresource;
+      }
+   }
 
    /* TODO local cache */
    vn_call_vkGetImageSubresourceLayout(dev->instance, device, image,



More information about the mesa-commit mailing list