From 09cee71e80d26671d3ab6374a7a2535885c497dc Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Tue, 19 Apr 2022 16:50:13 -0700 Subject: [PATCH] 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 Part-of: --- 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 5927eed..18541d8 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, -- 2.7.4