diff --git a/src/nouveau/headers/meson.build b/src/nouveau/headers/meson.build index f936f452538..7531f1c4665 100644 --- a/src/nouveau/headers/meson.build +++ b/src/nouveau/headers/meson.build @@ -27,8 +27,9 @@ nv_classes = [ 'clc6c0', 'clc797', 'clc7c0', - 'clcd97', + 'clcb97', 'clcbc0', + 'clcd97', 'clcdc0', 'clcec0', ] diff --git a/src/nouveau/nil/descriptor.rs b/src/nouveau/nil/descriptor.rs index 4c9e75a5869..4b1f3d1125f 100644 --- a/src/nouveau/nil/descriptor.rs +++ b/src/nouveau/nil/descriptor.rs @@ -15,6 +15,8 @@ use nvidia_headers::classes::clb097::MAXWELL_A; use nvidia_headers::classes::clc097::tex as clc097; use nvidia_headers::classes::clc097::PASCAL_A; use nvidia_headers::classes::clc397::VOLTA_A; +use nvidia_headers::classes::clcb97::tex as clcb97; +use nvidia_headers::classes::clcb97::HOPPER_A; use paste::paste; use std::ops::Range; @@ -146,6 +148,31 @@ fn nvb097_set_th_bl_0( th.set_field(clb097::TEXHEAD_BL_W_SOURCE, source[3]); } +fn nvcb97_set_th_bl_0<'a>( + th: &mut THBitView<'a>, + format: &Format, + swizzle: [nil_rs_bindings::pipe_swizzle; 4], +) { + let fmt = &format.info().tic; + let is_int = format.is_integer(); + let source = [ + nvb097_th_bl_source(fmt, swizzle[0], is_int), + nvb097_th_bl_source(fmt, swizzle[1], is_int), + nvb097_th_bl_source(fmt, swizzle[2], is_int), + nvb097_th_bl_source(fmt, swizzle[3], is_int), + ]; + + th.set_field(clcb97::TEXHEAD_V2_BL_COMPONENTS, fmt.comp_sizes()); + th.set_field( + clcb97::TEXHEAD_V2_BL_DATA_TYPE, + format.info().tic_v2_data_type(), + ); + th.set_field(clcb97::TEXHEAD_V2_BL_X_SOURCE, source[0]); + th.set_field(clcb97::TEXHEAD_V2_BL_Y_SOURCE, source[1]); + th.set_field(clcb97::TEXHEAD_V2_BL_Z_SOURCE, source[2]); + th.set_field(clcb97::TEXHEAD_V2_BL_W_SOURCE, source[3]); +} + fn pipe_to_nv_texture_type(ty: ViewType) -> u32 { match ty { ViewType::_1D => clb097::TEXHEAD_BL_TEXTURE_TYPE_ONE_D, @@ -518,6 +545,191 @@ fn nvb097_fill_image_view_desc( th.set_ufixed(clb097::TEXHEAD_BL_MIN_LOD_CLAMP, min_lod_clamp); } +fn nvcb97_fill_image_view_desc( + _dev: &nil_rs_bindings::nv_device_info, + image: &Image, + view: &View, + base_address: u64, + desc_out: &mut [u32; 8], +) { + assert!(image.format.el_size_B() == view.format.el_size_B()); + assert!(view.base_level + view.num_levels <= image.num_levels); + + *desc_out = [0u32; 8]; + let mut th = BitMutView::new(desc_out); + + nvcb97_set_th_bl_0(&mut th, &view.format, view.swizzle); + let tiling = &image.levels[0].tiling; + + // There's no base layer field in the texture header + let mut layer_address = base_address; + if view.view_type == ViewType::_3DSliced { + assert!(view.num_levels == 1); + assert!( + view.base_array_layer + view.array_len <= image.extent_px.depth + ); + + layer_address += + image.level_z_offset_B(view.base_level, view.base_array_layer); + } else { + assert!( + view.base_array_layer + view.array_len <= image.extent_px.array_len + ); + layer_address += + u64::from(view.base_array_layer) * u64::from(image.array_stride_B); + } + + if tiling.is_tiled() { + set_enum!( + th, + clcb97, + TEXHEAD_V2_BL_HEADER_VERSION, + SELECT_BLOCKLINEAR_V2 + ); + + let addr = BitView::new(&layer_address); + assert!(addr.get_bit_range_u64(0..9) == 0); + th.set_field( + clcb97::TEXHEAD_V2_BL_ADDRESS_BITS31TO9, + addr.get_bit_range_u64(9..32), + ); + th.set_field( + clcb97::TEXHEAD_V2_BL_ADDRESS_BITS56TO32, + addr.get_bit_range_u64(32..57), + ); + assert!(addr.get_bit_range_u64(57..64) == 0); + + set_enum!(th, clcb97, TEXHEAD_V2_BL_GOBS_PER_BLOCK_WIDTH, ONE_GOB); + th.set_field( + clcb97::TEXHEAD_V2_BL_GOBS_PER_BLOCK_HEIGHT, + tiling.y_log2, + ); + th.set_field(clcb97::TEXHEAD_V2_BL_GOBS_PER_BLOCK_DEPTH, tiling.z_log2); + th.set_field(clcb97::TEXHEAD_V2_BL_TILE_WIDTH_IN_GOBS, tiling.x_log2); + + let nv_text_type = pipe_to_nv_texture_type(view.view_type); + th.set_field(clcb97::TEXHEAD_V2_BL_TEXTURE_TYPE, nv_text_type); + + th.set_field(clcb97::TEXHEAD_V2_BL_LOD_ANISO_QUALITY2, true); + set_enum!( + th, + clcb97, + TEXHEAD_V2_BL_LOD_ANISO_QUALITY, + LOD_QUALITY_HIGH + ); + set_enum!(th, clcb97, TEXHEAD_V2_BL_LOD_ISO_QUALITY, LOD_QUALITY_HIGH); + set_enum!( + th, + clcb97, + TEXHEAD_V2_BL_ANISO_COARSE_SPREAD_MODIFIER, + SPREAD_MODIFIER_NONE + ); + } else { + set_enum!(th, clcb97, TEXHEAD_V2_BL_HEADER_VERSION, SELECT_PITCH_V2); + + let addr = BitView::new(&layer_address); + assert!(addr.get_bit_range_u64(0..5) == 0); + th.set_field( + clcb97::TEXHEAD_V2_PITCH_ADDRESS_BITS31TO5, + addr.get_bit_range_u64(5..32), + ); + th.set_field( + clcb97::TEXHEAD_V2_PITCH_ADDRESS_BITS56TO32, + addr.get_bit_range_u64(32..57), + ); + assert!(addr.get_bit_range_u64(57..64) == 0); + + let pitch = image.levels[0].row_stride_B; + let pitch = BitView::new(&pitch); + assert!(pitch.get_bit_range_u64(0..5) == 0); + assert!(pitch.get_bit_range_u64(22..32) == 0); + th.set_field( + clcb97::TEXHEAD_V2_PITCH_PITCH_BITS21TO5, + pitch.get_bit_range_u64(5..22), + ); + + assert!( + view.view_type == ViewType::_2D + || view.view_type == ViewType::_2DArray + ); + assert!(image.sample_layout == SampleLayout::_1x1); + assert!(view.num_levels == 1); + set_enum!(th, clcb97, TEXHEAD_V2_PITCH_TEXTURE_TYPE, TWO_D_NO_MIPMAP); + + th.set_field(clcb97::TEXHEAD_V2_PITCH_LOD_ANISO_QUALITY2, true); + set_enum!( + th, + clcb97, + TEXHEAD_V2_PITCH_LOD_ANISO_QUALITY, + LOD_QUALITY_HIGH + ); + set_enum!( + th, + clcb97, + TEXHEAD_V2_PITCH_LOD_ISO_QUALITY, + LOD_QUALITY_HIGH + ); + set_enum!( + th, + clcb97, + TEXHEAD_V2_PITCH_ANISO_COARSE_SPREAD_MODIFIER, + SPREAD_MODIFIER_NONE + ); + } + + let extent = normalize_extent(image, view); + th.set_field(clcb97::TEXHEAD_V2_BL_WIDTH_MINUS_ONE, extent.width - 1); + th.set_field(clcb97::TEXHEAD_V2_BL_HEIGHT_MINUS_ONE, extent.height - 1); + th.set_field(clcb97::TEXHEAD_V2_BL_DEPTH_MINUS_ONE, extent.depth - 1); + + let max_mip_level = nil_rs_max_mip_level(image, view); + th.set_field(clcb97::TEXHEAD_V2_BL_MAX_MIP_LEVEL, max_mip_level); + + th.set_field( + clcb97::TEXHEAD_V2_BL_S_R_G_B_CONVERSION, + view.format.is_srgb(), + ); + + set_enum!(th, clcb97, TEXHEAD_V2_BL_SECTOR_PROMOTION, PROMOTE_TO_2_V); + set_enum!(th, clcb97, TEXHEAD_V2_BL_BORDER_SOURCE, BORDER_COLOR); + + // In the sampler, the two options for FLOAT_COORD_NORMALIZATION are: + // + // - FORCE_UNNORMALIZED_COORDS + // - USE_HEADER_SETTING + // + // So we set it to normalized in the header and let the sampler select that + // or force non-normalized. + + th.set_field(clcb97::TEXHEAD_V2_BL_NORMALIZED_COORDS, true); + set_enum!( + th, + clcb97, + TEXHEAD_V2_BL_ANISO_FINE_SPREAD_FUNC, + SPREAD_FUNC_TWO + ); + set_enum!( + th, + clcb97, + TEXHEAD_V2_BL_ANISO_COARSE_SPREAD_FUNC, + SPREAD_FUNC_ONE + ); + + th.set_field( + clcb97::TEXHEAD_V2_BL_RES_VIEW_MIN_MIP_LEVEL, + view.base_level, + ); + + let max_mip_level = view.num_levels + view.base_level - 1; + th.set_field(clcb97::TEXHEAD_V2_BL_RES_VIEW_MAX_MIP_LEVEL, max_mip_level); + + let msc = nil_rs_to_nvb097_multi_sample_count(image.sample_layout); + th.set_field(clcb97::TEXHEAD_V2_BL_MULTI_SAMPLE_COUNT, msc); + + let min_lod_clamp = view.min_lod_clamp - (view.base_level as f32); + th.set_ufixed(clcb97::TEXHEAD_V2_BL_MIN_LOD_CLAMP, min_lod_clamp); +} + pub const IDENTITY_SWIZZLE: [nil_rs_bindings::pipe_swizzle; 4] = [ nil_rs_bindings::PIPE_SWIZZLE_X, nil_rs_bindings::PIPE_SWIZZLE_Y, @@ -580,6 +792,40 @@ fn nvb097_nil_fill_buffer_desc( set_enum!(th, clb097, TEXHEAD_1D_SECTOR_PROMOTION, PROMOTE_TO_2_V); } +fn nvcb97_nil_fill_buffer_desc( + base_address: u64, + format: Format, + num_elements: u32, + desc_out: &mut [u32; 8], +) { + *desc_out = [0u32; 8]; + let mut th = BitMutView::new(desc_out); + + assert!(format.supports_buffer()); + nvcb97_set_th_bl_0(&mut th, &format, IDENTITY_SWIZZLE); + + th.set_field( + clcb97::TEXHEAD_V2_1DRT_ADDRESS_BITS31TO0, + base_address as u32, + ); + th.set_field( + clcb97::TEXHEAD_V2_1DRT_ADDRESS_BITS63TO32, + base_address >> 32, + ); + + set_enum!( + th, + clcb97, + TEXHEAD_V2_1DRT_HEADER_VERSION, + SELECT_ONE_D_RAW_TYPED + ); + + th.set_field(clcb97::TEXHEAD_V2_1DRT_WIDTH_MINUS_ONE, num_elements - 1); + + // TODO: Do we need this? + set_enum!(th, clcb97, TEXHEAD_1D_SECTOR_PROMOTION, PROMOTE_TO_2_V); +} + pub const ZERO_SWIZZLE: [nil_rs_bindings::pipe_swizzle; 4] = [ nil_rs_bindings::PIPE_SWIZZLE_0, nil_rs_bindings::PIPE_SWIZZLE_0, @@ -658,7 +904,15 @@ impl Descriptor { ) -> Self { let mut desc = Descriptor { bits: [0_u32; 8] }; - if dev.cls_eng3d >= MAXWELL_A { + if dev.cls_eng3d >= HOPPER_A { + nvcb97_fill_image_view_desc( + dev, + image, + view, + base_address, + &mut desc.bits, + ); + } else if dev.cls_eng3d >= MAXWELL_A { nvb097_fill_image_view_desc( dev, image, @@ -688,7 +942,14 @@ impl Descriptor { ) -> Self { let mut desc = Descriptor { bits: [0_u32; 8] }; - if dev.cls_eng3d >= MAXWELL_A { + if dev.cls_eng3d >= HOPPER_A { + nvcb97_nil_fill_buffer_desc( + base_address, + format, + num_elements, + &mut desc.bits, + ) + } else if dev.cls_eng3d >= MAXWELL_A { nvb097_nil_fill_buffer_desc( base_address, format, diff --git a/src/nouveau/nil/nil_format_table_gen.py b/src/nouveau/nil/nil_format_table_gen.py index a09c8db5590..ba8b64d968b 100644 --- a/src/nouveau/nil/nil_format_table_gen.py +++ b/src/nouveau/nil/nil_format_table_gen.py @@ -43,7 +43,8 @@ struct nil_tic_format { struct nil_format_info { unsigned czt:8; - unsigned support:24; + unsigned support:20; + unsigned tic_v2_data_type:4; struct nil_tic_format tic; }; @@ -67,12 +68,15 @@ TEMPLATE_C = template.Template(text="""\ #include "clb097tex.h" #include "clb197.h" #include "clb197tex.h" +#include "clcb97.h" +#include "clcb97tex.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_v2_data_type = ${f.v2_data_type()}, .tic = { .comp_sizes = ${f.tcs()}, .type_r = ${f.type(0)}, @@ -107,6 +111,7 @@ TCS_PREFIX = { 'maxwella' : 'NVB097_TEXHEAD_BL_COMPONENTS_SIZES_', 'maxwellb' : 'NVB197_TEXHEAD_BL_COMPONENTS_SIZES_', 'tk1' : 'NVB097_TEXHEAD_BL_COMPONENTS_SIZES_', + 'hopper' : 'NVCB97_TEXHEAD_V2_BL_COMPONENTS_SIZES_', } DATA_TYPES = { @@ -117,6 +122,19 @@ DATA_TYPES = { 'F' : 'NV9097_TEXHEADV2_0_R_DATA_TYPE_NUM_FLOAT', } +V2_DATA_TYPES = { + 'N' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_UNORM', + 'S' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_SNORM', + 'F' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_FLOAT', + 'SGNRGB' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_SGNRGB', + 'SGNA' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_SGNA', + 'U' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_UINT', + 'I' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_SINT', + 'ZS' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_ZS', + 'SZ' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_SZ', + 'ZFS' : 'NVCB97_TEXHEAD_V2_BL_DATA_TYPE_TEX_DATA_TYPE_ZFS', +} + SOURCES = { '0' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_ZERO', 'R' : 'NV9097_TEXHEADV2_0_Z_SOURCE_IN_R', @@ -142,10 +160,11 @@ class Format(object): 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() + self._data_type = line[4].strip() + self._srcs = list(line[5].strip()) + self._support = list(line[6].strip()) + if len(line) > 7: + self.hw = line[7].strip().lower() else: self.hw = None @@ -169,6 +188,9 @@ class Format(object): else: return DATA_TYPES[self._types[0]] + def v2_data_type(self): + return V2_DATA_TYPES[self._data_type] + def src(self, comp): if self._srcs[comp] == '1': # Find any component which isn't a 0/1 and look at that diff --git a/src/nouveau/nil/nil_formats.csv b/src/nouveau/nil/nil_formats.csv index dc930a5b0bb..0da4aee0cdc 100644 --- a/src/nouveau/nil/nil_formats.csv +++ b/src/nouveau/nil/nil_formats.csv @@ -11,6 +11,15 @@ # I: SINT # U: UINT # F: FLOAT +# v2type: Data type: +# S: SNORM +# N: UNORM +# I: SINT +# U: UINT +# F: FLOAT +# ZS: depth/stencil +# SZ: stencil/depth +# ZFS: depth float/stencil # src: Swizzle of the form RGBAX01 # caps: Format capabilities: # C: Color target @@ -22,276 +31,276 @@ # D: Scanout # hw: First hardware generation on which the format -# name czt tcs type src support hw +# name czt tcs type v2type src support hw -R1_UNORM , NONE , R1 , N , R001 , T +R1_UNORM , NONE , R1 , N , N , R001 , T -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 +A4B4G4R4_UNORM , NONE , A4B4G4R4 , NNNN , N , ABGR , T +A4R4G4B4_UNORM , NONE , A4B4G4R4 , NNNN , N , GBAR , T +B4G4R4A4_UNORM , NONE , A4B4G4R4 , NNNN , N , BGRA , T +B4G4R4X4_UNORM , NONE , A4B4G4R4 , NNNN , N , BGR1 , T +R4G4B4A4_UNORM , NONE , A4B4G4R4 , NNNN , N , RGBA , T +R4G4B4X4_UNORM , NONE , A4B4G4R4 , NNNN , N , RGB1 , T -B5G6R5_UNORM , R5G6B5 , B5G6R5 , NNN , BGR1 , CTAD -R5G6B5_UNORM , NONE , B5G6R5 , NNN , RGB1 , T -R5G5B5A1_UNORM , NONE , A1B5G5R5 , NNNN , RGBA , T -B5G5R5A1_UNORM , A1R5G5B5 , A1B5G5R5 , NNNN , BGRA , CTAD -B5G5R5X1_UNORM , X1R5G5B5 , A1B5G5R5 , NNNN , BGR1 , CTAD +B5G6R5_UNORM , R5G6B5 , B5G6R5 , NNN , N , BGR1 , CTAD +R5G6B5_UNORM , NONE , B5G6R5 , NNN , N , RGB1 , T +R5G5B5A1_UNORM , NONE , A1B5G5R5 , NNNN , N , RGBA , T +B5G5R5A1_UNORM , A1R5G5B5 , A1B5G5R5 , NNNN , N , BGRA , CTAD +B5G5R5X1_UNORM , X1R5G5B5 , A1B5G5R5 , NNNN , N , BGR1 , CTAD -R8_UNORM , R8 , R8 , N , R001 , CTBSA -R8_SNORM , RN8 , R8 , S , R001 , CTBSA -R8_SINT , RS8 , R8 , I , R001 , CTBS -R8_UINT , RU8 , R8 , U , R001 , CTBS -R8_SRGB , NONE , R8 , N , R001 , T +R8_UNORM , R8 , R8 , N , N , R001 , CTBSA +R8_SNORM , RN8 , R8 , S , S , R001 , CTBSA +R8_SINT , RS8 , R8 , I , I , R001 , CTBS +R8_UINT , RU8 , R8 , U , U , R001 , CTBS +R8_SRGB , NONE , R8 , N , N , R001 , T -R8G8_UNORM , G8R8 , G8R8 , NN , RG01 , CTBSA -R8G8_SNORM , GN8RN8 , G8R8 , SS , RG01 , CTBSA -R8G8_SINT , GS8RS8 , G8R8 , II , RG01 , CTBS -R8G8_UINT , GU8RU8 , G8R8 , UU , RG01 , CTBS +R8G8_UNORM , G8R8 , G8R8 , NN , N , RG01 , CTBSA +R8G8_SNORM , GN8RN8 , G8R8 , SS , S , RG01 , CTBSA +R8G8_SINT , GS8RS8 , G8R8 , II , I , RG01 , CTBS +R8G8_UINT , GU8RU8 , G8R8 , UU , U , RG01 , CTBS # On Fermi+, the green component doesn't get decoding? -# R8G8_SRGB , NONE , G8R8 , NN , RG01 , T +# R8G8_SRGB , NONE , G8R8 , NN , N , RG01 , T # 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 +B8G8R8A8_UNORM , A8R8G8B8 , A8B8G8R8 , NNNN , N , BGRA , CTBASD +B8G8R8X8_UNORM , X8R8G8B8 , A8B8G8R8 , NNNN , N , BGR1 , CTAD +B8G8R8A8_SRGB , A8RL8GL8BL8 , A8B8G8R8 , NNNN , N , BGRA , CTAD +B8G8R8X8_SRGB , X8RL8GL8BL8 , A8B8G8R8 , NNNN , N , BGR1 , CTAD +R8G8B8A8_UNORM , A8B8G8R8 , A8B8G8R8 , NNNN , N , RGBA , CTBSA +R8G8B8X8_UNORM , X8B8G8R8 , A8B8G8R8 , NNNN , N , RGB1 , CTA +R8G8B8A8_SRGB , A8BL8GL8RL8 , A8B8G8R8 , NNNN , N , RGBA , CTA +R8G8B8X8_SRGB , X8BL8GL8RL8 , A8B8G8R8 , NNNN , N , RGB1 , CTA -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 +R8G8B8A8_SNORM , AN8BN8GN8RN8 , A8B8G8R8 , SSSS , S , RGBA , CTBSA +R8G8B8A8_SINT , AS8BS8GS8RS8 , A8B8G8R8 , IIII , I , RGBA , CTBS +R8G8B8A8_UINT , AU8BU8GU8RU8 , A8B8G8R8 , UUUU , U , RGBA , CTBS +R8G8B8X8_SNORM , AN8BN8GN8RN8 , A8B8G8R8 , SSSS , S , RGB1 , T +R8G8B8X8_SINT , AS8BS8GS8RS8 , A8B8G8R8 , IIII , I , RGB1 , CT +R8G8B8X8_UINT , AU8BU8GU8RU8 , A8B8G8R8 , UUUU , U , RGB1 , CT -R9G9B9E5_FLOAT , NONE , E5B9G9R9_SHAREDEXP, FFFF , RGB1 , T +R9G9B9E5_FLOAT , NONE , E5B9G9R9_SHAREDEXP, FFFF , F , RGB1 , T -R10G10B10A2_UNORM , A2B10G10R10 , A2B10G10R10 , NNNN , RGBA , TCBASD -R10G10B10X2_UNORM , A2B10G10R10 , A2B10G10R10 , NNN , RGB1 , T -B10G10R10A2_UNORM , A2R10G10B10 , A2B10G10R10 , NNNN , BGRA , CTA -B10G10R10X2_UNORM , A2R10G10B10 , A2B10G10R10 , NNN , BGR1 , T -R10G10B10A2_UINT , AU2BU10GU10RU10 , A2B10G10R10 , UUUU , RGBA , CTBS -B10G10R10A2_UINT , NONE , A2B10G10R10 , UUUU , BGRA , TB +R10G10B10A2_UNORM , A2B10G10R10 , A2B10G10R10 , NNNN , N , RGBA , TCBASD +R10G10B10X2_UNORM , A2B10G10R10 , A2B10G10R10 , NNN , N , RGB1 , T +B10G10R10A2_UNORM , A2R10G10B10 , A2B10G10R10 , NNNN , N , BGRA , CTA +B10G10R10X2_UNORM , A2R10G10B10 , A2B10G10R10 , NNN , N , BGR1 , T +R10G10B10A2_UINT , AU2BU10GU10RU10 , A2B10G10R10 , UUUU , U , RGBA , CTBS +B10G10R10A2_UINT , NONE , A2B10G10R10 , UUUU , U , BGRA , TB # These formats are disabled because the image/texture hardware doesn't clamp # the 2-bit SNORM alpha to [-1, 1] so you can end up with a = -2 which is out # of spec for both GL and Vulkan. -# R10G10B10A2_SNORM , NONE , A2B10G10R10 , SSSS , RGBA , T -# B10G10R10A2_SNORM , NONE , A2B10G10R10 , SSSS , BGRA , T +# R10G10B10A2_SNORM , NONE , A2B10G10R10 , SSSS , S , RGBA , T +# B10G10R10A2_SNORM , NONE , A2B10G10R10 , SSSS , S , BGRA , T -R11G11B10_FLOAT , BF10GF11RF11 , BF10GF11RF11 , FFF , RGB1 , CTBSA +R11G11B10_FLOAT , BF10GF11RF11 , BF10GF11RF11 , FFF , F , RGB1 , CTBSA -R16_FLOAT , RF16 , R16 , F , R001 , CTBSA -R16_UNORM , R16 , R16 , N , R001 , CTBSA -R16_SNORM , RN16 , R16 , S , R001 , CTBSA -R16_SINT , RS16 , R16 , I , R001 , CTBS -R16_UINT , RU16 , R16 , U , R001 , CTBS +R16_FLOAT , RF16 , R16 , F , F , R001 , CTBSA +R16_UNORM , R16 , R16 , N , N , R001 , CTBSA +R16_SNORM , RN16 , R16 , S , S , R001 , CTBSA +R16_SINT , RS16 , R16 , I , I , R001 , CTBS +R16_UINT , RU16 , R16 , U , U , R001 , CTBS -R16G16_FLOAT , RF16_GF16 , R16_G16 , FF , RG01 , CTBSA -R16G16_UNORM , R16_G16 , R16_G16 , NN , RG01 , CTBSA -R16G16_SNORM , RN16_GN16 , R16_G16 , SS , RG01 , CTBSA -R16G16_SINT , RS16_GS16 , R16_G16 , II , RG01 , CTBS -R16G16_UINT , RU16_GU16 , R16_G16 , UU , RG01 , CTBS +R16G16_FLOAT , RF16_GF16 , R16_G16 , FF , F , RG01 , CTBSA +R16G16_UNORM , R16_G16 , R16_G16 , NN , N , RG01 , CTBSA +R16G16_SNORM , RN16_GN16 , R16_G16 , SS , S , RG01 , CTBSA +R16G16_SINT , RS16_GS16 , R16_G16 , II , I , RG01 , CTBS +R16G16_UINT , RU16_GU16 , R16_G16 , UU , U , RG01 , CTBS -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 +R16G16B16A16_FLOAT , RF16_GF16_BF16_AF16 , R16_G16_B16_A16 , FFFF , F , RGBA , CTBSA +R16G16B16A16_UNORM , R16_G16_B16_A16 , R16_G16_B16_A16 , NNNN , N , RGBA , CTBSA +R16G16B16A16_SNORM , RN16_GN16_BN16_AN16 , R16_G16_B16_A16 , SSSS , S , RGBA , CTBSA +R16G16B16A16_SINT , RS16_GS16_BS16_AS16 , R16_G16_B16_A16 , IIII , I , RGBA , CTBS +R16G16B16A16_UINT , RU16_GU16_BU16_AU16 , R16_G16_B16_A16 , UUUU , U , RGBA , CTBS +R16G16B16X16_FLOAT , RF16_GF16_BF16_X16 , R16_G16_B16_A16 , FFFF , F , RGB1 , CTA +R16G16B16X16_UNORM , R16_G16_B16_A16 , R16_G16_B16_A16 , NNNN , N , RGB1 , T +R16G16B16X16_SNORM , RN16_GN16_BN16_AN16 , R16_G16_B16_A16 , SSSS , S , RGB1 , T +R16G16B16X16_SINT , RS16_GS16_BS16_AS16 , R16_G16_B16_A16 , IIII , I , RGB1 , CT +R16G16B16X16_UINT , RU16_GU16_BU16_AU16 , R16_G16_B16_A16 , UUUU , U , RGB1 , CT -R32_FLOAT , RF32 , R32 , F , R001 , CTBSA -R32_UNORM , NONE , R32 , N , R001 , T -R32_SNORM , NONE , R32 , S , R001 , T -R32_SINT , RS32 , R32 , I , R001 , CTBS -R32_UINT , RU32 , R32 , U , R001 , CTBS +R32_FLOAT , RF32 , R32 , F , F , R001 , CTBSA +R32_UNORM , NONE , R32 , N , N , R001 , T +R32_SNORM , NONE , R32 , S , S , R001 , T +R32_SINT , RS32 , R32 , I , I , R001 , CTBS +R32_UINT , RU32 , R32 , U , U , R001 , CTBS -R32G32_FLOAT , RF32_GF32 , R32_G32 , FF , RG01 , CTBSA -R32G32_UNORM , NONE , R32_G32 , NN , RG01 , T -R32G32_SNORM , NONE , R32_G32 , SS , RG01 , T -R32G32_SINT , RS32_GS32 , R32_G32 , II , RG01 , CTBS -R32G32_UINT , RU32_GU32 , R32_G32 , UU , RG01 , CTBS +R32G32_FLOAT , RF32_GF32 , R32_G32 , FF , F , RG01 , CTBSA +R32G32_UNORM , NONE , R32_G32 , NN , N , RG01 , T +R32G32_SNORM , NONE , R32_G32 , SS , S , RG01 , T +R32G32_SINT , RS32_GS32 , R32_G32 , II , I , RG01 , CTBS +R32G32_UINT , RU32_GU32 , R32_G32 , UU , U , RG01 , CTBS -R32G32B32_FLOAT , NONE , R32_G32_B32 , FFF , RGB1 , TB -R32G32B32_SINT , NONE , R32_G32_B32 , III , RGB1 , TB -R32G32B32_UINT , NONE , R32_G32_B32 , UUU , RGB1 , TB +R32G32B32_FLOAT , NONE , R32_G32_B32 , FFF , F , RGB1 , TB +R32G32B32_SINT , NONE , R32_G32_B32 , III , I , RGB1 , TB +R32G32B32_UINT , NONE , R32_G32_B32 , UUU , U , RGB1 , TB -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 +R32G32B32A32_FLOAT , RF32_GF32_BF32_AF32 , R32_G32_B32_A32 , FFFF , F , RGBA , CTBSA +R32G32B32A32_UNORM , NONE , R32_G32_B32_A32 , NNNN , N , RGBA , T +R32G32B32A32_SNORM , NONE , R32_G32_B32_A32 , SSSS , S , RGBA , T +R32G32B32A32_SINT , RS32_GS32_BS32_AS32 , R32_G32_B32_A32 , IIII , I , RGBA , CTBS +R32G32B32A32_UINT , RU32_GU32_BU32_AU32 , R32_G32_B32_A32 , UUUU , U , RGBA , CTBS +R32G32B32X32_FLOAT , RF32_GF32_BF32_X32 , R32_G32_B32_A32 , FFFF , F , RGB1 , CTA +R32G32B32X32_SINT , RS32_GS32_BS32_X32 , R32_G32_B32_A32 , IIII , I , RGB1 , CT +R32G32B32X32_UINT , RU32_GU32_BU32_X32 , R32_G32_B32_A32 , UUUU , U , RGB1 , CT -R64_SINT , NONE , R32_G32 , II , RG01 , S -R64_UINT , NONE , R32_G32 , UU , RG01 , S +R64_SINT , NONE , R32_G32 , II , I , RG01 , S +R64_UINT , NONE , R32_G32 , UU , U , RG01 , S # Depth/stencil formats -Z16_UNORM , Z16 , Z16 , N , R001 , TZ , MaxwellA -Z32_FLOAT , ZF32 , ZF32 , F , R001 , TZ -Z24X8_UNORM , X8Z24 , X8Z24 , NU , R001 , TZ -X8Z24_UNORM , Z24S8 , Z24S8 , UN , G001 , TZ -Z24_UNORM_S8_UINT , S8Z24 , S8Z24 , NU , R001 , TZ -S8_UINT_Z24_UNORM , Z24S8 , Z24S8 , UN , G001 , TZ -Z32_FLOAT_S8X24_UINT , ZF32_X24S8 , ZF32_X24S8 , FU , R001 , TZ +Z16_UNORM , Z16 , Z16 , N , N , R001 , TZ , MaxwellA +Z32_FLOAT , ZF32 , ZF32 , F , F , R001 , TZ +Z24X8_UNORM , X8Z24 , X8Z24 , NU , ZS , R001 , TZ +X8Z24_UNORM , Z24S8 , Z24S8 , UN , SZ , G001 , TZ +Z24_UNORM_S8_UINT , S8Z24 , S8Z24 , NU , ZS , R001 , TZ +S8_UINT_Z24_UNORM , Z24S8 , Z24S8 , UN , SZ , G001 , TZ +Z32_FLOAT_S8X24_UINT , ZF32_X24S8 , ZF32_X24S8 , FU , ZFS , R001 , TZ # Stencil-only formats -S8_UINT , S8 , R8 , U , R001 , TZ , MaxwellB -X24S8_UINT , NONE , G8R24 , UU , G001 , T -S8X24_UINT , NONE , G24R8 , UU , R001 , T -X32_S8X24_UINT , NONE , R32_B24G8 , UU , G001 , T +S8_UINT , S8 , R8 , U , U , R001 , TZ , MaxwellB +X24S8_UINT , NONE , G8R24 , UU , ZS , G001 , T +S8X24_UINT , NONE , G24R8 , UU , SZ , R001 , T +X32_S8X24_UINT , NONE , R32_B24G8 , UU , ZFS , G001 , T # Luminance formats -L8_UNORM , R8 , R8 , N , RRR1 , CTA -L8_SRGB , NONE , R8 , N , RRR1 , T -L8_SNORM , RN8 , R8 , S , RRR1 , CTA -L8_SINT , RS8 , R8 , I , RRR1 , CT -L8_UINT , RU8 , R8 , U , RRR1 , CT -L16_UNORM , R16 , R16 , N , RRR1 , CTA -L16_SNORM , RN16 , R16 , S , RRR1 , CTA -L16_FLOAT , RF16 , R16 , F , RRR1 , CTA -L16_SINT , RS16 , R16 , I , RRR1 , CT -L16_UINT , RU16 , R16 , U , RRR1 , CT -L32_FLOAT , RF32 , R32 , F , RRR1 , CTA -L32_SINT , RS32 , R32 , I , RRR1 , CT -L32_UINT , RU32 , R32 , U , RRR1 , CT +L8_UNORM , R8 , R8 , N , N , RRR1 , CTA +L8_SRGB , NONE , R8 , N , N , RRR1 , T +L8_SNORM , RN8 , R8 , S , S , RRR1 , CTA +L8_SINT , RS8 , R8 , I , I , RRR1 , CT +L8_UINT , RU8 , R8 , U , U , RRR1 , CT +L16_UNORM , R16 , R16 , N , N , RRR1 , CTA +L16_SNORM , RN16 , R16 , S , S , RRR1 , CTA +L16_FLOAT , RF16 , R16 , F , F , RRR1 , CTA +L16_SINT , RS16 , R16 , I , I , RRR1 , CT +L16_UINT , RU16 , R16 , U , U , RRR1 , CT +L32_FLOAT , RF32 , R32 , F , F , RRR1 , CTA +L32_SINT , RS32 , R32 , I , I , RRR1 , CT +L32_UINT , RU32 , R32 , U , U , RRR1 , CT # Intensity formats -I8_UNORM , R8 , R8 , N , RRRR , CT -I8_SNORM , RN8 , R8 , S , RRRR , CT -I8_SINT , RS8 , R8 , I , RRRR , CT -I8_UINT , RU8 , R8 , U , RRRR , CT -I16_UNORM , R16 , R16 , N , RRRR , CT -I16_SNORM , RN16 , R16 , S , RRRR , CT -I16_FLOAT , RF16 , R16 , F , RRRR , CT -I16_SINT , RS16 , R16 , I , RRRR , CT -I16_UINT , RU16 , R16 , U , RRRR , CT -I32_FLOAT , RF32 , R32 , F , RRRR , CT -I32_SINT , RS32 , R32 , I , RRRR , CT -I32_UINT , RU32 , R32 , U , RRRR , CT +I8_UNORM , R8 , R8 , N , N , RRRR , CT +I8_SNORM , RN8 , R8 , S , S , RRRR , CT +I8_SINT , RS8 , R8 , I , I , RRRR , CT +I8_UINT , RU8 , R8 , U , U , RRRR , CT +I16_UNORM , R16 , R16 , N , N , RRRR , CT +I16_SNORM , RN16 , R16 , S , S , RRRR , CT +I16_FLOAT , RF16 , R16 , F , F , RRRR , CT +I16_SINT , RS16 , R16 , I , I , RRRR , CT +I16_UINT , RU16 , R16 , U , U , RRRR , CT +I32_FLOAT , RF32 , R32 , F , F , RRRR , CT +I32_SINT , RS32 , R32 , I , I , RRRR , CT +I32_UINT , RU32 , R32 , U , U , RRRR , CT # Alpha formats -A8_UNORM , A8 , R8 , N , 000R , CTBSA -A8_SNORM , NONE , R8 , S , 000R , T -A8_SINT , NONE , R8 , I , 000R , T -A8_UINT , NONE , R8 , U , 000R , T -A16_UNORM , NONE , R16 , N , 000R , T -A16_SNORM , NONE , R16 , S , 000R , T -A16_FLOAT , AF16 , R16 , F , 000R , T -A16_SINT , NONE , R16 , I , 000R , T -A16_UINT , NONE , R16 , U , 000R , T -A32_FLOAT , AF32 , R32 , F , 000R , T -A32_SINT , NONE , R32 , I , 000R , T -A32_UINT , NONE , R32 , U , 000R , T +A8_UNORM , A8 , R8 , N , N , 000R , CTBSA +A8_SNORM , NONE , R8 , S , S , 000R , T +A8_SINT , NONE , R8 , I , I , 000R , T +A8_UINT , NONE , R8 , U , U , 000R , T +A16_UNORM , NONE , R16 , N , N , 000R , T +A16_SNORM , NONE , R16 , S , S , 000R , T +A16_FLOAT , AF16 , R16 , F , F , 000R , T +A16_SINT , NONE , R16 , I , I , 000R , T +A16_UINT , NONE , R16 , U , U , 000R , T +A32_FLOAT , AF32 , R32 , F , F , 000R , T +A32_SINT , NONE , R32 , I , I , 000R , T +A32_UINT , NONE , R32 , U , U , 000R , T # Luminance/alpha formats -L4A4_UNORM , NONE , G4R4 , NN , RRRG , T -L8A8_UNORM , NONE , G8R8 , NN , RRRG , T -L8A8_SNORM , NONE , G8R8 , SS , RRRG , T -L8A8_SRGB , NONE , G8R8 , NN , RRRG , T -L8A8_SINT , NONE , G8R8 , II , RRRG , T -L8A8_UINT , NONE , G8R8 , UU , RRRG , T -L16A16_UNORM , NONE , R16_G16 , NN , RRRG , T -L16A16_SNORM , NONE , R16_G16 , SS , RRRG , T -L16A16_FLOAT , NONE , R16_G16 , FF , RRRG , T -L16A16_SINT , NONE , R16_G16 , II , RRRG , T -L16A16_UINT , NONE , R16_G16 , UU , RRRG , T -L32A32_FLOAT , NONE , R32_G32 , FF , RRRG , T -L32A32_SINT , NONE , R32_G32 , II , RRRG , T -L32A32_UINT , NONE , R32_G32 , UU , RRRG , T +L4A4_UNORM , NONE , G4R4 , NN , N , RRRG , T +L8A8_UNORM , NONE , G8R8 , NN , N , RRRG , T +L8A8_SNORM , NONE , G8R8 , SS , S , RRRG , T +L8A8_SRGB , NONE , G8R8 , NN , N , RRRG , T +L8A8_SINT , NONE , G8R8 , II , I , RRRG , T +L8A8_UINT , NONE , G8R8 , UU , U , RRRG , T +L16A16_UNORM , NONE , R16_G16 , NN , N , RRRG , T +L16A16_SNORM , NONE , R16_G16 , SS , S , RRRG , T +L16A16_FLOAT , NONE , R16_G16 , FF , F , RRRG , T +L16A16_SINT , NONE , R16_G16 , II , I , RRRG , T +L16A16_UINT , NONE , R16_G16 , UU , U , RRRG , T +L32A32_FLOAT , NONE , R32_G32 , FF , F , RRRG , T +L32A32_SINT , NONE , R32_G32 , II , I , RRRG , T +L32A32_UINT , NONE , R32_G32 , UU , U , RRRG , T # Red/alpha formats -R4A4_UNORM , NONE , G4R4 , NN , R00G , T -R8A8_UNORM , NONE , G8R8 , NN , R00G , T -A4R4_UNORM , NONE , G4R4 , NN , G00R , T -A8R8_UNORM , NONE , G8R8 , NN , G00R , T +R4A4_UNORM , NONE , G4R4 , NN , N , R00G , T +R8A8_UNORM , NONE , G8R8 , NN , N , R00G , T +A4R4_UNORM , NONE , G4R4 , NN , N , G00R , T +A8R8_UNORM , NONE , G8R8 , NN , N , G00R , T # YCbCr formats -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 +R8G8_B8G8_UNORM , NONE , G8B8G8R8 , NNNN , N , RGB1 , T +G8R8_B8R8_UNORM , NONE , G8B8G8R8 , NNNN , N , GRB1 , T +G8R8_G8B8_UNORM , NONE , B8G8R8G8 , NNNN , N , RGB1 , T +R8G8_R8B8_UNORM , NONE , B8G8R8G8 , NNNN , N , GRB1 , T +G8B8_G8R8_UNORM , NONE , B8G8R8G8 , NNNN , N , BGR1 , T +B8G8_R8G8_UNORM , NONE , G8B8G8R8 , NNNN , N , BGR1 , T # Weird D3D9 formats -R8SG8SB8UX8U_NORM , NONE , A8B8G8R8 , SSNN , RGB1 , T -R5SG5SB6U_NORM , NONE , B6G5R5 , SSNN , RGB1 , T +R8SG8SB8UX8U_NORM , NONE , A8B8G8R8 , SSNN , S , RGB1 , T +R5SG5SB6U_NORM , NONE , B6G5R5 , SSNN , S , RGB1 , T # DXT compressed formats -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 +DXT1_RGB , NONE , DXT1 , NNNN , N , RGB1 , T +DXT1_SRGB , NONE , DXT1 , NNNN , N , RGB1 , T +DXT1_RGBA , NONE , DXT1 , NNNN , N , RGBA , T +DXT1_SRGBA , NONE , DXT1 , NNNN , N , RGBA , T +DXT3_RGBA , NONE , DXT23 , NNNN , N , RGBA , T +DXT3_SRGBA , NONE , DXT23 , NNNN , N , RGBA , T +DXT5_RGBA , NONE , DXT45 , NNNN , N , RGBA , T +DXT5_SRGBA , NONE , DXT45 , NNNN , N , 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 +RGTC1_UNORM , NONE , DXN1 , NNNN , N , R001 , T +RGTC1_SNORM , NONE , DXN1 , SSSS , S , R001 , T +RGTC2_UNORM , NONE , DXN2 , NNNN , N , RG01 , T +RGTC2_SNORM , NONE , DXN2 , SSSS , S , RG01 , T +LATC1_UNORM , NONE , DXN1 , NNNN , N , RRR1 , T +LATC1_SNORM , NONE , DXN1 , SSSS , S , RRR1 , T +LATC2_UNORM , NONE , DXN2 , NNNN , N , RRRG , T +LATC2_SNORM , NONE , DXN2 , SSSS , S , 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 +BPTC_RGBA_UNORM , NONE , BC7U , NNNN , N , RGBA , T +BPTC_SRGBA , NONE , BC7U , NNNN , N , RGBA , T +BPTC_RGB_FLOAT , NONE , BC6H_SF16 , FFFF , F , RGB1 , T +BPTC_RGB_UFLOAT , NONE , BC6H_UF16 , FFFF , F , RGB1 , T -ETC1_RGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , MaxwellA -ETC2_RGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , MaxwellA -ETC2_SRGB8 , NONE , ETC2_RGB , NNNN , RGB1 , T , MaxwellA -ETC2_RGB8A1 , NONE , ETC2_RGB_PTA , NNNN , RGBA , T , MaxwellA -ETC2_SRGB8A1 , NONE , ETC2_RGB_PTA , NNNN , RGBA , T , MaxwellA -ETC2_RGBA8 , NONE , ETC2_RGBA , NNNN , RGBA , T , MaxwellA -ETC2_SRGBA8 , NONE , ETC2_RGBA , NNNN , RGBA , T , MaxwellA -ETC2_R11_UNORM , NONE , EAC , NNNN , R001 , T , MaxwellA -ETC2_R11_SNORM , NONE , EAC , SSSS , R001 , T , MaxwellA -ETC2_RG11_UNORM , NONE , EACX2 , NNNN , RG01 , T , MaxwellA -ETC2_RG11_SNORM , NONE , EACX2 , SSSS , RG01 , T , MaxwellA +ETC1_RGB8 , NONE , ETC2_RGB , NNNN , N , RGB1 , T , MaxwellA +ETC2_RGB8 , NONE , ETC2_RGB , NNNN , N , RGB1 , T , MaxwellA +ETC2_SRGB8 , NONE , ETC2_RGB , NNNN , N , RGB1 , T , MaxwellA +ETC2_RGB8A1 , NONE , ETC2_RGB_PTA , NNNN , N , RGBA , T , MaxwellA +ETC2_SRGB8A1 , NONE , ETC2_RGB_PTA , NNNN , N , RGBA , T , MaxwellA +ETC2_RGBA8 , NONE , ETC2_RGBA , NNNN , N , RGBA , T , MaxwellA +ETC2_SRGBA8 , NONE , ETC2_RGBA , NNNN , N , RGBA , T , MaxwellA +ETC2_R11_UNORM , NONE , EAC , NNNN , N , R001 , T , MaxwellA +ETC2_R11_SNORM , NONE , EAC , SSSS , S , R001 , T , MaxwellA +ETC2_RG11_UNORM , NONE , EACX2 , NNNN , N , RG01 , T , MaxwellA +ETC2_RG11_SNORM , NONE , EACX2 , SSSS , S , RG01 , T , MaxwellA # ASTC compressed formats -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 , NONE , ASTC_2D_4X4 , NNNN , N , RGBA , T , TK1 +ASTC_5x4 , NONE , ASTC_2D_5X4 , NNNN , N , RGBA , T , TK1 +ASTC_5x5 , NONE , ASTC_2D_5X5 , NNNN , N , RGBA , T , TK1 +ASTC_6x5 , NONE , ASTC_2D_6X5 , NNNN , N , RGBA , T , TK1 +ASTC_6x6 , NONE , ASTC_2D_6X6 , NNNN , N , RGBA , T , TK1 +ASTC_8x5 , NONE , ASTC_2D_8X5 , NNNN , N , RGBA , T , TK1 +ASTC_8x6 , NONE , ASTC_2D_8X6 , NNNN , N , RGBA , T , TK1 +ASTC_8x8 , NONE , ASTC_2D_8X8 , NNNN , N , RGBA , T , TK1 +ASTC_10x5 , NONE , ASTC_2D_10X5 , NNNN , N , RGBA , T , TK1 +ASTC_10x6 , NONE , ASTC_2D_10X6 , NNNN , N , RGBA , T , TK1 +ASTC_10x8 , NONE , ASTC_2D_10X8 , NNNN , N , RGBA , T , TK1 +ASTC_10x10 , NONE , ASTC_2D_10X10 , NNNN , N , RGBA , T , TK1 +ASTC_12x10 , NONE , ASTC_2D_12X10 , NNNN , N , RGBA , T , TK1 +ASTC_12x12 , NONE , ASTC_2D_12X12 , NNNN , N , 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 +ASTC_4x4_SRGB , NONE , ASTC_2D_4X4 , NNNN , N , RGBA , T , TK1 +ASTC_5x4_SRGB , NONE , ASTC_2D_5X4 , NNNN , N , RGBA , T , TK1 +ASTC_5x5_SRGB , NONE , ASTC_2D_5X5 , NNNN , N , RGBA , T , TK1 +ASTC_6x5_SRGB , NONE , ASTC_2D_6X5 , NNNN , N , RGBA , T , TK1 +ASTC_6x6_SRGB , NONE , ASTC_2D_6X6 , NNNN , N , RGBA , T , TK1 +ASTC_8x5_SRGB , NONE , ASTC_2D_8X5 , NNNN , N , RGBA , T , TK1 +ASTC_8x6_SRGB , NONE , ASTC_2D_8X6 , NNNN , N , RGBA , T , TK1 +ASTC_8x8_SRGB , NONE , ASTC_2D_8X8 , NNNN , N , RGBA , T , TK1 +ASTC_10x5_SRGB , NONE , ASTC_2D_10X5 , NNNN , N , RGBA , T , TK1 +ASTC_10x6_SRGB , NONE , ASTC_2D_10X6 , NNNN , N , RGBA , T , TK1 +ASTC_10x8_SRGB , NONE , ASTC_2D_10X8 , NNNN , N , RGBA , T , TK1 +ASTC_10x10_SRGB , NONE , ASTC_2D_10X10 , NNNN , N , RGBA , T , TK1 +ASTC_12x10_SRGB , NONE , ASTC_2D_12X10 , NNNN , N , RGBA , T , TK1 +ASTC_12x12_SRGB , NONE , ASTC_2D_12X12 , NNNN , N , RGBA , T , TK1