The features for the set of formats (VkFormat) supported by the
implementation are queried individually using the
vkGetPhysicalDeviceFormatProperties command.
The available formats are defined by the VkFormat enumeration:
typedef enum VkFormat {
VK_FORMAT_UNDEFINED = 0,
VK_FORMAT_R4G4_UNORM_PACK8 = 1,
VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
VK_FORMAT_R8_UNORM = 9,
VK_FORMAT_R8_SNORM = 10,
VK_FORMAT_R8_USCALED = 11,
VK_FORMAT_R8_SSCALED = 12,
VK_FORMAT_R8_UINT = 13,
VK_FORMAT_R8_SINT = 14,
VK_FORMAT_R8_SRGB = 15,
VK_FORMAT_R8G8_UNORM = 16,
VK_FORMAT_R8G8_SNORM = 17,
VK_FORMAT_R8G8_USCALED = 18,
VK_FORMAT_R8G8_SSCALED = 19,
VK_FORMAT_R8G8_UINT = 20,
VK_FORMAT_R8G8_SINT = 21,
VK_FORMAT_R8G8_SRGB = 22,
VK_FORMAT_R8G8B8_UNORM = 23,
VK_FORMAT_R8G8B8_SNORM = 24,
VK_FORMAT_R8G8B8_USCALED = 25,
VK_FORMAT_R8G8B8_SSCALED = 26,
VK_FORMAT_R8G8B8_UINT = 27,
VK_FORMAT_R8G8B8_SINT = 28,
VK_FORMAT_R8G8B8_SRGB = 29,
VK_FORMAT_B8G8R8_UNORM = 30,
VK_FORMAT_B8G8R8_SNORM = 31,
VK_FORMAT_B8G8R8_USCALED = 32,
VK_FORMAT_B8G8R8_SSCALED = 33,
VK_FORMAT_B8G8R8_UINT = 34,
VK_FORMAT_B8G8R8_SINT = 35,
VK_FORMAT_B8G8R8_SRGB = 36,
VK_FORMAT_R8G8B8A8_UNORM = 37,
VK_FORMAT_R8G8B8A8_SNORM = 38,
VK_FORMAT_R8G8B8A8_USCALED = 39,
VK_FORMAT_R8G8B8A8_SSCALED = 40,
VK_FORMAT_R8G8B8A8_UINT = 41,
VK_FORMAT_R8G8B8A8_SINT = 42,
VK_FORMAT_R8G8B8A8_SRGB = 43,
VK_FORMAT_B8G8R8A8_UNORM = 44,
VK_FORMAT_B8G8R8A8_SNORM = 45,
VK_FORMAT_B8G8R8A8_USCALED = 46,
VK_FORMAT_B8G8R8A8_SSCALED = 47,
VK_FORMAT_B8G8R8A8_UINT = 48,
VK_FORMAT_B8G8R8A8_SINT = 49,
VK_FORMAT_B8G8R8A8_SRGB = 50,
VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
VK_FORMAT_R16_UNORM = 70,
VK_FORMAT_R16_SNORM = 71,
VK_FORMAT_R16_USCALED = 72,
VK_FORMAT_R16_SSCALED = 73,
VK_FORMAT_R16_UINT = 74,
VK_FORMAT_R16_SINT = 75,
VK_FORMAT_R16_SFLOAT = 76,
VK_FORMAT_R16G16_UNORM = 77,
VK_FORMAT_R16G16_SNORM = 78,
VK_FORMAT_R16G16_USCALED = 79,
VK_FORMAT_R16G16_SSCALED = 80,
VK_FORMAT_R16G16_UINT = 81,
VK_FORMAT_R16G16_SINT = 82,
VK_FORMAT_R16G16_SFLOAT = 83,
VK_FORMAT_R16G16B16_UNORM = 84,
VK_FORMAT_R16G16B16_SNORM = 85,
VK_FORMAT_R16G16B16_USCALED = 86,
VK_FORMAT_R16G16B16_SSCALED = 87,
VK_FORMAT_R16G16B16_UINT = 88,
VK_FORMAT_R16G16B16_SINT = 89,
VK_FORMAT_R16G16B16_SFLOAT = 90,
VK_FORMAT_R16G16B16A16_UNORM = 91,
VK_FORMAT_R16G16B16A16_SNORM = 92,
VK_FORMAT_R16G16B16A16_USCALED = 93,
VK_FORMAT_R16G16B16A16_SSCALED = 94,
VK_FORMAT_R16G16B16A16_UINT = 95,
VK_FORMAT_R16G16B16A16_SINT = 96,
VK_FORMAT_R16G16B16A16_SFLOAT = 97,
VK_FORMAT_R32_UINT = 98,
VK_FORMAT_R32_SINT = 99,
VK_FORMAT_R32_SFLOAT = 100,
VK_FORMAT_R32G32_UINT = 101,
VK_FORMAT_R32G32_SINT = 102,
VK_FORMAT_R32G32_SFLOAT = 103,
VK_FORMAT_R32G32B32_UINT = 104,
VK_FORMAT_R32G32B32_SINT = 105,
VK_FORMAT_R32G32B32_SFLOAT = 106,
VK_FORMAT_R32G32B32A32_UINT = 107,
VK_FORMAT_R32G32B32A32_SINT = 108,
VK_FORMAT_R32G32B32A32_SFLOAT = 109,
VK_FORMAT_R64_UINT = 110,
VK_FORMAT_R64_SINT = 111,
VK_FORMAT_R64_SFLOAT = 112,
VK_FORMAT_R64G64_UINT = 113,
VK_FORMAT_R64G64_SINT = 114,
VK_FORMAT_R64G64_SFLOAT = 115,
VK_FORMAT_R64G64B64_UINT = 116,
VK_FORMAT_R64G64B64_SINT = 117,
VK_FORMAT_R64G64B64_SFLOAT = 118,
VK_FORMAT_R64G64B64A64_UINT = 119,
VK_FORMAT_R64G64B64A64_SINT = 120,
VK_FORMAT_R64G64B64A64_SFLOAT = 121,
VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
VK_FORMAT_D16_UNORM = 124,
VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
VK_FORMAT_D32_SFLOAT = 126,
VK_FORMAT_S8_UINT = 127,
VK_FORMAT_D16_UNORM_S8_UINT = 128,
VK_FORMAT_D24_UNORM_S8_UINT = 129,
VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
VK_FORMAT_BC2_UNORM_BLOCK = 135,
VK_FORMAT_BC2_SRGB_BLOCK = 136,
VK_FORMAT_BC3_UNORM_BLOCK = 137,
VK_FORMAT_BC3_SRGB_BLOCK = 138,
VK_FORMAT_BC4_UNORM_BLOCK = 139,
VK_FORMAT_BC4_SNORM_BLOCK = 140,
VK_FORMAT_BC5_UNORM_BLOCK = 141,
VK_FORMAT_BC5_SNORM_BLOCK = 142,
VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
VK_FORMAT_BC7_UNORM_BLOCK = 145,
VK_FORMAT_BC7_SRGB_BLOCK = 146,
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
} VkFormat;
VK_FORMAT_UNDEFINED
VK_FORMAT_R4G4_UNORM_PACK8
VK_FORMAT_R4G4B4A4_UNORM_PACK16
VK_FORMAT_B4G4R4A4_UNORM_PACK16
VK_FORMAT_R5G6B5_UNORM_PACK16
VK_FORMAT_B5G6R5_UNORM_PACK16
VK_FORMAT_R5G5B5A1_UNORM_PACK16
VK_FORMAT_B5G5R5A1_UNORM_PACK16
VK_FORMAT_A1R5G5B5_UNORM_PACK16
VK_FORMAT_R8_UNORM
VK_FORMAT_R8_SNORM
VK_FORMAT_R8_USCALED
VK_FORMAT_R8_SSCALED
VK_FORMAT_R8_UINT
VK_FORMAT_R8_SINT
VK_FORMAT_R8_SRGB
VK_FORMAT_R8G8_UNORM
VK_FORMAT_R8G8_SNORM
VK_FORMAT_R8G8_USCALED
VK_FORMAT_R8G8_SSCALED
VK_FORMAT_R8G8_UINT
VK_FORMAT_R8G8_SINT
VK_FORMAT_R8G8_SRGB
VK_FORMAT_R8G8B8_UNORM
VK_FORMAT_R8G8B8_SNORM
VK_FORMAT_R8G8B8_USCALED
VK_FORMAT_R8G8B8_SSCALED
VK_FORMAT_R8G8B8_UINT
VK_FORMAT_R8G8B8_SINT
VK_FORMAT_R8G8B8_SRGB
VK_FORMAT_B8G8R8_UNORM
VK_FORMAT_B8G8R8_SNORM
VK_FORMAT_B8G8R8_USCALED
VK_FORMAT_B8G8R8_SSCALED
VK_FORMAT_B8G8R8_UINT
VK_FORMAT_B8G8R8_SINT
VK_FORMAT_B8G8R8_SRGB
VK_FORMAT_R8G8B8A8_UNORM
VK_FORMAT_R8G8B8A8_SNORM
VK_FORMAT_R8G8B8A8_USCALED
VK_FORMAT_R8G8B8A8_SSCALED
VK_FORMAT_R8G8B8A8_UINT
VK_FORMAT_R8G8B8A8_SINT
VK_FORMAT_R8G8B8A8_SRGB
VK_FORMAT_B8G8R8A8_UNORM
VK_FORMAT_B8G8R8A8_SNORM
VK_FORMAT_B8G8R8A8_USCALED
VK_FORMAT_B8G8R8A8_SSCALED
VK_FORMAT_B8G8R8A8_UINT
VK_FORMAT_B8G8R8A8_SINT
VK_FORMAT_B8G8R8A8_SRGB
VK_FORMAT_A8B8G8R8_UNORM_PACK32
VK_FORMAT_A8B8G8R8_SNORM_PACK32
VK_FORMAT_A8B8G8R8_USCALED_PACK32
VK_FORMAT_A8B8G8R8_SSCALED_PACK32
VK_FORMAT_A8B8G8R8_UINT_PACK32
VK_FORMAT_A8B8G8R8_SINT_PACK32
VK_FORMAT_A8B8G8R8_SRGB_PACK32
VK_FORMAT_A2R10G10B10_UNORM_PACK32
VK_FORMAT_A2R10G10B10_SNORM_PACK32
VK_FORMAT_A2R10G10B10_USCALED_PACK32
VK_FORMAT_A2R10G10B10_SSCALED_PACK32
VK_FORMAT_A2R10G10B10_UINT_PACK32
VK_FORMAT_A2R10G10B10_SINT_PACK32
VK_FORMAT_A2B10G10R10_UNORM_PACK32
VK_FORMAT_A2B10G10R10_SNORM_PACK32
VK_FORMAT_A2B10G10R10_USCALED_PACK32
VK_FORMAT_A2B10G10R10_SSCALED_PACK32
VK_FORMAT_A2B10G10R10_UINT_PACK32
VK_FORMAT_A2B10G10R10_SINT_PACK32
VK_FORMAT_R16_UNORM
VK_FORMAT_R16_SNORM
VK_FORMAT_R16_USCALED
VK_FORMAT_R16_SSCALED
VK_FORMAT_R16_UINT
VK_FORMAT_R16_SINT
VK_FORMAT_R16_SFLOAT
VK_FORMAT_R16G16_UNORM
VK_FORMAT_R16G16_SNORM
VK_FORMAT_R16G16_USCALED
VK_FORMAT_R16G16_SSCALED
VK_FORMAT_R16G16_UINT
VK_FORMAT_R16G16_SINT
VK_FORMAT_R16G16_SFLOAT
VK_FORMAT_R16G16B16_UNORM
VK_FORMAT_R16G16B16_SNORM
VK_FORMAT_R16G16B16_USCALED
VK_FORMAT_R16G16B16_SSCALED
VK_FORMAT_R16G16B16_UINT
VK_FORMAT_R16G16B16_SINT
VK_FORMAT_R16G16B16_SFLOAT
VK_FORMAT_R16G16B16A16_UNORM
VK_FORMAT_R16G16B16A16_SNORM
VK_FORMAT_R16G16B16A16_USCALED
VK_FORMAT_R16G16B16A16_SSCALED
VK_FORMAT_R16G16B16A16_UINT
VK_FORMAT_R16G16B16A16_SINT
VK_FORMAT_R16G16B16A16_SFLOAT
VK_FORMAT_R32_UINT
VK_FORMAT_R32_SINT
VK_FORMAT_R32_SFLOAT
VK_FORMAT_R32G32_UINT
VK_FORMAT_R32G32_SINT
VK_FORMAT_R32G32_SFLOAT
VK_FORMAT_R32G32B32_UINT
VK_FORMAT_R32G32B32_SINT
VK_FORMAT_R32G32B32_SFLOAT
VK_FORMAT_R32G32B32A32_UINT
VK_FORMAT_R32G32B32A32_SINT
VK_FORMAT_R32G32B32A32_SFLOAT
VK_FORMAT_R64_UINT
VK_FORMAT_R64_SINT
VK_FORMAT_R64_SFLOAT
VK_FORMAT_R64G64_UINT
VK_FORMAT_R64G64_SINT
VK_FORMAT_R64G64_SFLOAT
VK_FORMAT_R64G64B64_UINT
VK_FORMAT_R64G64B64_SINT
VK_FORMAT_R64G64B64_SFLOAT
VK_FORMAT_R64G64B64A64_UINT
VK_FORMAT_R64G64B64A64_SINT
VK_FORMAT_R64G64B64A64_SFLOAT
VK_FORMAT_B10G11R11_UFLOAT_PACK32
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
VK_FORMAT_D16_UNORM
VK_FORMAT_X8_D24_UNORM_PACK32
VK_FORMAT_D32_SFLOAT
VK_FORMAT_S8_UINT
VK_FORMAT_D16_UNORM_S8_UINT
VK_FORMAT_D24_UNORM_S8_UINT
VK_FORMAT_D32_SFLOAT_S8_UINT
VK_FORMAT_BC1_RGB_UNORM_BLOCK
VK_FORMAT_BC1_RGB_SRGB_BLOCK
VK_FORMAT_BC1_RGBA_UNORM_BLOCK
VK_FORMAT_BC1_RGBA_SRGB_BLOCK
VK_FORMAT_BC2_UNORM_BLOCK
VK_FORMAT_BC2_SRGB_BLOCK
VK_FORMAT_BC3_UNORM_BLOCK
VK_FORMAT_BC3_SRGB_BLOCK
VK_FORMAT_BC4_UNORM_BLOCK
VK_FORMAT_BC4_SNORM_BLOCK
VK_FORMAT_BC5_UNORM_BLOCK
VK_FORMAT_BC5_SNORM_BLOCK
VK_FORMAT_BC6H_UFLOAT_BLOCK
VK_FORMAT_BC6H_SFLOAT_BLOCK
VK_FORMAT_BC7_UNORM_BLOCK
VK_FORMAT_BC7_SRGB_BLOCK
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
VK_FORMAT_EAC_R11_UNORM_BLOCK
VK_FORMAT_EAC_R11_SNORM_BLOCK
VK_FORMAT_EAC_R11G11_UNORM_BLOCK
VK_FORMAT_EAC_R11G11_SNORM_BLOCK
VK_FORMAT_ASTC_4x4_UNORM_BLOCK
VK_FORMAT_ASTC_4x4_SRGB_BLOCK
VK_FORMAT_ASTC_5x4_UNORM_BLOCK
VK_FORMAT_ASTC_5x4_SRGB_BLOCK
VK_FORMAT_ASTC_5x5_UNORM_BLOCK
VK_FORMAT_ASTC_5x5_SRGB_BLOCK
VK_FORMAT_ASTC_6x5_UNORM_BLOCK
VK_FORMAT_ASTC_6x5_SRGB_BLOCK
VK_FORMAT_ASTC_6x6_UNORM_BLOCK
VK_FORMAT_ASTC_6x6_SRGB_BLOCK
VK_FORMAT_ASTC_8x5_UNORM_BLOCK
VK_FORMAT_ASTC_8x5_SRGB_BLOCK
VK_FORMAT_ASTC_8x6_UNORM_BLOCK
VK_FORMAT_ASTC_8x6_SRGB_BLOCK
VK_FORMAT_ASTC_8x8_UNORM_BLOCK
VK_FORMAT_ASTC_8x8_SRGB_BLOCK
VK_FORMAT_ASTC_10x5_UNORM_BLOCK
VK_FORMAT_ASTC_10x5_SRGB_BLOCK
VK_FORMAT_ASTC_10x6_UNORM_BLOCK
VK_FORMAT_ASTC_10x6_SRGB_BLOCK
VK_FORMAT_ASTC_10x8_UNORM_BLOCK
VK_FORMAT_ASTC_10x8_SRGB_BLOCK
VK_FORMAT_ASTC_10x10_UNORM_BLOCK
VK_FORMAT_ASTC_10x10_SRGB_BLOCK
VK_FORMAT_ASTC_12x10_UNORM_BLOCK
VK_FORMAT_ASTC_12x10_SRGB_BLOCK
VK_FORMAT_ASTC_12x12_UNORM_BLOCK
VK_FORMAT_ASTC_12x12_SRGB_BLOCK
For the purposes of address alignment when accessing buffer memory containing vertex attribute or texel data, the following formats are considered packed - whole texels or attributes are stored in a single data element, rather than individual components occupying a single data element:
VK_FORMAT_R4G4_UNORM_PACK8
Packed into 16-bit data types:
VK_FORMAT_R4G4B4A4_UNORM_PACK16
VK_FORMAT_B4G4R4A4_UNORM_PACK16
VK_FORMAT_R5G6B5_UNORM_PACK16
VK_FORMAT_B5G6R5_UNORM_PACK16
VK_FORMAT_R5G5B5A1_UNORM_PACK16
VK_FORMAT_B5G5R5A1_UNORM_PACK16
VK_FORMAT_A1R5G5B5_UNORM_PACK16
Packed into 32-bit data types:
VK_FORMAT_A8B8G8R8_UNORM_PACK32
VK_FORMAT_A8B8G8R8_SNORM_PACK32
VK_FORMAT_A8B8G8R8_USCALED_PACK32
VK_FORMAT_A8B8G8R8_SSCALED_PACK32
VK_FORMAT_A8B8G8R8_UINT_PACK32
VK_FORMAT_A8B8G8R8_SINT_PACK32
VK_FORMAT_A8B8G8R8_SRGB_PACK32
VK_FORMAT_A2R10G10B10_UNORM_PACK32
VK_FORMAT_A2R10G10B10_SNORM_PACK32
VK_FORMAT_A2R10G10B10_USCALED_PACK32
VK_FORMAT_A2R10G10B10_SSCALED_PACK32
VK_FORMAT_A2R10G10B10_UINT_PACK32
VK_FORMAT_A2R10G10B10_SINT_PACK32
VK_FORMAT_A2B10G10R10_UNORM_PACK32
VK_FORMAT_A2B10G10R10_SNORM_PACK32
VK_FORMAT_A2B10G10R10_USCALED_PACK32
VK_FORMAT_A2B10G10R10_SSCALED_PACK32
VK_FORMAT_A2B10G10R10_UINT_PACK32
VK_FORMAT_A2B10G10R10_SINT_PACK32
VK_FORMAT_B10G11R11_UFLOAT_PACK32
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
VK_FORMAT_X8_D24_UNORM_PACK32
A “format” is represented by a single enum value. The name of a format is usually built up by using the following pattern:
VK_FORMAT_{component-format|compression-scheme}_{numeric-format}The component-format specifies either the size of the R, G, B, and A components (if they are present) in the case of a color format, or the size of the depth (D) and stencil (S) components (if they are present) in the case of a depth/stencil format (see below). An X indicates a component that is unused, but may be present for padding.
Table 31.3. Interpretation of Numeric Format
| Numeric format | Description |
|---|---|
| The components are unsigned normalized values in the range [0,1] |
| The components are signed normalized values in the range [-1,1] |
| The components are unsigned integer values that get converted to floating-point in the range [0,2n-1] |
| The components are signed integer values that get converted to floating-point in the range [-2n-1,2n-1-1] |
| The components are unsigned integer values in the range [0,2n-1] |
| The components are signed integer values in the range [-2n-1,2n-1-1] |
| The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats) |
| The components are signed floating-point numbers |
| The R, G, and B components are unsigned normalized values that represent values using sRGB nonlinear encoding, while the A component (if one exists) is a regular unsigned normalized value |
The suffix _PACKnn indicates that the format is packed into an
underlying type with nn bits.
The suffix _BLOCK indicates that the format is a block-compressed
format, with the representation of multiple pixels encoded interdependently
within a region.
Table 31.4. Interpretation of Compression Scheme
| Compression scheme | Description |
|---|---|
| Block Compression. See Section B.1, “Block-Compressed Image Formats”. |
| Ericsson Texture Compression. See Section B.2, “ETC Compressed Image Formats”. |
| ETC2 Alpha Compression. See Section B.2, “ETC Compressed Image Formats”. |
| Adaptive Scalable Texture Compression (LDR Profile). See Section B.3, “ASTC Compressed Image Formats”. |
Color formats must be represented in memory in exactly the form indicated by the format’s name. This means that promoting one format to another with more bits per component and/or additional components must not occur for color formats. Depth/stencil formats have more relaxed requirements as discussed below.
The representation of non-packed formats is that the first component specified in the name of the format is in the lowest memory addresses and the last component specified is in the highest memory addresses. See Byte mappings for non-packed/compressed color formats. The in-memory ordering of bytes within a component is determined by the host endianness.
Table 31.5. Byte mappings for non-packed/compressed color formats
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | $\leftarrow$ Byte |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R | VK_FORMAT_R8_* | |||||||||||||||
R | G | VK_FORMAT_R8G8_* | ||||||||||||||
R | G | B | VK_FORMAT_R8G8B8_* | |||||||||||||
B | G | R | VK_FORMAT_B8G8R8_* | |||||||||||||
R | G | B | A | VK_FORMAT_R8G8B8A8_* | ||||||||||||
B | G | R | A | VK_FORMAT_B8G8R8A8_* | ||||||||||||
R | VK_FORMAT_R16_* | |||||||||||||||
R | G | VK_FORMAT_R16G16_* | ||||||||||||||
R | G | B | VK_FORMAT_R16G16B16_* | |||||||||||||
R | G | B | A | VK_FORMAT_R16G16B16A16_* | ||||||||||||
R | VK_FORMAT_R32_* | |||||||||||||||
R | G | VK_FORMAT_R32G32_* | ||||||||||||||
R | G | B | VK_FORMAT_R32G32B32_* | |||||||||||||
R | G | B | A | VK_FORMAT_R32G32B32A32_* | ||||||||||||
R | VK_FORMAT_R64_* | |||||||||||||||
R | G | VK_FORMAT_R64G64_* | ||||||||||||||
VK_FORMAT_R64G64B64_* as VK_FORMAT_R64G64_* but with B in bytes 16-23 | ||||||||||||||||
VK_FORMAT_R64G64B64A64_* as VK_FORMAT_R64G64B64_* but with A in bytes 24-31 | ||||||||||||||||
Packed formats store multiple components within one underlying type. The bit representation is that the first component specified in the name of the format is in the most-significant bits and the last component specified is in the least-significant bits of the underlying type. The in-memory ordering of bytes comprising the underlying type is determined by the host endianness.
Table 31.6. Bit mappings for packed 8-bit formats
| Bit $\rightarrow$ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
VK_FORMAT_R4G4_UNORM_PACK8 | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ |
Table 31.7. Bit mappings for packed 16-bit VK_FORMAT_* formats
| Bit $\rightarrow$ | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R4G4B4A4_UNORM_PACK16 | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $A_3$ | $A_2$ | $A_1$ | $A_0$ |
B4G4R4A4_UNORM_PACK16 | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $A_3$ | $A_2$ | $A_1$ | $A_0$ |
R5G6B5_UNORM_PACK16 | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ |
B5G6R5_UNORM_PACK16 | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ |
R5G5B5A1_UNORM_PACK16 | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $A_0$ |
B5G5R5A1_UNORM_PACK16 | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $A_0$ |
A1R5G5B5_UNORM_PACK16 | $A_0$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ |
Table 31.8. Bit mappings for packed 32-bit formats
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VK_FORMAT_A8B8G8R8_*_PACK32 | |||||||||||||||||||||||||||||||
$A_7$ | $A_6$ | $A_5$ | $A_4$ | $A_3$ | $A_2$ | $A_1$ | $A_0$ | $B_7$ | $B_6$ | $B_5$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_7$ | $G_6$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_7$ | $R_6$ | $R_5$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ |
VK_FORMAT_A2R10G10B10_*_PACK32 | |||||||||||||||||||||||||||||||
$A_1$ | $A_0$ | $R_9$ | $R_8$ | $R_7$ | $R_6$ | $R_5$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ | $G_9$ | $G_8$ | $G_7$ | $G_6$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $B_9$ | $B_8$ | $B_7$ | $B_6$ | $B_5$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ |
VK_FORMAT_A2B10G10R10_*_PACK32 | |||||||||||||||||||||||||||||||
$A_1$ | $A_0$ | $B_9$ | $B_8$ | $B_7$ | $B_6$ | $B_5$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_9$ | $G_8$ | $G_7$ | $G_6$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_9$ | $R_8$ | $R_7$ | $R_6$ | $R_5$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ |
VK_FORMAT_B10G11R11_UFLOAT_PACK32 | |||||||||||||||||||||||||||||||
$B_9$ | $B_8$ | $B_7$ | $B_6$ | $B_5$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_{10}$ | $G_9$ | $G_8$ | $G_7$ | $G_6$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_{10}$ | $R_9$ | $R_8$ | $R_7$ | $R_6$ | $R_5$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ |
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 | |||||||||||||||||||||||||||||||
$E_4$ | $E_3$ | $E_2$ | $E_1$ | $E_0$ | $B_8$ | $B_7$ | $B_6$ | $B_5$ | $B_4$ | $B_3$ | $B_2$ | $B_1$ | $B_0$ | $G_8$ | $G_7$ | $G_6$ | $G_5$ | $G_4$ | $G_3$ | $G_2$ | $G_1$ | $G_0$ | $R_8$ | $R_7$ | $R_6$ | $R_5$ | $R_4$ | $R_3$ | $R_2$ | $R_1$ | $R_0$ |
VK_FORMAT_X8_D24_UNORM_PACK32 | |||||||||||||||||||||||||||||||
$X_7$ | $X_6$ | $X_5$ | $X_4$ | $X_3$ | $X_2$ | $X_1$ | $X_0$ | $D_{23}$ | $D_{22}$ | $D_{21}$ | $D_{20}$ | $D_{19}$ | $D_{18}$ | $D_{17}$ | $D_{16}$ | $D_{15}$ | $D_{14}$ | $D_{13}$ | $D_{12}$ | $D_{11}$ | $D_{10}$ | $D_9$ | $D_8$ | $D_7$ | $D_6$ | $D_5$ | $D_4$ | $D_3$ | $D_2$ | $D_1$ | $D_0$ |
Depth/stencil formats are considered opaque and need not be stored in the exact number of bits per texel or component ordering indicated by the format enum. However, implementations must not substitute a different depth or stencil precision than that described in the format (e.g. D16 must not be implemented as D24 or D32).
Uncompressed color formats are compatible with each other if they occupy the same number of bits per data element. Compressed color formats are compatible with each other if the only difference between them is the numerical type of the uncompressed pixels (e.g. signed vs. unsigned, or SRGB vs. UNORM encoding). Each depth/stencil format is only compatible with itself. In the following table, all the formats in the same row are compatible.
Table 31.9. Compatible formats
| Class | Formats |
|---|---|
8-bit |
|
16-bit |
|
24-bit |
|
32-bit |
|
48-bit |
|
64-bit |
|
96-bit |
|
128-bit |
|
192-bit |
|
256-bit |
|
BC1_RGB |
|
BC1_RGBA |
|
BC2 |
|
BC3 |
|
BC4 |
|
BC5 |
|
BC6H |
|
BC7 |
|
ETC2_RGB |
|
ETC2_RGBA |
|
ETC2_EAC_RGBA |
|
EAC_R |
|
EAC_RG |
|
ASTC_4x4 |
|
ASTC_5x4 |
|
ASTC_5x5 |
|
ASTC_6x5 |
|
ASTC_6x6 |
|
ASTC_8x5 |
|
ASTC_8x6 |
|
ASTC_8x8 |
|
ASTC_10x5 |
|
ASTC_10x6 |
|
ASTC_10x8 |
|
ASTC_10x10 |
|
ASTC_12x10 |
|
ASTC_12x12 |
|
D16 |
|
D24 |
|
D32 |
|
S8 |
|
D16S8 |
|
D24S8 |
|
D32S8 |
|
To query supported format features which are properties of the physical device, call:
void vkGetPhysicalDeviceFormatProperties(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkFormatProperties* pFormatProperties);
physicalDevice is the physical device from which to query the
format properties.
format is the format whose properties are queried.
pFormatProperties is a pointer to a VkFormatProperties
structure in which physical device properties for format are
returned.
The VkPhysicalDeviceLimits structure is defined as:
typedef struct VkFormatProperties {
VkFormatFeatureFlags linearTilingFeatures;
VkFormatFeatureFlags optimalTilingFeatures;
VkFormatFeatureFlags bufferFeatures;
} VkFormatProperties;
linearTilingFeatures describes the features supported by
VK_IMAGE_TILING_LINEAR.
optimalTilingFeatures describes the features supported by
VK_IMAGE_TILING_OPTIMAL.
bufferFeatures describes the features supported by buffers.
Supported features are described as a set of VkFormatFeatureFlagBits:
typedef enum VkFormatFeatureFlagBits {
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
} VkFormatFeatureFlagBits;
The linearTilingFeatures and optimalTilingFeatures members of
the VkFormatProperties structure describe what features are supported
by VK_IMAGE_TILING_LINEAR and VK_IMAGE_TILING_OPTIMAL images,
respectively.
The following bits may be set in linearTilingFeatures and
optimalTilingFeatures, indicating they are supported by images or
image views created with the queried
vkGetPhysicalDeviceFormatProperties::format:
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
VkImageView can be sampled from. See
sampled images section.
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
VkImageView can be used as storage image. See
storage images section.
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
VkImageView can be used as storage image that supports atomic
operations.
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
VkImageView can be used as a framebuffer color attachment and
as an input attachment.
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
VkImageView can be used as a framebuffer color attachment that
supports blending and as an input attachment.
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
VkImageView can be used as a framebuffer depth/stencil attachment
and as an input attachment.
VK_FORMAT_FEATURE_BLIT_SRC_BIT
VkImage can be used as srcImage for the
vkCmdBlitImage command.
VK_FORMAT_FEATURE_BLIT_DST_BIT
VkImage can be used as dstImage for the
vkCmdBlitImage command.
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
If VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is also set,
VkImageView can be used with a sampler that has either of
magFilter or minFilter set to VK_FILTER_LINEAR,
or mipmapMode set to VK_SAMPLER_MIPMAP_MODE_LINEAR.
If VK_FORMAT_FEATURE_BLIT_SRC_BIT is also set, VkImage
can be used as the srcImage to vkCmdBlitImage
with a filter of VK_FILTER_LINEAR. This bit must only be
exposed for formats that also support the
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT or
VK_FORMAT_FEATURE_BLIT_SRC_BIT.
If the format being queried is a depth/stencil format, this bit only indicates that the depth aspect (not the stencil aspect) of an image of this format supports linear filtering, and that linear filtering of the depth aspect is supported whether depth compare is enabled in the sampler or not. If this bit is not present, linear filtering with depth compare disabled is unsupported and linear filtering with depth compare enabled is supported, but may compute the filtered value in an implementation-dependent manner which differs from the normal rules of linear filtering. The resulting value must be in the range $[0,1]$ and should be proportional to, or a weighted average of, the number of comparison passes or failures.
The following features may appear in bufferFeatures, indicating they
are supported by buffers or buffer views created with the queried
vkGetPhysicalDeviceFormatProperties::format:
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
VkBufferView that can be bound to
a VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
VkBufferView that can be bound to
a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format.
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
VkVertexInputAttributeDescription::format).
| Note | |
|---|---|
If no format feature flags are supported, then the only possible use would be image transfers - which alone are not useful. As such, if no format feature flags are supported, the format itself is not supported, and images of that format cannot be created. |
If format is a block-compression format, then buffers must not support
any features for the format.
Implementations must support at least the following set of
features on the listed formats. For images, these features must
be supported for every VkImageType (including arrayed and cube
variants) unless otherwise noted. These features are supported
on existing formats without needing to advertise an extension or
needing to explicitly enable them. Support for additional functionality
beyond the requirements listed here is queried using the
vkGetPhysicalDeviceFormatProperties command.
The following tables show which feature bits must be supported for each format.
Table 31.10. Key for format feature tables
✓ | This feature must be supported on the named format |
† | This feature must be supported on at least some of the named formats, with more information in the table where the symbol appears |
Table 31.11. Feature bits in optimalTilingFeatures
|
|
|
|
|
|
|
|
|
Table 31.12. Feature bits in bufferFeatures
|
|
|
|
Table 31.13. Mandatory format support: sub-byte channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
Table 31.14. Mandatory format support: 1-3 byte-sized channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
Table 31.15. Mandatory format support: 4 byte-sized channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
Table 31.16. Mandatory format support: 10-bit channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| |||||||||||||
Table 31.17. Mandatory format support: 16-bit channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| ✓ | ||||||||||||
| ✓ | ||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ||||||||||||
| ✓ | ||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ||||||||||||
| ✓ | ||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
Table 31.18. Mandatory format support: 32-bit channels
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ||||||||||||
| ✓ | ||||||||||||
| ✓ | ||||||||||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
Table 31.19. Mandatory format support: 64-bit/uneven channels and depth/stencil
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| |||||||||||||
| ✓ | ✓ | ✓ | ✓ | |||||||||
| ✓ | ✓ | ✓ | ||||||||||
| ✓ | ✓ | ✓ | ||||||||||
| † | ||||||||||||
| ✓ | ✓ | † | ||||||||||
| |||||||||||||
| |||||||||||||
| † | ||||||||||||
| † | ||||||||||||
| |||||||||||||
Table 31.20. Mandatory format support: BC compressed formats with VkImageType VK_IMAGE_TYPE_2D and VK_IMAGE_TYPE_3D
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
The | |||||||||||||
Table 31.21. Mandatory format support: ETC2 and EAC compressed formats with VkImageType VK_IMAGE_TYPE_2D
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
The | |||||||||||||
Table 31.22. Mandatory format support: ASTC LDR compressed formats with VkImageType VK_IMAGE_TYPE_2D
| |||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
| $\downarrow$ | ||||||||||||
Format | $\downarrow$ | ||||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
| † | † | † | ||||||||||
The | |||||||||||||