Formats
Supported buffer and image formats may vary across implementations. A minimum set of format features are guaranteed, but others must be explicitly queried before use to ensure they are supported by the implementation.
The features for the set of formats (VkFormat) supported by the implementation are queried individually using the vkGetPhysicalDeviceFormatProperties command.
Format Definition
Compatible Formats of Planes of Multi-Planar Formats
Individual planes of multi-planar formats are size-compatible with single-plane color formats if they occupy the same number of bits per texel block, and are compatible with those formats if they have the same block extent.
In the following table, individual planes of a multi-planar format are compatible with the format listed against the relevant plane index for that multi-planar format, and any format compatible with the listed single-plane format according to Format Compatibility Classes. These planes are also size-compatible with any format that is size-compatible with the listed single-plane format.
| Plane | Compatible format for plane | Width relative to the width | Height relative to the height |
|---|---|---|---|
0 | w | h | |
1 | w/2 | h/2 | |
2 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h | |
2 | w/2 | h | |
0 | w | h | |
1 | w/2 | h | |
0 | w | h | |
1 | w | h | |
2 | w | h | |
0 | w | h | |
1 | w/2 | h/2 | |
2 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h | |
2 | w/2 | h | |
0 | w | h | |
1 | w/2 | h | |
0 | w | h | |
1 | w | h | |
2 | w | h | |
0 | w | h | |
1 | w/2 | h/2 | |
2 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h | |
2 | w/2 | h | |
0 | w | h | |
1 | w/2 | h | |
0 | w | h | |
1 | w | h | |
2 | w | h | |
0 | w | h | |
1 | w/2 | h/2 | |
2 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h/2 | |
0 | w | h | |
1 | w/2 | h | |
2 | w/2 | h | |
0 | w | h | |
1 | w/2 | h | |
0 | w | h | |
1 | w | h | |
2 | w | h | |
0 | w | h | |
1 | w | h | |
0 | w | h | |
1 | w | h | |
0 | w | h | |
1 | w | h | |
0 | w | h | |
1 | w | h | |
Compatible Formats for Depth-Stencil to/from Color Copies
If the maintenance8 feature is enabled,
individual aspects of depth-stencil formats are size-compatible with certain
single-component color formats when performing bit-wise copy operations.
The following is a complete list of all per-aspect format compatibility
relations by size:
- 32-bit depth (
VK_FORMAT_D32_SFLOAT,VK_FORMAT_D32_SFLOAT_S8_UINT)VK_FORMAT_R32_SFLOAT,VK_FORMAT_R32_SINT,VK_FORMAT_R32_UINT
- 24-bit depth (
VK_FORMAT_X8_D24_UNORM_PACK32,VK_FORMAT_D24_UNORM_S8_UINT)VK_FORMAT_R32_SFLOAT,VK_FORMAT_R32_SINT,VK_FORMAT_R32_UINT
- 16-bit depth (
VK_FORMAT_D16_UNORM,VK_FORMAT_D16_UNORM_S8_UINT)VK_FORMAT_R16_SFLOAT,VK_FORMAT_R16_UNORM,VK_FORMAT_R16_SNORM,VK_FORMAT_R16_UINT,VK_FORMAT_R16_SINT
- 8-bit stencil (
VK_FORMAT_S8_UINT,VK_FORMAT_D16_UNORM_S8_UINT,VK_FORMAT_D24_UNORM_S8_UINT,VK_FORMAT_D32_SFLOAT_S8_UINT)VK_FORMAT_R8_UINT,VK_FORMAT_R8_SINT,VK_FORMAT_R8_UNORM,VK_FORMAT_R8_SNORM
Multi-Planar Format Image Aspect
When using VkImageAspectFlagBits to select a plane of a multi-planar format, the following are the valid options:
- Two planes
VK_IMAGE_ASPECT_PLANE_0_BITVK_IMAGE_ASPECT_PLANE_1_BIT
- Three planes
VK_IMAGE_ASPECT_PLANE_0_BITVK_IMAGE_ASPECT_PLANE_1_BITVK_IMAGE_ASPECT_PLANE_2_BIT
Packed Formats
For the purposes of address alignment when accessing buffer memory containing vertex attribute or texel data, the following formats are considered packed - components of the texels or attributes are stored in bitfields packed into one or more 8-, 16-, or 32-bit fundamental data type.
- Packed into 8-bit data types:
VK_FORMAT_R4G4_UNORM_PACK8
- Packed into 16-bit data types:
VK_FORMAT_R4G4B4A4_UNORM_PACK16VK_FORMAT_B4G4R4A4_UNORM_PACK16VK_FORMAT_R5G6B5_UNORM_PACK16VK_FORMAT_B5G6R5_UNORM_PACK16VK_FORMAT_R5G5B5A1_UNORM_PACK16VK_FORMAT_B5G5R5A1_UNORM_PACK16VK_FORMAT_A1R5G5B5_UNORM_PACK16VK_FORMAT_A1B5G5R5_UNORM_PACK16VK_FORMAT_R10X6_UNORM_PACK16VK_FORMAT_R10X6G10X6_UNORM_2PACK16VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16VK_FORMAT_R12X4_UNORM_PACK16VK_FORMAT_R12X4G12X4_UNORM_2PACK16VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16VK_FORMAT_A4R4G4B4_UNORM_PACK16VK_FORMAT_A4B4G4R4_UNORM_PACK16
- Packed into 32-bit data types:
VK_FORMAT_A8B8G8R8_UNORM_PACK32VK_FORMAT_A8B8G8R8_SNORM_PACK32VK_FORMAT_A8B8G8R8_USCALED_PACK32VK_FORMAT_A8B8G8R8_SSCALED_PACK32VK_FORMAT_A8B8G8R8_UINT_PACK32VK_FORMAT_A8B8G8R8_SINT_PACK32VK_FORMAT_A8B8G8R8_SRGB_PACK32VK_FORMAT_A2R10G10B10_UNORM_PACK32VK_FORMAT_A2R10G10B10_SNORM_PACK32VK_FORMAT_A2R10G10B10_USCALED_PACK32VK_FORMAT_A2R10G10B10_SSCALED_PACK32VK_FORMAT_A2R10G10B10_UINT_PACK32VK_FORMAT_A2R10G10B10_SINT_PACK32VK_FORMAT_A2B10G10R10_UNORM_PACK32VK_FORMAT_A2B10G10R10_SNORM_PACK32VK_FORMAT_A2B10G10R10_USCALED_PACK32VK_FORMAT_A2B10G10R10_SSCALED_PACK32VK_FORMAT_A2B10G10R10_UINT_PACK32VK_FORMAT_A2B10G10R10_SINT_PACK32VK_FORMAT_B10G11R11_UFLOAT_PACK32VK_FORMAT_E5B9G9R9_UFLOAT_PACK32VK_FORMAT_X8_D24_UNORM_PACK32
Identification of Formats
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 indicates 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.
| Numeric format | Type-Declaration instructions | Numeric type | Description |
|---|---|---|---|
OpTypeFloat | floating-point | The components are unsigned normalized values in the range | |
OpTypeFloat | floating-point | The components are signed normalized values in the range | |
OpTypeFloat | floating-point | The components are unsigned integer values that get converted to floating-point in the range [0,2 | |
OpTypeFloat | floating-point | The components are signed integer values that get converted to floating-point in the range [-2 | |
OpTypeInt | unsigned integer | The components are unsigned integer values in the range [0,2 | |
OpTypeInt | signed integer | The components are signed integer values in the range [-2 | |
OpTypeFloat | floating-point | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats) | |
OpTypeFloat | floating-point | The components are signed floating-point numbers | |
OpTypeFloat | floating-point | 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 | |
OpTypeInt | scaled signed integer | The components are signed fractional integer values that get converted to floating-point in the range | |
The suffix _PACKnn indicates that the format is packed into an
underlying type with nn bits.
The suffix _mPACKnn is a short-hand that indicates that the format has
m groups of components (which may or may not be stored in separate
planes) that are each 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 texels encoded interdependently
within a region.
| Compression scheme | Description |
|---|---|
Block Compression. See | |
Ericsson Texture Compression. See | |
ETC2 Alpha Compression. See | |
Adaptive Scalable Texture Compression (LDR Profile). See |
For multi-planar images, the components in separate planes are separated
by underscores, and the number of planes is indicated by the addition of a
_2PLANE or _3PLANE suffix.
Similarly, the separate aspects of depth-stencil formats are separated by
underscores, although these are not considered separate planes.
Formats are suffixed by _422 to indicate that planes other than the
first are reduced in size by a factor of two horizontally or that the R and
B values appear at half the horizontal frequency of the G values, _420
to indicate that planes other than the first are reduced in size by a factor
of two both horizontally and vertically, and _444 for consistency to
indicate that all three planes of a three-planar image are the same size.
No common format has a single plane containing both R and B components but does not store these components at reduced horizontal resolution.
Representation and Texel Block Size
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.
Each format has a texel block size, the number of bytes used to store one texel block (a single addressable element of an uncompressed image, or a single compressed block of a compressed image). The texel block size for each format is shown in the Compatible formats table.
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.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {leftarrow} Byte |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R | ||||||||||||||||
R | G | |||||||||||||||
R | G | B | ||||||||||||||
B | G | R | ||||||||||||||
R | G | B | A | |||||||||||||
B | G | R | A | |||||||||||||
A | ||||||||||||||||
G | B | G | R | |||||||||||||
B | G | R | G | |||||||||||||
R | ||||||||||||||||
R | G | |||||||||||||||
R | G | B | ||||||||||||||
R | G | B | A | |||||||||||||
G | B | G | R | |||||||||||||
B | G | R | G | |||||||||||||
R | ||||||||||||||||
R | G | |||||||||||||||
R | G | B | ||||||||||||||
R | G | B | A | |||||||||||||
R | ||||||||||||||||
R | G | |||||||||||||||
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.
| Bit | |||||||
|---|---|---|---|---|---|---|---|
| Bit | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bit | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Depth/Stencil Formats
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 is described in the format (e.g. D16 must not be implemented as D24 or D32).
Format Compatibility Classes
Uncompressed color formats are compatible with each other if they occupy
the same number of bits per texel block
as long as neither or both are alpha formats (e.g.,
VK_FORMAT_A8_UNORM)
.
Compressed color formats are compatible with each other if the only
difference between them is the numeric format of
the uncompressed texels.
Each depth/stencil format is only compatible with itself.
In the following table, all the formats in the
same row are compatible.
Each format has a defined texel block extent specifying how many texels
each texel block represents in each dimension.
| Class, Texel Block Size, Texel Block Extent, # Texels/Block | Formats |
|---|---|
8-bit Block size 1 byte 1x1x1 block extent 1 texel/block | |
16-bit Block size 2 byte 1x1x1 block extent 1 texel/block | |
8-bit alpha Block size 1 byte 1x1x1 block extent 1 texel/block | |
24-bit Block size 3 byte 1x1x1 block extent 1 texel/block | |
32-bit Block size 4 byte 1x1x1 block extent 1 texel/block | |
48-bit Block size 6 byte 1x1x1 block extent 1 texel/block | |
64-bit Block size 8 byte 1x1x1 block extent 1 texel/block | |
96-bit Block size 12 byte 1x1x1 block extent 1 texel/block | |
128-bit Block size 16 byte 1x1x1 block extent 1 texel/block | |
192-bit Block size 24 byte 1x1x1 block extent 1 texel/block | |
256-bit Block size 32 byte 1x1x1 block extent 1 texel/block | |
D16 Block size 2 byte 1x1x1 block extent 1 texel/block | |
D24 Block size 4 byte 1x1x1 block extent 1 texel/block | |
D32 Block size 4 byte 1x1x1 block extent 1 texel/block | |
S8 Block size 1 byte 1x1x1 block extent 1 texel/block | |
D16S8 Block size 3 byte 1x1x1 block extent 1 texel/block | |
D24S8 Block size 4 byte 1x1x1 block extent 1 texel/block | |
D32S8 Block size 5 byte 1x1x1 block extent 1 texel/block | |
BC1_RGB Block size 8 byte 4x4x1 block extent 16 texel/block | |
BC1_RGBA Block size 8 byte 4x4x1 block extent 16 texel/block | |
BC2 Block size 16 byte 4x4x1 block extent 16 texel/block | |
BC3 Block size 16 byte 4x4x1 block extent 16 texel/block | |
BC4 Block size 8 byte 4x4x1 block extent 16 texel/block | |
BC5 Block size 16 byte 4x4x1 block extent 16 texel/block | |
BC6H Block size 16 byte 4x4x1 block extent 16 texel/block | |
BC7 Block size 16 byte 4x4x1 block extent 16 texel/block | |
ETC2_RGB Block size 8 byte 4x4x1 block extent 16 texel/block | |
ETC2_RGBA Block size 8 byte 4x4x1 block extent 16 texel/block | |
ETC2_EAC_RGBA Block size 16 byte 4x4x1 block extent 16 texel/block | |
EAC_R Block size 8 byte 4x4x1 block extent 16 texel/block | |
EAC_RG Block size 16 byte 4x4x1 block extent 16 texel/block | |
ASTC_4x4 Block size 16 byte 4x4x1 block extent 16 texel/block | |
ASTC_5x4 Block size 16 byte 5x4x1 block extent 20 texel/block | |
ASTC_5x5 Block size 16 byte 5x5x1 block extent 25 texel/block | |
ASTC_6x5 Block size 16 byte 6x5x1 block extent 30 texel/block | |
ASTC_6x6 Block size 16 byte 6x6x1 block extent 36 texel/block | |
ASTC_8x5 Block size 16 byte 8x5x1 block extent 40 texel/block | |
ASTC_8x6 Block size 16 byte 8x6x1 block extent 48 texel/block | |
ASTC_8x8 Block size 16 byte 8x8x1 block extent 64 texel/block | |
ASTC_10x5 Block size 16 byte 10x5x1 block extent 50 texel/block | |
ASTC_10x6 Block size 16 byte 10x6x1 block extent 60 texel/block | |
ASTC_10x8 Block size 16 byte 10x8x1 block extent 80 texel/block | |
ASTC_10x10 Block size 16 byte 10x10x1 block extent 100 texel/block | |
ASTC_12x10 Block size 16 byte 12x10x1 block extent 120 texel/block | |
ASTC_12x12 Block size 16 byte 12x12x1 block extent 144 texel/block | |
32-bit G8B8G8R8 Block size 4 byte 2x1x1 block extent 1 texel/block | |
32-bit B8G8R8G8 Block size 4 byte 2x1x1 block extent 1 texel/block | |
8-bit 3-plane 420 Block size 3 byte 1x1x1 block extent 1 texel/block | |
8-bit 2-plane 420 Block size 3 byte 1x1x1 block extent 1 texel/block | |
8-bit 3-plane 422 Block size 3 byte 1x1x1 block extent 1 texel/block | |
8-bit 2-plane 422 Block size 3 byte 1x1x1 block extent 1 texel/block | |
8-bit 3-plane 444 Block size 3 byte 1x1x1 block extent 1 texel/block | |
64-bit R10G10B10A10 Block size 8 byte 1x1x1 block extent 1 texel/block | |
64-bit G10B10G10R10 Block size 8 byte 2x1x1 block extent 1 texel/block | |
64-bit B10G10R10G10 Block size 8 byte 2x1x1 block extent 1 texel/block | |
10-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
10-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
10-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
10-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
10-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block | |
64-bit R12G12B12A12 Block size 8 byte 1x1x1 block extent 1 texel/block | |
64-bit G12B12G12R12 Block size 8 byte 2x1x1 block extent 1 texel/block | |
64-bit B12G12R12G12 Block size 8 byte 2x1x1 block extent 1 texel/block | |
12-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
12-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
12-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
12-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
12-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block | |
64-bit G16B16G16R16 Block size 8 byte 2x1x1 block extent 1 texel/block | |
64-bit B16G16R16G16 Block size 8 byte 2x1x1 block extent 1 texel/block | |
16-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
16-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block | |
16-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
16-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block | |
16-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block | |
PVRTC1_2BPP Block size 8 byte 8x4x1 block extent 1 texel/block | |
PVRTC1_4BPP Block size 8 byte 4x4x1 block extent 1 texel/block | |
PVRTC2_2BPP Block size 8 byte 8x4x1 block extent 1 texel/block | |
PVRTC2_4BPP Block size 8 byte 4x4x1 block extent 1 texel/block | |
8-bit 2-plane 444 Block size 3 byte 1x1x1 block extent 1 texel/block | |
10-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block | |
12-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block | |
16-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block |
Size Compatibility
Color formats with the same texel block size are considered
size-compatible as long as neither or both are alpha formats (e.g.,
VK_FORMAT_A8_UNORM).
If two size-compatible formats have different block extents (i.e. for
compressed formats), then an image with size A × B × C in
one format with a block extent of a × b × c can be
represented as an image with size X × Y × Z in the other
format with block extent x × y × z at the ratio between
the block extents for each format, where
- ⌈A/a⌉ = ⌈X/x⌉
- ⌈B/b⌉ = ⌈Y/y⌉
- ⌈C/c⌉ = ⌈Z/z⌉
For example, a 7x3 image in the VK_FORMAT_ASTC_8x5_UNORM_BLOCK format
can be represented as a 1x1 VK_FORMAT_R64G64_UINT image.
Images created with the
VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag can have
size-compatible views created from them to enable access via different
size-compatible formats.
Image views created in this way will be sized to match the expectations of
the block extents noted above.
Copy operations are able to copy between size-compatible formats in different resources to enable manipulation of data in different formats. The extent used in these copy operations always matches the source image, and is resized to the expectations of the block extents noted above for the destination image.
Copy operations between color formats and a depth-stencil are size-compatible as defined by the list of compatible depth-stencil and color formats.
Format Properties
Potential Format Features
Some valid usage conditions depend on the format features supported by a VkImage whose VkImageTiling is unknown. In such cases the exact VkFormatFeatureFlagBits supported by the VkImage cannot be determined, so the valid usage conditions are expressed in terms of the potential format features of the VkImage format.
The potential format features of a VkFormat are defined as follows:
- The union of VkFormatFeatureFlagBits
and VkFormatFeatureFlagBits2,
supported when the VkImageTiling is
VK_IMAGE_TILING_OPTIMAL,VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, orVK_IMAGE_TILING_LINEARif VkFormat is notVK_FORMAT_UNDEFINED - VkAndroidHardwareBufferFormatPropertiesANDROID::
formatFeaturesand VkAndroidHardwareBufferFormatProperties2ANDROID::formatFeaturesof a valid external format if VkFormat isVK_FORMAT_UNDEFINED - VkScreenBufferFormatPropertiesQNX::
formatFeaturesof a valid external format if VkFormat isVK_FORMAT_UNDEFINED
Required Format Support
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.
Unless otherwise excluded below, the required formats are supported for all VkImageCreateFlags values as long as those flag values are otherwise allowed.
The following tables show which feature bits must be supported for each
format.
Formats that are required to support
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must also support
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and
VK_FORMAT_FEATURE_TRANSFER_DST_BIT.
{sym1} | This feature :normative{type="must"} be supported on the named format |
{sym2} | This feature :normative{type="must"} be supported on at least some of the named formats, with more information in the table where the symbol appears |
{sym3} | This feature :normative{type="must"} be supported with some caveats or preconditions, with more information in the table where the symbol appears |
{sym4} | This feature :normative{type="must"} be supported with some caveats or preconditions, with more information in the table where the symbol appears |
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | |||||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym3} | {sym3} | {sym3} | |||||||||||
Format features marked {sym2} :normative{type="must"} be supported for
| |||||||||||||
Format features marked {sym3} :normative{type="must"} be supported for
| |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
Format features marked with {sym3} :normative{type="must"} be supported for
| |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | ||||||||
Format features marked with {sym3} :normative{type="must"} be supported for
| |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym3} | {sym1} | ||||||||||||
{sym3} | {sym1} | ||||||||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym3} | {sym1} | ||||||||||||
{sym3} | {sym1} | ||||||||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym3} | {sym1} | {sym1} | {sym1} | {sym1} | |||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym4} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym4} | {sym4} | ||
{sym3} | {sym1} | ||||||||||||
{sym3} | {sym1} | ||||||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym4} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym4} | ||
Format features marked with {sym3} :normative{type="must"} be supported for
| |||||||||||||
Format features marked with {sym4} :normative{type="must"} be supported for
| |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||
{sym1} | {sym1} | {sym1} | {sym2} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | |||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | |||||||||||||
{sym1} | |||||||||||||
{sym1} | |||||||||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
{sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | {sym1} | ||||||
Format features marked with {sym2} :normative{type="must"} be supported for
| |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym2} | {sym2} | ||||||||||||
{sym2} | {sym2} | ||||||||||||
{sym1} | {sym1} | {sym1} | {sym3} | {sym1} | |||||||||
{sym1} | {sym1} | {sym1} | |||||||||||
Format features marked with {sym3} :normative{type="must"} be supported for
| |||||||||||||
If the | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym1} | {sym1} | {sym1} | |||||||||||
{sym2} | |||||||||||||
{sym1} | {sym1} | {sym2} | |||||||||||
{sym2} | |||||||||||||
{sym2} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
The | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
The | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{downarrow} | |||||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
{sym2} | {sym2} | {sym2} | |||||||||||
The | |||||||||||||
If cubic filtering is supported,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must be
supported for the following image view types:
VK_IMAGE_VIEW_TYPE_2DVK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following formats:
VK_FORMAT_R4G4_UNORM_PACK8VK_FORMAT_R4G4B4A4_UNORM_PACK16VK_FORMAT_B4G4R4A4_UNORM_PACK16VK_FORMAT_R5G6B5_UNORM_PACK16VK_FORMAT_B5G6R5_UNORM_PACK16VK_FORMAT_R5G5B5A1_UNORM_PACK16VK_FORMAT_B5G5R5A1_UNORM_PACK16VK_FORMAT_A1R5G5B5_UNORM_PACK16VK_FORMAT_R8_UNORMVK_FORMAT_R8_SNORMVK_FORMAT_R8_SRGBVK_FORMAT_R8G8_UNORMVK_FORMAT_R8G8_SNORMVK_FORMAT_R8G8_SRGBVK_FORMAT_R8G8B8_UNORMVK_FORMAT_R8G8B8_SNORMVK_FORMAT_R8G8B8_SRGBVK_FORMAT_B8G8R8_UNORMVK_FORMAT_B8G8R8_SNORMVK_FORMAT_B8G8R8_SRGBVK_FORMAT_R8G8B8A8_UNORMVK_FORMAT_R8G8B8A8_SNORMVK_FORMAT_R8G8B8A8_SRGBVK_FORMAT_B8G8R8A8_UNORMVK_FORMAT_B8G8R8A8_SNORMVK_FORMAT_B8G8R8A8_SRGBVK_FORMAT_A8B8G8R8_UNORM_PACK32VK_FORMAT_A8B8G8R8_SNORM_PACK32VK_FORMAT_A8B8G8R8_SRGB_PACK32
If ETC compressed formats are supported,
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must be
supported for the following image view types:
VK_IMAGE_VIEW_TYPE_2DVK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following additional formats:
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCKVK_FORMAT_ETC2_R8G8B8_SRGB_BLOCKVK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCKVK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCKVK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCKVK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
If cubic filtering is supported for any other formats, the following image view types must be supported for those formats:
VK_IMAGE_VIEW_TYPE_2DVK_IMAGE_VIEW_TYPE_2D_ARRAY
To be used with VkImageView with subresourceRange.aspectMask
equal to VK_IMAGE_ASPECT_COLOR_BIT, sampler Y′CBCR conversion must be enabled for the following formats:
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
{downarrow} | |||||||||||
1 | |||||||||||
1 | |||||||||||
3 | {sym2} | {sym2} | {sym2} | {sym2} | |||||||
2 | {sym2} | {sym2} | {sym2} | {sym2} | |||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
1 | |||||||||||
1 | |||||||||||
1 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
1 | |||||||||||
1 | |||||||||||
1 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
1 | |||||||||||
1 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
2 | |||||||||||
3 | |||||||||||
2 | |||||||||||
2 | |||||||||||
2 | |||||||||||
2 | |||||||||||
Format features marked {sym2} :normative{type="must"} be supported for
| |||||||||||
Formats marked {sym3} do not require a sampler {YCbCr} conversion for
| |||||||||||
Implementations are not required to support the
VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
VK_IMAGE_CREATE_SPARSE_ALIASED_BIT VkImageCreateFlags for the
above formats that require sampler Y′CBCR
conversion.
To determine whether the implementation supports sparse image creation flags
with these formats use vkGetPhysicalDeviceImageFormatProperties or
vkGetPhysicalDeviceImageFormatProperties2.
VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT must be supported for
the following formats if the fragmentDensityMap feature is enabled:
VK_FORMAT_R8G8_UNORM
VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR must
be supported in bufferFeatures for the following formats if the
accelerationStructure feature is
supported:
VK_FORMAT_R32G32_SFLOATVK_FORMAT_R32G32B32_SFLOATVK_FORMAT_R16G16_SFLOATVK_FORMAT_R16G16B16A16_SFLOATVK_FORMAT_R16G16_SNORMVK_FORMAT_R16G16B16A16_SNORM
VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV must
be supported in bufferFeatures for the following formats if either of
the spheres or linearSweptSpheres feature is supported:
VK_FORMAT_R32_SFLOATVK_FORMAT_R16_SFLOAT
VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must be
supported for the following formats if the
attachmentFragmentShadingRate feature is supported:
VK_FORMAT_R8_UINT
If the hostImageCopy feature is supported
and VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is supported in
optimalTilingFeatures or linearTilingFeatures for a color
format, VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT must also be
supported in optimalTilingFeatures or linearTilingFeatures
respectively.
Formats Without Shader Storage Format
The device-level features for using a storage image or a storage texel
buffer with an image format of Unknown,
shaderStorageImageReadWithoutFormat and
shaderStorageImageWriteWithoutFormat, only apply to the following
formats:
VK_FORMAT_R8G8B8A8_UNORMVK_FORMAT_R8G8B8A8_SNORMVK_FORMAT_R8G8B8A8_UINTVK_FORMAT_R8G8B8A8_SINTVK_FORMAT_R32_UINTVK_FORMAT_R32_SINTVK_FORMAT_R32_SFLOATVK_FORMAT_R32G32_UINTVK_FORMAT_R32G32_SINTVK_FORMAT_R32G32_SFLOATVK_FORMAT_R32G32B32A32_UINTVK_FORMAT_R32G32B32A32_SINTVK_FORMAT_R32G32B32A32_SFLOATVK_FORMAT_R16G16B16A16_UINTVK_FORMAT_R16G16B16A16_SINTVK_FORMAT_R16G16B16A16_SFLOATVK_FORMAT_R16G16_SFLOATVK_FORMAT_B10G11R11_UFLOAT_PACK32VK_FORMAT_R16_SFLOATVK_FORMAT_R16G16B16A16_UNORMVK_FORMAT_A2B10G10R10_UNORM_PACK32VK_FORMAT_R16G16_UNORMVK_FORMAT_R8G8_UNORMVK_FORMAT_R16_UNORMVK_FORMAT_R8_UNORMVK_FORMAT_R16G16B16A16_SNORMVK_FORMAT_R16G16_SNORMVK_FORMAT_R8G8_SNORMVK_FORMAT_R16_SNORMVK_FORMAT_R8_SNORMVK_FORMAT_R16G16_SINTVK_FORMAT_R8G8_SINTVK_FORMAT_R16_SINTVK_FORMAT_R8_SINTVK_FORMAT_A2B10G10R10_UINT_PACK32VK_FORMAT_R16G16_UINTVK_FORMAT_R8G8_UINTVK_FORMAT_R16_UINTVK_FORMAT_R8_UINTVK_FORMAT_A8_UNORM
This list of formats is the union of required storage formats from
Required Format Support section and
formats listed in shaderStorageImageExtendedFormats.
An implementation that supports VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
for any format from the given list of formats and supports
shaderStorageImageReadWithoutFormat must support
VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT for that same
format if Vulkan 1.3 or the VK_KHR_format_feature_flags2 extension
is supported.
An implementation that supports VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
for any format from the given list of formats and supports
shaderStorageImageWriteWithoutFormat must support
VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT for that same
format if Vulkan 1.3 or the VK_KHR_format_feature_flags2 extension
is supported.
An implementation that does not support either of
VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT or
VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT for a format
must not report support for VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT or
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT for that format if it is
not listed in the SPIR-V and Vulkan Image Format
Compatibility table.
Some older implementations do not follow this restriction.
They report support for formats as storage images even though they do not
support access without the Format qualifier and there is no matching
Format token.
Such images cannot be either read from or written to.
Drivers which pass Vulkan conformance test suite version 1.3.9.0, or any subsequent version will conform to the requirement above.
Depth Comparison Format Support
If Vulkan 1.3 or the VK_KHR_format_feature_flags2 extension is
supported, a depth/stencil format with a depth component supporting
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must support
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT.
Format Feature Dependent Usage Flags
Certain resource usage flags depend on support for the corresponding format feature flag for the format in question. The following tables list the VkBufferUsageFlagBits and VkImageUsageFlagBits that have such dependencies, and the format feature flags they depend on. Additional restrictions, including, but not limited to, further required format feature flags specific to the particular use of the resource may apply, as described in the respective sections of this specification.
| Buffer usage flag | Required format feature flag |
|---|---|
| Image usage flag | Required format feature flag |
|---|---|