From: Chia-I Wu Date: Fri, 21 Apr 2023 05:32:52 +0000 (-0700) Subject: vulkan: add vk_image_format_to_ahb_format X-Git-Tag: upstream/23.3.3~8824 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=47b37651f807372b6ca20f4dad091695eb14c172;p=platform%2Fupstream%2Fmesa.git vulkan: add vk_image_format_to_ahb_format There should be no functional change. Part-of: --- diff --git a/src/amd/vulkan/radv_android.c b/src/amd/vulkan/radv_android.c index 643dbc5..53b18d4 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 b47d402..0010c2f 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 5c290b5..53b63a0 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 db9bee1..839418c 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 a47bfc7..6526396 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 ee6ef7e..c8e1f9f 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 }