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 |
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_BIT
VK_IMAGE_ASPECT_PLANE_1_BIT
- Three planes
VK_IMAGE_ASPECT_PLANE_0_BIT
VK_IMAGE_ASPECT_PLANE_1_BIT
VK_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_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_A1B5G5R5_UNORM_PACK16_KHR
VK_FORMAT_R10X6_UNORM_PACK16
VK_FORMAT_R10X6G10X6_UNORM_2PACK16
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
VK_FORMAT_R12X4_UNORM_PACK16
VK_FORMAT_R12X4G12X4_UNORM_2PACK16
VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16
VK_FORMAT_A4R4G4B4_UNORM_PACK16
VK_FORMAT_A4B4G4R4_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
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 pixels 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_KHR
)
.
Compressed color formats are compatible with each other if the only
difference between them is the numeric format of
the uncompressed pixels.
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_KHR
).
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.
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_LINEAR
if VkFormat is notVK_FORMAT_UNDEFINED
- VkAndroidHardwareBufferFormatPropertiesANDROID::
formatFeatures
and VkAndroidHardwareBufferFormatProperties2ANDROID::formatFeatures
of a valid external format if VkFormat isVK_FORMAT_UNDEFINED
- VkScreenBufferFormatPropertiesQNX::
formatFeatures
of 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_2D
VK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following formats:
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_SRGB
VK_FORMAT_R8G8_UNORM
VK_FORMAT_R8G8_SNORM
VK_FORMAT_R8G8_SRGB
VK_FORMAT_R8G8B8_UNORM
VK_FORMAT_R8G8B8_SNORM
VK_FORMAT_R8G8B8_SRGB
VK_FORMAT_B8G8R8_UNORM
VK_FORMAT_B8G8R8_SNORM
VK_FORMAT_B8G8R8_SRGB
VK_FORMAT_R8G8B8A8_UNORM
VK_FORMAT_R8G8B8A8_SNORM
VK_FORMAT_R8G8B8A8_SRGB
VK_FORMAT_B8G8R8A8_UNORM
VK_FORMAT_B8G8R8A8_SNORM
VK_FORMAT_B8G8R8A8_SRGB
VK_FORMAT_A8B8G8R8_UNORM_PACK32
VK_FORMAT_A8B8G8R8_SNORM_PACK32
VK_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_2D
VK_IMAGE_VIEW_TYPE_2D_ARRAY
for the following additional formats:
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
If cubic filtering is supported for any other formats, the following image view types must be supported for those formats:
VK_IMAGE_VIEW_TYPE_2D
VK_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_SFLOAT
VK_FORMAT_R32G32B32_SFLOAT
VK_FORMAT_R16G16_SFLOAT
VK_FORMAT_R16G16B16A16_SFLOAT
VK_FORMAT_R16G16_SNORM
VK_FORMAT_R16G16B16A16_SNORM
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 VK_EXT_host_image_copy 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_EXT
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_UNORM
VK_FORMAT_R8G8B8A8_SNORM
VK_FORMAT_R8G8B8A8_UINT
VK_FORMAT_R8G8B8A8_SINT
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_R32G32B32A32_UINT
VK_FORMAT_R32G32B32A32_SINT
VK_FORMAT_R32G32B32A32_SFLOAT
VK_FORMAT_R16G16B16A16_UINT
VK_FORMAT_R16G16B16A16_SINT
VK_FORMAT_R16G16B16A16_SFLOAT
VK_FORMAT_R16G16_SFLOAT
VK_FORMAT_B10G11R11_UFLOAT_PACK32
VK_FORMAT_R16_SFLOAT
VK_FORMAT_R16G16B16A16_UNORM
VK_FORMAT_A2B10G10R10_UNORM_PACK32
VK_FORMAT_R16G16_UNORM
VK_FORMAT_R8G8_UNORM
VK_FORMAT_R16_UNORM
VK_FORMAT_R8_UNORM
VK_FORMAT_R16G16B16A16_SNORM
VK_FORMAT_R16G16_SNORM
VK_FORMAT_R8G8_SNORM
VK_FORMAT_R16_SNORM
VK_FORMAT_R8_SNORM
VK_FORMAT_R16G16_SINT
VK_FORMAT_R8G8_SINT
VK_FORMAT_R16_SINT
VK_FORMAT_R8_SINT
VK_FORMAT_A2B10G10R10_UINT_PACK32
VK_FORMAT_R16G16_UINT
VK_FORMAT_R8G8_UINT
VK_FORMAT_R16_UINT
VK_FORMAT_R8_UINT
VK_FORMAT_A8_UNORM_KHR
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 |
---|---|