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.

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

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM

0

VK_FORMAT_R14X2_UNORM_PACK16_ARM

w

h

1

VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM

w/2

h/2

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM

0

VK_FORMAT_R14X2_UNORM_PACK16_ARM

w

h

1

VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM

w/2

h

Compatible Formats for Depth-Stencil to/from Color Copies

If the maintenance8 feature is enabled, individual aspects of depth-stencil formats are size-compatible with certain single-component color formats when performing bit-wise copy operations. The following is a complete list of all per-aspect format compatibility relations by size:

  • 32-bit depth (VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT)
    • VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT
  • 24-bit depth (VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D24_UNORM_S8_UINT)
    • VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT
  • 16-bit depth (VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM_S8_UINT)
    • VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT
  • 8-bit stencil (VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT)
    • VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_SNORM

Multi-Planar Format Image Aspect

When using VkImageAspectFlagBits to select a plane of a multi-planar format, the following are the valid options:

  • Two planes
    • VK_IMAGE_ASPECT_PLANE_0_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
    • 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
    • VK_FORMAT_R10X6_UINT_PACK16_ARM
    • VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM
    • VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM
    • VK_FORMAT_R12X4_UINT_PACK16_ARM
    • VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM
    • VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM
    • VK_FORMAT_R14X2_UINT_PACK16_ARM
    • VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM
    • VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM
    • VK_FORMAT_R14X2_UNORM_PACK16_ARM
    • VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM
    • VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM
    • VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM
    • VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM
  • 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 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]

BOOL

OpTypeBool

boolean

The components are booleans

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 texels encoded interdependently within a region.

The suffix _FPENCODING_<encoding> indicates that the format uses a floating-point encoding, specified by <encoding>, that is different from IEEE754.

FP EncodingDescription
FLOAT8E4M38-bit signed float with 4-bit mantissa and 3-bit exponent
FLOAT8E5M28-bit signed float with 5-bit mantissa and 2-bit exponent
BFLOAT1616-bit signed float with 7-bit mantissa and 8-bit exponent (a.k.a. "brain float 16")
Compression schemeDescription
BCBlock Compression. SeeBlock-Compressed Image Formats.
ETC2Ericsson Texture Compression. SeeETC Compressed Image Formats.
EACETC2 Alpha Compression. SeeETC Compressed Image Formats.
ASTCAdaptive Scalable Texture Compression (LDR Profile). SeeASTC Compressed Image Formats.

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.

0123456789101112131415← 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

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.

Bit

7

6

5

4

3

2

1

0

VK_FORMAT_R4G4_UNORM_PACK8

R

G

3

2

1

0

3

2

1

0

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

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

VK_FORMAT_R10X6_UINT_PACK16_ARM

R

X

9

8

7

6

5

4

3

2

1

0

5

4

3

2

1

0

VK_FORMAT_R12X4_UINT_PACK16_ARM

R

X

11

10

9

8

7

6

5

4

3

2

1

0

3

2

1

0

VK_FORMAT_R14X2_UINT_PACK16_ARM

R

X

11

10

9

8

7

6

5

4

3

2

1

0

3

2

1

0

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) . Compressed color formats are compatible with each other if the only difference between them is the numeric format of the uncompressed texels. Each depth/stencil format is only compatible with itself. In the following table, all the formats in the same row are compatible. Each format has a defined texel block extent specifying how many texels each texel block represents in each dimension.

Class, Texel Block Size, Texel Block Extent, # Texels/BlockFormats
8-bitBlock size 1 byte1x1x1 block extent1 texel/blockVK_FORMAT_R8_BOOL_ARM,VK_FORMAT_R8_SFLOAT_FPENCODING_FLOAT8E4M3_ARM,VK_FORMAT_R8_SFLOAT_FPENCODING_FLOAT8E5M2_ARM,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-bitBlock size 2 byte1x1x1 block extent1 texel/blockVK_FORMAT_A1B5G5R5_UNORM_PACK16,VK_FORMAT_R10X6_UNORM_PACK16,VK_FORMAT_R12X4_UNORM_PACK16,VK_FORMAT_A4R4G4B4_UNORM_PACK16,VK_FORMAT_A4B4G4R4_UNORM_PACK16,VK_FORMAT_R10X6_UINT_PACK16_ARM,VK_FORMAT_R12X4_UINT_PACK16_ARM,VK_FORMAT_R14X2_UINT_PACK16_ARM,VK_FORMAT_R14X2_UNORM_PACK16_ARM,VK_FORMAT_R16_SFLOAT_FPENCODING_BFLOAT16_ARM,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 alphaBlock size 1 byte1x1x1 block extent1 texel/blockVK_FORMAT_A8_UNORM
24-bitBlock size 3 byte1x1x1 block extent1 texel/blockVK_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-bitBlock size 4 byte1x1x1 block extent1 texel/blockVK_FORMAT_R10X6G10X6_UNORM_2PACK16,VK_FORMAT_R12X4G12X4_UNORM_2PACK16,VK_FORMAT_R16G16_SFIXED5_NV,VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM,VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM,VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM,VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM,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
32-bit (continued)Block size 4 byte1x1x1 block extent1 texel/blockVK_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-bitBlock size 6 byte1x1x1 block extent1 texel/blockVK_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-bitBlock size 8 byte1x1x1 block extent1 texel/blockVK_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-bitBlock size 12 byte1x1x1 block extent1 texel/blockVK_FORMAT_R32G32B32_UINT,VK_FORMAT_R32G32B32_SINT,VK_FORMAT_R32G32B32_SFLOAT
128-bitBlock size 16 byte1x1x1 block extent1 texel/blockVK_FORMAT_R32G32B32A32_UINT,VK_FORMAT_R32G32B32A32_SINT,VK_FORMAT_R32G32B32A32_SFLOAT,VK_FORMAT_R64G64_UINT,VK_FORMAT_R64G64_SINT,VK_FORMAT_R64G64_SFLOAT
192-bitBlock size 24 byte1x1x1 block extent1 texel/blockVK_FORMAT_R64G64B64_UINT,VK_FORMAT_R64G64B64_SINT,VK_FORMAT_R64G64B64_SFLOAT
256-bitBlock size 32 byte1x1x1 block extent1 texel/blockVK_FORMAT_R64G64B64A64_UINT,VK_FORMAT_R64G64B64A64_SINT,VK_FORMAT_R64G64B64A64_SFLOAT
D16Block size 2 byte1x1x1 block extent1 texel/blockVK_FORMAT_D16_UNORM
D24Block size 4 byte1x1x1 block extent1 texel/blockVK_FORMAT_X8_D24_UNORM_PACK32
D32Block size 4 byte1x1x1 block extent1 texel/blockVK_FORMAT_D32_SFLOAT
S8Block size 1 byte1x1x1 block extent1 texel/blockVK_FORMAT_S8_UINT
D16S8Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_D16_UNORM_S8_UINT
D24S8Block size 4 byte1x1x1 block extent1 texel/blockVK_FORMAT_D24_UNORM_S8_UINT
D32S8Block size 5 byte1x1x1 block extent1 texel/blockVK_FORMAT_D32_SFLOAT_S8_UINT
BC1_RGBBlock size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC1_RGB_UNORM_BLOCK,VK_FORMAT_BC1_RGB_SRGB_BLOCK
BC1_RGBABlock size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC1_RGBA_UNORM_BLOCK,VK_FORMAT_BC1_RGBA_SRGB_BLOCK
BC2Block size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC2_UNORM_BLOCK,VK_FORMAT_BC2_SRGB_BLOCK
BC3Block size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC3_UNORM_BLOCK,VK_FORMAT_BC3_SRGB_BLOCK
BC4Block size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC4_UNORM_BLOCK,VK_FORMAT_BC4_SNORM_BLOCK
BC5Block size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC5_UNORM_BLOCK,VK_FORMAT_BC5_SNORM_BLOCK
BC6HBlock size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC6H_UFLOAT_BLOCK,VK_FORMAT_BC6H_SFLOAT_BLOCK
BC7Block size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_BC7_UNORM_BLOCK,VK_FORMAT_BC7_SRGB_BLOCK
ETC2_RGBBlock size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
ETC2_RGBABlock size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
ETC2_EAC_RGBABlock size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
EAC_RBlock size 8 byte4x4x1 block extent16 texel/blockVK_FORMAT_EAC_R11_UNORM_BLOCK,VK_FORMAT_EAC_R11_SNORM_BLOCK
EAC_RGBlock size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_EAC_R11G11_UNORM_BLOCK,VK_FORMAT_EAC_R11G11_SNORM_BLOCK
ASTC_4x4Block size 16 byte4x4x1 block extent16 texel/blockVK_FORMAT_ASTC_4x4_SFLOAT_BLOCK,VK_FORMAT_ASTC_4x4_UNORM_BLOCK,VK_FORMAT_ASTC_4x4_SRGB_BLOCK
ASTC_5x4Block size 16 byte5x4x1 block extent20 texel/blockVK_FORMAT_ASTC_5x4_SFLOAT_BLOCK,VK_FORMAT_ASTC_5x4_UNORM_BLOCK,VK_FORMAT_ASTC_5x4_SRGB_BLOCK
ASTC_5x5Block size 16 byte5x5x1 block extent25 texel/blockVK_FORMAT_ASTC_5x5_SFLOAT_BLOCK,VK_FORMAT_ASTC_5x5_UNORM_BLOCK,VK_FORMAT_ASTC_5x5_SRGB_BLOCK
ASTC_6x5Block size 16 byte6x5x1 block extent30 texel/blockVK_FORMAT_ASTC_6x5_SFLOAT_BLOCK,VK_FORMAT_ASTC_6x5_UNORM_BLOCK,VK_FORMAT_ASTC_6x5_SRGB_BLOCK
ASTC_6x6Block size 16 byte6x6x1 block extent36 texel/blockVK_FORMAT_ASTC_6x6_SFLOAT_BLOCK,VK_FORMAT_ASTC_6x6_UNORM_BLOCK,VK_FORMAT_ASTC_6x6_SRGB_BLOCK
ASTC_8x5Block size 16 byte8x5x1 block extent40 texel/blockVK_FORMAT_ASTC_8x5_SFLOAT_BLOCK,VK_FORMAT_ASTC_8x5_UNORM_BLOCK,VK_FORMAT_ASTC_8x5_SRGB_BLOCK
ASTC_8x6Block size 16 byte8x6x1 block extent48 texel/blockVK_FORMAT_ASTC_8x6_SFLOAT_BLOCK,VK_FORMAT_ASTC_8x6_UNORM_BLOCK,VK_FORMAT_ASTC_8x6_SRGB_BLOCK
ASTC_8x8Block size 16 byte8x8x1 block extent64 texel/blockVK_FORMAT_ASTC_8x8_SFLOAT_BLOCK,VK_FORMAT_ASTC_8x8_UNORM_BLOCK,VK_FORMAT_ASTC_8x8_SRGB_BLOCK
ASTC_10x5Block size 16 byte10x5x1 block extent50 texel/blockVK_FORMAT_ASTC_10x5_SFLOAT_BLOCK,VK_FORMAT_ASTC_10x5_UNORM_BLOCK,VK_FORMAT_ASTC_10x5_SRGB_BLOCK
ASTC_10x6Block size 16 byte10x6x1 block extent60 texel/blockVK_FORMAT_ASTC_10x6_SFLOAT_BLOCK,VK_FORMAT_ASTC_10x6_UNORM_BLOCK,VK_FORMAT_ASTC_10x6_SRGB_BLOCK
ASTC_10x8Block size 16 byte10x8x1 block extent80 texel/blockVK_FORMAT_ASTC_10x8_SFLOAT_BLOCK,VK_FORMAT_ASTC_10x8_UNORM_BLOCK,VK_FORMAT_ASTC_10x8_SRGB_BLOCK
ASTC_10x10Block size 16 byte10x10x1 block extent100 texel/blockVK_FORMAT_ASTC_10x10_SFLOAT_BLOCK,VK_FORMAT_ASTC_10x10_UNORM_BLOCK,VK_FORMAT_ASTC_10x10_SRGB_BLOCK
ASTC_12x10Block size 16 byte12x10x1 block extent120 texel/blockVK_FORMAT_ASTC_12x10_SFLOAT_BLOCK,VK_FORMAT_ASTC_12x10_UNORM_BLOCK,VK_FORMAT_ASTC_12x10_SRGB_BLOCK
ASTC_12x12Block size 16 byte12x12x1 block extent144 texel/blockVK_FORMAT_ASTC_12x12_SFLOAT_BLOCK,VK_FORMAT_ASTC_12x12_UNORM_BLOCK,VK_FORMAT_ASTC_12x12_SRGB_BLOCK
32-bit G8B8G8R8Block size 4 byte2x1x1 block extent1 texel/blockVK_FORMAT_G8B8G8R8_422_UNORM
32-bit B8G8R8G8Block size 4 byte2x1x1 block extent1 texel/blockVK_FORMAT_B8G8R8G8_422_UNORM
8-bit 3-plane 420Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
8-bit 2-plane 420Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8R8_2PLANE_420_UNORM
8-bit 3-plane 422Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
8-bit 2-plane 422Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8R8_2PLANE_422_UNORM
8-bit 3-plane 444Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
64-bit R10G10B10A10Block size 8 byte1x1x1 block extent1 texel/blockVK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM
64-bit G10B10G10R10Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
64-bit B10G10R10G10Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
10-bit 3-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
10-bit 2-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
10-bit 3-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
10-bit 2-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
10-bit 3-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
64-bit R12G12B12A12Block size 8 byte1x1x1 block extent1 texel/blockVK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM
64-bit G12B12G12R12Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
64-bit B12G12R12G12Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
12-bit 3-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
12-bit 2-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
12-bit 3-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
12-bit 2-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
12-bit 3-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
64-bit G16B16G16R16Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_G16B16G16R16_422_UNORM
64-bit B16G16R16G16Block size 8 byte2x1x1 block extent1 texel/blockVK_FORMAT_B16G16R16G16_422_UNORM
16-bit 3-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
16-bit 2-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16R16_2PLANE_420_UNORM
16-bit 3-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
16-bit 2-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16R16_2PLANE_422_UNORM
16-bit 3-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
PVRTC1_2BPPBlock size 8 byte8x4x1 block extent1 texel/blockVK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
PVRTC1_4BPPBlock size 8 byte4x4x1 block extent1 texel/blockVK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG
PVRTC2_2BPPBlock size 8 byte8x4x1 block extent1 texel/blockVK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG
PVRTC2_4BPPBlock size 8 byte4x4x1 block extent1 texel/blockVK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
ASTC_3x3x3Block size 16 byte3x3x3 block extent27 texel/blockVK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT
ASTC_4x3x3Block size 16 byte4x3x3 block extent36 texel/blockVK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT
ASTC_4x4x3Block size 16 byte4x4x3 block extent48 texel/blockVK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT
ASTC_4x4x4Block size 16 byte4x4x4 block extent64 texel/blockVK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT
ASTC_5x4x4Block size 16 byte5x4x4 block extent80 texel/blockVK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT
ASTC_5x5x4Block size 16 byte5x5x4 block extent100 texel/blockVK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT
ASTC_5x5x5Block size 16 byte5x5x5 block extent125 texel/blockVK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT
ASTC_6x5x5Block size 16 byte6x5x5 block extent150 texel/blockVK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT
ASTC_6x6x5Block size 16 byte6x6x5 block extent180 texel/blockVK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT
ASTC_6x6x6Block size 16 byte6x6x6 block extent216 texel/blockVK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT,VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT,VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT
8-bit 2-plane 444Block size 3 byte1x1x1 block extent1 texel/blockVK_FORMAT_G8_B8R8_2PLANE_444_UNORM
10-bit 2-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16
12-bit 2-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16
16-bit 2-plane 444Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G16_B16R16_2PLANE_444_UNORM
64-bit R14G14B14A14Block size 8 byte1x1x1 block extent1 texel/blockVK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM,VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM
14-bit 2-plane 420Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM
14-bit 2-plane 422Block size 6 byte1x1x1 block extent1 texel/blockVK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM

Size Compatibility

Color formats with the same texel block size are considered size-compatible as long as neither or both are alpha formats (e.g., VK_FORMAT_A8_UNORM). If two size-compatible formats have different block extents (i.e. for compressed formats), then an image with size A × B × C in one format with a block extent of a × b × c can be represented as an image with size X × Y × Z in the other format with block extent x × y × z at the ratio between the block extents for each format, where

  • ⌈A/a⌉ = ⌈X/x⌉
  • ⌈B/b⌉ = ⌈Y/y⌉
  • ⌈C/c⌉ = ⌈Z/z⌉
For example, a 7x3 image in the VK_FORMAT_ASTC_8x5_UNORM_BLOCK format can be represented as a 1x1 VK_FORMAT_R64G64_UINT image.

Images created with the VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT flag can have size-compatible views created from them to enable access via different size-compatible formats. Image views created in this way will be sized to match the expectations of the block extents noted above.

Copy operations are able to copy between size-compatible formats in different resources to enable manipulation of data in different formats. The extent used in these copy operations always matches the source image, and is resized to the expectations of the block extents noted above for the destination image.

Copy operations between color formats and a depth-stencil are size-compatible as defined by the list of compatible depth-stencil and color formats.

Format Properties

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
VkTensorFormatPropertiesARMStructure specifying properties of a format used to describe tensor elements

The following bits may be set in linearTilingTensorFeatures and optimalTilingTensorFeatures, specifying that the features are supported by tensors or tensor views created with the queried vkGetPhysicalDeviceFormatProperties2::format:

  • VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT specifies that a tensor can be used as a source tensor for copy commands.
  • VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT specifies that a tensor can be used as a destination tensor for copy commands.
  • VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM specifies that a tensor view can be used as a storage tensor in shaders.
  • VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM specifies that a tensor can be aliased to an image or that an image can be aliased to a tensor.
  • VK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM specifies that a tensor view can be used as a storage tensor with data graph pipelines.
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.

This feature must be supported on the named format
This feature must be supported on at least some of the named formats, with more information in the table where the symbol appears
This feature must be supported with some caveats or preconditions, with more information in the table where the symbol appears
§This feature must be supported with some caveats or preconditions, with more information in the table where the symbol appears
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
VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR
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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_UNDEFINED

VK_FORMAT_R4G4_UNORM_PACK8

VK_FORMAT_R4G4B4A4_UNORM_PACK16

VK_FORMAT_B4G4R4A4_UNORM_PACK16

VK_FORMAT_R5G6B5_UNORM_PACK16

VK_FORMAT_B5G6R5_UNORM_PACK16

VK_FORMAT_R5G5B5A1_UNORM_PACK16

VK_FORMAT_B5G5R5A1_UNORM_PACK16

VK_FORMAT_A1R5G5B5_UNORM_PACK16

VK_FORMAT_A1B5G5R5_UNORM_PACK16

VK_FORMAT_A4R4G4B4_UNORM_PACK16

VK_FORMAT_A4B4G4R4_UNORM_PACK16

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

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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_R8_UNORM

VK_FORMAT_R8_SNORM

VK_FORMAT_R8_USCALED

VK_FORMAT_R8_SSCALED

VK_FORMAT_R8_UINT

VK_FORMAT_R8_SINT

VK_FORMAT_R8_SRGB

VK_FORMAT_R8G8_UNORM

VK_FORMAT_R8G8_SNORM

VK_FORMAT_R8G8_USCALED

VK_FORMAT_R8G8_SSCALED

VK_FORMAT_R8G8_UINT

VK_FORMAT_R8G8_SINT

VK_FORMAT_R8G8_SRGB

VK_FORMAT_R8G8B8_UNORM

VK_FORMAT_R8G8B8_SNORM

VK_FORMAT_R8G8B8_USCALED

VK_FORMAT_R8G8B8_SSCALED

VK_FORMAT_R8G8B8_UINT

VK_FORMAT_R8G8B8_SINT

VK_FORMAT_R8G8B8_SRGB

VK_FORMAT_B8G8R8_UNORM

VK_FORMAT_B8G8R8_SNORM

VK_FORMAT_B8G8R8_USCALED

VK_FORMAT_B8G8R8_SSCALED

VK_FORMAT_B8G8R8_UINT

VK_FORMAT_B8G8R8_SINT

VK_FORMAT_B8G8R8_SRGB

VK_FORMAT_A8_UNORM

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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

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_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

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

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_R10X6_UNORM_PACK16

VK_FORMAT_R10X6G10X6_UNORM_2PACK16

VK_FORMAT_R12X4_UNORM_PACK16

VK_FORMAT_R12X4G12X4_UNORM_2PACK16

VK_FORMAT_R10X6_UINT_PACK16_ARM

VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM

VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM

VK_FORMAT_R12X4_UINT_PACK16_ARM

VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM

VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM

VK_FORMAT_R14X2_UINT_PACK16_ARM

VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM

VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM

VK_FORMAT_R14X2_UNORM_PACK16_ARM

VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM

VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM

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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_R16_UNORM

VK_FORMAT_R16_SNORM

VK_FORMAT_R16_USCALED

VK_FORMAT_R16_SSCALED

VK_FORMAT_R16_UINT

VK_FORMAT_R16_SINT

VK_FORMAT_R16_SFLOAT

VK_FORMAT_R16G16_UNORM

VK_FORMAT_R16G16_SNORM

VK_FORMAT_R16G16_USCALED

VK_FORMAT_R16G16_SSCALED

VK_FORMAT_R16G16_UINT

VK_FORMAT_R16G16_SINT

VK_FORMAT_R16G16_SFLOAT

§

§

VK_FORMAT_R16G16B16_UNORM

VK_FORMAT_R16G16B16_SNORM

VK_FORMAT_R16G16B16_USCALED

VK_FORMAT_R16G16B16_SSCALED

VK_FORMAT_R16G16B16_UINT

VK_FORMAT_R16G16B16_SINT

VK_FORMAT_R16G16B16_SFLOAT

VK_FORMAT_R16G16B16A16_UNORM

VK_FORMAT_R16G16B16A16_SNORM

VK_FORMAT_R16G16B16A16_USCALED

VK_FORMAT_R16G16B16A16_SSCALED

VK_FORMAT_R16G16B16A16_UINT

VK_FORMAT_R16G16B16A16_SINT

VK_FORMAT_R16G16B16A16_SFLOAT

§

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

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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_R32_UINT

VK_FORMAT_R32_SINT

VK_FORMAT_R32_SFLOAT

VK_FORMAT_R32G32_UINT

VK_FORMAT_R32G32_SINT

VK_FORMAT_R32G32_SFLOAT

VK_FORMAT_R32G32B32_UINT

VK_FORMAT_R32G32B32_SINT

VK_FORMAT_R32G32B32_SFLOAT

VK_FORMAT_R32G32B32A32_UINT

VK_FORMAT_R32G32B32A32_SINT

VK_FORMAT_R32G32B32A32_SFLOAT

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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_R64_UINT

VK_FORMAT_R64_SINT

VK_FORMAT_R64_SFLOAT

VK_FORMAT_R64G64_UINT

VK_FORMAT_R64G64_SINT

VK_FORMAT_R64G64_SFLOAT

VK_FORMAT_R64G64B64_UINT

VK_FORMAT_R64G64B64_SINT

VK_FORMAT_R64G64B64_SFLOAT

VK_FORMAT_R64G64B64A64_UINT

VK_FORMAT_R64G64B64A64_SINT

VK_FORMAT_R64G64B64A64_SFLOAT

VK_FORMAT_B10G11R11_UFLOAT_PACK32

VK_FORMAT_E5B9G9R9_UFLOAT_PACK32

Format features marked with ‡ :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.

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_D16_UNORM

VK_FORMAT_X8_D24_UNORM_PACK32

VK_FORMAT_D32_SFLOAT

VK_FORMAT_S8_UINT

VK_FORMAT_D16_UNORM_S8_UINT

VK_FORMAT_D24_UNORM_S8_UINT

VK_FORMAT_D32_SFLOAT_S8_UINT

VK_FORMAT_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

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_BC1_RGB_UNORM_BLOCK

VK_FORMAT_BC1_RGB_SRGB_BLOCK

VK_FORMAT_BC1_RGBA_UNORM_BLOCK

VK_FORMAT_BC1_RGBA_SRGB_BLOCK

VK_FORMAT_BC2_UNORM_BLOCK

VK_FORMAT_BC2_SRGB_BLOCK

VK_FORMAT_BC3_UNORM_BLOCK

VK_FORMAT_BC3_SRGB_BLOCK

VK_FORMAT_BC4_UNORM_BLOCK

VK_FORMAT_BC4_SNORM_BLOCK

VK_FORMAT_BC5_UNORM_BLOCK

VK_FORMAT_BC5_SNORM_BLOCK

VK_FORMAT_BC6H_UFLOAT_BLOCK

VK_FORMAT_BC6H_SFLOAT_BLOCK

VK_FORMAT_BC7_UNORM_BLOCK

VK_FORMAT_BC7_SRGB_BLOCK

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, xref::name::formats-mandatory-features-etc, or xref::name::formats-mandatory-features-astc.

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK

VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK

VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK

VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK

VK_FORMAT_EAC_R11_UNORM_BLOCK

VK_FORMAT_EAC_R11_SNORM_BLOCK

VK_FORMAT_EAC_R11G11_UNORM_BLOCK

VK_FORMAT_EAC_R11G11_SNORM_BLOCK

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, xref::name::formats-mandatory-features-bcn, or xref::name::formats-mandatory-features-astc.

VK_FORMAT_FEATURE_2_COPY_IMAGE_INDIRECT_DST_BIT_KHR

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT

VK_FORMAT_FEATURE_BLIT_DST_BIT

VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT

VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT

VK_FORMAT_FEATURE_BLIT_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

Format

VK_FORMAT_ASTC_4x4_UNORM_BLOCK

VK_FORMAT_ASTC_4x4_SRGB_BLOCK

VK_FORMAT_ASTC_5x4_UNORM_BLOCK

VK_FORMAT_ASTC_5x4_SRGB_BLOCK

VK_FORMAT_ASTC_5x5_UNORM_BLOCK

VK_FORMAT_ASTC_5x5_SRGB_BLOCK

VK_FORMAT_ASTC_6x5_UNORM_BLOCK

VK_FORMAT_ASTC_6x5_SRGB_BLOCK

VK_FORMAT_ASTC_6x6_UNORM_BLOCK

VK_FORMAT_ASTC_6x6_SRGB_BLOCK

VK_FORMAT_ASTC_8x5_UNORM_BLOCK

VK_FORMAT_ASTC_8x5_SRGB_BLOCK

VK_FORMAT_ASTC_8x6_UNORM_BLOCK

VK_FORMAT_ASTC_8x6_SRGB_BLOCK

VK_FORMAT_ASTC_8x8_UNORM_BLOCK

VK_FORMAT_ASTC_8x8_SRGB_BLOCK

VK_FORMAT_ASTC_10x5_UNORM_BLOCK

VK_FORMAT_ASTC_10x5_SRGB_BLOCK

VK_FORMAT_ASTC_10x6_UNORM_BLOCK

VK_FORMAT_ASTC_10x6_SRGB_BLOCK

VK_FORMAT_ASTC_10x8_UNORM_BLOCK

VK_FORMAT_ASTC_10x8_SRGB_BLOCK

VK_FORMAT_ASTC_10x10_UNORM_BLOCK

VK_FORMAT_ASTC_10x10_SRGB_BLOCK

VK_FORMAT_ASTC_12x10_UNORM_BLOCK

VK_FORMAT_ASTC_12x10_SRGB_BLOCK

VK_FORMAT_ASTC_12x12_UNORM_BLOCK

VK_FORMAT_ASTC_12x12_SRGB_BLOCK

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, xref::name::formats-mandatory-features-bcn, or xref::name::formats-mandatory-features-etc.

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:

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT

VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT

VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT

VK_FORMAT_FEATURE_TRANSFER_DST_BIT

VK_FORMAT_FEATURE_TRANSFER_SRC_BIT

VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT

VK_FORMAT_FEATURE_DISJOINT_BIT

Format

Planes

VK_FORMAT_G8B8G8R8_422_UNORM

1

VK_FORMAT_B8G8R8G8_422_UNORM

1

VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM

3

VK_FORMAT_G8_B8R8_2PLANE_420_UNORM

2

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

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

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM

2

VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM

2

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

Formats marked ‡ do not require a sampler Y′CBCR 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_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV must be supported in bufferFeatures for the following formats if either of the spheres or linearSweptSpheres feature is supported:

  • VK_FORMAT_R32_SFLOAT
  • VK_FORMAT_R16_SFLOAT

VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must be supported for the following formats if the attachmentFragmentShadingRate feature is supported:

  • VK_FORMAT_R8_UINT

If the hostImageCopy feature is supported and VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is supported in optimalTilingFeatures or linearTilingFeatures for a color format, VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT must also be supported in optimalTilingFeatures or linearTilingFeatures respectively.

Formats Without Shader Storage Format

The device-level features for using a storage image or a storage texel buffer with an image format of Unknown, shaderStorageImageReadWithoutFormat and shaderStorageImageWriteWithoutFormat, only apply to the following formats:

  • VK_FORMAT_R8G8B8A8_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
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, VkImageUsageFlagBits and VkTensorUsageFlagBitsARM 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 flagRequired format feature flag
VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BITVK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BITVK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
VK_BUFFER_USAGE_VERTEX_BUFFER_BITVK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
Image usage flagRequired format feature flag
VK_IMAGE_USAGE_SAMPLED_BITVK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
VK_IMAGE_USAGE_STORAGE_BITVK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BITVK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BITVK_FORMAT_FEATURE_COLOR_ATTACHMENT_BITorVK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHRVK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHRVK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR
VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHRVK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR
VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHRVK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR
VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHRVK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR
VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHRVK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR
VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHRVK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR
VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARMVK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM
Tensor usage flagRequired format feature flag
VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARMVK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT
VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARMVK_FORMAT_FEATURE_2_TRANSFER_DST_BIT
VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARMVK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM
VK_TENSOR_USAGE_SHADER_BIT_ARMVK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM
VK_TENSOR_USAGE_DATA_GRAPH_BIT_ARMVK_FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM

Tensor Format Support

For tensors, implementations must support at least the following set of features on the listed tensor formats.

The following tables show which tensor feature bits must be supported for each format.

This feature must be supported on the named format
This feature must be supported on at least some of the named formats, with more information in the table where the symbol appears
VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT
VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM
VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT
VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM

VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT

VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT

VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM

Format

VK_FORMAT_UNDEFINED

VK_FORMAT_R8_BOOL_ARM

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_R16_UNORM

VK_FORMAT_R16_SNORM

VK_FORMAT_R16_USCALED

VK_FORMAT_R16_SSCALED

VK_FORMAT_R16_UINT

VK_FORMAT_R16_SINT

VK_FORMAT_R16_SFLOAT

VK_FORMAT_R32_UINT

VK_FORMAT_R32_SINT

VK_FORMAT_R32_SFLOAT

VK_FORMAT_R64_UINT

VK_FORMAT_R64_SINT

VK_FORMAT_R64_SFLOAT