Mesa (main): venus: fix view format for ahb image
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 26 22:31:16 UTC 2022
Module: Mesa
Branch: main
Commit: 4f7de83110654e3c254b0ec0943ab240e0e68d27
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4f7de83110654e3c254b0ec0943ab240e0e68d27
Author: Yiwei Zhang <zzyiwei at chromium.org>
Date: Tue Apr 26 06:11:46 2022 +0000
venus: fix view format for ahb image
There's below AHB VU on the image view:
VUID-VkImageViewCreateInfo-image-02399
If image has an external format, format must be VK_FORMAT_UNDEFINED
This is well hidden and completely missed from the original venus ahb
implementation.
Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16159>
---
src/virtio/vulkan/vn_image.c | 20 +++++++++++++++++++-
src/virtio/vulkan/vn_image.h | 4 ++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/virtio/vulkan/vn_image.c b/src/virtio/vulkan/vn_image.c
index 18541d8fb2c..44b23c5d1a7 100644
--- a/src/virtio/vulkan/vn_image.c
+++ b/src/virtio/vulkan/vn_image.c
@@ -157,6 +157,12 @@ vn_image_deferred_info_init(struct vn_image *img,
memcpy(&info->stencil, src, sizeof(info->stencil));
pnext = &info->stencil;
break;
+ case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
+ /* we should have translated the external format */
+ assert(create_info->format != VK_FORMAT_UNDEFINED);
+ info->from_external_format =
+ ((const VkExternalFormatANDROID *)src)->externalFormat;
+ break;
default:
break;
}
@@ -570,9 +576,21 @@ vn_CreateImageView(VkDevice device,
VkImageView *pView)
{
struct vn_device *dev = vn_device_from_handle(device);
+ struct vn_image *img = vn_image_from_handle(pCreateInfo->image);
const VkAllocationCallbacks *alloc =
pAllocator ? pAllocator : &dev->base.base.alloc;
+ VkImageViewCreateInfo local_info;
+ if (img->deferred_info && img->deferred_info->from_external_format) {
+ assert(pCreateInfo->format == VK_FORMAT_UNDEFINED);
+
+ local_info = *pCreateInfo;
+ local_info.format = img->deferred_info->create.format;
+ pCreateInfo = &local_info;
+
+ assert(pCreateInfo->format != VK_FORMAT_UNDEFINED);
+ }
+
struct vn_image_view *view =
vk_zalloc(alloc, sizeof(*view), VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -580,7 +598,7 @@ vn_CreateImageView(VkDevice device,
return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
vn_object_base_init(&view->base, VK_OBJECT_TYPE_IMAGE_VIEW, &dev->base);
- view->image = vn_image_from_handle(pCreateInfo->image);
+ view->image = img;
VkImageView view_handle = vn_image_view_to_handle(view);
vn_async_vkCreateImageView(dev->instance, device, pCreateInfo, NULL,
diff --git a/src/virtio/vulkan/vn_image.h b/src/virtio/vulkan/vn_image.h
index 935272dc53a..59dd33728a7 100644
--- a/src/virtio/vulkan/vn_image.h
+++ b/src/virtio/vulkan/vn_image.h
@@ -28,6 +28,10 @@ struct vn_image_create_deferred_info {
VkImageFormatListCreateInfo list;
VkImageStencilUsageCreateInfo stencil;
+ /* True if VkImageCreateInfo::format is translated from a non-zero
+ * VkExternalFormatANDROID::externalFormat for the AHB image.
+ */
+ bool from_external_format;
/* track whether vn_image_init_deferred succeeds */
bool initialized;
};
More information about the mesa-commit
mailing list