From d75f797246c0eab0a51d41a8c829bd7d2d8cc2b3 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 21 Mar 2023 11:09:48 -0500 Subject: [PATCH] radv: Set vk_image.ahardware_buffer_format Reviewed-by: Lina Versace Part-of: --- src/amd/vulkan/radv_android.c | 6 +++--- src/amd/vulkan/radv_image.c | 10 ++++++---- src/amd/vulkan/radv_private.h | 2 ++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/amd/vulkan/radv_android.c b/src/amd/vulkan/radv_android.c index 23edfcf..a537cbb 100644 --- a/src/amd/vulkan/radv_android.c +++ b/src/amd/vulkan/radv_android.c @@ -411,8 +411,8 @@ vk_format_from_android(unsigned android_format, unsigned android_usage) } } -static inline unsigned -android_format_from_vk(unsigned vk_format) +unsigned +radv_ahb_format_for_vk_format(VkFormat vk_format) { switch (vk_format) { case VK_FORMAT_R8G8B8A8_UNORM: @@ -751,7 +751,7 @@ radv_create_ahb_memory(struct radv_device *device, struct radv_device_memory *me w = image->info.width; h = image->info.height; layers = image->info.array_size; - format = android_format_from_vk(image->vk.format); + format = radv_ahb_format_for_vk_format(image->vk.format); usage = vk_image_usage_to_ahb_usage(image->vk.create_flags, image->vk.usage); } else if (dedicated_info && dedicated_info->buffer) { RADV_FROM_HANDLE(radv_buffer, buffer, dedicated_info->buffer); diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index a499dd0..7715b55 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1974,11 +1974,13 @@ radv_image_create(VkDevice _device, const struct radv_image_create_info *create_ image->planes[plane].surface.modifier = modifier; } - bool delay_layout = - external_info && (external_info->handleTypes & - VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID); + if (image->vk.external_handle_types & + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) { +#ifdef ANDROID + image->vk.ahardware_buffer_format = + radv_ahb_format_for_vk_format(image->vk.format); +#endif - if (delay_layout) { *pImage = radv_image_to_handle(image); assert(!(image->vk.create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)); return VK_SUCCESS; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 6ab5b0f..fad995c 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2851,6 +2851,8 @@ VkResult radv_import_ahb_memory(struct radv_device *device, struct radv_device_m VkResult radv_create_ahb_memory(struct radv_device *device, struct radv_device_memory *mem, unsigned priority, const VkMemoryAllocateInfo *pAllocateInfo); +unsigned radv_ahb_format_for_vk_format(VkFormat vk_format); + VkFormat radv_select_android_external_format(const void *next, VkFormat default_format); bool radv_android_gralloc_supports_format(VkFormat format, VkImageUsageFlagBits usage); -- 2.7.4