From fabd0d82dbfb8f72318702d7263a89622b602c3e Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Mon, 26 May 2025 15:59:12 +0200 Subject: [PATCH] util/format: Auto-generate the enum pipe_format definition I've recently discovered a case where the enum entry was defined, but the description in the yaml was missing, leading to a NULL deref when we were querying the util_format_description object for this format. This autogen of the enum will also allow for more autogen, and proper classication of formats. Signed-off-by: Boris Brezillon Part-of: --- src/util/format/u_format_table.py | 124 +++++++ src/util/format/u_formats.h | 551 ------------------------------ 2 files changed, 124 insertions(+), 551 deletions(-) diff --git a/src/util/format/u_format_table.py b/src/util/format/u_format_table.py index a890eb360b9..d25fa9d3420 100644 --- a/src/util/format/u_format_table.py +++ b/src/util/format/u_format_table.py @@ -156,6 +156,128 @@ def write_format_table_header(file): print(CopyRight.strip(), file=file) print(file=file) +def write_format_enum_section(formats, type_name=None, max_formats=None): + assert(max_formats == None or len(formats) <= max_formats) + for idx, f in enumerate(formats): + # Vertex formats must be first and must be <= 255. + if idx == 0 and type_name != None: + print(' PIPE_FORMAT_%s_START,' % (type_name), file=sys.stdout3) + print(' %s = PIPE_FORMAT_%s_START,' % (f, type_name), file=sys.stdout3) + elif idx == len(formats) - 1 and type_name != None: + print(' %s,' % (f), file=sys.stdout3) + print(' PIPE_FORMAT_%s_END = %s,' % (type_name, f), file=sys.stdout3) + else: + print(' %s,' % (f), file=sys.stdout3) + +def collect_vertex_formats(formats): + vertex_formats = [] + all_comp_types = [ + 'UINT', 'SINT', 'FLOAT', 'UNORM', 'SNORM', + 'USCALED', 'SSCALED', 'FIXED' + ] + + # RxGxBxAx_ first, then we'll deal with custom formats + for bitsz in [64, 32, 16, 8]: + for comp_type in all_comp_types: + comp_suffix = '' + for comp_name in ['R', 'G', 'B', 'A']: + comp_suffix += comp_name + str(bitsz) + format_name = 'PIPE_FORMAT_' + comp_suffix + '_' + comp_type + f = formats.pop(format_name, None) + if f != None: + vertex_formats.append(f.name) + + other_comp_suffixes = { + # [A8]B8G8R8 variants + 'B8G8R8': all_comp_types, + 'B8G8R8A8': all_comp_types, + 'A8B8G8R8': ['USCALED', 'SSCALED'], + # A8R8G8B8 + 'A8R8G8B8': ['UNORM'], + # R10G10B10A2/B10G10R10A2 variants + 'R10G10B10A2': all_comp_types, + 'B10G10R10A2': all_comp_types, + # R11G11B10 variants + 'R11G11B10': ['FLOAT'], + } + for comp_suffix, comp_types in other_comp_suffixes.items(): + for comp_type in comp_types: + format_name = 'PIPE_FORMAT_' + comp_suffix + '_' + comp_type + f = formats.pop(format_name, None) + if f != None: + vertex_formats.append(f.name) + + return vertex_formats + +def collect_yuv_formats(formats): + yuv_formats = [] + for name, f in formats.items(): + if f.colorspace == 'YUV': + yuv_formats.append(f.name) + for f in yuv_formats: + formats.pop(f) + return yuv_formats + +def collect_compr_formats(formats): + compr_formats = [] + for compr_type in ['s3tc', 'rgtc', 'etc', 'bptc', 'astc', 'atc', 'fxt1']: + for cs in ['RGB', 'SRGB']: + for name, f in formats.items(): + if f.layout == compr_type and f.colorspace == cs: + compr_formats.append(f.name) + for f in compr_formats: + formats.pop(f) + return compr_formats + +def collect_zs_formats(formats): + zs_formats = [] + for name, f in formats.items(): + if f.colorspace == 'ZS': + zs_formats.append(f.name) + for f in zs_formats: + formats.pop(f) + return zs_formats + +def write_format_enum(formats): + remaining_formats = {} + for f in formats: + if f.name != 'PIPE_FORMAT_NONE': + remaining_formats[f.name] = f + + vertex_formats = collect_vertex_formats(remaining_formats) + yuv_formats = collect_yuv_formats(remaining_formats) + compr_formats = collect_compr_formats(remaining_formats) + zs_formats = collect_zs_formats(remaining_formats) + + print('/**', file=sys.stdout3) + print(' * Formats for textures, surfaces and vertex data', file=sys.stdout3) + print(' */', file=sys.stdout3) + print("enum pipe_format {", file=sys.stdout3) + print(' PIPE_FORMAT_NONE,', file=sys.stdout3) + + print(file=sys.stdout3) + print(' /* Vertex formats must be first and must be <= 255 */', file=sys.stdout3) + write_format_enum_section(vertex_formats, "VERTEX", max_formats=255) + + print(file=sys.stdout3) + print(' /* YUV formats. */', file=sys.stdout3) + write_format_enum_section(yuv_formats, "YUV") + + print(file=sys.stdout3) + print(' /* Compressed formats. */', file=sys.stdout3) + write_format_enum_section(compr_formats, "COMPR") + + print(file=sys.stdout3) + print(' /* Depth/stencil formats. */', file=sys.stdout3) + write_format_enum_section(zs_formats, "ZS") + + print(file=sys.stdout3) + print(' /* Other formats. */', file=sys.stdout3) + write_format_enum_section(remaining_formats) + + print(' PIPE_FORMAT_COUNT,', file=sys.stdout3) + print('};', file=sys.stdout3) + def write_format_aliases(formats): print("#if UTIL_ARCH_LITTLE_ENDIAN", file=sys.stdout3) for f in formats: @@ -201,6 +323,8 @@ def write_format_table(formats): print('#endif', file=sys.stdout3) print(file=sys.stdout3) + write_format_enum(formats) + print('', file=sys.stdout3) write_format_aliases(formats) print('#ifdef __cplusplus', file=sys.stdout3) diff --git a/src/util/format/u_formats.h b/src/util/format/u_formats.h index dafc8586d0c..2a075d8c084 100644 --- a/src/util/format/u_formats.h +++ b/src/util/format/u_formats.h @@ -36,557 +36,6 @@ extern "C" { #endif -/** - * Formats for textures, surfaces and vertex data - */ -enum pipe_format { - PIPE_FORMAT_NONE, - /* Vertex formats must be first and must be <= 255. */ - PIPE_FORMAT_R64_UINT, /**< raw doubles (ARB_vertex_attrib_64bit) */ - PIPE_FORMAT_R64G64_UINT, - PIPE_FORMAT_R64G64B64_UINT, - PIPE_FORMAT_R64G64B64A64_UINT, - PIPE_FORMAT_R64_SINT, - PIPE_FORMAT_R64G64_SINT, - PIPE_FORMAT_R64G64B64_SINT, - PIPE_FORMAT_R64G64B64A64_SINT, - PIPE_FORMAT_R64_FLOAT, /**< doubles converted to float */ - PIPE_FORMAT_R64G64_FLOAT, - PIPE_FORMAT_R64G64B64_FLOAT, - PIPE_FORMAT_R64G64B64A64_FLOAT, - PIPE_FORMAT_R32_FLOAT, - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R32_UNORM, - PIPE_FORMAT_R32G32_UNORM, - PIPE_FORMAT_R32G32B32_UNORM, - PIPE_FORMAT_R32G32B32A32_UNORM, - PIPE_FORMAT_R32_USCALED, - PIPE_FORMAT_R32G32_USCALED, - PIPE_FORMAT_R32G32B32_USCALED, - PIPE_FORMAT_R32G32B32A32_USCALED, - PIPE_FORMAT_R32_SNORM, - PIPE_FORMAT_R32G32_SNORM, - PIPE_FORMAT_R32G32B32_SNORM, - PIPE_FORMAT_R32G32B32A32_SNORM, - PIPE_FORMAT_R32_SSCALED, - PIPE_FORMAT_R32G32_SSCALED, - PIPE_FORMAT_R32G32B32_SSCALED, - PIPE_FORMAT_R32G32B32A32_SSCALED, - PIPE_FORMAT_R16_UNORM, - PIPE_FORMAT_R16G16_UNORM, - PIPE_FORMAT_R16G16B16_UNORM, - PIPE_FORMAT_R16G16B16A16_UNORM, - PIPE_FORMAT_R16_USCALED, - PIPE_FORMAT_R16G16_USCALED, - PIPE_FORMAT_R16G16B16_USCALED, - PIPE_FORMAT_R16G16B16A16_USCALED, - PIPE_FORMAT_R16_SNORM, - PIPE_FORMAT_R16G16_SNORM, - PIPE_FORMAT_R16G16B16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_R16_SSCALED, - PIPE_FORMAT_R16G16_SSCALED, - PIPE_FORMAT_R16G16B16_SSCALED, - PIPE_FORMAT_R16G16B16A16_SSCALED, - PIPE_FORMAT_R8_UNORM, - PIPE_FORMAT_R8G8_UNORM, - PIPE_FORMAT_R8G8B8_UNORM, - PIPE_FORMAT_B8G8R8_UNORM, - PIPE_FORMAT_R8G8B8A8_UNORM, - PIPE_FORMAT_B8G8R8A8_UNORM, - PIPE_FORMAT_R8_USCALED, - PIPE_FORMAT_R8G8_USCALED, - PIPE_FORMAT_R8G8B8_USCALED, - PIPE_FORMAT_B8G8R8_USCALED, - PIPE_FORMAT_R8G8B8A8_USCALED, - PIPE_FORMAT_B8G8R8A8_USCALED, - PIPE_FORMAT_A8B8G8R8_USCALED, - PIPE_FORMAT_R8_SNORM, - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8_SNORM, - PIPE_FORMAT_B8G8R8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - PIPE_FORMAT_B8G8R8A8_SNORM, - PIPE_FORMAT_R8_SSCALED, - PIPE_FORMAT_R8G8_SSCALED, - PIPE_FORMAT_R8G8B8_SSCALED, - PIPE_FORMAT_B8G8R8_SSCALED, - PIPE_FORMAT_R8G8B8A8_SSCALED, - PIPE_FORMAT_B8G8R8A8_SSCALED, - PIPE_FORMAT_A8B8G8R8_SSCALED, - PIPE_FORMAT_A8R8G8B8_UNORM, - PIPE_FORMAT_R32_FIXED, - PIPE_FORMAT_R32G32_FIXED, - PIPE_FORMAT_R32G32B32_FIXED, - PIPE_FORMAT_R32G32B32A32_FIXED, - PIPE_FORMAT_R16_FLOAT, - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R16G16B16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R8_UINT, - PIPE_FORMAT_R8G8_UINT, - PIPE_FORMAT_R8G8B8_UINT, - PIPE_FORMAT_B8G8R8_UINT, - PIPE_FORMAT_R8G8B8A8_UINT, - PIPE_FORMAT_B8G8R8A8_UINT, - PIPE_FORMAT_R8_SINT, - PIPE_FORMAT_R8G8_SINT, - PIPE_FORMAT_R8G8B8_SINT, - PIPE_FORMAT_B8G8R8_SINT, - PIPE_FORMAT_R8G8B8A8_SINT, - PIPE_FORMAT_B8G8R8A8_SINT, - PIPE_FORMAT_R16_UINT, - PIPE_FORMAT_R16G16_UINT, - PIPE_FORMAT_R16G16B16_UINT, - PIPE_FORMAT_R16G16B16A16_UINT, - PIPE_FORMAT_R16_SINT, - PIPE_FORMAT_R16G16_SINT, - PIPE_FORMAT_R16G16B16_SINT, - PIPE_FORMAT_R16G16B16A16_SINT, - PIPE_FORMAT_R32_UINT, - PIPE_FORMAT_R32G32_UINT, - PIPE_FORMAT_R32G32B32_UINT, - PIPE_FORMAT_R32G32B32A32_UINT, - PIPE_FORMAT_R32_SINT, - PIPE_FORMAT_R32G32_SINT, - PIPE_FORMAT_R32G32B32_SINT, - PIPE_FORMAT_R32G32B32A32_SINT, - - PIPE_FORMAT_R10G10B10A2_UNORM, - PIPE_FORMAT_R10G10B10A2_SNORM, - PIPE_FORMAT_R10G10B10A2_USCALED, - PIPE_FORMAT_R10G10B10A2_SSCALED, - - PIPE_FORMAT_B10G10R10A2_UNORM, - PIPE_FORMAT_B10G10R10A2_SNORM, - PIPE_FORMAT_B10G10R10A2_USCALED, - PIPE_FORMAT_B10G10R10A2_SSCALED, - - PIPE_FORMAT_R11G11B10_FLOAT, - - PIPE_FORMAT_R10G10B10A2_UINT, - PIPE_FORMAT_R10G10B10A2_SINT, - - PIPE_FORMAT_B10G10R10A2_UINT, - PIPE_FORMAT_B10G10R10A2_SINT, - - /* End of vertex formats. */ - - /* Texture-only formats are below. */ - PIPE_FORMAT_B8G8R8X8_UNORM, - PIPE_FORMAT_X8B8G8R8_UNORM, - PIPE_FORMAT_X8R8G8B8_UNORM, - PIPE_FORMAT_B5G5R5A1_UNORM, - PIPE_FORMAT_R4G4B4A4_UNORM, - PIPE_FORMAT_B4G4R4A4_UNORM, - PIPE_FORMAT_R5G6B5_UNORM, - PIPE_FORMAT_B5G6R5_UNORM, - PIPE_FORMAT_L8_UNORM, /**< ubyte luminance */ - PIPE_FORMAT_A8_UNORM, /**< ubyte alpha */ - PIPE_FORMAT_I8_UNORM, /**< ubyte intensity */ - PIPE_FORMAT_L8A8_UNORM, /**< ubyte alpha, luminance */ - PIPE_FORMAT_L16_UNORM, /**< ushort luminance */ - PIPE_FORMAT_UYVY, - PIPE_FORMAT_VYUY, - PIPE_FORMAT_YUYV, - PIPE_FORMAT_YVYU, - PIPE_FORMAT_Z16_UNORM, - PIPE_FORMAT_Z16_UNORM_S8_UINT, - PIPE_FORMAT_Z32_UNORM, - PIPE_FORMAT_Z32_FLOAT, - PIPE_FORMAT_Z24_UNORM_S8_UINT, - PIPE_FORMAT_S8_UINT_Z24_UNORM, - PIPE_FORMAT_Z24X8_UNORM, - PIPE_FORMAT_X8Z24_UNORM, - PIPE_FORMAT_S8_UINT, /**< ubyte stencil */ - - /* sRGB formats */ - PIPE_FORMAT_L8_SRGB, - PIPE_FORMAT_R8_SRGB, - PIPE_FORMAT_L8A8_SRGB, - PIPE_FORMAT_R8G8_SRGB, - PIPE_FORMAT_R8G8B8_SRGB, - PIPE_FORMAT_B8G8R8_SRGB, - PIPE_FORMAT_A8B8G8R8_SRGB, - PIPE_FORMAT_X8B8G8R8_SRGB, - PIPE_FORMAT_B8G8R8A8_SRGB, - PIPE_FORMAT_B8G8R8X8_SRGB, - PIPE_FORMAT_A8R8G8B8_SRGB, - PIPE_FORMAT_X8R8G8B8_SRGB, - PIPE_FORMAT_R8G8B8A8_SRGB, - - /* compressed formats */ - PIPE_FORMAT_DXT1_RGB, - PIPE_FORMAT_DXT1_RGBA, - PIPE_FORMAT_DXT3_RGBA, - PIPE_FORMAT_DXT5_RGBA, - - /* sRGB, compressed */ - PIPE_FORMAT_DXT1_SRGB, - PIPE_FORMAT_DXT1_SRGBA, - PIPE_FORMAT_DXT3_SRGBA, - PIPE_FORMAT_DXT5_SRGBA, - - /* rgtc compressed */ - PIPE_FORMAT_RGTC1_UNORM, - PIPE_FORMAT_RGTC1_SNORM, - PIPE_FORMAT_RGTC2_UNORM, - PIPE_FORMAT_RGTC2_SNORM, - - PIPE_FORMAT_R8G8_B8G8_UNORM, - PIPE_FORMAT_G8R8_G8B8_UNORM, - PIPE_FORMAT_X6G10_X6B10X6R10_420_UNORM, - PIPE_FORMAT_X4G12_X4B12X4R12_420_UNORM, - - PIPE_FORMAT_X6R10_UNORM, - PIPE_FORMAT_X6R10X6G10_UNORM, - - PIPE_FORMAT_X4R12_UNORM, - PIPE_FORMAT_X4R12X4G12_UNORM, - - /* mixed formats */ - PIPE_FORMAT_R8SG8SB8UX8U_NORM, - PIPE_FORMAT_R5SG5SB6U_NORM, - - /* TODO: re-order these */ - PIPE_FORMAT_A8B8G8R8_UNORM, - PIPE_FORMAT_B5G5R5X1_UNORM, - PIPE_FORMAT_R9G9B9E5_FLOAT, - PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, - PIPE_FORMAT_R1_UNORM, - PIPE_FORMAT_R10G10B10X2_USCALED, - PIPE_FORMAT_R10G10B10X2_SNORM, - PIPE_FORMAT_L4A4_UNORM, - PIPE_FORMAT_A2R10G10B10_UNORM, - PIPE_FORMAT_A2B10G10R10_UNORM, - PIPE_FORMAT_R10SG10SB10SA2U_NORM, - PIPE_FORMAT_R8G8Bx_SNORM, - PIPE_FORMAT_R8G8B8X8_UNORM, - PIPE_FORMAT_B4G4R4X4_UNORM, - - /* some stencil samplers formats */ - PIPE_FORMAT_X24S8_UINT, - PIPE_FORMAT_S8X24_UINT, - PIPE_FORMAT_X32_S8X24_UINT, - - PIPE_FORMAT_R3G3B2_UNORM, - PIPE_FORMAT_B2G3R3_UNORM, - PIPE_FORMAT_L16A16_UNORM, - PIPE_FORMAT_A16_UNORM, - PIPE_FORMAT_I16_UNORM, - - PIPE_FORMAT_LATC1_UNORM, - PIPE_FORMAT_LATC1_SNORM, - PIPE_FORMAT_LATC2_UNORM, - PIPE_FORMAT_LATC2_SNORM, - - PIPE_FORMAT_A8_SNORM, - PIPE_FORMAT_L8_SNORM, - PIPE_FORMAT_L8A8_SNORM, - PIPE_FORMAT_I8_SNORM, - PIPE_FORMAT_A16_SNORM, - PIPE_FORMAT_L16_SNORM, - PIPE_FORMAT_L16A16_SNORM, - PIPE_FORMAT_I16_SNORM, - - PIPE_FORMAT_A16_FLOAT, - PIPE_FORMAT_L16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_I16_FLOAT, - PIPE_FORMAT_A32_FLOAT, - PIPE_FORMAT_L32_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_I32_FLOAT, - - PIPE_FORMAT_YV12, - PIPE_FORMAT_YV16, - PIPE_FORMAT_IYUV, /**< aka I420 */ - PIPE_FORMAT_NV12, - PIPE_FORMAT_NV21, - PIPE_FORMAT_NV16, - PIPE_FORMAT_NV15, - PIPE_FORMAT_NV20, - - PIPE_FORMAT_Y8_400_UNORM, - /* PIPE_FORMAT_Y8_U8_V8_420_UNORM = IYUV */ - /* PIPE_FORMAT_Y8_U8V8_420_UNORM = NV12 */ - PIPE_FORMAT_Y8_U8_V8_422_UNORM, - /*PIPE_FORMAT_Y8_U8V8_422_UNORM = NV16 */ - PIPE_FORMAT_Y8_U8_V8_444_UNORM, - PIPE_FORMAT_Y8_U8_V8_440_UNORM, - - PIPE_FORMAT_Y10X6_U10X6_V10X6_420_UNORM, - PIPE_FORMAT_Y10X6_U10X6_V10X6_422_UNORM, - PIPE_FORMAT_Y10X6_U10X6_V10X6_444_UNORM, - PIPE_FORMAT_Y12X4_U12X4_V12X4_420_UNORM, - PIPE_FORMAT_Y12X4_U12X4_V12X4_422_UNORM, - PIPE_FORMAT_Y12X4_U12X4_V12X4_444_UNORM, - - PIPE_FORMAT_Y16_U16_V16_420_UNORM, - /* PIPE_FORMAT_Y16_U16V16_420_UNORM */ - PIPE_FORMAT_Y16_U16_V16_422_UNORM, - PIPE_FORMAT_Y16_U16V16_422_UNORM, - PIPE_FORMAT_Y16_U16_V16_444_UNORM, - - /* These formats have a single plane in a hardware-specific internal - * layout. */ - PIPE_FORMAT_Y8U8V8_420_UNORM_PACKED, - PIPE_FORMAT_Y10U10V10_420_UNORM_PACKED, - - PIPE_FORMAT_A4R4_UNORM, - PIPE_FORMAT_R4A4_UNORM, - PIPE_FORMAT_R8A8_UNORM, - PIPE_FORMAT_A8R8_UNORM, - - PIPE_FORMAT_A8_UINT, - PIPE_FORMAT_I8_UINT, - PIPE_FORMAT_L8_UINT, - PIPE_FORMAT_L8A8_UINT, - - PIPE_FORMAT_A8_SINT, - PIPE_FORMAT_I8_SINT, - PIPE_FORMAT_L8_SINT, - PIPE_FORMAT_L8A8_SINT, - - PIPE_FORMAT_A16_UINT, - PIPE_FORMAT_I16_UINT, - PIPE_FORMAT_L16_UINT, - PIPE_FORMAT_L16A16_UINT, - - PIPE_FORMAT_A16_SINT, - PIPE_FORMAT_I16_SINT, - PIPE_FORMAT_L16_SINT, - PIPE_FORMAT_L16A16_SINT, - - PIPE_FORMAT_A32_UINT, - PIPE_FORMAT_I32_UINT, - PIPE_FORMAT_L32_UINT, - PIPE_FORMAT_L32A32_UINT, - - PIPE_FORMAT_A32_SINT, - PIPE_FORMAT_I32_SINT, - PIPE_FORMAT_L32_SINT, - PIPE_FORMAT_L32A32_SINT, - - PIPE_FORMAT_A8R8G8B8_UINT, - PIPE_FORMAT_A8B8G8R8_UINT, - PIPE_FORMAT_A2R10G10B10_UINT, - PIPE_FORMAT_A2B10G10R10_UINT, - PIPE_FORMAT_R5G6B5_UINT, - PIPE_FORMAT_B5G6R5_UINT, - PIPE_FORMAT_R5G5B5A1_UINT, - PIPE_FORMAT_B5G5R5A1_UINT, - PIPE_FORMAT_A1R5G5B5_UINT, - PIPE_FORMAT_A1B5G5R5_UINT, - PIPE_FORMAT_R4G4B4A4_UINT, - PIPE_FORMAT_B4G4R4A4_UINT, - PIPE_FORMAT_A4R4G4B4_UINT, - PIPE_FORMAT_A4B4G4R4_UINT, - PIPE_FORMAT_R3G3B2_UINT, - PIPE_FORMAT_B2G3R3_UINT, - - PIPE_FORMAT_ETC1_RGB8, - - PIPE_FORMAT_R8G8_R8B8_UNORM, - PIPE_FORMAT_R8B8_R8G8_UNORM, - PIPE_FORMAT_G8R8_B8R8_UNORM, - PIPE_FORMAT_B8R8_G8R8_UNORM, - PIPE_FORMAT_G8B8_G8R8_UNORM, - PIPE_FORMAT_B8G8_R8G8_UNORM, - - PIPE_FORMAT_R8G8B8X8_SNORM, - PIPE_FORMAT_R8G8B8X8_SRGB, - PIPE_FORMAT_R8G8B8X8_UINT, - PIPE_FORMAT_R8G8B8X8_SINT, - PIPE_FORMAT_B10G10R10X2_UNORM, - PIPE_FORMAT_R16G16B16X16_UNORM, - PIPE_FORMAT_R16G16B16X16_SNORM, - PIPE_FORMAT_R16G16B16X16_FLOAT, - PIPE_FORMAT_R16G16B16X16_UINT, - PIPE_FORMAT_R16G16B16X16_SINT, - PIPE_FORMAT_R32G32B32X32_FLOAT, - PIPE_FORMAT_R32G32B32X32_UINT, - PIPE_FORMAT_R32G32B32X32_SINT, - - PIPE_FORMAT_R8A8_SNORM, - PIPE_FORMAT_R16A16_UNORM, - PIPE_FORMAT_R16A16_SNORM, - PIPE_FORMAT_R16A16_FLOAT, - PIPE_FORMAT_R32A32_FLOAT, - PIPE_FORMAT_R8A8_UINT, - PIPE_FORMAT_R8A8_SINT, - PIPE_FORMAT_R16A16_UINT, - PIPE_FORMAT_R16A16_SINT, - PIPE_FORMAT_R32A32_UINT, - PIPE_FORMAT_R32A32_SINT, - - PIPE_FORMAT_B5G6R5_SRGB, - - PIPE_FORMAT_BPTC_RGBA_UNORM, - PIPE_FORMAT_BPTC_SRGBA, - PIPE_FORMAT_BPTC_RGB_FLOAT, - PIPE_FORMAT_BPTC_RGB_UFLOAT, - - PIPE_FORMAT_G8R8_UNORM, - PIPE_FORMAT_G8R8_SNORM, - PIPE_FORMAT_G16R16_UNORM, - PIPE_FORMAT_G16R16_SNORM, - - PIPE_FORMAT_A8B8G8R8_SNORM, - PIPE_FORMAT_X8B8G8R8_SNORM, - - PIPE_FORMAT_ETC2_RGB8, - PIPE_FORMAT_ETC2_SRGB8, - PIPE_FORMAT_ETC2_RGB8A1, - PIPE_FORMAT_ETC2_SRGB8A1, - PIPE_FORMAT_ETC2_RGBA8, - PIPE_FORMAT_ETC2_SRGBA8, - PIPE_FORMAT_ETC2_R11_UNORM, - PIPE_FORMAT_ETC2_R11_SNORM, - PIPE_FORMAT_ETC2_RG11_UNORM, - PIPE_FORMAT_ETC2_RG11_SNORM, - - PIPE_FORMAT_ASTC_4x4, - PIPE_FORMAT_ASTC_5x4, - PIPE_FORMAT_ASTC_5x5, - PIPE_FORMAT_ASTC_6x5, - PIPE_FORMAT_ASTC_6x6, - PIPE_FORMAT_ASTC_8x5, - PIPE_FORMAT_ASTC_8x6, - PIPE_FORMAT_ASTC_8x8, - PIPE_FORMAT_ASTC_10x5, - PIPE_FORMAT_ASTC_10x6, - PIPE_FORMAT_ASTC_10x8, - PIPE_FORMAT_ASTC_10x10, - PIPE_FORMAT_ASTC_12x10, - PIPE_FORMAT_ASTC_12x12, - - PIPE_FORMAT_ASTC_4x4_SRGB, - PIPE_FORMAT_ASTC_5x4_SRGB, - PIPE_FORMAT_ASTC_5x5_SRGB, - PIPE_FORMAT_ASTC_6x5_SRGB, - PIPE_FORMAT_ASTC_6x6_SRGB, - PIPE_FORMAT_ASTC_8x5_SRGB, - PIPE_FORMAT_ASTC_8x6_SRGB, - PIPE_FORMAT_ASTC_8x8_SRGB, - PIPE_FORMAT_ASTC_10x5_SRGB, - PIPE_FORMAT_ASTC_10x6_SRGB, - PIPE_FORMAT_ASTC_10x8_SRGB, - PIPE_FORMAT_ASTC_10x10_SRGB, - PIPE_FORMAT_ASTC_12x10_SRGB, - PIPE_FORMAT_ASTC_12x12_SRGB, - - PIPE_FORMAT_ASTC_3x3x3, - PIPE_FORMAT_ASTC_4x3x3, - PIPE_FORMAT_ASTC_4x4x3, - PIPE_FORMAT_ASTC_4x4x4, - PIPE_FORMAT_ASTC_5x4x4, - PIPE_FORMAT_ASTC_5x5x4, - PIPE_FORMAT_ASTC_5x5x5, - PIPE_FORMAT_ASTC_6x5x5, - PIPE_FORMAT_ASTC_6x6x5, - PIPE_FORMAT_ASTC_6x6x6, - - PIPE_FORMAT_ASTC_3x3x3_SRGB, - PIPE_FORMAT_ASTC_4x3x3_SRGB, - PIPE_FORMAT_ASTC_4x4x3_SRGB, - PIPE_FORMAT_ASTC_4x4x4_SRGB, - PIPE_FORMAT_ASTC_5x4x4_SRGB, - PIPE_FORMAT_ASTC_5x5x4_SRGB, - PIPE_FORMAT_ASTC_5x5x5_SRGB, - PIPE_FORMAT_ASTC_6x5x5_SRGB, - PIPE_FORMAT_ASTC_6x6x5_SRGB, - PIPE_FORMAT_ASTC_6x6x6_SRGB, - - PIPE_FORMAT_ASTC_4x4_FLOAT, - PIPE_FORMAT_ASTC_5x4_FLOAT, - PIPE_FORMAT_ASTC_5x5_FLOAT, - PIPE_FORMAT_ASTC_6x5_FLOAT, - PIPE_FORMAT_ASTC_6x6_FLOAT, - PIPE_FORMAT_ASTC_8x5_FLOAT, - PIPE_FORMAT_ASTC_8x6_FLOAT, - PIPE_FORMAT_ASTC_8x8_FLOAT, - PIPE_FORMAT_ASTC_10x5_FLOAT, - PIPE_FORMAT_ASTC_10x6_FLOAT, - PIPE_FORMAT_ASTC_10x8_FLOAT, - PIPE_FORMAT_ASTC_10x10_FLOAT, - PIPE_FORMAT_ASTC_12x10_FLOAT, - PIPE_FORMAT_ASTC_12x12_FLOAT, - - PIPE_FORMAT_FXT1_RGB, - PIPE_FORMAT_FXT1_RGBA, - - PIPE_FORMAT_P010, - PIPE_FORMAT_P012, - PIPE_FORMAT_P016, - PIPE_FORMAT_P030, - - PIPE_FORMAT_Y210, - PIPE_FORMAT_Y212, - PIPE_FORMAT_Y216, - - PIPE_FORMAT_Y410, - PIPE_FORMAT_Y412, - PIPE_FORMAT_Y416, - - PIPE_FORMAT_R10G10B10X2_UNORM, - PIPE_FORMAT_A1R5G5B5_UNORM, - PIPE_FORMAT_A1B5G5R5_UNORM, - PIPE_FORMAT_X1B5G5R5_UNORM, - PIPE_FORMAT_R5G5B5A1_UNORM, - PIPE_FORMAT_A4R4G4B4_UNORM, - PIPE_FORMAT_A4B4G4R4_UNORM, - - PIPE_FORMAT_G8R8_SINT, - PIPE_FORMAT_A8B8G8R8_SINT, - PIPE_FORMAT_X8B8G8R8_SINT, - - PIPE_FORMAT_ATC_RGB, - PIPE_FORMAT_ATC_RGBA_EXPLICIT, - PIPE_FORMAT_ATC_RGBA_INTERPOLATED, - - PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8, - - PIPE_FORMAT_AYUV, - PIPE_FORMAT_XYUV, - - PIPE_FORMAT_R8G8B8_420_UNORM_PACKED, - PIPE_FORMAT_R8_G8B8_420_UNORM, - PIPE_FORMAT_R8_B8G8_420_UNORM, - PIPE_FORMAT_G8_B8R8_420_UNORM, - PIPE_FORMAT_R10G10B10_420_UNORM_PACKED, - PIPE_FORMAT_R10_G10B10_420_UNORM, - PIPE_FORMAT_R10_G10B10_422_UNORM, - PIPE_FORMAT_R8_G8_B8_420_UNORM, - PIPE_FORMAT_R8_B8_G8_420_UNORM, - PIPE_FORMAT_G8_B8_R8_420_UNORM, - PIPE_FORMAT_R8_G8B8_422_UNORM, - PIPE_FORMAT_R8_B8G8_422_UNORM, - PIPE_FORMAT_G8_B8R8_422_UNORM, - PIPE_FORMAT_R8_G8_B8_UNORM, - PIPE_FORMAT_Y8_UNORM, - - PIPE_FORMAT_B8G8R8X8_SNORM, - PIPE_FORMAT_B8G8R8X8_UINT, - PIPE_FORMAT_B8G8R8X8_SINT, - PIPE_FORMAT_A8R8G8B8_SNORM, - PIPE_FORMAT_A8R8G8B8_SINT, - PIPE_FORMAT_X8R8G8B8_SNORM, - PIPE_FORMAT_X8R8G8B8_SINT, - PIPE_FORMAT_R5G5B5X1_UNORM, - PIPE_FORMAT_X1R5G5B5_UNORM, - PIPE_FORMAT_R4G4B4X4_UNORM, - PIPE_FORMAT_B10G10R10X2_SNORM, - PIPE_FORMAT_R5G6B5_SRGB, - PIPE_FORMAT_R10G10B10X2_SINT, - PIPE_FORMAT_B10G10R10X2_SINT, - PIPE_FORMAT_G16R16_SINT, - - PIPE_FORMAT_COUNT -}; - enum pipe_video_chroma_format { PIPE_VIDEO_CHROMA_FORMAT_400,