From 47b37651f807372b6ca20f4dad091695eb14c172 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 20 Apr 2023 22:32:52 -0700 Subject: [PATCH] vulkan: add vk_image_format_to_ahb_format There should be no functional change. Part-of: --- src/amd/vulkan/radv_android.c | 12 +-------- src/intel/vulkan/anv_android.c | 12 +-------- src/intel/vulkan_hasvk/anv_android.c | 12 +-------- src/vulkan/runtime/vk_android.c | 37 ++++++++++++++++++++++++++++ src/vulkan/runtime/vk_android.h | 8 ++++++ src/vulkan/runtime/vk_image.c | 4 +-- 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/amd/vulkan/radv_android.c b/src/amd/vulkan/radv_android.c index 643dbc551fb..53b18d4b7b9 100644 --- a/src/amd/vulkan/radv_android.c +++ b/src/amd/vulkan/radv_android.c @@ -403,20 +403,10 @@ unsigned radv_ahb_format_for_vk_format(VkFormat vk_format) { switch (vk_format) { - case VK_FORMAT_R8G8B8A8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; - case VK_FORMAT_R8G8B8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM; - case VK_FORMAT_R5G6B5_UNORM_PACK16: - return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM; - case VK_FORMAT_R16G16B16A16_SFLOAT: - return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT; - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: return AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420; default: - return 0; + return vk_image_format_to_ahb_format(vk_format); } } diff --git a/src/intel/vulkan/anv_android.c b/src/intel/vulkan/anv_android.c index b47d402ecf5..0010c2ffd6f 100644 --- a/src/intel/vulkan/anv_android.c +++ b/src/intel/vulkan/anv_android.c @@ -133,16 +133,6 @@ unsigned anv_ahb_format_for_vk_format(VkFormat vk_format) { switch (vk_format) { - case VK_FORMAT_R8G8B8A8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; - case VK_FORMAT_R8G8B8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM; - case VK_FORMAT_R5G6B5_UNORM_PACK16: - return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM; - case VK_FORMAT_R16G16B16A16_SFLOAT: - return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT; - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: #ifdef HAVE_CROS_GRALLOC return AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420; @@ -150,7 +140,7 @@ anv_ahb_format_for_vk_format(VkFormat vk_format) return HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL; #endif default: - return 0; + return vk_image_format_to_ahb_format(vk_format); } } diff --git a/src/intel/vulkan_hasvk/anv_android.c b/src/intel/vulkan_hasvk/anv_android.c index 5c290b5c723..53b63a0c7ef 100644 --- a/src/intel/vulkan_hasvk/anv_android.c +++ b/src/intel/vulkan_hasvk/anv_android.c @@ -133,16 +133,6 @@ unsigned anv_ahb_format_for_vk_format(VkFormat vk_format) { switch (vk_format) { - case VK_FORMAT_R8G8B8A8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; - case VK_FORMAT_R8G8B8_UNORM: - return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM; - case VK_FORMAT_R5G6B5_UNORM_PACK16: - return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM; - case VK_FORMAT_R16G16B16A16_SFLOAT: - return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT; - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: #ifdef HAVE_CROS_GRALLOC return AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420; @@ -150,7 +140,7 @@ anv_ahb_format_for_vk_format(VkFormat vk_format) return HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL; #endif default: - return 0; + return vk_image_format_to_ahb_format(vk_format); } } diff --git a/src/vulkan/runtime/vk_android.c b/src/vulkan/runtime/vk_android.c index db9bee121bc..839418c501b 100644 --- a/src/vulkan/runtime/vk_android.c +++ b/src/vulkan/runtime/vk_android.c @@ -99,6 +99,43 @@ vk_ahb_format_to_image_format(uint32_t ahb_format) } } +/* Convert a VkFormat to an AHB format, based on the "AHardwareBuffer Format + * Equivalence" table in Vulkan spec. + * + * Note that this only covers a subset of AHB formats defined in NDK. Drivers + * can support more AHB formats, including private ones. + */ +uint32_t +vk_image_format_to_ahb_format(VkFormat vk_format) +{ + switch (vk_format) { + case VK_FORMAT_R8G8B8A8_UNORM: + return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; + case VK_FORMAT_R8G8B8_UNORM: + return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM; + case VK_FORMAT_R5G6B5_UNORM_PACK16: + return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM; + case VK_FORMAT_R16G16B16A16_SFLOAT: + return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT; + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: + return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM; + case VK_FORMAT_D16_UNORM: + return AHARDWAREBUFFER_FORMAT_D16_UNORM; + case VK_FORMAT_X8_D24_UNORM_PACK32: + return AHARDWAREBUFFER_FORMAT_D24_UNORM; + case VK_FORMAT_D24_UNORM_S8_UINT: + return AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT; + case VK_FORMAT_D32_SFLOAT: + return AHARDWAREBUFFER_FORMAT_D32_FLOAT; + case VK_FORMAT_D32_SFLOAT_S8_UINT: + return AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT; + case VK_FORMAT_S8_UINT: + return AHARDWAREBUFFER_FORMAT_S8_UINT; + default: + return 0; + } +} + /* Construct ahw usage mask from image usage bits, see * 'AHardwareBuffer Usage Equivalence' in Vulkan spec. */ diff --git a/src/vulkan/runtime/vk_android.h b/src/vulkan/runtime/vk_android.h index a47bfc790c8..65263964e7e 100644 --- a/src/vulkan/runtime/vk_android.h +++ b/src/vulkan/runtime/vk_android.h @@ -33,6 +33,8 @@ extern "C" { VkFormat vk_ahb_format_to_image_format(uint32_t ahb_format); +uint32_t vk_image_format_to_ahb_format(VkFormat vk_format); + uint64_t vk_image_usage_to_ahb_usage(const VkImageCreateFlags vk_create, const VkImageUsageFlags vk_usage); @@ -47,6 +49,12 @@ vk_ahb_format_to_image_format(uint32_t ahb_format) return VK_FORMAT_UNDEFINED; } +static inline uint32_t +vk_image_format_to_ahb_format(VkFormat vk_format) +{ + return 0; +} + static inline uint64_t vk_image_usage_to_ahb_usage(const VkImageCreateFlags vk_create, const VkImageUsageFlags vk_usage) diff --git a/src/vulkan/runtime/vk_image.c b/src/vulkan/runtime/vk_image.c index ee6ef7ec6e0..c8e1f9ffcd3 100644 --- a/src/vulkan/runtime/vk_image.c +++ b/src/vulkan/runtime/vk_image.c @@ -100,8 +100,6 @@ vk_image_init(struct vk_device *device, #endif #ifdef ANDROID - image->ahb_format = 0; - const VkExternalFormatANDROID *ext_format = vk_find_struct_const(pCreateInfo->pNext, EXTERNAL_FORMAT_ANDROID); if (ext_format && ext_format->externalFormat != 0) { @@ -110,6 +108,8 @@ vk_image_init(struct vk_device *device, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID); vk_image_set_format(image, (VkFormat)ext_format->externalFormat); } + + image->ahb_format = vk_image_format_to_ahb_format(image->format); #endif }