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

VkFormatAvailable image formats

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.

Table 68. Plane Format Compatibility Table
PlaneCompatible format for planeWidth relative to the width w of the plane with the largest dimensionsHeight relative to the height h of the plane with the largest dimensions

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w/2

h/2

2

VK_FORMAT_R8_UNORM

w/2

h/2

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w/2

h/2

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w/2

h

2

VK_FORMAT_R8_UNORM

w/2

h

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w/2

h

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8_UNORM

w

h

2

VK_FORMAT_R8_UNORM

w

h

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h/2

2

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h/2

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w/2

h/2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h

2

VK_FORMAT_R10X6_UNORM_PACK16

w/2

h

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w/2

h

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6_UNORM_PACK16

w

h

2

VK_FORMAT_R10X6_UNORM_PACK16

w

h

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h/2

2

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h/2

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w/2

h/2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h

2

VK_FORMAT_R12X4_UNORM_PACK16

w/2

h

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w/2

h

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4_UNORM_PACK16

w

h

2

VK_FORMAT_R12X4_UNORM_PACK16

w

h

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w/2

h/2

2

VK_FORMAT_R16_UNORM

w/2

h/2

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

w/2

h/2

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w/2

h

2

VK_FORMAT_R16_UNORM

w/2

h

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

w/2

h

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16_UNORM

w

h

2

VK_FORMAT_R16_UNORM

w

h

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

0

VK_FORMAT_R8_UNORM

w

h

1

VK_FORMAT_R8G8_UNORM

w

h

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R10X6_UNORM_PACK16

w

h

1

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

w

h

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

0

VK_FORMAT_R12X4_UNORM_PACK16

w

h

1

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

w

h

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

0

VK_FORMAT_R16_UNORM

w

h

1

VK_FORMAT_R16G16_UNORM

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.

Table 69. Interpretation of Numeric Format
Numeric formatType-Declaration instructionsNumeric typeDescription

UNORM

OpTypeFloat

floating-point

The components are unsigned normalized values in the range [0,1]

SNORM

OpTypeFloat

floating-point

The components are signed normalized values in the range [-1,1]

USCALED

OpTypeFloat

floating-point

The components are unsigned integer values that get converted to floating-point in the range [0,2n-1]

SSCALED

OpTypeFloat

floating-point

The components are signed integer values that get converted to floating-point in the range [-2n-1,2n-1-1]

UINT

OpTypeInt

unsigned integer

The components are unsigned integer values in the range [0,2n-1]

SINT

OpTypeInt

signed integer

The components are signed integer values in the range [-2n-1,2n-1-1]

UFLOAT

OpTypeFloat

floating-point

The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats)

SFLOAT

OpTypeFloat

floating-point

The components are signed floating-point numbers

SRGB

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

SFIXED5

OpTypeInt

scaled signed integer

The components are signed fractional integer values that get converted to floating-point in the range [-1024,1023.96875]

n is the number of bits in the component.

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.

Table 70. Interpretation of Compression Scheme
Compression schemeDescription

BC

Block Compression. See .

ETC2

Ericsson Texture Compression. See .

EAC

ETC2 Alpha Compression. See .

ASTC

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.

Table 71. Byte Mappings for Non-Packed/Compressed Color Formats
0123456789101112131415{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_*

A

VK_FORMAT_A8_UNORM_KHR

G0

B

G1

R

VK_FORMAT_G8B8G8R8_422_UNORM

B

G0

R

G1

VK_FORMAT_B8G8R8G8_422_UNORM

R

VK_FORMAT_R16_*

R

G

VK_FORMAT_R16G16_*

R

G

B

VK_FORMAT_R16G16B16_*

R

G

B

A

VK_FORMAT_R16G16B16A16_*

G0

B

G1

R

VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORMVK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORMVK_FORMAT_G16B16G16R16_UNORM

B

G0

R

G1

VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORMVK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORMVK_FORMAT_B16G16R16G16_422_UNORM

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 72. Bit Mappings for Packed 8-Bit Formats
Bit

7

6

5

4

3

2

1

0

VK_FORMAT_R4G4_UNORM_PACK8

R

G

3

2

1

0

3

2

1

0

Table 73. Bit Mappings for Packed 16-Bit Formats
Bit

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_R4G4B4A4_UNORM_PACK16

R

G

B

A

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_B4G4R4A4_UNORM_PACK16

B

G

R

A

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_A4R4G4B4_UNORM_PACK16

A

R

G

B

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_A4B4G4R4_UNORM_PACK16

A

B

G

R

3

2

1

0

3

2

1

0

3

2

1

0

3

2

1

0

VK_FORMAT_R5G6B5_UNORM_PACK16

R

G

B

4

3

2

1

0

5

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_B5G6R5_UNORM_PACK16

B

G

R

4

3

2

1

0

5

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_R5G5B5A1_UNORM_PACK16

R

G

B

A

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

0

VK_FORMAT_B5G5R5A1_UNORM_PACK16

B

G

R

A

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

0

VK_FORMAT_A1R5G5B5_UNORM_PACK16

A

R

G

B

0

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR

A

B

G

R

0

4

3

2

1

0

4

3

2

1

0

4

3

2

1

0

VK_FORMAT_R10X6_UNORM_PACK16

R

X

9

8

7

6

5

4

3

2

1

0

5

4

3

2

1

0

VK_FORMAT_R12X4_UNORM_PACK16

R

X

11

10

9

8

7

6

5

4

3

2

1

0

3

2

1

0

Table 74. Bit Mappings for Packed 32-Bit Formats
Bit

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

B

G

R

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

VK_FORMAT_A2R10G10B10_*_PACK32

A

R

G

B

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_A2B10G10R10_*_PACK32

A

B

G

R

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_B10G11R11_UFLOAT_PACK32

B

G

R

9

8

7

6

5

4

3

2

1

0

10

9

8

7

6

5

4

3

2

1

0

10

9

8

7

6

5

4

3

2

1

0

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

E

B

G

R

4

3

2

1

0

8

7

6

5

4

3

2

1

0

8

7

6

5

4

3

2

1

0

8

7

6

5

4

3

2

1

0

VK_FORMAT_X8_D24_UNORM_PACK32

X

D

7

6

5

4

3

2

1

0

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

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.

Table 75. Compatible Formats
Class, Texel Block Size, Texel Block Extent, # Texels/BlockFormats

8-bit Block size 1 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R4G4_UNORM_PACK8, 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

16-bit Block size 2 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_A4R4G4B4_UNORM_PACK16, VK_FORMAT_A4B4G4R4_UNORM_PACK16, 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_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_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

8-bit alpha Block size 1 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_A8_UNORM_KHR

24-bit Block size 3 byte 1x1x1 block extent 1 texel/block

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

32-bit Block size 4 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R16G16_SFIXED5_NV, 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_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_R32_UINT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

48-bit Block size 6 byte 1x1x1 block extent 1 texel/block

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

64-bit Block size 8 byte 1x1x1 block extent 1 texel/block

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_R32G32_UINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R64_UINT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_SFLOAT

96-bit Block size 12 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_SFLOAT

128-bit Block size 16 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_SFLOAT

192-bit Block size 24 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_SFLOAT

256-bit Block size 32 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_SFLOAT

D16 Block size 2 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_D16_UNORM

D24 Block size 4 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_X8_D24_UNORM_PACK32

D32 Block size 4 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_D32_SFLOAT

S8 Block size 1 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_S8_UINT

D16S8 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_D16_UNORM_S8_UINT

D24S8 Block size 4 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_D24_UNORM_S8_UINT

D32S8 Block size 5 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_D32_SFLOAT_S8_UINT

BC1_RGB Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK

BC1_RGBA Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGBA_SRGB_BLOCK

BC2 Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK

BC3 Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK

BC4 Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK

BC5 Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK

BC6H Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK

BC7 Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK

ETC2_RGB Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

ETC2_RGBA Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

ETC2_EAC_RGBA Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

EAC_R Block size 8 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK

EAC_RG Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11G11_SNORM_BLOCK

ASTC_4x4 Block size 16 byte 4x4x1 block extent 16 texel/block

VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK

ASTC_5x4 Block size 16 byte 5x4x1 block extent 20 texel/block

VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SRGB_BLOCK

ASTC_5x5 Block size 16 byte 5x5x1 block extent 25 texel/block

VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SRGB_BLOCK

ASTC_6x5 Block size 16 byte 6x5x1 block extent 30 texel/block

VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SRGB_BLOCK

ASTC_6x6 Block size 16 byte 6x6x1 block extent 36 texel/block

VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SRGB_BLOCK

ASTC_8x5 Block size 16 byte 8x5x1 block extent 40 texel/block

VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SRGB_BLOCK

ASTC_8x6 Block size 16 byte 8x6x1 block extent 48 texel/block

VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SRGB_BLOCK

ASTC_8x8 Block size 16 byte 8x8x1 block extent 64 texel/block

VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SRGB_BLOCK

ASTC_10x5 Block size 16 byte 10x5x1 block extent 50 texel/block

VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SRGB_BLOCK

ASTC_10x6 Block size 16 byte 10x6x1 block extent 60 texel/block

VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SRGB_BLOCK

ASTC_10x8 Block size 16 byte 10x8x1 block extent 80 texel/block

VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SRGB_BLOCK

ASTC_10x10 Block size 16 byte 10x10x1 block extent 100 texel/block

VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x10_SRGB_BLOCK

ASTC_12x10 Block size 16 byte 12x10x1 block extent 120 texel/block

VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SRGB_BLOCK

ASTC_12x12 Block size 16 byte 12x12x1 block extent 144 texel/block

VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK

32-bit G8B8G8R8 Block size 4 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_G8B8G8R8_422_UNORM

32-bit B8G8R8G8 Block size 4 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_B8G8R8G8_422_UNORM

8-bit 3-plane 420 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

8-bit 2-plane 420 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

8-bit 3-plane 422 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

8-bit 2-plane 422 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

8-bit 3-plane 444 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

64-bit R10G10B10A10 Block size 8 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16

64-bit G10B10G10R10 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16

64-bit B10G10R10G10 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16

10-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

10-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

10-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

10-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

10-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

64-bit R12G12B12A12 Block size 8 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16

64-bit G12B12G12R12 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16

64-bit B12G12R12G12 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16

12-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

12-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

12-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

12-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

12-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

64-bit G16B16G16R16 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_G16B16G16R16_422_UNORM

64-bit B16G16R16G16 Block size 8 byte 2x1x1 block extent 1 texel/block

VK_FORMAT_B16G16R16G16_422_UNORM

16-bit 3-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

16-bit 2-plane 420 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

16-bit 3-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

16-bit 2-plane 422 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

16-bit 3-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

PVRTC1_2BPP Block size 8 byte 8x4x1 block extent 1 texel/block

VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG

PVRTC1_4BPP Block size 8 byte 4x4x1 block extent 1 texel/block

VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG

PVRTC2_2BPP Block size 8 byte 8x4x1 block extent 1 texel/block

VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG

PVRTC2_4BPP Block size 8 byte 4x4x1 block extent 1 texel/block

VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG

8-bit 2-plane 444 Block size 3 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

10-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

12-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

16-bit 2-plane 444 Block size 6 byte 1x1x1 block extent 1 texel/block

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

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

vkGetPhysicalDeviceFormatPropertiesLists physical device’s format capabilities
VkFormatPropertiesStructure specifying image format properties
VkFormatFeatureFlagBitsBitmask specifying features supported by a buffer
VkFormatFeatureFlagsBitmask of VkFormatFeatureFlagBits
vkGetPhysicalDeviceFormatProperties2Lists physical device’s format capabilities
VkFormatProperties2Structure specifying image format properties
VkDrmFormatModifierPropertiesListEXTStructure specifying the list of DRM format modifiers supported for a format
VkDrmFormatModifierPropertiesEXTStructure specifying properties of a format when combined with a DRM format modifier
VkDrmFormatModifierPropertiesList2EXTStructure specifying the list of DRM format modifiers supported for a format
VkDrmFormatModifierProperties2EXTStructure specifying properties of a format when combined with a DRM format modifier
VkFormatProperties3Structure specifying image format properties
VkFormatFeatureFlagBits2Bitmask specifying features supported by a buffer
VkFormatFeatureFlags2Bitmask of VkFormatFeatureFlagBits2
VkSubpassResolvePerformanceQueryEXTStructure specifying the efficiency of subpass resolve for an attachment with a format

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:

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.

Table 76. Key for Format Feature Tables

{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

Table 77. Feature Bits in optimalTilingFeatures

VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

VK_FORMAT_FEATURE_TRANSFER_DST_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT

Table 78. Feature Bits in bufferFeatures

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

Table 79. Mandatory Format Support: Sub-Byte Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_UNDEFINED

VK_FORMAT_R4G4_UNORM_PACK8

VK_FORMAT_R4G4B4A4_UNORM_PACK16

VK_FORMAT_B4G4R4A4_UNORM_PACK16

{sym1}

{sym1}

{sym1}

VK_FORMAT_R5G6B5_UNORM_PACK16

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_B5G6R5_UNORM_PACK16

VK_FORMAT_R5G5B5A1_UNORM_PACK16

VK_FORMAT_B5G5R5A1_UNORM_PACK16

VK_FORMAT_A1R5G5B5_UNORM_PACK16

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR

VK_FORMAT_A4R4G4B4_UNORM_PACK16

{sym2}

{sym2}

{sym2}

VK_FORMAT_A4B4G4R4_UNORM_PACK16

{sym3}

{sym3}

{sym3}

Format features marked {sym2} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the VkPhysicalDevice4444FormatsFeaturesEXT::formatA4R4G4B4 feature.

Format features marked {sym3} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the VkPhysicalDevice4444FormatsFeaturesEXT::formatA4B4G4R4 feature.

Table 80. Mandatory Format Support: 1-3 Byte-Sized Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_R8_UNORM

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8_SNORM

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

VK_FORMAT_R8_USCALED

VK_FORMAT_R8_SSCALED

VK_FORMAT_R8_UINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8_SINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8_SRGB

VK_FORMAT_R8G8_UNORM

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8_SNORM

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

VK_FORMAT_R8G8_USCALED

VK_FORMAT_R8G8_SSCALED

VK_FORMAT_R8G8_UINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8_SINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

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_A8_UNORM_KHR

Format features marked with {sym3} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderStorageImageExtendedFormats feature.

Table 81. Mandatory Format Support: 4 Byte-Sized Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_R8G8B8A8_UNORM

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8B8A8_SNORM

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8B8A8_USCALED

VK_FORMAT_R8G8B8A8_SSCALED

VK_FORMAT_R8G8B8A8_UINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8B8A8_SINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R8G8B8A8_SRGB

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_B8G8R8A8_UNORM

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_B8G8R8A8_SNORM

VK_FORMAT_B8G8R8A8_USCALED

VK_FORMAT_B8G8R8A8_SSCALED

VK_FORMAT_B8G8R8A8_UINT

VK_FORMAT_B8G8R8A8_SINT

VK_FORMAT_B8G8R8A8_SRGB

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A8B8G8R8_UNORM_PACK32

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A8B8G8R8_SNORM_PACK32

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A8B8G8R8_USCALED_PACK32

VK_FORMAT_A8B8G8R8_SSCALED_PACK32

VK_FORMAT_A8B8G8R8_UINT_PACK32

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A8B8G8R8_SINT_PACK32

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A8B8G8R8_SRGB_PACK32

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

Table 82. Mandatory Format Support: 10- and 12-Bit Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

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

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A2B10G10R10_SNORM_PACK32

VK_FORMAT_A2B10G10R10_USCALED_PACK32

VK_FORMAT_A2B10G10R10_SSCALED_PACK32

VK_FORMAT_A2B10G10R10_UINT_PACK32

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

VK_FORMAT_A2B10G10R10_SINT_PACK32

VK_FORMAT_R10X6_UNORM_PACK16

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

VK_FORMAT_R12X4_UNORM_PACK16

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

Format features marked with {sym3} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderStorageImageExtendedFormats feature.

Table 83. Mandatory Format Support: 16-bit Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_R16_UNORM

{sym3}

{sym1}

VK_FORMAT_R16_SNORM

{sym3}

{sym1}

VK_FORMAT_R16_USCALED

VK_FORMAT_R16_SSCALED

VK_FORMAT_R16_UINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16_SINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16_SFLOAT

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16G16_UNORM

{sym3}

{sym1}

VK_FORMAT_R16G16_SNORM

{sym3}

{sym1}

VK_FORMAT_R16G16_USCALED

VK_FORMAT_R16G16_SSCALED

VK_FORMAT_R16G16_UINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16G16_SINT

{sym1}

{sym1}

{sym3}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16G16_SFLOAT

{sym1}

{sym1}

{sym1}

{sym3}

{sym4}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym4}

{sym4}

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

{sym3}

{sym1}

VK_FORMAT_R16G16B16A16_SNORM

{sym3}

{sym1}

VK_FORMAT_R16G16B16A16_USCALED

VK_FORMAT_R16G16B16A16_SSCALED

VK_FORMAT_R16G16B16A16_UINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16G16B16A16_SINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R16G16B16A16_SFLOAT

{sym1}

{sym1}

{sym1}

{sym1}

{sym4}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym4}

Format features marked with {sym3} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderStorageImageExtendedFormats feature.

Format features marked with {sym4} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderFloat16VectorAtomics feature.

Table 84. Mandatory Format Support: 32-bit Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_R32_UINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32_SINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32_SFLOAT

{sym1}

{sym1}

{sym1}

{sym2}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32_UINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32_SINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32_SFLOAT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32B32_UINT

{sym1}

VK_FORMAT_R32G32B32_SINT

{sym1}

VK_FORMAT_R32G32B32_SFLOAT

{sym1}

VK_FORMAT_R32G32B32A32_UINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32B32A32_SINT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

VK_FORMAT_R32G32B32A32_SFLOAT

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

{sym1}

Format features marked with {sym2} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderImageFloat32Atomics or the shaderImageFloat32AtomicAdd or the shaderImageFloat32AtomicMinMax feature.

Table 85. Mandatory Format Support: 64-bit/uneven Components

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_R64_UINT

{sym2}

{sym2}

VK_FORMAT_R64_SINT

{sym2}

{sym2}

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

{sym1}

{sym1}

{sym1}

{sym3}

{sym1}

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

{sym1}

{sym1}

{sym1}

Format features marked with {sym3} :normative{type="must"} be supported for optimalTilingFeatures if the VkPhysicalDevice supports the shaderStorageImageExtendedFormats feature.

If the shaderImageInt64Atomics feature is supported, VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT :normative{type="must"} be advertised in optimalTilingFeatures for both VK_FORMAT_R64_UINT and VK_FORMAT_R64_SINT.

Table 86. Mandatory Format Support: Depth/Stencil With VkImageType VK_IMAGE_TYPE_2D

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_D16_UNORM

{sym1}

{sym1}

{sym1}

VK_FORMAT_X8_D24_UNORM_PACK32

{sym2}

VK_FORMAT_D32_SFLOAT

{sym1}

{sym1}

{sym2}

VK_FORMAT_S8_UINT

VK_FORMAT_D16_UNORM_S8_UINT

VK_FORMAT_D24_UNORM_S8_UINT

{sym2}

VK_FORMAT_D32_SFLOAT_S8_UINT

{sym2}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature :normative{type="must"} be supported for at least one of VK_FORMAT_X8_D24_UNORM_PACK32 and VK_FORMAT_D32_SFLOAT, and :normative{type="must"} be supported for at least one of VK_FORMAT_D24_UNORM_S8_UINT and VK_FORMAT_D32_SFLOAT_S8_UINT.

bufferFeatures :normative{type="must"} not support any features for these formats

Table 87. Mandatory Format Support: BC Compressed Formats With VkImageType VK_IMAGE_TYPE_2D and VK_IMAGE_TYPE_3D

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_BC1_RGB_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC1_RGB_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC1_RGBA_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC1_RGBA_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC2_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC2_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC3_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC3_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC4_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC4_SNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC5_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC5_SNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC6H_UFLOAT_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC6H_SFLOAT_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC7_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_BC7_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

The VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features :normative{type="must"} be supported in optimalTilingFeatures for all the formats in at least one of: this table, , or .

Table 88. Mandatory Format Support: ETC2 and EAC Compressed Formats With VkImageType VK_IMAGE_TYPE_2D

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_EAC_R11_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_EAC_R11_SNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_EAC_R11G11_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_EAC_R11G11_SNORM_BLOCK

{sym2}

{sym2}

{sym2}

The VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features :normative{type="must"} be supported in optimalTilingFeatures for all the formats in at least one of: this table, , or .

Table 89. Mandatory Format Support: ASTC LDR Compressed Formats With VkImageType VK_IMAGE_TYPE_2D

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

{downarrow}

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

{downarrow}

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

{downarrow}

VK_FORMAT_FEATURE_BLIT_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

Format

VK_FORMAT_ASTC_4x4_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_4x4_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_5x4_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_5x4_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_5x5_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_5x5_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_6x5_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_6x5_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_6x6_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_6x6_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x5_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x5_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x6_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x6_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x8_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_8x8_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x5_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x5_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x6_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x6_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x8_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x8_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x10_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_10x10_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_12x10_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_12x10_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_12x12_UNORM_BLOCK

{sym2}

{sym2}

{sym2}

VK_FORMAT_ASTC_12x12_SRGB_BLOCK

{sym2}

{sym2}

{sym2}

The VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, VK_FORMAT_FEATURE_BLIT_SRC_BIT and VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features :normative{type="must"} be supported in optimalTilingFeatures for all the formats in at least one of: this table, , or .

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:

Table 90. Formats Requiring Sampler Y′CBCR Conversion for VK_IMAGE_ASPECT_COLOR_BIT Image Views

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT

{downarrow}

VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT

{downarrow}

VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT

{downarrow}

VK_FORMAT_FEATURE_TRANSFER_DST_BIT

{downarrow}

VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

{downarrow}

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

{downarrow}

VK_FORMAT_FEATURE_DISJOINT_BIT

{downarrow}

Format

Planes

VK_FORMAT_G8B8G8R8_422_UNORM

1

VK_FORMAT_B8G8R8G8_422_UNORM

1

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

3

{sym2}

{sym2}

{sym2}

{sym2}

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

2

{sym2}

{sym2}

{sym2}

{sym2}

VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_422_UNORM

2

VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM

3

VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 {sym3}

1

VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16

1

VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16

1

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16

3

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16

2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16

3

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16

2

VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16

3

VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16

1

VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16

1

VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16

1

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16

3

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16

3

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16

3

VK_FORMAT_G16B16G16R16_422_UNORM

1

VK_FORMAT_B16G16R16G16_422_UNORM

1

VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM

3

VK_FORMAT_G16_B16R16_2PLANE_420_UNORM

2

VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM

3

VK_FORMAT_G16_B16R16_2PLANE_422_UNORM

2

VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_444_UNORM

2

VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16

2

VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16

2

VK_FORMAT_G16_B16R16_2PLANE_444_UNORM

2

Format features marked {sym2} :normative{type="must"} be supported for optimalTilingFeatures with VkImageType VK_IMAGE_TYPE_2D if the VkPhysicalDevice supports the VkPhysicalDeviceSamplerYcbcrConversionFeatures feature.

Formats marked {sym3} do not require a sampler {YCbCr} conversion for VK_IMAGE_ASPECT_COLOR_BIT image views if the VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::formatRgba10x6WithoutYCbCrSampler feature is enabled.

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.

Table 91. Format Feature Dependent Buffer Usage Flags
Buffer usage flagRequired format feature flag

VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_BUFFER_USAGE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

Table 92. Format Feature Dependent Image Usage Flags
Image usage flagRequired format feature flag

VK_IMAGE_USAGE_SAMPLED_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_IMAGE_USAGE_STORAGE_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR

VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR

VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR

VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR