diff --git a/src/nouveau/nil/meson.build b/src/nouveau/nil/meson.build index 227f22ce92c..f4a1c26eeb2 100644 --- a/src/nouveau/nil/meson.build +++ b/src/nouveau/nil/meson.build @@ -9,6 +9,16 @@ libnil_files = files( 'nil_image_tic.c', ) +nil_format_table = custom_target( + 'nil_format_table', + input : files('nil_format_table_gen.py', 'nil_formats.csv'), + output : ['nil_format_table.h', 'nil_format_table.c'], + command : [ + prog_python, '@INPUT0@', '--csv', '@INPUT1@', + '--out-h', '@OUTPUT0@', '--out-c', '@OUTPUT1@', + ], +) + libnil_deps = [ idep_mesautil, idep_nouveau_ws, @@ -17,7 +27,7 @@ libnil_deps = [ _libnil = static_library( 'nil', - libnil_files, + [libnil_files, nil_format_table], include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium], dependencies : libnil_deps, c_args : [no_override_init_args], diff --git a/src/nouveau/nil/nil_format_table_gen.py b/src/nouveau/nil/nil_format_table_gen.py new file mode 100644 index 00000000000..429213bcf21 --- /dev/null +++ b/src/nouveau/nil/nil_format_table_gen.py @@ -0,0 +1,212 @@ +# Copyright 2024 Collabora Ltd. +# SPDX-License-Identifier: MIT + +"""Generates nil_format_table.c""" + +import argparse +import csv +import os + +from mako import template + +TEMPLATE_H = template.Template(text="""\ +/* Copyright 2024 Collabora Ltd. + * SPDX-License-Identifier: MIT + */ + +#ifndef ${guard} +#define ${guard} + +#include "nil_format.h" + +enum nil_format_support_flags { + NIL_FORMAT_SUPPORTS_TEXTURE_BIT = BITFIELD_BIT(0), + NIL_FORMAT_SUPPORTS_BUFFER_BIT = BITFIELD_BIT(1), + NIL_FORMAT_SUPPORTS_STORAGE_BIT = BITFIELD_BIT(2), + NIL_FORMAT_SUPPORTS_RENDER_BIT = BITFIELD_BIT(3), + NIL_FORMAT_SUPPORTS_ALPHA_BLEND_BIT = BITFIELD_BIT(4), + NIL_FORMAT_SUPPORTS_DEPTH_STENCIL_BIT = BITFIELD_BIT(5), + NIL_FORMAT_SUPPORTS_SCANOUT_BIT = BITFIELD_BIT(6), +}; + +struct nil_format_info { + unsigned czt:8; + unsigned support:24; + struct nil_tic_format tic; +}; + +extern const struct nil_format_info nil_format_table[PIPE_FORMAT_COUNT]; + +#endif /* ${guard} */ +"""); + +TEMPLATE_C = template.Template(text="""\ +/* Copyright 2024 Collabora Ltd. + * SPDX-License-Identifier: MIT + */ + +/* This file is autogenerated by nil_format_table_gen.py. DO NOT EDIT! */ + +#include "nil_format_table.h" + +#include "cl9097.h" +#include "cl9097tex.h" +#include "clb097.h" +#include "clb097tex.h" + +const struct nil_format_info nil_format_table[PIPE_FORMAT_COUNT] = { +% for f in formats: + [PIPE_FORMAT_${f.pipe}] = { + .czt = ${f.czt()}, + .support = ${f.support()}, + .tic = { + .comp_sizes = ${f.tcs()}, + .type_r = ${f.type(0)}, + .type_g = ${f.type(1)}, + .type_b = ${f.type(2)}, + .type_a = ${f.type(3)}, + .src_x = ${f.src(0)}, + .src_y = ${f.src(1)}, + .src_z = ${f.src(2)}, + .src_w = ${f.src(3)}, + }, + }, +% endfor +}; +"""); + +CT_FORMAT_PREFIX = { + None : 'NV9097_SET_COLOR_TARGET_FORMAT_V_', + 'maxwell' : 'NVB097_SET_COLOR_TARGET_FORMAT_V_', + 'tk1' : 'NVB097_SET_COLOR_TARGET_FORMAT_V_', +} + +ZT_FORMAT_PREFIX = { + None : 'NV9097_SET_ZT_FORMAT_V_', + 'maxwell' : 'NVB097_SET_ZT_FORMAT_V_', + 'tk1' : 'NVB097_SET_ZT_FORMAT_V_', +} + +TCS_PREFIX = { + None : 'NV9097_TEXHEADV2_0_COMPONENT_SIZES_', + 'maxwell' : 'NVB097_TEXHEAD_BL_COMPONENTS_SIZES_', + 'tk1' : 'NVB097_TEXHEAD_BL_COMPONENTS_SIZES_', +} + +DATA_TYPES = { + 'S' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_SNORM', + 'N' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_UNORM', + 'I' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_SINT', + 'U' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_UINT', + 'F' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_FLOAT', +} + +SOURCES = { + '0' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_ZERO', + 'R' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_R', + 'G' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_G', + 'B' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_B', + 'A' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_A', + '1' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_ONE', +} + +SUPPORT_FLAGS = { + 'T' : 'NIL_FORMAT_SUPPORTS_TEXTURE_BIT', + 'B' : 'NIL_FORMAT_SUPPORTS_BUFFER_BIT', + 'S' : 'NIL_FORMAT_SUPPORTS_STORAGE_BIT', + 'C' : 'NIL_FORMAT_SUPPORTS_RENDER_BIT', + 'A' : 'NIL_FORMAT_SUPPORTS_ALPHA_BLEND_BIT', + 'Z' : 'NIL_FORMAT_SUPPORTS_DEPTH_STENCIL_BIT', + 'D' : 'NIL_FORMAT_SUPPORTS_SCANOUT_BIT', +} + +class Format(object): + def __init__(self, line): + self.pipe = line[0].strip() + self._czt = line[1].strip() + self._tcs = line[2].strip() + self._types = list(line[3].strip()) + self._srcs = list(line[4].strip()) + self._support = list(line[5].strip()) + if len(line) > 6: + self.hw = line[6].strip().lower() + else: + self.hw = None + + def czt(self): + if self._czt == 'NONE': + return CT_FORMAT_PREFIX[self.hw] + 'DISABLED' + elif 'Z' in self._support: + return ZT_FORMAT_PREFIX[self.hw] + self._czt + else: + return CT_FORMAT_PREFIX[self.hw] + self._czt + + def support(self): + return ' | '.join(SUPPORT_FLAGS[f] for f in self._support) + + def tcs(self): + return TCS_PREFIX[self.hw] + self._tcs + + def type(self, comp): + if comp < len(self._types): + return DATA_TYPES[self._types[comp]] + else: + return DATA_TYPES['U'] + + def src(self, comp): + if self._srcs[comp] == '1': + # Find any component which isn't a 0/1 and look at that + # component's data type to determine whether or not 1 is an + # integer. + for s in self._srcs: + c = 'RGBA'.find(s) + if c >= 0: + if self._types[c] in 'SNF': + return SOURCES['1'] + '_FLOAT' + else: + return SOURCES['1'] + '_INT' + assert False, self.pipe + ': Failed to find non-constant component' + else: + c = 'RGBA'.find(self._srcs[comp]) + assert c < len(self._types), self.pipe + ': Swizzle is out of bounds' + return SOURCES[self._srcs[comp]] + +def reader(csvfile): + """Wrapper around csv.reader that skips comments and blanks.""" + # csv.reader actually reads the file one line at a time (it was designed to + # open excel generated sheets), so hold the file until all of the lines are + # read. + with open(csvfile, 'r') as f: + for line in csv.reader(f): + if line and not line[0].startswith('#'): + yield line + +def main(): + """Main function.""" + parser = argparse.ArgumentParser() + parser.add_argument('--csv', action='store', help='The CSV file to parse.') + parser.add_argument('--out-c', required=True, help='Output C file.') + parser.add_argument('--out-h', required=True, help='Output H file.') + args = parser.parse_args() + + formats = [Format(l) for l in reader(args.csv)] + + try: + with open(args.out_h, 'w', encoding='utf-8') as f: + guard = os.path.basename(args.out_h).replace('.', '_').upper() + f.write(TEMPLATE_H.render(guard=guard)) + with open(args.out_c, 'w', encoding='utf-8') as f: + f.write(TEMPLATE_C.render(formats=formats)) + + except Exception: + # In the event there's an error, this imports some helpers from mako + # to print a useful stack trace and prints it, then exits with + # status 1, if python is run with debug; otherwise it just raises + # the exception + import sys + from mako import exceptions + print(exceptions.text_error_template().render(), file=sys.stderr) + sys.exit(1) + +if __name__ == '__main__': + main() diff --git a/src/nouveau/nil/nil_formats.csv b/src/nouveau/nil/nil_formats.csv new file mode 100644 index 00000000000..64d00a394a6 --- /dev/null +++ b/src/nouveau/nil/nil_formats.csv @@ -0,0 +1,284 @@ +# Copyright 2024 Collabora Ltd. +# SPDX-License-Identifier: MIT + +# Columns: +# name: PIPE_FORMAT enum +# czt: Color/Z target format if renderable or NONE +# tcs: TIC component sizes +# type: Data type: +# S: SNORM +# N: UNORM +# I: SINT +# U: UINT +# F: FLOAT +# src: Swizzle of the form RGBAX01 +# caps: Format capabilities: +# C: Color target +# T: Texture +# Z: Depth/stencil target +# B: Bufer +# A: Alpha blend +# S: Storage +# D: Scanout +# hw: First hardware generation on which the format + +# name czt tcs type src support hw + +# BGRA display formats +B8G8R8A8_UNORM , A8R8G8B8 , A8B8G8R8 , NNNN , BGRA , CTBASD +B8G8R8X8_UNORM , X8R8G8B8 , A8B8G8R8 , NNNN , BGR1 , CTAD +B8G8R8A8_SRGB , A8RL8GL8BL8 , A8B8G8R8 , NNNN , BGRA , CTAD +B8G8R8X8_SRGB , X8RL8GL8BL8 , A8B8G8R8 , NNNN , BGR1 , CTAD +R8G8B8A8_UNORM , A8B8G8R8 , A8B8G8R8 , NNNN , RGBA , CTBSA +R8G8B8X8_UNORM , X8B8G8R8 , A8B8G8R8 , NNNN , RGB1 , CTA +R8G8B8A8_SRGB , A8BL8GL8RL8 , A8B8G8R8 , NNNN , RGBA , CTA +R8G8B8X8_SRGB , X8BL8GL8RL8 , A8B8G8R8 , NNNN , RGB1 , CTA + +# Depth/stencil formats +Z16_UNORM , Z16 , Z16 , NUUU , R001 , TZ , Maxwell +Z32_FLOAT , ZF32 , ZF32 , FUUU , R001 , TZ +Z24X8_UNORM , X8Z24 , X8Z24 , NUUU , R001 , TZ +X8Z24_UNORM , Z24S8 , Z24S8 , UNUU , G001 , TZ +Z24_UNORM_S8_UINT , S8Z24 , S8Z24 , NUUU , R001 , TZ +S8_UINT_Z24_UNORM , Z24S8 , Z24S8 , UNUU , G001 , TZ +Z32_FLOAT_S8X24_UINT , ZF32_X24S8 , ZF32_X24S8 , FUUU , R001 , TZ + +# Stencil-only formats +S8_UINT , NONE , R8 , UUUU , R001 , T +X24S8_UINT , NONE , G8R24 , UUUU , G001 , T +S8X24_UINT , NONE , G24R8 , UUUU , R001 , T +X32_S8X24_UINT , NONE , R32_B24G8 , UUUU , G001 , T + +B5G6R5_UNORM , R5G6B5 , B5G6R5 , NNNN , BGR1 , CTAD +R5G6B5_UNORM , NONE , B5G6R5 , NNNN , RGB1 , T +R5G5B5A1_UNORM , NONE , A1B5G5R5 , NNNN , RGBA , T +B5G5R5A1_UNORM , A1R5G5B5 , A1B5G5R5 , NNNN , BGRA , CTAD +B5G5R5X1_UNORM , X1R5G5B5 , A1B5G5R5 , NNNN , BGR1 , CTAD +A4B4G4R4_UNORM , NONE , A4B4G4R4 , NNNN , ABGR , T +A4R4G4B4_UNORM , NONE , A4B4G4R4 , NNNN , GBAR , T +B4G4R4A4_UNORM , NONE , A4B4G4R4 , NNNN , BGRA , T +B4G4R4X4_UNORM , NONE , A4B4G4R4 , NNNN , BGR1 , T +R4G4B4A4_UNORM , NONE , A4B4G4R4 , NNNN , RGBA , T +R4G4B4X4_UNORM , NONE , A4B4G4R4 , NNNN , RGB1 , T + +R9G9B9E5_FLOAT , NONE , E5B9G9R9_SHAREDEXP, FFFF , RGB1 , T + +R10G10B10A2_UNORM , A2B10G10R10 , A2B10G10R10 , NNNN , RGBA , TCBASD +R10G10B10X2_UNORM , A2B10G10R10 , A2B10G10R10 , NNNN , RGB1 , T +B10G10R10A2_UNORM , A2R10G10B10 , A2B10G10R10 , NNNN , BGRA , CTA +B10G10R10X2_UNORM , A2R10G10B10 , A2B10G10R10 , NNNN , BGR1 , T +R10G10B10A2_SNORM , NONE , A2B10G10R10 , SSSS , RGBA , T +B10G10R10A2_SNORM , NONE , A2B10G10R10 , SSSS , BGRA , T +R10G10B10A2_UINT , AU2BU10GU10RU10 , A2B10G10R10 , UUUU , RGBA , CTBS +B10G10R10A2_UINT , NONE , A2B10G10R10 , UUUU , BGRA , TB + +R11G11B10_FLOAT , BF10GF11RF11 , BF10GF11RF11 , FFFF , RGB1 , CTBSA + +L8_UNORM , R8 , R8 , NNNN , RRR1 , CTA +L8_SRGB , NONE , R8 , NNNN , RRR1 , T +L8_SNORM , RN8 , R8 , SSSS , RRR1 , CTA +L8_SINT , RS8 , R8 , IIII , RRR1 , CT +L8_UINT , RU8 , R8 , UUUU , RRR1 , CT +L16_UNORM , R16 , R16 , NNNN , RRR1 , CTA +L16_SNORM , RN16 , R16 , SSSS , RRR1 , CTA +L16_FLOAT , RF16 , R16 , FFFF , RRR1 , CTA +L16_SINT , RS16 , R16 , IIII , RRR1 , CT +L16_UINT , RU16 , R16 , UUUU , RRR1 , CT +L32_FLOAT , RF32 , R32 , FFFF , RRR1 , CTA +L32_SINT , RS32 , R32 , IIII , RRR1 , CT +L32_UINT , RU32 , R32 , UUUU , RRR1 , CT + +I8_UNORM , R8 , R8 , NNNN , RRRR , CT +I8_SNORM , RN8 , R8 , SSSS , RRRR , CT +I8_SINT , RS8 , R8 , IIII , RRRR , CT +I8_UINT , RU8 , R8 , UUUU , RRRR , CT +I16_UNORM , R16 , R16 , NNNN , RRRR , CT +I16_SNORM , RN16 , R16 , SSSS , RRRR , CT +I16_FLOAT , RF16 , R16 , FFFF , RRRR , CT +I16_SINT , RS16 , R16 , IIII , RRRR , CT +I16_UINT , RU16 , R16 , UUUU , RRRR , CT +I32_FLOAT , RF32 , R32 , FFFF , RRRR , CT +I32_SINT , RS32 , R32 , IIII , RRRR , CT +I32_UINT , RU32 , R32 , UUUU , RRRR , CT + +A8_UNORM , A8 , R8 , NNNN , 000R , CTBSA +A8_SNORM , RN8 , R8 , SSSS , 000R , T +A8_SINT , RS8 , R8 , IIII , 000R , T +A8_UINT , RU8 , R8 , UUUU , 000R , T +A16_UNORM , R16 , R16 , NNNN , 000R , T +A16_SNORM , RN16 , R16 , SSSS , 000R , T +A16_FLOAT , AF16 , R16 , FFFF , 000R , T +A16_SINT , RS16 , R16 , IIII , 000R , T +A16_UINT , RU16 , R16 , UUUU , 000R , T +A32_FLOAT , AF32 , R32 , FFFF , 000R , T +A32_SINT , RS32 , R32 , IIII , 000R , T +A32_UINT , RU32 , R32 , UUUU , 000R , T + +L4A4_UNORM , NONE , G4R4 , NNNN , RRRG , T +L8A8_UNORM , G8R8 , G8R8 , NNNN , RRRG , T +L8A8_SNORM , GN8RN8 , G8R8 , SSSS , RRRG , T +L8A8_SRGB , NONE , G8R8 , NNNN , RRRG , T +L8A8_SINT , GS8RS8 , G8R8 , IIII , RRRG , T +L8A8_UINT , GU8RU8 , G8R8 , UUUU , RRRG , T +L16A16_UNORM , R16_G16 , R16_G16 , NNNN , RRRG , T +L16A16_SNORM , RN16_GN16 , R16_G16 , SSSS , RRRG , T +L16A16_FLOAT , RF16_GF16 , R16_G16 , FFFF , RRRG , T +L16A16_SINT , RS16_GS16 , R16_G16 , IIII , RRRG , T +L16A16_UINT , RU16_GU16 , R16_G16 , UUUU , RRRG , T +L32A32_FLOAT , RF32_GF32 , R32_G32 , FFFF , RRRG , T +L32A32_SINT , RS32_GS32 , R32_G32 , IIII , RRRG , T +L32A32_UINT , RU32_GU32 , R32_G32 , UUUU , RRRG , T + +DXT1_RGB , NONE , DXT1 , NNNN , RGB1 , T +DXT1_SRGB , NONE , DXT1 , NNNN , RGB1 , T +DXT1_RGBA , NONE , DXT1 , NNNN , RGBA , T +DXT1_SRGBA , NONE , DXT1 , NNNN , RGBA , T +DXT3_RGBA , NONE , DXT23 , NNNN , RGBA , T +DXT3_SRGBA , NONE , DXT23 , NNNN , RGBA , T +DXT5_RGBA , NONE , DXT45 , NNNN , RGBA , T +DXT5_SRGBA , NONE , DXT45 , NNNN , RGBA , T + +RGTC1_UNORM , NONE , DXN1 , NNNN , R001 , T +RGTC1_SNORM , NONE , DXN1 , SSSS , R001 , T +RGTC2_UNORM , NONE , DXN2 , NNNN , RG01 , T +RGTC2_SNORM , NONE , DXN2 , SSSS , RG01 , T +LATC1_UNORM , NONE , DXN1 , NNNN , RRR1 , T +LATC1_SNORM , NONE , DXN1 , SSSS , RRR1 , T +LATC2_UNORM , NONE , DXN2 , NNNN , RRRG , T +LATC2_SNORM , NONE , DXN2 , SSSS , RRRG , T + +BPTC_RGBA_UNORM , NONE , BC7U , NNNN , RGBA , T +BPTC_SRGBA , NONE , BC7U , NNNN , RGBA , T +BPTC_RGB_FLOAT , NONE , BC6H_SF16 , FFFF , RGB1 , T +BPTC_RGB_UFLOAT , NONE , BC6H_UF16 , FFFF , RGB1 , T + +ETC1_RGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , Maxwell +ETC2_RGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , Maxwell +ETC2_SRGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , Maxwell +ETC2_RGB8A1 , NONE , ETC2_RGB_PTA , NNNN , RGBA , T , Maxwell +ETC2_SRGB8A1 , NONE , ETC2_RGB_PTA , NNNN , RGBA , T , Maxwell +ETC2_RGBA8 , NONE , ETC2_RGBA , NNNN , RGBA , T , Maxwell +ETC2_SRGBA8 , NONE , ETC2_RGBA , NNNN , RGBA , T , Maxwell +ETC2_R11_UNORM , NONE , EAC , NNNN , R001 , T , Maxwell +ETC2_R11_SNORM , NONE , EAC , SSSS , R001 , T , Maxwell +ETC2_RG11_UNORM , NONE , EACX2 , NNNN , RG01 , T , Maxwell +ETC2_RG11_SNORM , NONE , EACX2 , SSSS , RG01 , T , Maxwell + +ASTC_4x4 , NONE , ASTC_2D_4X4 , NNNN , RGBA , T , TK1 +ASTC_5x4 , NONE , ASTC_2D_5X4 , NNNN , RGBA , T , TK1 +ASTC_5x5 , NONE , ASTC_2D_5X5 , NNNN , RGBA , T , TK1 +ASTC_6x5 , NONE , ASTC_2D_6X5 , NNNN , RGBA , T , TK1 +ASTC_6x6 , NONE , ASTC_2D_6X6 , NNNN , RGBA , T , TK1 +ASTC_8x5 , NONE , ASTC_2D_8X5 , NNNN , RGBA , T , TK1 +ASTC_8x6 , NONE , ASTC_2D_8X6 , NNNN , RGBA , T , TK1 +ASTC_8x8 , NONE , ASTC_2D_8X8 , NNNN , RGBA , T , TK1 +ASTC_10x5 , NONE , ASTC_2D_10X5 , NNNN , RGBA , T , TK1 +ASTC_10x6 , NONE , ASTC_2D_10X6 , NNNN , RGBA , T , TK1 +ASTC_10x8 , NONE , ASTC_2D_10X8 , NNNN , RGBA , T , TK1 +ASTC_10x10 , NONE , ASTC_2D_10X10 , NNNN , RGBA , T , TK1 +ASTC_12x10 , NONE , ASTC_2D_12X10 , NNNN , RGBA , T , TK1 +ASTC_12x12 , NONE , ASTC_2D_12X12 , NNNN , RGBA , T , TK1 + +ASTC_4x4_SRGB , NONE , ASTC_2D_4X4 , NNNN , RGBA , T , TK1 +ASTC_5x4_SRGB , NONE , ASTC_2D_5X4 , NNNN , RGBA , T , TK1 +ASTC_5x5_SRGB , NONE , ASTC_2D_5X5 , NNNN , RGBA , T , TK1 +ASTC_6x5_SRGB , NONE , ASTC_2D_6X5 , NNNN , RGBA , T , TK1 +ASTC_6x6_SRGB , NONE , ASTC_2D_6X6 , NNNN , RGBA , T , TK1 +ASTC_8x5_SRGB , NONE , ASTC_2D_8X5 , NNNN , RGBA , T , TK1 +ASTC_8x6_SRGB , NONE , ASTC_2D_8X6 , NNNN , RGBA , T , TK1 +ASTC_8x8_SRGB , NONE , ASTC_2D_8X8 , NNNN , RGBA , T , TK1 +ASTC_10x5_SRGB , NONE , ASTC_2D_10X5 , NNNN , RGBA , T , TK1 +ASTC_10x6_SRGB , NONE , ASTC_2D_10X6 , NNNN , RGBA , T , TK1 +ASTC_10x8_SRGB , NONE , ASTC_2D_10X8 , NNNN , RGBA , T , TK1 +ASTC_10x10_SRGB , NONE , ASTC_2D_10X10 , NNNN , RGBA , T , TK1 +ASTC_12x10_SRGB , NONE , ASTC_2D_12X10 , NNNN , RGBA , T , TK1 +ASTC_12x12_SRGB , NONE , ASTC_2D_12X12 , NNNN , RGBA , T , TK1 + +R32G32B32A32_FLOAT , RF32_GF32_BF32_AF32 , R32_G32_B32_A32 , FFFF , RGBA , CTBSA +R32G32B32A32_UNORM , NONE , R32_G32_B32_A32 , NNNN , RGBA , T +R32G32B32A32_SNORM , NONE , R32_G32_B32_A32 , SSSS , RGBA , T +R32G32B32A32_SINT , RS32_GS32_BS32_AS32 , R32_G32_B32_A32 , IIII , RGBA , CTBS +R32G32B32A32_UINT , RU32_GU32_BU32_AU32 , R32_G32_B32_A32 , UUUU , RGBA , CTBS +R32G32B32X32_FLOAT , RF32_GF32_BF32_X32 , R32_G32_B32_A32 , FFFF , RGB1 , CTA +R32G32B32X32_SINT , RS32_GS32_BS32_X32 , R32_G32_B32_A32 , IIII , RGB1 , CT +R32G32B32X32_UINT , RU32_GU32_BU32_X32 , R32_G32_B32_A32 , UUUU , RGB1 , CT + +R32G32B32_FLOAT , NONE , R32_G32_B32 , FFFF , RGB1 , TB +R32G32B32_SINT , NONE , R32_G32_B32 , IIII , RGB1 , TB +R32G32B32_UINT , NONE , R32_G32_B32 , UUUU , RGB1 , TB + +R32G32_FLOAT , RF32_GF32 , R32_G32 , FFFF , RG01 , CTBSA +R32G32_UNORM , NONE , R32_G32 , NNNN , RG01 , T +R32G32_SNORM , NONE , R32_G32 , SSSS , RG01 , T +R32G32_SINT , RS32_GS32 , R32_G32 , IIII , RG01 , CTBS +R32G32_UINT , RU32_GU32 , R32_G32 , UUUU , RG01 , CTBS + +R32_FLOAT , RF32 , R32 , FFFF , R001 , CTBSA +R32_UNORM , NONE , R32 , NNNN , R001 , T +R32_SNORM , NONE , R32 , SSSS , R001 , T +R32_SINT , RS32 , R32 , IIII , R001 , CTBS +R32_UINT , RU32 , R32 , UUUU , R001 , CTBS + +R64_SINT , NONE , R32_G32 , IIII , RG01 , S +R64_UINT , NONE , R32_G32 , UUUU , RG01 , S + +R16G16B16A16_FLOAT , RF16_GF16_BF16_AF16 , R16_G16_B16_A16 , FFFF , RGBA , CTBSA +R16G16B16A16_UNORM , R16_G16_B16_A16 , R16_G16_B16_A16 , NNNN , RGBA , CTBSA +R16G16B16A16_SNORM , RN16_GN16_BN16_AN16 , R16_G16_B16_A16 , SSSS , RGBA , CTBSA +R16G16B16A16_SINT , RS16_GS16_BS16_AS16 , R16_G16_B16_A16 , IIII , RGBA , CTBS +R16G16B16A16_UINT , RU16_GU16_BU16_AU16 , R16_G16_B16_A16 , UUUU , RGBA , CTBS +R16G16B16X16_FLOAT , RF16_GF16_BF16_X16 , R16_G16_B16_A16 , FFFF , RGB1 , CTA +R16G16B16X16_UNORM , R16_G16_B16_A16 , R16_G16_B16_A16 , NNNN , RGB1 , T +R16G16B16X16_SNORM , RN16_GN16_BN16_AN16 , R16_G16_B16_A16 , SSSS , RGB1 , T +R16G16B16X16_SINT , RS16_GS16_BS16_AS16 , R16_G16_B16_A16 , IIII , RGB1 , CT +R16G16B16X16_UINT , RU16_GU16_BU16_AU16 , R16_G16_B16_A16 , UUUU , RGB1 , CT + +R16G16_FLOAT , RF16_GF16 , R16_G16 , FFFF , RG01 , CTBSA +R16G16_UNORM , R16_G16 , R16_G16 , NNNN , RG01 , CTBSA +R16G16_SNORM , RN16_GN16 , R16_G16 , SSSS , RG01 , CTBSA +R16G16_SINT , RS16_GS16 , R16_G16 , IIII , RG01 , CTBS +R16G16_UINT , RU16_GU16 , R16_G16 , UUUU , RG01 , CTBS + +R16_FLOAT , RF16 , R16 , FFFF , R001 , CTBSA +R16_UNORM , R16 , R16 , NNNN , R001 , CTBSA +R16_SNORM , RN16 , R16 , SSSS , R001 , CTBSA +R16_SINT , RS16 , R16 , IIII , R001 , CTBS +R16_UINT , RU16 , R16 , UUUU , R001 , CTBS + +R8G8B8A8_SNORM , AN8BN8GN8RN8 , A8B8G8R8 , SSSS , RGBA , CTBSA +R8G8B8A8_SINT , AS8BS8GS8RS8 , A8B8G8R8 , IIII , RGBA , CTBS +R8G8B8A8_UINT , AU8BU8GU8RU8 , A8B8G8R8 , UUUU , RGBA , CTBS +R8G8B8X8_SNORM , AN8BN8GN8RN8 , A8B8G8R8 , SSSS , RGB1 , T +R8G8B8X8_SINT , AS8BS8GS8RS8 , A8B8G8R8 , IIII , RGB1 , CT +R8G8B8X8_UINT , AU8BU8GU8RU8 , A8B8G8R8 , UUUU , RGB1 , CT + +R8G8_UNORM , G8R8 , G8R8 , NNNN , RG01 , CTBSA +R8G8_SNORM , GN8RN8 , G8R8 , SSSS , RG01 , CTBSA +R8G8_SINT , GS8RS8 , G8R8 , IIII , RG01 , CTBS +R8G8_UINT , GU8RU8 , G8R8 , UUUU , RG01 , CTBS + +# On Fermi+, the green component doesn't get decoding? +# R8G8_SRGB , NONE , G8R8 , NNNN , RG01 , T + +R8_UNORM , R8 , R8 , NNNN , R001 , CTBSA +R8_SNORM , RN8 , R8 , SSSS , R001 , CTBSA +R8_SINT , RS8 , R8 , IIII , R001 , CTBS +R8_UINT , RU8 , R8 , UUUU , R001 , CTBS +R8_SRGB , NONE , R8 , NNNN , R001 , T + +R8G8_B8G8_UNORM , NONE , G8B8G8R8 , NNNN , RGB1 , T +G8R8_B8R8_UNORM , NONE , G8B8G8R8 , NNNN , GRB1 , T +G8R8_G8B8_UNORM , NONE , B8G8R8G8 , NNNN , RGB1 , T +R8G8_R8B8_UNORM , NONE , B8G8R8G8 , NNNN , GRB1 , T +G8B8_G8R8_UNORM , NONE , B8G8R8G8 , NNNN , BGR1 , T +B8G8_R8G8_UNORM , NONE , G8B8G8R8 , NNNN , BGR1 , T + +R1_UNORM , NONE , R1 , NNNN , R001 , T + +R4A4_UNORM , NONE , G4R4 , NNNN , R00G , T +R8A8_UNORM , NONE , G8R8 , NNNN , R00G , T +A4R4_UNORM , NONE , G4R4 , NNNN , G00R , T +A8R8_UNORM , NONE , G8R8 , NNNN , G00R , T + +R8SG8SB8UX8U_NORM , NONE , A8B8G8R8 , SSNN , RGB1 , T +R5SG5SB6U_NORM , NONE , B6G5R5 , SSNN , RGB1 , T