From a3f2ffcc0208ffc1c34db415563426813e164770 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 28 Sep 2021 16:05:31 -0700 Subject: [PATCH] venus: copy VkPhysicalDeviceImageDrmFormatModifierInfoEXT We should not drop VkPhysicalDeviceImageDrmFormatModifierInfoEXT when it is provided. Fixes dEQP-VK.drm_format_modifiers.export_import.*. Fixes: efa185ed5cd ("venus: rework external memory capability queries") Signed-off-by: Chia-I Wu Reviewed-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_physical_device.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index a9723e2..14af5bc 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -2096,14 +2096,14 @@ vn_physical_device_fix_image_format_info( local_info->format = *info; VkBaseOutStructure *dst = (void *)&local_info->format; - bool use_modifier = false; + bool is_ahb = false; /* we should generate deep copy functions... */ vk_foreach_struct_const(src, info->pNext) { void *pnext = NULL; switch (src->sType) { case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO: memcpy(&local_info->external, src, sizeof(local_info->external)); - use_modifier = + is_ahb = local_info->external.handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID; local_info->external.handleType = @@ -2119,6 +2119,10 @@ vn_physical_device_fix_image_format_info( sizeof(local_info->stencil_usage)); pnext = &local_info->stencil_usage; break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: + memcpy(&local_info->modifier, src, sizeof(local_info->modifier)); + pnext = &local_info->modifier; + break; default: break; } @@ -2129,14 +2133,19 @@ vn_physical_device_fix_image_format_info( } } - if (use_modifier) { + if (is_ahb) { + assert(local_info->format.tiling != + VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT); local_info->format.tiling = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT; if (!vn_android_get_drm_format_modifier_info(&local_info->format, &local_info->modifier)) return NULL; + + dst->pNext = (void *)&local_info->modifier; + dst = dst->pNext; } - dst->pNext = use_modifier ? (void *)&local_info->modifier : NULL; + dst->pNext = NULL; return &local_info->format; } -- 2.7.4