vulkan/format: add a 10-bit video format

This adds support to the generic vulkan format code for
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
which is used for 10-bit H265.

Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com>
(Updated version acked by Lynne on irc)

v2: disable these for freedreno

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20389>
This commit is contained in:
Dave Airlie 2022-12-14 14:20:28 +10:00 committed by Marge Bot
parent 41dbeca4c2
commit 589d4ff0cb
2 changed files with 11 additions and 0 deletions

View file

@ -45,6 +45,9 @@ enum pipe_format
tu_vk_format_to_pipe_format(VkFormat vk_format)
{
switch (vk_format) {
case VK_FORMAT_R10X6_UNORM_PACK16:
case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
return PIPE_FORMAT_NONE; /* These fail some CTS tests */
case VK_FORMAT_G8B8G8R8_422_UNORM: /* YUYV */
return PIPE_FORMAT_R8G8_R8B8_UNORM;
case VK_FORMAT_B8G8R8G8_422_UNORM: /* UYVY */

View file

@ -261,6 +261,10 @@ vk_format_to_pipe_format(enum VkFormat vkformat)
{
if (vkformat >= ARRAY_SIZE(vk_format_map)) {
switch (vkformat) {
case VK_FORMAT_R10X6_UNORM_PACK16:
return PIPE_FORMAT_R16_UNORM;
case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
return PIPE_FORMAT_R16G16_UNORM;
case VK_FORMAT_G8B8G8R8_422_UNORM:
return PIPE_FORMAT_YUYV;
case VK_FORMAT_B8G8R8G8_422_UNORM:
@ -285,6 +289,8 @@ vk_format_to_pipe_format(enum VkFormat vkformat)
return PIPE_FORMAT_Y16_U16V16_422_UNORM;
case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
return PIPE_FORMAT_Y16_U16_V16_444_UNORM;
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
return PIPE_FORMAT_P010;
case VK_FORMAT_A4R4G4B4_UNORM_PACK16:
return PIPE_FORMAT_B4G4R4A4_UNORM;
case VK_FORMAT_A4B4G4R4_UNORM_PACK16:
@ -369,6 +375,8 @@ vk_format_get_plane_format(VkFormat format, unsigned plane_id)
case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
return VK_FORMAT_R16_UNORM;
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
return plane_id ? VK_FORMAT_R10X6G10X6_UNORM_2PACK16 : VK_FORMAT_R10X6_UNORM_PACK16;
case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
return plane_id ? VK_FORMAT_R16G16_UNORM : VK_FORMAT_R16_UNORM;