[Mesa-dev] [PATCH 04/15] anv: add from/to helpers with android and vulkan formats

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Dec 11 10:56:15 UTC 2018


On 27/11/2018 10:53, Tapani Pälli wrote:
> v2: handle R8G8B8X8 as R8G8B8_UNORM (Jason)
> v3: add HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL, we make it define
>      for now to avoid direct dependency to minigbm headers
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>   src/intel/vulkan/vk_format_info.h | 50 +++++++++++++++++++++++++++++++
>   1 file changed, 50 insertions(+)
>
> diff --git a/src/intel/vulkan/vk_format_info.h b/src/intel/vulkan/vk_format_info.h
> index a1cc6952c8f..555c67704bc 100644
> --- a/src/intel/vulkan/vk_format_info.h
> +++ b/src/intel/vulkan/vk_format_info.h
> @@ -27,6 +27,56 @@
>   #include <stdbool.h>
>   #include <vulkan/vulkan.h>
>   
> +#ifdef ANDROID
> +#include <vndk/hardware_buffer.h>
> +/* See i915_private_android_types.h in minigbm. */
> +#define HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL 0x100
> +
> +static inline VkFormat
> +vk_format_from_android(unsigned android_format)
> +{
> +   switch (android_format) {
> +   case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
> +      return VK_FORMAT_R8G8B8A8_UNORM;
> +   case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
> +   case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
> +      return VK_FORMAT_R8G8B8_UNORM;


Hm... I think you could run into issue with a linear buffer 
AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM.

It seems anv will actually select R8G8B8 in that case and that probably 
won't match.


> +   case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
> +      return VK_FORMAT_R5G6B5_UNORM_PACK16;
> +   case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
> +      return VK_FORMAT_R16G16B16A16_SFLOAT;
> +   case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
> +      return VK_FORMAT_A2B10G10R10_UNORM_PACK32;


Is the android naming inconsistent or are all the other formats backwards?


> +   case HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL:
> +      return VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;
> +   case AHARDWAREBUFFER_FORMAT_BLOB:
> +   default:
> +      return VK_FORMAT_UNDEFINED;
> +   }
> +}
> +
> +static inline unsigned
> +android_format_from_vk(unsigned 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 HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL;
> +   default:
> +      return AHARDWAREBUFFER_FORMAT_BLOB;
> +   }
> +}
> +#endif
> +
>   static inline VkImageAspectFlags
>   vk_format_aspects(VkFormat format)
>   {




More information about the mesa-dev mailing list