nvk/nil: add texture header v2 support for hopper/blackwell

The texture header got redefined and some fields got reworked,
deriving it from the old info doesn't seem trivial, so introduce
a second column to handle the v2 header info.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35484>
This commit is contained in:
Dave Airlie
2025-05-07 17:28:40 -04:00
committed by Marge Bot
parent 1754507d49
commit f6b22a54e4
4 changed files with 524 additions and 231 deletions
+2 -1
View File
@@ -27,8 +27,9 @@ nv_classes = [
'clc6c0',
'clc797',
'clc7c0',
'clcd97',
'clcb97',
'clcbc0',
'clcd97',
'clcdc0',
'clcec0',
]
+263 -2
View File
@@ -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,
+27 -5
View File
@@ -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
+232 -223
View File
@@ -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
1 # Copyright 2024 Collabora Ltd.
11 # U: UINT
12 # F: FLOAT
13 # src: Swizzle of the form RGBAX01 # v2type: Data type:
14 # S: SNORM
15 # N: UNORM
16 # I: SINT
17 # U: UINT
18 # F: FLOAT
19 # ZS: depth/stencil
20 # SZ: stencil/depth
21 # ZFS: depth float/stencil
22 # src: Swizzle of the form RGBAX01
23 # caps: Format capabilities:
24 # C: Color target
25 # T: Texture
31 # hw: First hardware generation on which the format
32 # name czt tcs type src support hw # name czt tcs type v2type src support hw
33 R1_UNORM
34 A4B4G4R4_UNORM
35 A4R4G4B4_UNORM
36 B4G4R4A4_UNORM
37 B4G4R4X4_UNORM
38 R4G4B4A4_UNORM
39 R4G4B4X4_UNORM
40 B5G6R5_UNORM
41 R5G6B5_UNORM
42 R5G5B5A1_UNORM
43 B5G5R5A1_UNORM
44 B5G5R5X1_UNORM
45 R8_UNORM
46 R8_SNORM
47 R8_SINT
48 R8_UINT
49 R8_SRGB
50 R8G8_UNORM
51 R8G8_SNORM
52 R8G8_SINT
53 R8G8_UINT
54 # On Fermi+
55 # R8G8_SRGB
56 # BGRA display formats
57 B8G8R8A8_UNORM
58 B8G8R8X8_UNORM
59 B8G8R8A8_SRGB
60 B8G8R8X8_SRGB
61 R8G8B8A8_UNORM
62 R8G8B8X8_UNORM
63 R8G8B8A8_SRGB
64 R8G8B8X8_SRGB
65 R8G8B8A8_SNORM
66 R8G8B8A8_SINT
67 R8G8B8A8_UINT
68 R8G8B8X8_SNORM
69 R8G8B8X8_SINT
70 R8G8B8X8_UINT
71 R9G9B9E5_FLOAT
72 R10G10B10A2_UNORM
73 R10G10B10X2_UNORM
74 B10G10R10A2_UNORM
75 B10G10R10X2_UNORM
76 R10G10B10A2_UINT
77 B10G10R10A2_UINT
78 # These formats are disabled because the image/texture hardware doesn't clamp
79 # the 2-bit SNORM alpha to [-1
80 # of spec for both GL and Vulkan.
81 # R10G10B10A2_SNORM
82 # B10G10R10A2_SNORM
83 R11G11B10_FLOAT
84 R16_FLOAT
85 R16_UNORM
86 R16_SNORM
87 R16_SINT
88 R16_UINT
89 R16G16_FLOAT
90 R16G16_UNORM
91 R16G16_SNORM
92 R16G16_SINT
93 R16G16_UINT
94 R16G16B16A16_FLOAT
95 R16G16B16A16_UNORM
96 R16G16B16A16_SNORM
97 R16G16B16A16_SINT
98 R16G16B16A16_UINT
99 R16G16B16X16_FLOAT
100 R16G16B16X16_UNORM
101 R16G16B16X16_SNORM
102 R16G16B16X16_SINT
103 R16G16B16X16_UINT
104 R32_FLOAT
105 R32_UNORM
106 R32_SNORM
107 R32_SINT
108 R32_UINT
109 R32G32_FLOAT
110 R32G32_UNORM
111 R32G32_SNORM
112 R32G32_SINT
113 R32G32_UINT
114 R32G32B32_FLOAT
115 R32G32B32_SINT
116 R32G32B32_UINT
117 R32G32B32A32_FLOAT
118 R32G32B32A32_UNORM
119 R32G32B32A32_SNORM
120 R32G32B32A32_SINT
121 R32G32B32A32_UINT
122 R32G32B32X32_FLOAT
123 R32G32B32X32_SINT
124 R32G32B32X32_UINT
125 R64_SINT
126 R64_UINT
127 # Depth/stencil formats
128 Z16_UNORM
129 Z32_FLOAT
130 Z24X8_UNORM
131 X8Z24_UNORM
132 Z24_UNORM_S8_UINT
133 S8_UINT_Z24_UNORM
134 Z32_FLOAT_S8X24_UINT
135 # Stencil-only formats
136 S8_UINT
137 X24S8_UINT
138 S8X24_UINT
139 X32_S8X24_UINT
140 # Luminance formats
141 L8_UNORM
142 L8_SRGB
143 L8_SNORM
144 L8_SINT
145 L8_UINT
146 L16_UNORM
147 L16_SNORM
148 L16_FLOAT
149 L16_SINT
150 L16_UINT
151 L32_FLOAT
152 L32_SINT
153 L32_UINT
154 # Intensity formats
155 I8_UNORM
156 I8_SNORM
157 I8_SINT
158 I8_UINT
159 I16_UNORM
160 I16_SNORM
161 I16_FLOAT
162 I16_SINT
163 I16_UINT
164 I32_FLOAT
165 I32_SINT
166 I32_UINT
167 # Alpha formats
168 A8_UNORM
169 A8_SNORM
170 A8_SINT
171 A8_UINT
172 A16_UNORM
173 A16_SNORM
174 A16_FLOAT
175 A16_SINT
176 A16_UINT
177 A32_FLOAT
178 A32_SINT
179 A32_UINT
180 # Luminance/alpha formats
181 L4A4_UNORM
182 L8A8_UNORM
183 L8A8_SNORM
184 L8A8_SRGB
185 L8A8_SINT
186 L8A8_UINT
187 L16A16_UNORM
188 L16A16_SNORM
189 L16A16_FLOAT
190 L16A16_SINT
191 L16A16_UINT
192 L32A32_FLOAT
193 L32A32_SINT
194 L32A32_UINT
195 # Red/alpha formats
196 R4A4_UNORM
197 R8A8_UNORM
198 A4R4_UNORM
199 A8R8_UNORM
200 # YCbCr formats
201 R8G8_B8G8_UNORM
202 G8R8_B8R8_UNORM
203 G8R8_G8B8_UNORM
204 R8G8_R8B8_UNORM
205 G8B8_G8R8_UNORM
206 B8G8_R8G8_UNORM
207 # Weird D3D9 formats
208 R8SG8SB8UX8U_NORM
209 R5SG5SB6U_NORM
210 # DXT compressed formats
211 DXT1_RGB
212 DXT1_SRGB
213 DXT1_RGBA
214 DXT1_SRGBA
215 DXT3_RGBA
216 DXT3_SRGBA
217 DXT5_RGBA
218 DXT5_SRGBA
219 RGTC1_UNORM
220 RGTC1_SNORM
221 RGTC2_UNORM
222 RGTC2_SNORM
223 LATC1_UNORM
224 LATC1_SNORM
225 LATC2_UNORM
226 LATC2_SNORM
227 BPTC_RGBA_UNORM
228 BPTC_SRGBA
229 BPTC_RGB_FLOAT
230 BPTC_RGB_UFLOAT
231 ETC1_RGB8
232 ETC2_RGB8
233 ETC2_SRGB8
234 ETC2_RGB8A1
235 ETC2_SRGB8A1
236 ETC2_RGBA8
237 ETC2_SRGBA8
238 ETC2_R11_UNORM
239 ETC2_R11_SNORM
240 ETC2_RG11_UNORM
241 ETC2_RG11_SNORM
242 # ASTC compressed formats
243 ASTC_4x4
244 ASTC_5x4
245 ASTC_5x5
246 ASTC_6x5
247 ASTC_6x6
248 ASTC_8x5
249 ASTC_8x6
250 ASTC_8x8
251 ASTC_10x5
252 ASTC_10x6
253 ASTC_10x8
254 ASTC_10x10
255 ASTC_12x10
256 ASTC_12x12
257 ASTC_4x4_SRGB
258 ASTC_5x4_SRGB
259 ASTC_5x5_SRGB
260 ASTC_6x5_SRGB
261 ASTC_6x6_SRGB
262 ASTC_8x5_SRGB
263 ASTC_8x6_SRGB
264 ASTC_8x8_SRGB
265 ASTC_10x5_SRGB
266 ASTC_10x6_SRGB
267 ASTC_10x8_SRGB
268 ASTC_10x10_SRGB
269 ASTC_12x10_SRGB
270 ASTC_12x12_SRGB
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306