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