| // Copyright 2015-2023 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| [[formats]] |
| = 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 (elink:VkFormat) supported by the |
| implementation are queried individually using the |
| flink:vkGetPhysicalDeviceFormatProperties command. |
| |
| |
| [[formats-definition]] |
| == Format Definition |
| |
| [open,refpage='VkFormat',desc='Available image formats',type='enums'] |
| -- |
| The following image formats can: be passed to, and may: be returned from |
| Vulkan commands. |
| The memory required to store each format is discussed with that format, and |
| also summarized in the <<texel-block-size, Representation and Texel Block |
| Size>> section and the <<formats-compatibility, Compatible formats>> table. |
| |
| include::{generated}/api/enums/VkFormat.adoc[] |
| |
| * ename:VK_FORMAT_UNDEFINED specifies that the format is not specified. |
| * ename:VK_FORMAT_R4G4_UNORM_PACK8 specifies a two-component, 8-bit packed |
| unsigned normalized format that has a 4-bit R component in bits 4..7, |
| and a 4-bit G component in bits 0..3. |
| * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 4-bit R component in bits |
| 12..15, a 4-bit G component in bits 8..11, a 4-bit B component in bits |
| 4..7, and a 4-bit A component in bits 0..3. |
| * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 4-bit B component in bits |
| 12..15, a 4-bit G component in bits 8..11, a 4-bit R component in bits |
| 4..7, and a 4-bit A component in bits 0..3. |
| ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| * ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 4-bit A component in bits |
| 12..15, a 4-bit R component in bits 8..11, a 4-bit G component in bits |
| 4..7, and a 4-bit B component in bits 0..3. |
| * ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 4-bit A component in bits |
| 12..15, a 4-bit B component in bits 8..11, a 4-bit G component in bits |
| 4..7, and a 4-bit R component in bits 0..3. |
| endif::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| * ename:VK_FORMAT_R5G6B5_UNORM_PACK16 specifies a three-component, 16-bit |
| packed unsigned normalized format that has a 5-bit R component in bits |
| 11..15, a 6-bit G component in bits 5..10, and a 5-bit B component in |
| bits 0..4. |
| * ename:VK_FORMAT_B5G6R5_UNORM_PACK16 specifies a three-component, 16-bit |
| packed unsigned normalized format that has a 5-bit B component in bits |
| 11..15, a 6-bit G component in bits 5..10, and a 5-bit R component in |
| bits 0..4. |
| * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 5-bit R component in bits |
| 11..15, a 5-bit G component in bits 6..10, a 5-bit B component in bits |
| 1..5, and a 1-bit A component in bit 0. |
| * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 5-bit B component in bits |
| 11..15, a 5-bit G component in bits 6..10, a 5-bit R component in bits |
| 1..5, and a 1-bit A component in bit 0. |
| * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 specifies a four-component, 16-bit |
| packed unsigned normalized format that has a 1-bit A component in bit |
| 15, a 5-bit R component in bits 10..14, a 5-bit G component in bits |
| 5..9, and a 5-bit B component in bits 0..4. |
| ifdef::VK_KHR_maintenance5[] |
| * ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR specifies a four-component, |
| 16-bit packed unsigned normalized format that has a 1-bit A component in |
| bit 15, a 5-bit B component in bits 10..14, a 5-bit G component in bits |
| 5..9, and a 5-bit R component in bits 0..4. |
| * ename:VK_FORMAT_A8_UNORM_KHR specifies a one-component, 8-bit unsigned |
| normalized format that has a single 8-bit A component. |
| endif::VK_KHR_maintenance5[] |
| * ename:VK_FORMAT_R8_UNORM specifies a one-component, 8-bit unsigned |
| normalized format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_SNORM specifies a one-component, 8-bit signed |
| normalized format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_USCALED specifies a one-component, 8-bit unsigned |
| scaled integer format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_SSCALED specifies a one-component, 8-bit signed |
| scaled integer format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_UINT specifies a one-component, 8-bit unsigned |
| integer format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_SINT specifies a one-component, 8-bit signed integer |
| format that has a single 8-bit R component. |
| * ename:VK_FORMAT_R8_SRGB specifies a one-component, 8-bit unsigned |
| normalized format that has a single 8-bit R component stored with sRGB |
| nonlinear encoding. |
| * ename:VK_FORMAT_R8G8_UNORM specifies a two-component, 16-bit unsigned |
| normalized format that has an 8-bit R component in byte 0, and an 8-bit |
| G component in byte 1. |
| * ename:VK_FORMAT_R8G8_SNORM specifies a two-component, 16-bit signed |
| normalized format that has an 8-bit R component in byte 0, and an 8-bit |
| G component in byte 1. |
| * ename:VK_FORMAT_R8G8_USCALED specifies a two-component, 16-bit unsigned |
| scaled integer format that has an 8-bit R component in byte 0, and an |
| 8-bit G component in byte 1. |
| * ename:VK_FORMAT_R8G8_SSCALED specifies a two-component, 16-bit signed |
| scaled integer format that has an 8-bit R component in byte 0, and an |
| 8-bit G component in byte 1. |
| * ename:VK_FORMAT_R8G8_UINT specifies a two-component, 16-bit unsigned |
| integer format that has an 8-bit R component in byte 0, and an 8-bit G |
| component in byte 1. |
| * ename:VK_FORMAT_R8G8_SINT specifies a two-component, 16-bit signed |
| integer format that has an 8-bit R component in byte 0, and an 8-bit G |
| component in byte 1. |
| * ename:VK_FORMAT_R8G8_SRGB specifies a two-component, 16-bit unsigned |
| normalized format that has an 8-bit R component stored with sRGB |
| nonlinear encoding in byte 0, and an 8-bit G component stored with sRGB |
| nonlinear encoding in byte 1. |
| * ename:VK_FORMAT_R8G8B8_UNORM specifies a three-component, 24-bit |
| unsigned normalized format that has an 8-bit R component in byte 0, an |
| 8-bit G component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_SNORM specifies a three-component, 24-bit signed |
| normalized format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_USCALED specifies a three-component, 24-bit |
| unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit |
| G component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_SSCALED specifies a three-component, 24-bit |
| signed scaled format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_UINT specifies a three-component, 24-bit unsigned |
| integer format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_SINT specifies a three-component, 24-bit signed |
| integer format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit B component in byte 2. |
| * ename:VK_FORMAT_R8G8B8_SRGB specifies a three-component, 24-bit unsigned |
| normalized format that has an 8-bit R component stored with sRGB |
| nonlinear encoding in byte 0, an 8-bit G component stored with sRGB |
| nonlinear encoding in byte 1, and an 8-bit B component stored with sRGB |
| nonlinear encoding in byte 2. |
| * ename:VK_FORMAT_B8G8R8_UNORM specifies a three-component, 24-bit |
| unsigned normalized format that has an 8-bit B component in byte 0, an |
| 8-bit G component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_SNORM specifies a three-component, 24-bit signed |
| normalized format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_USCALED specifies a three-component, 24-bit |
| unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit |
| G component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_SSCALED specifies a three-component, 24-bit |
| signed scaled format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_UINT specifies a three-component, 24-bit unsigned |
| integer format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_SINT specifies a three-component, 24-bit signed |
| integer format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, and an 8-bit R component in byte 2. |
| * ename:VK_FORMAT_B8G8R8_SRGB specifies a three-component, 24-bit unsigned |
| normalized format that has an 8-bit B component stored with sRGB |
| nonlinear encoding in byte 0, an 8-bit G component stored with sRGB |
| nonlinear encoding in byte 1, and an 8-bit R component stored with sRGB |
| nonlinear encoding in byte 2. |
| * ename:VK_FORMAT_R8G8B8A8_UNORM specifies a four-component, 32-bit |
| unsigned normalized format that has an 8-bit R component in byte 0, an |
| 8-bit G component in byte 1, an 8-bit B component in byte 2, and an |
| 8-bit A component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_SNORM specifies a four-component, 32-bit signed |
| normalized format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit B component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_USCALED specifies a four-component, 32-bit |
| unsigned scaled format that has an 8-bit R component in byte 0, an 8-bit |
| G component in byte 1, an 8-bit B component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_SSCALED specifies a four-component, 32-bit |
| signed scaled format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit B component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_UINT specifies a four-component, 32-bit |
| unsigned integer format that has an 8-bit R component in byte 0, an |
| 8-bit G component in byte 1, an 8-bit B component in byte 2, and an |
| 8-bit A component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_SINT specifies a four-component, 32-bit signed |
| integer format that has an 8-bit R component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit B component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_R8G8B8A8_SRGB specifies a four-component, 32-bit |
| unsigned normalized format that has an 8-bit R component stored with |
| sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB |
| nonlinear encoding in byte 1, an 8-bit B component stored with sRGB |
| nonlinear encoding in byte 2, and an 8-bit A component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_UNORM specifies a four-component, 32-bit |
| unsigned normalized format that has an 8-bit B component in byte 0, an |
| 8-bit G component in byte 1, an 8-bit R component in byte 2, and an |
| 8-bit A component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_SNORM specifies a four-component, 32-bit signed |
| normalized format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit R component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_USCALED specifies a four-component, 32-bit |
| unsigned scaled format that has an 8-bit B component in byte 0, an 8-bit |
| G component in byte 1, an 8-bit R component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_SSCALED specifies a four-component, 32-bit |
| signed scaled format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit R component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_UINT specifies a four-component, 32-bit |
| unsigned integer format that has an 8-bit B component in byte 0, an |
| 8-bit G component in byte 1, an 8-bit R component in byte 2, and an |
| 8-bit A component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_SINT specifies a four-component, 32-bit signed |
| integer format that has an 8-bit B component in byte 0, an 8-bit G |
| component in byte 1, an 8-bit R component in byte 2, and an 8-bit A |
| component in byte 3. |
| * ename:VK_FORMAT_B8G8R8A8_SRGB specifies a four-component, 32-bit |
| unsigned normalized format that has an 8-bit B component stored with |
| sRGB nonlinear encoding in byte 0, an 8-bit G component stored with sRGB |
| nonlinear encoding in byte 1, an 8-bit R component stored with sRGB |
| nonlinear encoding in byte 2, and an 8-bit A component in byte 3. |
| * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 specifies a four-component, 32-bit |
| packed unsigned normalized format that has an 8-bit A component in bits |
| 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in |
| bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 specifies a four-component, 32-bit |
| packed signed normalized format that has an 8-bit A component in bits |
| 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in |
| bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 specifies a four-component, |
| 32-bit packed unsigned scaled integer format that has an 8-bit A |
| component in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit |
| G component in bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 specifies a four-component, |
| 32-bit packed signed scaled integer format that has an 8-bit A component |
| in bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G |
| component in bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 specifies a four-component, 32-bit |
| packed unsigned integer format that has an 8-bit A component in bits |
| 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in |
| bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 specifies a four-component, 32-bit |
| packed signed integer format that has an 8-bit A component in bits |
| 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in |
| bits 8..15, and an 8-bit R component in bits 0..7. |
| * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 specifies a four-component, 32-bit |
| packed unsigned normalized format that has an 8-bit A component in bits |
| 24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits |
| 16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits |
| 8..15, and an 8-bit R component stored with sRGB nonlinear encoding in |
| bits 0..7. |
| * ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 specifies a four-component, |
| 32-bit packed unsigned normalized format that has a 2-bit A component in |
| bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 specifies a four-component, |
| 32-bit packed signed normalized format that has a 2-bit A component in |
| bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 specifies a four-component, |
| 32-bit packed unsigned scaled integer format that has a 2-bit A |
| component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit |
| G component in bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 specifies a four-component, |
| 32-bit packed signed scaled integer format that has a 2-bit A component |
| in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G |
| component in bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 specifies a four-component, |
| 32-bit packed unsigned integer format that has a 2-bit A component in |
| bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 specifies a four-component, |
| 32-bit packed signed integer format that has a 2-bit A component in bits |
| 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in |
| bits 10..19, and a 10-bit B component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 specifies a four-component, |
| 32-bit packed unsigned normalized format that has a 2-bit A component in |
| bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 specifies a four-component, |
| 32-bit packed signed normalized format that has a 2-bit A component in |
| bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 specifies a four-component, |
| 32-bit packed unsigned scaled integer format that has a 2-bit A |
| component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit |
| G component in bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 specifies a four-component, |
| 32-bit packed signed scaled integer format that has a 2-bit A component |
| in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G |
| component in bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 specifies a four-component, |
| 32-bit packed unsigned integer format that has a 2-bit A component in |
| bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G component |
| in bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 specifies a four-component, |
| 32-bit packed signed integer format that has a 2-bit A component in bits |
| 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in |
| bits 10..19, and a 10-bit R component in bits 0..9. |
| * ename:VK_FORMAT_R16_UNORM specifies a one-component, 16-bit unsigned |
| normalized format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_SNORM specifies a one-component, 16-bit signed |
| normalized format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_USCALED specifies a one-component, 16-bit unsigned |
| scaled integer format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_SSCALED specifies a one-component, 16-bit signed |
| scaled integer format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_UINT specifies a one-component, 16-bit unsigned |
| integer format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_SINT specifies a one-component, 16-bit signed |
| integer format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16_SFLOAT specifies a one-component, 16-bit signed |
| floating-point format that has a single 16-bit R component. |
| * ename:VK_FORMAT_R16G16_UNORM specifies a two-component, 32-bit unsigned |
| normalized format that has a 16-bit R component in bytes 0..1, and a |
| 16-bit G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_SNORM specifies a two-component, 32-bit signed |
| normalized format that has a 16-bit R component in bytes 0..1, and a |
| 16-bit G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_USCALED specifies a two-component, 32-bit |
| unsigned scaled integer format that has a 16-bit R component in bytes |
| 0..1, and a 16-bit G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_SSCALED specifies a two-component, 32-bit signed |
| scaled integer format that has a 16-bit R component in bytes 0..1, and a |
| 16-bit G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_UINT specifies a two-component, 32-bit unsigned |
| integer format that has a 16-bit R component in bytes 0..1, and a 16-bit |
| G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_SINT specifies a two-component, 32-bit signed |
| integer format that has a 16-bit R component in bytes 0..1, and a 16-bit |
| G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16_SFLOAT specifies a two-component, 32-bit signed |
| floating-point format that has a 16-bit R component in bytes 0..1, and a |
| 16-bit G component in bytes 2..3. |
| * ename:VK_FORMAT_R16G16B16_UNORM specifies a three-component, 48-bit |
| unsigned normalized format that has a 16-bit R component in bytes 0..1, |
| a 16-bit G component in bytes 2..3, and a 16-bit B component in bytes |
| 4..5. |
| * ename:VK_FORMAT_R16G16B16_SNORM specifies a three-component, 48-bit |
| signed normalized format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, and a 16-bit B component in bytes |
| 4..5. |
| * ename:VK_FORMAT_R16G16B16_USCALED specifies a three-component, 48-bit |
| unsigned scaled integer format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in |
| bytes 4..5. |
| * ename:VK_FORMAT_R16G16B16_SSCALED specifies a three-component, 48-bit |
| signed scaled integer format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in |
| bytes 4..5. |
| * ename:VK_FORMAT_R16G16B16_UINT specifies a three-component, 48-bit |
| unsigned integer format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, and a 16-bit B component in bytes |
| 4..5. |
| * ename:VK_FORMAT_R16G16B16_SINT specifies a three-component, 48-bit |
| signed integer format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, and a 16-bit B component in bytes |
| 4..5. |
| * ename:VK_FORMAT_R16G16B16_SFLOAT specifies a three-component, 48-bit |
| signed floating-point format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in |
| bytes 4..5. |
| * ename:VK_FORMAT_R16G16B16A16_UNORM specifies a four-component, 64-bit |
| unsigned normalized format that has a 16-bit R component in bytes 0..1, |
| a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, |
| and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_SNORM specifies a four-component, 64-bit |
| signed normalized format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, |
| and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_USCALED specifies a four-component, 64-bit |
| unsigned scaled integer format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes |
| 4..5, and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_SSCALED specifies a four-component, 64-bit |
| signed scaled integer format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes |
| 4..5, and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_UINT specifies a four-component, 64-bit |
| unsigned integer format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, |
| and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_SINT specifies a four-component, 64-bit |
| signed integer format that has a 16-bit R component in bytes 0..1, a |
| 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5, |
| and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R16G16B16A16_SFLOAT specifies a four-component, 64-bit |
| signed floating-point format that has a 16-bit R component in bytes |
| 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes |
| 4..5, and a 16-bit A component in bytes 6..7. |
| * ename:VK_FORMAT_R32_UINT specifies a one-component, 32-bit unsigned |
| integer format that has a single 32-bit R component. |
| * ename:VK_FORMAT_R32_SINT specifies a one-component, 32-bit signed |
| integer format that has a single 32-bit R component. |
| * ename:VK_FORMAT_R32_SFLOAT specifies a one-component, 32-bit signed |
| floating-point format that has a single 32-bit R component. |
| * ename:VK_FORMAT_R32G32_UINT specifies a two-component, 64-bit unsigned |
| integer format that has a 32-bit R component in bytes 0..3, and a 32-bit |
| G component in bytes 4..7. |
| * ename:VK_FORMAT_R32G32_SINT specifies a two-component, 64-bit signed |
| integer format that has a 32-bit R component in bytes 0..3, and a 32-bit |
| G component in bytes 4..7. |
| * ename:VK_FORMAT_R32G32_SFLOAT specifies a two-component, 64-bit signed |
| floating-point format that has a 32-bit R component in bytes 0..3, and a |
| 32-bit G component in bytes 4..7. |
| * ename:VK_FORMAT_R32G32B32_UINT specifies a three-component, 96-bit |
| unsigned integer format that has a 32-bit R component in bytes 0..3, a |
| 32-bit G component in bytes 4..7, and a 32-bit B component in bytes |
| 8..11. |
| * ename:VK_FORMAT_R32G32B32_SINT specifies a three-component, 96-bit |
| signed integer format that has a 32-bit R component in bytes 0..3, a |
| 32-bit G component in bytes 4..7, and a 32-bit B component in bytes |
| 8..11. |
| * ename:VK_FORMAT_R32G32B32_SFLOAT specifies a three-component, 96-bit |
| signed floating-point format that has a 32-bit R component in bytes |
| 0..3, a 32-bit G component in bytes 4..7, and a 32-bit B component in |
| bytes 8..11. |
| * ename:VK_FORMAT_R32G32B32A32_UINT specifies a four-component, 128-bit |
| unsigned integer format that has a 32-bit R component in bytes 0..3, a |
| 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11, |
| and a 32-bit A component in bytes 12..15. |
| * ename:VK_FORMAT_R32G32B32A32_SINT specifies a four-component, 128-bit |
| signed integer format that has a 32-bit R component in bytes 0..3, a |
| 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11, |
| and a 32-bit A component in bytes 12..15. |
| * ename:VK_FORMAT_R32G32B32A32_SFLOAT specifies a four-component, 128-bit |
| signed floating-point format that has a 32-bit R component in bytes |
| 0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes |
| 8..11, and a 32-bit A component in bytes 12..15. |
| * ename:VK_FORMAT_R64_UINT specifies a one-component, 64-bit unsigned |
| integer format that has a single 64-bit R component. |
| * ename:VK_FORMAT_R64_SINT specifies a one-component, 64-bit signed |
| integer format that has a single 64-bit R component. |
| * ename:VK_FORMAT_R64_SFLOAT specifies a one-component, 64-bit signed |
| floating-point format that has a single 64-bit R component. |
| * ename:VK_FORMAT_R64G64_UINT specifies a two-component, 128-bit unsigned |
| integer format that has a 64-bit R component in bytes 0..7, and a 64-bit |
| G component in bytes 8..15. |
| * ename:VK_FORMAT_R64G64_SINT specifies a two-component, 128-bit signed |
| integer format that has a 64-bit R component in bytes 0..7, and a 64-bit |
| G component in bytes 8..15. |
| * ename:VK_FORMAT_R64G64_SFLOAT specifies a two-component, 128-bit signed |
| floating-point format that has a 64-bit R component in bytes 0..7, and a |
| 64-bit G component in bytes 8..15. |
| * ename:VK_FORMAT_R64G64B64_UINT specifies a three-component, 192-bit |
| unsigned integer format that has a 64-bit R component in bytes 0..7, a |
| 64-bit G component in bytes 8..15, and a 64-bit B component in bytes |
| 16..23. |
| * ename:VK_FORMAT_R64G64B64_SINT specifies a three-component, 192-bit |
| signed integer format that has a 64-bit R component in bytes 0..7, a |
| 64-bit G component in bytes 8..15, and a 64-bit B component in bytes |
| 16..23. |
| * ename:VK_FORMAT_R64G64B64_SFLOAT specifies a three-component, 192-bit |
| signed floating-point format that has a 64-bit R component in bytes |
| 0..7, a 64-bit G component in bytes 8..15, and a 64-bit B component in |
| bytes 16..23. |
| * ename:VK_FORMAT_R64G64B64A64_UINT specifies a four-component, 256-bit |
| unsigned integer format that has a 64-bit R component in bytes 0..7, a |
| 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23, |
| and a 64-bit A component in bytes 24..31. |
| * ename:VK_FORMAT_R64G64B64A64_SINT specifies a four-component, 256-bit |
| signed integer format that has a 64-bit R component in bytes 0..7, a |
| 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23, |
| and a 64-bit A component in bytes 24..31. |
| * ename:VK_FORMAT_R64G64B64A64_SFLOAT specifies a four-component, 256-bit |
| signed floating-point format that has a 64-bit R component in bytes |
| 0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes |
| 16..23, and a 64-bit A component in bytes 24..31. |
| * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 specifies a three-component, |
| 32-bit packed unsigned floating-point format that has a 10-bit B |
| component in bits 22..31, an 11-bit G component in bits 11..21, an |
| 11-bit R component in bits 0..10. |
| See <<fundamentals-fp10>> and <<fundamentals-fp11>>. |
| * ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 specifies a three-component, |
| 32-bit packed unsigned floating-point format that has a 5-bit shared |
| exponent in bits 27..31, a 9-bit B component mantissa in bits 18..26, a |
| 9-bit G component mantissa in bits 9..17, and a 9-bit R component |
| mantissa in bits 0..8. |
| * ename:VK_FORMAT_D16_UNORM specifies a one-component, 16-bit unsigned |
| normalized format that has a single 16-bit depth component. |
| * ename:VK_FORMAT_X8_D24_UNORM_PACK32 specifies a two-component, 32-bit |
| format that has 24 unsigned normalized bits in the depth component and, |
| optionally:, 8 bits that are unused. |
| * ename:VK_FORMAT_D32_SFLOAT specifies a one-component, 32-bit signed |
| floating-point format that has 32 bits in the depth component. |
| * ename:VK_FORMAT_S8_UINT specifies a one-component, 8-bit unsigned |
| integer format that has 8 bits in the stencil component. |
| * ename:VK_FORMAT_D16_UNORM_S8_UINT specifies a two-component, 24-bit |
| format that has 16 unsigned normalized bits in the depth component and 8 |
| unsigned integer bits in the stencil component. |
| * ename:VK_FORMAT_D24_UNORM_S8_UINT specifies a two-component, 32-bit |
| packed format that has 8 unsigned integer bits in the stencil component, |
| and 24 unsigned normalized bits in the depth component. |
| * ename:VK_FORMAT_D32_SFLOAT_S8_UINT specifies a two-component format that |
| has 32 signed float bits in the depth component and 8 unsigned integer |
| bits in the stencil component. |
| There are optionally: 24 bits that are unused. |
| * ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK specifies a three-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data. |
| This format has no alpha and is considered opaque. |
| * ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK specifies a three-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB |
| nonlinear encoding. |
| This format has no alpha and is considered opaque. |
| * ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK specifies a four-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data, and |
| provides 1 bit of alpha. |
| * ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK specifies a four-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB |
| nonlinear encoding, and provides 1 bit of alpha. |
| * ename:VK_FORMAT_BC2_UNORM_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data |
| with the first 64 bits encoding alpha values followed by 64 bits |
| encoding RGB values. |
| * ename:VK_FORMAT_BC2_SRGB_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data |
| with the first 64 bits encoding alpha values followed by 64 bits |
| encoding RGB values with sRGB nonlinear encoding. |
| * ename:VK_FORMAT_BC3_UNORM_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data |
| with the first 64 bits encoding alpha values followed by 64 bits |
| encoding RGB values. |
| * ename:VK_FORMAT_BC3_SRGB_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data |
| with the first 64 bits encoding alpha values followed by 64 bits |
| encoding RGB values with sRGB nonlinear encoding. |
| * ename:VK_FORMAT_BC4_UNORM_BLOCK specifies a one-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized red texel data. |
| * ename:VK_FORMAT_BC4_SNORM_BLOCK specifies a one-component, |
| block-compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of signed normalized red texel data. |
| * ename:VK_FORMAT_BC5_UNORM_BLOCK specifies a two-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RG texel data with |
| the first 64 bits encoding red values followed by 64 bits encoding green |
| values. |
| * ename:VK_FORMAT_BC5_SNORM_BLOCK specifies a two-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of signed normalized RG texel data with |
| the first 64 bits encoding red values followed by 64 bits encoding green |
| values. |
| * ename:VK_FORMAT_BC6H_UFLOAT_BLOCK specifies a three-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned floating-point RGB texel data. |
| * ename:VK_FORMAT_BC6H_SFLOAT_BLOCK specifies a three-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of signed floating-point RGB texel data. |
| * ename:VK_FORMAT_BC7_UNORM_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_BC7_SRGB_BLOCK specifies a four-component, |
| block-compressed format where each 128-bit compressed texel block |
| encodes a 4{times}4 rectangle of unsigned normalized RGBA texel data |
| with sRGB nonlinear encoding applied to the RGB components. |
| * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK specifies a three-component, |
| ETC2 compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data. |
| This format has no alpha and is considered opaque. |
| * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK specifies a three-component, ETC2 |
| compressed format where each 64-bit compressed texel block encodes a |
| 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB |
| nonlinear encoding. |
| This format has no alpha and is considered opaque. |
| * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK specifies a four-component, |
| ETC2 compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data, and |
| provides 1 bit of alpha. |
| * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK specifies a four-component, |
| ETC2 compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGB texel data with sRGB |
| nonlinear encoding, and provides 1 bit of alpha. |
| * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK specifies a four-component, |
| ETC2 compressed format where each 128-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data with the |
| first 64 bits encoding alpha values followed by 64 bits encoding RGB |
| values. |
| * ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK specifies a four-component, |
| ETC2 compressed format where each 128-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data with the |
| first 64 bits encoding alpha values followed by 64 bits encoding RGB |
| values with sRGB nonlinear encoding applied. |
| * ename:VK_FORMAT_EAC_R11_UNORM_BLOCK specifies a one-component, ETC2 |
| compressed format where each 64-bit compressed texel block encodes a |
| 4{times}4 rectangle of unsigned normalized red texel data. |
| * ename:VK_FORMAT_EAC_R11_SNORM_BLOCK specifies a one-component, ETC2 |
| compressed format where each 64-bit compressed texel block encodes a |
| 4{times}4 rectangle of signed normalized red texel data. |
| * ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK specifies a two-component, ETC2 |
| compressed format where each 128-bit compressed texel block encodes a |
| 4{times}4 rectangle of unsigned normalized RG texel data with the first |
| 64 bits encoding red values followed by 64 bits encoding green values. |
| * ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK specifies a two-component, ETC2 |
| compressed format where each 128-bit compressed texel block encodes a |
| 4{times}4 rectangle of signed normalized RG texel data with the first 64 |
| bits encoding red values followed by 64 bits encoding green values. |
| * ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 4{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 4{times}4 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}4 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}5 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}5 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 5{times}5 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}5 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}5 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}5 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}6 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}6 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 6{times}6 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}5 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}5 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 8{times}5 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}6 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}6 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 8{times}6 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}8 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes an |
| 8{times}8 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 8{times}8 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}5 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}5 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}5 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}6 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}6 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}6 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}8 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}8 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}8 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}10 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}10 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 10{times}10 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}10 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}10 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}10 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}12 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}12 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| ifdef::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| * ename:VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK specifies a four-component, ASTC |
| compressed format where each 128-bit compressed texel block encodes a |
| 12{times}12 rectangle of signed floating-point RGBA texel data. |
| endif::VK_VERSION_1_3,VK_EXT_texture_compression_astc_hdr[] |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * ename:VK_FORMAT_G8B8G8R8_422_UNORM specifies a four-component, 32-bit |
| format containing a pair of G components, an R component, and a B |
| component, collectively encoding a 2{times}1 rectangle of unsigned |
| normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has an 8-bit G component for the even _i_ coordinate in byte |
| 0, an 8-bit B component in byte 1, an 8-bit G component for the odd _i_ |
| coordinate in byte 2, and an 8-bit R component in byte 3. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_B8G8R8G8_422_UNORM specifies a four-component, 32-bit |
| format containing a pair of G components, an R component, and a B |
| component, collectively encoding a 2{times}1 rectangle of unsigned |
| normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has an 8-bit B component in byte 0, an 8-bit G component for |
| the even _i_ coordinate in byte 1, an 8-bit R component in byte 2, and |
| an 8-bit G component for the odd _i_ coordinate in byte 3. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2. |
| The horizontal and vertical dimensions of the R and B planes are halved |
| relative to the image dimensions, and each R and B component is shared |
| with the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B |
| component in byte 0 and an 8-bit R component in byte 1. |
| The horizontal and vertical dimensions of the BR plane are halved |
| relative to the image dimensions, and each R and B value is shared with |
| the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2. |
| The horizontal dimension of the R and B plane is halved relative to the |
| image dimensions, and each R and B value is shared with the G components |
| for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = |
| i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B |
| component in byte 0 and an 8-bit R component in byte 1. |
| The horizontal dimension of the BR plane is halved relative to the image |
| dimensions, and each R and B value is shared with the G components for |
| which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, an 8-bit B component in plane 1, and an 8-bit R component in plane 2. |
| Each plane has the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| * ename:VK_FORMAT_R10X6_UNORM_PACK16 specifies a one-component, 16-bit |
| unsigned normalized format that has a single 10-bit R component in the |
| top 10 bits of a 16-bit word, with the bottom 6 bits unused. |
| * ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 specifies a two-component, |
| 32-bit unsigned normalized format that has a 10-bit R component in the |
| top 10 bits of the word in bytes 0..1, and a 10-bit G component in the |
| top 10 bits of the word in bytes 2..3, with the bottom 6 bits of each |
| word unused. |
| * ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 specifies a |
| four-component, 64-bit unsigned normalized format that has a 10-bit R |
| component in the top 10 bits of the word in bytes 0..1, a 10-bit G |
| component in the top 10 bits of the word in bytes 2..3, a 10-bit B |
| component in the top 10 bits of the word in bytes 4..5, and a 10-bit A |
| component in the top 10 bits of the word in bytes 6..7, with the bottom |
| 6 bits of each word unused. |
| * ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 specifies a |
| four-component, 64-bit format containing a pair of G components, an R |
| component, and a B component, collectively encoding a 2{times}1 |
| rectangle of unsigned normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 10-bit G component for the even _i_ coordinate in the |
| top 10 bits of the word in bytes 0..1, a 10-bit B component in the top |
| 10 bits of the word in bytes 2..3, a 10-bit G component for the odd _i_ |
| coordinate in the top 10 bits of the word in bytes 4..5, and a 10-bit R |
| component in the top 10 bits of the word in bytes 6..7, with the bottom |
| 6 bits of each word unused. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 specifies a |
| four-component, 64-bit format containing a pair of G components, an R |
| component, and a B component, collectively encoding a 2{times}1 |
| rectangle of unsigned normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 10-bit B component in the top 10 bits of the word in |
| bytes 0..1, a 10-bit G component for the even _i_ coordinate in the top |
| 10 bits of the word in bytes 2..3, a 10-bit R component in the top 10 |
| bits of the word in bytes 4..5, and a 10-bit G component for the odd _i_ |
| coordinate in the top 10 bits of the word in bytes 6..7, with the bottom |
| 6 bits of each word unused. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component |
| in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R |
| component in the top 10 bits of each 16-bit word of plane 2, with the |
| bottom 6 bits of each word unused. |
| The horizontal and vertical dimensions of the R and B planes are halved |
| relative to the image dimensions, and each R and B component is shared |
| with the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits |
| of the word in bytes 0..1, and a 10-bit R component in the top 10 bits |
| of the word in bytes 2..3, with the bottom 6 bits of each word unused. |
| The horizontal and vertical dimensions of the BR plane are halved |
| relative to the image dimensions, and each R and B value is shared with |
| the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component |
| in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R |
| component in the top 10 bits of each 16-bit word of plane 2, with the |
| bottom 6 bits of each word unused. |
| The horizontal dimension of the R and B plane is halved relative to the |
| image dimensions, and each R and B value is shared with the G components |
| for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = |
| i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits |
| of the word in bytes 0..1, and a 10-bit R component in the top 10 bits |
| of the word in bytes 2..3, with the bottom 6 bits of each word unused. |
| The horizontal dimension of the BR plane is halved relative to the image |
| dimensions, and each R and B value is shared with the G components for |
| which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component |
| in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R |
| component in the top 10 bits of each 16-bit word of plane 2, with the |
| bottom 6 bits of each word unused. |
| Each plane has the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| * ename:VK_FORMAT_R12X4_UNORM_PACK16 specifies a one-component, 16-bit |
| unsigned normalized format that has a single 12-bit R component in the |
| top 12 bits of a 16-bit word, with the bottom 4 bits unused. |
| * ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 specifies a two-component, |
| 32-bit unsigned normalized format that has a 12-bit R component in the |
| top 12 bits of the word in bytes 0..1, and a 12-bit G component in the |
| top 12 bits of the word in bytes 2..3, with the bottom 4 bits of each |
| word unused. |
| * ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 specifies a |
| four-component, 64-bit unsigned normalized format that has a 12-bit R |
| component in the top 12 bits of the word in bytes 0..1, a 12-bit G |
| component in the top 12 bits of the word in bytes 2..3, a 12-bit B |
| component in the top 12 bits of the word in bytes 4..5, and a 12-bit A |
| component in the top 12 bits of the word in bytes 6..7, with the bottom |
| 4 bits of each word unused. |
| * ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 specifies a |
| four-component, 64-bit format containing a pair of G components, an R |
| component, and a B component, collectively encoding a 2{times}1 |
| rectangle of unsigned normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 12-bit G component for the even _i_ coordinate in the |
| top 12 bits of the word in bytes 0..1, a 12-bit B component in the top |
| 12 bits of the word in bytes 2..3, a 12-bit G component for the odd _i_ |
| coordinate in the top 12 bits of the word in bytes 4..5, and a 12-bit R |
| component in the top 12 bits of the word in bytes 6..7, with the bottom |
| 4 bits of each word unused. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 specifies a |
| four-component, 64-bit format containing a pair of G components, an R |
| component, and a B component, collectively encoding a 2{times}1 |
| rectangle of unsigned normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 12-bit B component in the top 12 bits of the word in |
| bytes 0..1, a 12-bit G component for the even _i_ coordinate in the top |
| 12 bits of the word in bytes 2..3, a 12-bit R component in the top 12 |
| bits of the word in bytes 4..5, and a 12-bit G component for the odd _i_ |
| coordinate in the top 12 bits of the word in bytes 6..7, with the bottom |
| 4 bits of each word unused. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component |
| in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R |
| component in the top 12 bits of each 16-bit word of plane 2, with the |
| bottom 4 bits of each word unused. |
| The horizontal and vertical dimensions of the R and B planes are halved |
| relative to the image dimensions, and each R and B component is shared |
| with the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits |
| of the word in bytes 0..1, and a 12-bit R component in the top 12 bits |
| of the word in bytes 2..3, with the bottom 4 bits of each word unused. |
| The horizontal and vertical dimensions of the BR plane are halved |
| relative to the image dimensions, and each R and B value is shared with |
| the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component |
| in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R |
| component in the top 12 bits of each 16-bit word of plane 2, with the |
| bottom 4 bits of each word unused. |
| The horizontal dimension of the R and B plane is halved relative to the |
| image dimensions, and each R and B value is shared with the G components |
| for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = |
| i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits |
| of the word in bytes 0..1, and a 12-bit R component in the top 12 bits |
| of the word in bytes 2..3, with the bottom 4 bits of each word unused. |
| The horizontal dimension of the BR plane is halved relative to the image |
| dimensions, and each R and B value is shared with the G components for |
| which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component |
| in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R |
| component in the top 12 bits of each 16-bit word of plane 2, with the |
| bottom 4 bits of each word unused. |
| Each plane has the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| * ename:VK_FORMAT_G16B16G16R16_422_UNORM specifies a four-component, |
| 64-bit format containing a pair of G components, an R component, and a B |
| component, collectively encoding a 2{times}1 rectangle of unsigned |
| normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 16-bit G component for the even _i_ coordinate in the |
| word in bytes 0..1, a 16-bit B component in the word in bytes 2..3, a |
| 16-bit G component for the odd _i_ coordinate in the word in bytes 4..5, |
| and a 16-bit R component in the word in bytes 6..7. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_B16G16R16G16_422_UNORM specifies a four-component, |
| 64-bit format containing a pair of G components, an R component, and a B |
| component, collectively encoding a 2{times}1 rectangle of unsigned |
| normalized RGB texel data. |
| One G value is present at each _i_ coordinate, with the B and R values |
| shared across both G values and thus recorded at half the horizontal |
| resolution of the image. |
| This format has a 16-bit B component in the word in bytes 0..1, a 16-bit |
| G component for the even _i_ coordinate in the word in bytes 2..3, a |
| 16-bit R component in the word in bytes 4..5, and a 16-bit G component |
| for the odd _i_ coordinate in the word in bytes 6..7. |
| This format only supports images with a width that is a multiple of two. |
| For the purposes of the constraints on copy extents, this format is |
| treated as a compressed format with a 2{times}1 compressed texel block. |
| * ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, a 16-bit B component in each 16-bit word of |
| plane 1, and a 16-bit R component in each 16-bit word of plane 2. |
| The horizontal and vertical dimensions of the R and B planes are halved |
| relative to the image dimensions, and each R and B component is shared |
| with the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, and a two-component, 32-bit BR plane 1 |
| consisting of a 16-bit B component in the word in bytes 0..1, and a |
| 16-bit R component in the word in bytes 2..3. |
| The horizontal and vertical dimensions of the BR plane are halved |
| relative to the image dimensions, and each R and B value is shared with |
| the G components for which latexmath:[\left\lfloor i_G \times 0.5 |
| \right\rfloor = i_B = i_R] and latexmath:[\left\lfloor j_G \times 0.5 |
| \right\rfloor = j_B = j_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width and height that is a |
| multiple of two. |
| * ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, a 16-bit B component in each 16-bit word of |
| plane 1, and a 16-bit R component in each 16-bit word of plane 2. |
| The horizontal dimension of the R and B plane is halved relative to the |
| image dimensions, and each R and B value is shared with the G components |
| for which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = |
| i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, and a two-component, 32-bit BR plane 1 |
| consisting of a 16-bit B component in the word in bytes 0..1, and a |
| 16-bit R component in the word in bytes 2..3. |
| The horizontal dimension of the BR plane is halved relative to the image |
| dimensions, and each R and B value is shared with the G components for |
| which latexmath:[\left\lfloor i_G \times 0.5 \right\rfloor = i_B = i_R]. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| This format only supports images with a width that is a multiple of two. |
| * ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, a 16-bit B component in each 16-bit word of |
| plane 1, and a 16-bit R component in each 16-bit word of plane 2. |
| Each plane has the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the B plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_2_BIT for the R plane. |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| ifdef::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[] |
| * ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has an 8-bit G component in plane |
| 0, and a two-component, 16-bit BR plane 1 consisting of an 8-bit B |
| component in byte 0 and an 8-bit R component in byte 1. |
| Both planes have the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| * ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 10-bit G component |
| in the top 10 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits |
| of the word in bytes 0..1, and a 10-bit R component in the top 10 bits |
| of the word in bytes 2..3, the bottom 6 bits of each word unused. |
| Both planes have the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| * ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 specifies an |
| unsigned normalized _multi-planar format_ that has a 12-bit G component |
| in the top 12 bits of each 16-bit word of plane 0, and a two-component, |
| 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits |
| of the word in bytes 0..1, and a 12-bit R component in the top 12 bits |
| of the word in bytes 2..3, the bottom 4 bits of each word unused. |
| Both planes have the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| * ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM specifies an unsigned |
| normalized _multi-planar format_ that has a 16-bit G component in each |
| 16-bit word of plane 0, and a two-component, 32-bit BR plane 1 |
| consisting of a 16-bit B component in the word in bytes 0..1, and a |
| 16-bit R component in the word in bytes 2..3. |
| Both planes have the same dimensions and each R, G and B component |
| contributes to a single texel. |
| The location of each plane when this image is in linear layout can be |
| determined via flink:vkGetImageSubresourceLayout, using |
| ename:VK_IMAGE_ASPECT_PLANE_0_BIT for the G plane, and |
| ename:VK_IMAGE_ASPECT_PLANE_1_BIT for the BR plane. |
| endif::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[] |
| ifdef::VK_IMG_format_pvrtc[] |
| * ename:VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| an 8{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| an 8{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data. |
| * ename:VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| * ename:VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| * ename:VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| an 8{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| * ename:VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG specifies a four-component, |
| PVRTC compressed format where each 64-bit compressed texel block encodes |
| a 4{times}4 rectangle of unsigned normalized RGBA texel data with sRGB |
| nonlinear encoding applied to the RGB components. |
| endif::VK_IMG_format_pvrtc[] |
| ifdef::VK_NV_optical_flow[] |
| * ename:VK_FORMAT_R16G16_S10_5_NV specifies a two-component, fixed-point |
| format where most significant bit specifies the sign bit, next 10 bits |
| specify the integer value and last 5 bits represent the fractional |
| value. |
| endif::VK_NV_optical_flow[] |
| -- |
| |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| [[formats-compatible-planes]] |
| === 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 <<formats-compatibility-classes, Format Compatibility |
| Classes>>. |
| These planes are also <<formats-size-compatibility,size-compatible>> with |
| any format that is <<formats-size-compatibility, size-compatible>> with the |
| listed single-plane format. |
| |
| .Plane Format Compatibility Table |
| [width="95%",cols="1,6,3,3",options="header"] |
| |==== |
| ^| Plane ^| Compatible format for plane ^| Width relative to the width _w_ of the plane with the largest dimensions ^| Height relative to the height _h_ of the plane with the largest dimensions |
| include::{generated}/formats/planeformat.adoc[] |
| |==== |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| |
| [[formats-planes-image-aspect]] |
| === Multi-planar Format Image Aspect |
| |
| When using elink:VkImageAspectFlagBits to select a plane of a multi-planar |
| format, the following are the valid options: |
| |
| * Two planes |
| ** ename:VK_IMAGE_ASPECT_PLANE_0_BIT |
| ** ename:VK_IMAGE_ASPECT_PLANE_1_BIT |
| * Three planes |
| ** ename:VK_IMAGE_ASPECT_PLANE_0_BIT |
| ** ename:VK_IMAGE_ASPECT_PLANE_1_BIT |
| ** ename:VK_IMAGE_ASPECT_PLANE_2_BIT |
| |
| |
| [[formats-packed]] |
| === 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. |
| |
| include::{generated}/formats/packed.adoc[] |
| |
| |
| === 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. |
| |
| <<< |
| |
| [[formats-numericformat]] |
| .Interpretation of Numeric Format |
| [width="95%",cols="2,3,3,10",options="header"] |
| |==== |
| | Numeric format | Type-Declaration instructions | Numeric type | Description |
| | etext:UNORM | OpTypeFloat | floating-point | The components are unsigned normalized values in the range [eq]#[0,1]# |
| | etext:SNORM | OpTypeFloat | floating-point | The components are signed normalized values in the range [eq]#[-1,1]# |
| | etext:USCALED | OpTypeFloat | floating-point | The components are unsigned integer values that get converted to floating-point in the range [0,2^n^-1] |
| | etext:SSCALED | OpTypeFloat | floating-point | The components are signed integer values that get converted to floating-point in the range [-2^n-1^,2^n-1^-1] |
| | etext:UINT | OpTypeInt | unsigned integer | The components are unsigned integer values in the range [0,2^n^-1] |
| | etext:SINT | OpTypeInt | signed integer | The components are signed integer values in the range [-2^n-1^,2^n-1^-1] |
| | etext:UFLOAT | OpTypeFloat | floating-point | The components are unsigned floating-point numbers (used by packed, shared exponent, and some compressed formats) |
| | etext:SFLOAT | OpTypeFloat | floating-point | The components are signed floating-point numbers |
| | etext: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 |
| 4+| [eq]#n# is the number of bits in the component. |
| |==== |
| |
| The suffix etext:_PACKnn indicates that the format is packed into an |
| underlying type with etext:nn bits. |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| The suffix etext:_mPACKnn is a short-hand that indicates that the format has |
| etext:m groups of components (which may or may not be stored in separate |
| _planes_) that are each packed into an underlying type with etext:nn bits. |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| The suffix etext:_BLOCK indicates that the format is a block-compressed |
| format, with the representation of multiple pixels encoded interdependently |
| within a region. |
| |
| [[formats-compressionscheme]] |
| .Interpretation of Compression Scheme |
| [width="95%",cols="2,10",options="header"] |
| |==== |
| | Compression scheme | Description |
| | etext:BC | Block Compression. See <<appendix-compressedtex-bc>>. |
| | etext:ETC2 | Ericsson Texture Compression. See <<appendix-compressedtex-etc2>>. |
| | etext:EAC | ETC2 Alpha Compression. See <<appendix-compressedtex-etc2>>. |
| | etext:ASTC | Adaptive Scalable Texture Compression (LDR Profile). See <<appendix-compressedtex-astc>>. |
| |==== |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| [[formats-planes]] |
| 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 |
| etext:_2PLANE or etext:_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 etext:_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, etext:_420 |
| to indicate that planes other than the first are reduced in size by a factor |
| of two both horizontally and vertically, and etext:_444 for consistency to |
| indicate that all three planes of a three-planar image are the same size. |
| |
| [NOTE] |
| .Note |
| ==== |
| No common format has a single plane containing both R and B components but |
| does not store these components at reduced horizontal resolution. |
| ==== |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| |
| [[texel-block-size]] |
| === 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 |
| <<formats-depth-stencil,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 |
| <<formats-compatibility, 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 <<formats-non-packed,Byte mappings for non-packed/compressed color |
| formats>>. |
| The in-memory ordering of bytes within a component is determined by the host |
| endianness. |
| |
| [[formats-non-packed]] |
| .Byte mappings for non-packed/compressed color formats |
| [options="header",cols="16*1,10",width="100%"] |
| |==== |
| >|0 >|1 >|2 >|3 >|4 >|5 >|6 >|7 >|8 >|9 >|10 >|11 >|12 >|13 >|14 >|15 ^| {leftarrow} Byte |
| ^|R 16+>s|etext:VK_FORMAT_R8_* |
| ^|R ^|G 15+>s|etext:VK_FORMAT_R8G8_* |
| ^|R ^|G ^|B 14+>s|etext:VK_FORMAT_R8G8B8_* |
| ^|B ^|G ^|R 14+>s|etext:VK_FORMAT_B8G8R8_* |
| ^|R ^|G ^|B ^|A 13+>s|etext:VK_FORMAT_R8G8B8A8_* |
| ^|B ^|G ^|R ^|A 13+>s|etext:VK_FORMAT_B8G8R8A8_* |
| ifdef::VK_KHR_maintenance5[] |
| ^|A 16+>s|ename:VK_FORMAT_A8_UNORM_KHR |
| endif::VK_KHR_maintenance5[] |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| ^|G~0~ ^|B ^|G~1~ ^|R 13+>s|ename:VK_FORMAT_G8B8G8R8_422_UNORM |
| ^|B ^|G~0~ ^|R ^|G~1~ 13+>s|ename:VK_FORMAT_B8G8R8G8_422_UNORM |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| 2+^|R 15+>s|etext:VK_FORMAT_R16_* |
| 2+^|R 2+^|G 13+>s|etext:VK_FORMAT_R16G16_* |
| 2+^|R 2+^|G 2+^|B 11+>s|etext:VK_FORMAT_R16G16B16_* |
| 2+^|R 2+^|G 2+^|B 2+^|A 9+>s|etext:VK_FORMAT_R16G16B16A16_* |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| 2+^|G~0~ 2+^|B 2+^|G~1~ 2+^|R 9+>s|etext:VK_FORMAT_G10X6B10X6G10X6R10X6_4PACK16_422_UNORM |
| etext:VK_FORMAT_G12X4B12X4G12X4R12X4_4PACK16_422_UNORM |
| etext:VK_FORMAT_G16B16G16R16_UNORM |
| 2+^|B 2+^|G~0~ 2+^|R 2+^|G~1~ 9+>s|etext:VK_FORMAT_B10X6G10X6R10X6G10X6_4PACK16_422_UNORM |
| etext:VK_FORMAT_B12X4G12X4R12X4G12X4_4PACK16_422_UNORM |
| ename:VK_FORMAT_B16G16R16G16_422_UNORM |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| 4+^|R 13+>s|etext:VK_FORMAT_R32_* |
| 4+^|R 4+^|G 9+>s|etext:VK_FORMAT_R32G32_* |
| 4+^|R 4+^|G 4+^|B 5+>s|etext:VK_FORMAT_R32G32B32_* |
| 4+^|R 4+^|G 4+^|B 4+^|A >s|etext:VK_FORMAT_R32G32B32A32_* |
| 8+^|R 9+>s|etext:VK_FORMAT_R64_* |
| 8+^|R 8+^|G >s|etext:VK_FORMAT_R64G64_* |
| 17+^s|etext:VK_FORMAT_R64G64B64_* as etext:VK_FORMAT_R64G64_* but with B in bytes 16-23 |
| 17+^s|etext:VK_FORMAT_R64G64B64A64_* as etext: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. |
| |
| [[formats-packed-8-bit]] |
| .Bit mappings for packed 8-bit formats |
| [options="header",cols="8*1",width="100%"] |
| |==== |
| 8+^h| Bit |
| >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~ |
| 8+^h| ename:VK_FORMAT_R4G4_UNORM_PACK8 |
| 4+^s|R 4+^s|G |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| |==== |
| |
| [[formats-packed-16-bit]] |
| .Bit mappings for packed 16-bit formats |
| [options="header",cols="16*1",width="100%"] |
| |==== |
| 16+^h| Bit |
| >|~15~ >|~14~ >|~13~ >|~12~ >|~11~ >|~10~ >|~9~ >|~8~ >|~7~ >|~6~ >|~5~ >|~4~ >|~3~ >|~2~ >|~1~ >|~0~ |
| 16+^h|ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 |
| 4+^s|R 4+^s|G 4+^s|B 4+^s|A |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| 16+^h|ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 |
| 4+^s|B 4+^s|G 4+^s|R 4+^s|A |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| 16+^h|ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16 |
| 4+^s|A 4+^s|R 4+^s|G 4+^s|B |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| 16+^h|ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16 |
| 4+^s|A 4+^s|B 4+^s|G 4+^s|R |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| endif::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| 16+^h|ename:VK_FORMAT_R5G6B5_UNORM_PACK16 |
| 5+^s|R 6+^s|G 5+^s|B |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| 16+^h|ename:VK_FORMAT_B5G6R5_UNORM_PACK16 |
| 5+^s|B 6+^s|G 5+^s|R |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| 16+^h|ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 |
| 5+^s|R 5+^s|G 5+^s|B 1+^s|A |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~0~ |
| 16+^h|ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 |
| 5+^s|B 5+^s|G 5+^s|R 1+^s|A |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~0~ |
| 16+^h|ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 |
| 1+^s|A 5+^s|R 5+^s|G 5+^s|B |
| ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ifdef::VK_KHR_maintenance5[] |
| 16+^h|ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR |
| 1+^s|A 5+^s|B 5+^s|G 5+^s|R |
| ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| endif::VK_KHR_maintenance5[] |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| 16+^h|ename:VK_FORMAT_R10X6_UNORM_PACK16 |
| 10+^s|R 6+^s|X |
| ^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~5~ ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| 16+^h|ename:VK_FORMAT_R12X4_UNORM_PACK16 |
| 12+^s|R 4+^s|X |
| ^| ~11~ ^| ~10~ |
| ^| ~9~ ^| ~8~ ^| ~7~ ^| ~6~ ^| ~5~ |
| ^| ~4~ ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| ^| ~3~ ^| ~2~ ^| ~1~ ^| ~0~ |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |==== |
| |
| [[formats-packed-32-bit]] |
| .Bit mappings for packed 32-bit formats |
| [cols="32*1",options="header"] |
| |==== |
| 32+^h|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~ |
| 32+^h|etext:VK_FORMAT_A8B8G8R8_*_PACK32 |
| 8+^s|A 8+^s|B 8+^s|G 8+^s|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~ |
| 32+^h|etext:VK_FORMAT_A2R10G10B10_*_PACK32 |
| 2+^s|A 10+^s|R 10+^s|G 10+^s|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~ |
| 32+^h|etext:VK_FORMAT_A2B10G10R10_*_PACK32 |
| 2+^s|A 10+^s|B 10+^s|G 10+^s|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~ |
| 32+^h|ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 |
| 10+^s|B 11+^s|G 11+^s|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~ |
| 32+^h|ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 |
| 5+^s|E 9+^s|B 9+^s|G 9+^s|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~ |
| 32+^h|ename:VK_FORMAT_X8_D24_UNORM_PACK32 |
| 8+^s|X 24+^s|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~ |
| |==== |
| |
| |
| [[formats-depth-stencil]] |
| === 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). |
| |
| |
| [[formats-compatibility-classes]] |
| === Format Compatibility Classes |
| |
| Uncompressed color formats are _compatible_ with each other if they occupy |
| the same number of bits per texel block |
| ifdef::VK_KHR_maintenance5[] |
| as long as neither or both are alpha formats (e.g., |
| ename:VK_FORMAT_A8_UNORM_KHR) |
| endif::VK_KHR_maintenance5[] |
| . |
| Compressed color formats are compatible with each other if the only |
| difference between them is the <<formats-numericformat, numeric format>> of |
| the uncompressed pixels. |
| Each depth/stencil format is only compatible with itself. |
| In the <<formats-compatibility,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. |
| |
| |
| [[formats-compatibility]] |
| .Compatible Formats |
| [width="90%",cols="4,10",options="header"] |
| |==== |
| | Class, Texel Block Size, Texel Block Extent, # Texels/Block | Formats |
| include::{generated}/formats/compatibility.adoc[] |
| |==== |
| |
| |
| [[formats-size-compatibility]] |
| ==== Size Compatibility |
| |
| Color formats with the same texel block size are considered |
| ifndef::VK_KHR_maintenance5[] |
| _size-compatible_. |
| endif::VK_KHR_maintenance5[] |
| ifdef::VK_KHR_maintenance5[] |
| _size-compatible_ as long as neither or both are alpha formats (e.g., |
| ename:VK_FORMAT_A8_UNORM_KHR). |
| endif::VK_KHR_maintenance5[] |
| If two size-compatible formats have different block extents (i.e. for |
| compressed formats), then an image with size [eq]#A {times} B {times} C# in |
| one format with a block extent of [eq]#a {times} b {times} c# can be |
| represented as an image with size [eq]#X {times} Y {times} Z# in the other |
| format with block extent [eq]#x {times} y {times} z# at the ratio between |
| the block extents for each format, where |
| |
| {empty}:: [eq]#{lceil}A/a{rceil} = {lceil}X/x{rceil}# |
| {empty}:: [eq]#{lceil}B/b{rceil} = {lceil}Y/y{rceil}# |
| {empty}:: [eq]#{lceil}C/c{rceil} = {lceil}Z/z{rceil}# |
| |
| [NOTE] |
| .Note |
| ==== |
| For example, a 7x3 image in the ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK format |
| can be represented as a 1x1 ename:VK_FORMAT_R64G64_UINT image. |
| ==== |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[] |
| Images created with the |
| ename: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. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance2[] |
| |
| 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. |
| |
| |
| [[formats-properties]] |
| == Format Properties |
| |
| [open,refpage='vkGetPhysicalDeviceFormatProperties',desc='Lists physical device\'s format capabilities',type='protos'] |
| -- |
| To query supported format features which are properties of the physical |
| device, call: |
| |
| include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties.adoc[] |
| |
| * pname:physicalDevice is the physical device from which to query the |
| format properties. |
| * pname:format is the format whose properties are queried. |
| * pname:pFormatProperties is a pointer to a slink:VkFormatProperties |
| structure in which physical device properties for pname:format are |
| returned. |
| |
| include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties.adoc[] |
| -- |
| |
| [open,refpage='VkFormatProperties',desc='Structure specifying image format properties',type='structs'] |
| -- |
| The sname:VkFormatProperties structure is defined as: |
| |
| include::{generated}/api/structs/VkFormatProperties.adoc[] |
| |
| * pname:linearTilingFeatures is a bitmask of elink:VkFormatFeatureFlagBits |
| specifying features supported by images created with a pname:tiling |
| parameter of ename:VK_IMAGE_TILING_LINEAR. |
| * pname:optimalTilingFeatures is a bitmask of |
| elink:VkFormatFeatureFlagBits specifying features supported by images |
| created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL. |
| * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits |
| specifying features supported by buffers. |
| |
| [NOTE] |
| .Note |
| ==== |
| ifndef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| If no format feature flags are supported, then the only possible use would |
| be image transfers - which alone are not useful. |
| As such, if no format feature flags are supported, the format itself is not |
| supported, and images of that format cannot be created. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| If no format feature flags are supported, the format itself is not |
| supported, and images of that format cannot be created. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| ==== |
| |
| If pname:format is a block-compressed format, then pname:bufferFeatures |
| must: not support any features for the format. |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| If pname:format is not a multi-plane format then pname:linearTilingFeatures |
| and pname:optimalTilingFeatures must: not contain |
| ename:VK_FORMAT_FEATURE_DISJOINT_BIT. |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| include::{generated}/validity/structs/VkFormatProperties.adoc[] |
| -- |
| |
| [open,refpage='VkFormatFeatureFlagBits',desc='Bitmask specifying features supported by a buffer',type='enums'] |
| -- |
| Bits which can: be set in the slink:VkFormatProperties features |
| pname:linearTilingFeatures, pname:optimalTilingFeatures, |
| ifdef::VK_EXT_image_drm_format_modifier[] |
| slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures, |
| endif::VK_EXT_image_drm_format_modifier[] |
| and pname:bufferFeatures are: |
| |
| include::{generated}/api/enums/VkFormatFeatureFlagBits.adoc[] |
| |
| These values |
| ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| all have the same meaning as the equivalently named values for |
| tlink:VkFormatFeatureFlags2 and |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] |
| may: be set in |
| ifndef::VK_EXT_image_drm_format_modifier[] |
| pname:linearTilingFeatures and pname:optimalTilingFeatures, |
| endif::VK_EXT_image_drm_format_modifier[] |
| ifdef::VK_EXT_image_drm_format_modifier[] |
| pname:linearTilingFeatures, pname:optimalTilingFeatures, and |
| slink:VkDrmFormatModifierPropertiesEXT::pname:drmFormatModifierTilingFeatures, |
| endif::VK_EXT_image_drm_format_modifier[] |
| specifying that the features are supported by <<VkImage,images>> or |
| <<VkImageView,image views>> |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>> |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| created with the queried |
| flink:vkGetPhysicalDeviceFormatProperties::pname:format: |
| |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT specifies that an image view |
| can: be <<descriptorsets-sampledimage, sampled from>>. |
| * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT specifies that an image view |
| can: be used as a <<descriptorsets-storageimage, storage image>>. |
| * ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT specifies that an image |
| view can: be used as storage image that supports atomic operations. |
| * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT specifies that an image |
| view can: be used as a framebuffer color attachment and as an input |
| attachment. |
| * ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT specifies that an |
| image view can: be used as a framebuffer color attachment that supports |
| blending. |
| * ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an |
| image view can: be used as a framebuffer depth/stencil attachment and as |
| an input attachment. |
| * ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT specifies that an image can: be |
| used as pname:srcImage for the |
| ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage command. |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage2 and fname:vkCmdBlitImage commands. |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| * ename:VK_FORMAT_FEATURE_BLIT_DST_BIT specifies that an image can: be |
| used as pname:dstImage for the |
| ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage command. |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage2 and fname:vkCmdBlitImage commands. |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that |
| if ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is also set, an image view |
| can: be used with a sampler that has either of pname:magFilter or |
| pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set |
| to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR. |
| If ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT is also set, an image can be |
| used as the pname:srcImage to |
| ifndef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| fname:vkCmdBlitImage2 and fname:vkCmdBlitImage |
| endif::VK_VERSION_1_3,VK_KHR_copy_commands2[] |
| with a pname:filter of ename:VK_FILTER_LINEAR. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT or |
| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT. |
| + |
| If the format being queried is a depth/stencil format, this bit only |
| specifies that the depth aspect (not the stencil aspect) of an image of this |
| format supports linear filtering, and that linear filtering of the depth |
| aspect is supported whether depth compare is enabled in the sampler or not. |
| Where depth comparison is supported it may: be linear filtered whether this |
| bit is present or not, but where this bit is not present the filtered value |
| may: be computed in an implementation-dependent manner which differs from |
| the normal rules of linear filtering. |
| The resulting value must: be in the range [eq]#[0,1]# and should: be |
| proportional to, or a weighted average of, the number of comparison passes |
| or failures. |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| * ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT specifies that an image can: be |
| used as a source image for <<copies, copy commands>>. |
| If the application pname:apiVersion is Vulkan 1.0 and |
| `apiext:VK_KHR_maintenance1` is not supported, |
| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT is implied to be set when the |
| format feature flag is not 0. |
| * ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT specifies that an image can: be |
| used as a destination image for <<copies, copy commands>> and <<clears, |
| clear commands>>. |
| If the application pname:apiVersion is Vulkan 1.0 and |
| `apiext:VK_KHR_maintenance1` is not supported, |
| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT is implied to be set when the |
| format feature flag is not 0. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT specifies |
| sname:VkImage can: be used as a sampled image with a min or max |
| elink:VkSamplerReductionMode. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT. |
| endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT specifies |
| that sname:VkImage can: be used with a sampler that has either of |
| pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or |
| be the source image for a blit with pname:filter set to |
| ename:VK_FILTER_CUBIC_EXT. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT. |
| If the format being queried is a depth/stencil format, this only |
| specifies that the depth aspect is cubic filterable. |
| endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an |
| application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr} |
| conversion>> using this format as a source, and that an image of this |
| format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo |
| pname:xChromaOffset and/or pname:yChromaOffset of |
| ename:VK_CHROMA_LOCATION_MIDPOINT. |
| Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be |
| ename:VK_CHROMA_LOCATION_COSITED_EVEN. |
| If a format does not incorporate chroma downsampling (it is not a |
| "`422`" or "`420`" format) but the implementation supports sampler |
| {YCbCr} conversion for this format, the implementation must: set |
| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT. |
| * ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT specifies that an |
| application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr} |
| conversion>> using this format as a source, and that an image of this |
| format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo |
| pname:xChromaOffset and/or pname:yChromaOffset of |
| ename:VK_CHROMA_LOCATION_COSITED_EVEN. |
| Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be |
| ename:VK_CHROMA_LOCATION_MIDPOINT. |
| If neither ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT nor |
| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT is set, the |
| application must: not define a <<samplers-YCbCr-conversion,sampler |
| {YCbCr} conversion>> using this format as a source. |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT |
| specifies that an application can: define a |
| <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this |
| format as a source with pname:chromaFilter set to |
| ename:VK_FILTER_LINEAR. |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT |
| specifies that the format can have different chroma, min, and mag |
| filters. |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT |
| specifies that reconstruction is explicit, as described in |
| <<textures-chroma-reconstruction>>. |
| If this bit is not present, reconstruction is implicit by default. |
| * ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT |
| specifies that reconstruction can: be forcibly made explicit by setting |
| slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction |
| to ename:VK_TRUE. |
| If the format being queried supports |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT |
| it must: also support |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT. |
| * ename:VK_FORMAT_FEATURE_DISJOINT_BIT specifies that a multi-planar image |
| can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image |
| creation. |
| An implementation must: not set ename:VK_FORMAT_FEATURE_DISJOINT_BIT for |
| _single-plane formats_. |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| ifdef::VK_EXT_fragment_density_map[] |
| * ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an |
| image view can: be used as a |
| <<renderpass-fragmentdensitymapattachment,fragment density map |
| attachment>>. |
| endif::VK_EXT_fragment_density_map[] |
| ifdef::VK_KHR_fragment_shading_rate[] |
| * ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
| specifies that an image view can: be used as a |
| <<primsrast-fragment-shading-rate-attachment, fragment shading rate |
| attachment>>. |
| An implementation must: not set this feature for formats with a |
| <<formats-numericformat, numeric format>> other than etext:UINT, or set |
| it as a buffer feature. |
| endif::VK_KHR_fragment_shading_rate[] |
| ifdef::VK_KHR_video_decode_queue[] |
| * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an |
| image view with this format can: be used as a <<decode-output-picture, |
| decode output picture>> in <<video-decode-operations, video decode |
| operations>>. |
| * ename:VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR specifies that an image |
| view with this format can: be used as an output <<reconstructed-picture, |
| reconstructed picture>> or an input <<reference-picture,reference |
| picture>> in <<video-decode-operations,video decode operations>>. |
| endif::VK_KHR_video_decode_queue[] |
| ifdef::VK_KHR_video_encode_queue[] |
| * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an |
| image view with this format can: be used as an <<encode-input-picture, |
| encode input picture>> in <<video-encode-operations,video encode |
| operations>>. |
| * ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR specifies that an image |
| view with this format can: be used as an output <<reconstructed-picture, |
| reconstructed picture>> or an input <<reference-picture,reference |
| picture>> in <<video-encode-operations,video encode operations>>. |
| endif::VK_KHR_video_encode_queue[] |
| ifdef::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[] |
| + |
| [NOTE] |
| .Note |
| ==== |
| Specific <<video-profiles,video profiles>> may: have additional restrictions |
| on the format and other image creation parameters corresponding to image |
| views used by video coding operations that can: be enumerated using the |
| flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR command. |
| ==== |
| endif::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[] |
| |
| [[buffer-compatible-format-features]] |
| |
| The following bits may: be set in pname:bufferFeatures, specifying that the |
| features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer |
| views>> created with the queried |
| flink:vkGetPhysicalDeviceFormatProperties::pname:format: |
| |
| * ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT specifies that the |
| format can: be used to create a buffer view that can: be bound to a |
| ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor. |
| * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT specifies that the |
| format can: be used to create a buffer view that can: be bound to a |
| ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor. |
| * ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that |
| atomic operations are supported on |
| ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format. |
| * ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT specifies that the format can: |
| be used as a vertex attribute format |
| (sname:VkVertexInputAttributeDescription::pname:format). |
| ifdef::VK_KHR_acceleration_structure[] |
| * ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR |
| specifies that the format can: be used as the vertex format when |
| creating an <<acceleration-structure,acceleration structure>> |
| (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat). |
| This format can: also be used as the vertex format in host memory when |
| doing <<host-acceleration-structure, host acceleration structure>> |
| builds. |
| endif::VK_KHR_acceleration_structure[] |
| |
| [NOTE] |
| .Note |
| ==== |
| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT and |
| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT are only intended to |
| be advertised for single-component formats, since SPIR-V atomic operations |
| require a scalar type. |
| ==== |
| -- |
| |
| [open,refpage='VkFormatFeatureFlags',desc='Bitmask of VkFormatFeatureFlagBits',type='flags'] |
| -- |
| include::{generated}/api/flags/VkFormatFeatureFlags.adoc[] |
| |
| tname:VkFormatFeatureFlags is a bitmask type for setting a mask of zero or |
| more elink:VkFormatFeatureFlagBits. |
| -- |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] |
| |
| [open,refpage='vkGetPhysicalDeviceFormatProperties2',desc='Lists physical device\'s format capabilities',type='protos'] |
| -- |
| To query supported format features which are properties of the physical |
| device, call: |
| |
| ifdef::VK_VERSION_1_1[] |
| include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2.adoc[] |
| endif::VK_VERSION_1_1[] |
| |
| ifdef::VK_VERSION_1_1+VK_KHR_get_physical_device_properties2[or the equivalent command] |
| |
| ifdef::VK_KHR_get_physical_device_properties2[] |
| include::{generated}/api/protos/vkGetPhysicalDeviceFormatProperties2KHR.adoc[] |
| endif::VK_KHR_get_physical_device_properties2[] |
| |
| * pname:physicalDevice is the physical device from which to query the |
| format properties. |
| * pname:format is the format whose properties are queried. |
| * pname:pFormatProperties is a pointer to a slink:VkFormatProperties2 |
| structure in which physical device properties for pname:format are |
| returned. |
| |
| fname:vkGetPhysicalDeviceFormatProperties2 behaves similarly to |
| flink:vkGetPhysicalDeviceFormatProperties, with the ability to return |
| extended information in a pname:pNext chain of output structures. |
| |
| include::{generated}/validity/protos/vkGetPhysicalDeviceFormatProperties2.adoc[] |
| -- |
| |
| [open,refpage='VkFormatProperties2',desc='Structure specifying image format properties',type='structs'] |
| -- |
| The sname:VkFormatProperties2 structure is defined as: |
| |
| include::{generated}/api/structs/VkFormatProperties2.adoc[] |
| |
| ifdef::VK_KHR_get_physical_device_properties2[] |
| or the equivalent |
| |
| include::{generated}/api/structs/VkFormatProperties2KHR.adoc[] |
| endif::VK_KHR_get_physical_device_properties2[] |
| |
| * pname:sType is a elink:VkStructureType value identifying this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:formatProperties is a slink:VkFormatProperties structure |
| describing features supported by the requested format. |
| |
| include::{generated}/validity/structs/VkFormatProperties2.adoc[] |
| -- |
| |
| ifdef::VK_EXT_image_drm_format_modifier[] |
| [open,refpage='VkDrmFormatModifierPropertiesListEXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs'] |
| -- |
| To obtain the list of <<glossary-drm-format-modifier,Linux DRM format |
| modifiers>> compatible with a elink:VkFormat, add a |
| slink:VkDrmFormatModifierPropertiesListEXT structure to the pname:pNext |
| chain of slink:VkFormatProperties2. |
| |
| The slink:VkDrmFormatModifierPropertiesListEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkDrmFormatModifierPropertiesListEXT.adoc[] |
| |
| * pname:sType is a elink:VkStructureType value identifying this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:drmFormatModifierCount is an inout parameter related to the number |
| of modifiers compatible with the pname:format, as described below. |
| * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an |
| array of slink:VkDrmFormatModifierPropertiesEXT structures. |
| |
| If pname:pDrmFormatModifierProperties is `NULL`, then the function returns |
| in pname:drmFormatModifierCount the number of modifiers compatible with the |
| queried pname:format. |
| Otherwise, the application must: set pname:drmFormatModifierCount to the |
| length of the array pname:pDrmFormatModifierProperties; the function will |
| write at most pname:drmFormatModifierCount elements to the array, and will |
| return in pname:drmFormatModifierCount the number of elements written. |
| |
| Among the elements in array pname:pDrmFormatModifierProperties, each |
| returned pname:drmFormatModifier must: be unique. |
| |
| include::{generated}/validity/structs/VkDrmFormatModifierPropertiesListEXT.adoc[] |
| -- |
| |
| [open,refpage='VkDrmFormatModifierPropertiesEXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs'] |
| -- |
| The slink:VkDrmFormatModifierPropertiesEXT structure describes properties of |
| a elink:VkFormat when that format is combined with a |
| <<glossary-drm-format-modifier,Linux DRM format modifier>>. |
| These properties, like those of slink:VkFormatProperties2, are independent |
| of any particular image. |
| |
| The slink:VkDrmFormatModifierPropertiesEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkDrmFormatModifierPropertiesEXT.adoc[] |
| |
| * pname:drmFormatModifier is a _Linux DRM format modifier_. |
| * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in |
| any image created with pname:format and pname:drmFormatModifier. |
| An image's _memory planecount_ is distinct from its _format planecount_, |
| as explained below. |
| * pname:drmFormatModifierTilingFeatures is a bitmask of |
| elink:VkFormatFeatureFlagBits that are supported by any image created |
| with pname:format and pname:drmFormatModifier. |
| |
| The returned pname:drmFormatModifierTilingFeatures must: contain at least |
| one bit. |
| |
| The implementation must: not return etext:DRM_FORMAT_MOD_INVALID in |
| pname:drmFormatModifier. |
| |
| An image's _memory planecount_ (as returned by |
| pname:drmFormatModifierPlaneCount) is distinct from its _format planecount_ |
| (in the sense of <<formats-requiring-sampler-ycbcr-conversion,multi-planar>> |
| {YCbCr} formats). |
| In tlink:VkImageAspectFlags, each |
| `VK_IMAGE_ASPECT_MEMORY_PLANE__{ibit}__BIT_EXT` represents a _memory plane_ |
| and each `VK_IMAGE_ASPECT_PLANE__{ibit}__BIT` a _format plane_. |
| |
| An image's set of _format planes_ is an ordered partition of the image's |
| *content* into separable groups of format components. |
| The ordered partition is encoded in the name of each elink:VkFormat. |
| For example, ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM contains two _format |
| planes_; the first plane contains the green component and the second plane |
| contains the blue component and red component. |
| If the format name does not contain `PLANE`, then the format contains a |
| single plane; for example, ename:VK_FORMAT_R8G8B8A8_UNORM. |
| Some commands, such as flink:vkCmdCopyBufferToImage, do not operate on all |
| format components in the image, but instead operate only on the _format |
| planes_ explicitly chosen by the application and operate on each _format |
| plane_ independently. |
| |
| An image's set of _memory planes_ is an ordered partition of the image's |
| *memory* rather than the image's *content*. |
| Each _memory plane_ is a contiguous range of memory. |
| The union of an image's _memory planes_ is not necessarily contiguous. |
| |
| If an image is <<glossary-linear-resource,linear>>, then the partition is |
| the same for _memory planes_ and for _format planes_. |
| Therefore, if the returned pname:drmFormatModifier is |
| code:DRM_FORMAT_MOD_LINEAR, then pname:drmFormatModifierPlaneCount must: |
| equal the _format planecount_, and pname:drmFormatModifierTilingFeatures |
| must: be identical to the |
| slink:VkFormatProperties2::pname:linearTilingFeatures returned in the same |
| pname:pNext chain. |
| |
| If an image is <<glossary-linear-resource,non-linear>>, then the partition |
| of the image's *memory* into _memory planes_ is implementation-specific and |
| may: be unrelated to the partition of the image's *content* into _format |
| planes_. |
| For example, consider an image whose pname:format is |
| ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, pname:tiling is |
| ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, whose pname:drmFormatModifier |
| is not code:DRM_FORMAT_MOD_LINEAR, and pname:flags lacks |
| ename:VK_IMAGE_CREATE_DISJOINT_BIT. |
| The image has 3 _format planes_, and commands such |
| flink:vkCmdCopyBufferToImage act on each _format plane_ independently as if |
| the data of each _format plane_ were separable from the data of the other |
| planes. |
| In a straightforward implementation, the implementation may: store the |
| image's content in 3 adjacent _memory planes_ where each _memory plane_ |
| corresponds exactly to a _format plane_. |
| However, the implementation may: also store the image's content in a single |
| _memory plane_ where all format components are combined using an |
| implementation-private block-compressed format; or the implementation may: |
| store the image's content in a collection of 7 adjacent _memory planes_ |
| using an implementation-private sharding technique. |
| Because the image is non-linear and non-disjoint, the implementation has |
| much freedom when choosing the image's placement in memory. |
| |
| The _memory planecount_ applies to function parameters and structures only |
| when the API specifies an explicit requirement on |
| pname:drmFormatModifierPlaneCount. |
| In all other cases, the _memory planecount_ is ignored. |
| |
| include::{generated}/validity/structs/VkDrmFormatModifierPropertiesEXT.adoc[] |
| -- |
| |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| [open,refpage='VkDrmFormatModifierPropertiesList2EXT',desc='Structure specifying the list of DRM format modifiers supported for a format',type='structs'] |
| -- |
| The list of <<glossary-drm-format-modifier,Linux DRM format modifiers>> |
| compatible with a elink:VkFormat can: be obtained by adding a |
| slink:VkDrmFormatModifierPropertiesList2EXT structure to the pname:pNext |
| chain of slink:VkFormatProperties2. |
| |
| The slink:VkDrmFormatModifierPropertiesList2EXT structure is defined as: |
| |
| include::{generated}/api/structs/VkDrmFormatModifierPropertiesList2EXT.adoc[] |
| |
| * pname:sType is a elink:VkStructureType value identifying this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:drmFormatModifierCount is an inout parameter related to the number |
| of modifiers compatible with the pname:format, as described below. |
| * pname:pDrmFormatModifierProperties is either `NULL` or a pointer to an |
| array of slink:VkDrmFormatModifierProperties2EXT structures. |
| |
| If pname:pDrmFormatModifierProperties is `NULL`, the number of modifiers |
| compatible with the queried pname:format is returned in |
| pname:drmFormatModifierCount. |
| Otherwise, the application must: set pname:drmFormatModifierCount to the |
| length of the array pname:pDrmFormatModifierProperties; the function will |
| write at most pname:drmFormatModifierCount elements to the array, and will |
| return in pname:drmFormatModifierCount the number of elements written. |
| |
| Among the elements in array pname:pDrmFormatModifierProperties, each |
| returned pname:drmFormatModifier must: be unique. |
| |
| Among the elements in array pname:pDrmFormatModifierProperties, the bits |
| reported in pname:drmFormatModifierTilingFeatures must: include the bits |
| reported in the corresponding element of |
| sname:VkDrmFormatModifierPropertiesListEXT::pname:pDrmFormatModifierProperties. |
| |
| include::{generated}/validity/structs/VkDrmFormatModifierPropertiesList2EXT.adoc[] |
| -- |
| |
| [open,refpage='VkDrmFormatModifierProperties2EXT',desc='Structure specifying properties of a format when combined with a DRM format modifier',type='structs'] |
| -- |
| The slink:VkDrmFormatModifierProperties2EXT structure describes properties |
| of a elink:VkFormat when that format is combined with a |
| <<glossary-drm-format-modifier,Linux DRM format modifier>>. |
| These properties, like those of slink:VkFormatProperties2, are independent |
| of any particular image. |
| |
| The slink:VkDrmFormatModifierPropertiesEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkDrmFormatModifierProperties2EXT.adoc[] |
| |
| * pname:drmFormatModifier is a _Linux DRM format modifier_. |
| * pname:drmFormatModifierPlaneCount is the number of _memory planes_ in |
| any image created with pname:format and pname:drmFormatModifier. |
| An image's _memory planecount_ is distinct from its _format planecount_, |
| as explained below. |
| * pname:drmFormatModifierTilingFeatures is a bitmask of |
| elink:VkFormatFeatureFlagBits2 that are supported by any image created |
| with pname:format and pname:drmFormatModifier. |
| include::{generated}/validity/structs/VkDrmFormatModifierProperties2EXT.adoc[] |
| -- |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| endif::VK_EXT_image_drm_format_modifier[] |
| |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| [open,refpage='VkFormatProperties3',desc='Structure specifying image format properties',type='structs',alias='VkFormatProperties3KHR'] |
| -- |
| To query supported format extended features which are properties of the |
| physical device, add slink:VkFormatProperties3 structure to the pname:pNext |
| chain of slink:VkFormatProperties2. |
| |
| The slink:VkFormatProperties3 structure is defined as: |
| |
| include::{generated}/api/structs/VkFormatProperties3.adoc[] |
| |
| ifdef::VK_KHR_format_feature_flags2[] |
| or the equivalent |
| |
| include::{generated}/api/structs/VkFormatProperties3KHR.adoc[] |
| endif::VK_KHR_format_feature_flags2[] |
| |
| * pname:linearTilingFeatures is a bitmask of |
| elink:VkFormatFeatureFlagBits2 specifying features supported by images |
| created with a pname:tiling parameter of ename:VK_IMAGE_TILING_LINEAR. |
| * pname:optimalTilingFeatures is a bitmask of |
| elink:VkFormatFeatureFlagBits2 specifying features supported by images |
| created with a pname:tiling parameter of ename:VK_IMAGE_TILING_OPTIMAL. |
| * pname:bufferFeatures is a bitmask of elink:VkFormatFeatureFlagBits2 |
| specifying features supported by buffers. |
| |
| The bits reported in pname:linearTilingFeatures, pname:optimalTilingFeatures |
| and pname:bufferFeatures must: include the bits reported in the |
| corresponding fields of sname:VkFormatProperties2::pname:formatProperties. |
| |
| include::{generated}/validity/structs/VkFormatProperties3.adoc[] |
| -- |
| |
| [open,refpage='VkFormatFeatureFlagBits2',desc='Bitmask specifying features supported by a buffer',type='enums',alias='VkFormatFeatureFlagBits2KHR'] |
| -- |
| Bits which can: be set in the slink:VkFormatProperties3 features |
| pname:linearTilingFeatures, pname:optimalTilingFeatures, and |
| pname:bufferFeatures are: |
| |
| include::{generated}/api/enums/VkFormatFeatureFlagBits2.adoc[] |
| |
| ifdef::VK_KHR_format_feature_flags2[] |
| or the equivalent |
| |
| include::{generated}/api/enums/VkFormatFeatureFlagBits2KHR.adoc[] |
| endif::VK_KHR_format_feature_flags2[] |
| |
| The following bits may: be set in pname:linearTilingFeatures and |
| pname:optimalTilingFeatures, specifying that the features are supported by |
| <<VkImage,images>> or <<VkImageView,image views>> |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| or <<VkSamplerYcbcrConversion,sampler {YCbCr} conversion objects>> |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| created with the queried |
| flink:vkGetPhysicalDeviceFormatProperties2::pname:format: |
| |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT specifies that an image view |
| can: be <<descriptorsets-sampledimage, sampled from>>. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT specifies that an image view |
| can: be used as a <<descriptorsets-storageimage, storage image>>. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT specifies that an |
| image view can: be used as storage image that supports atomic |
| operations. |
| * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT specifies that an image |
| view can: be used as a framebuffer color attachment and as an input |
| attachment. |
| * ename:VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT specifies that an |
| image view can: be used as a framebuffer color attachment that supports |
| blending. |
| * ename:VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT specifies that an |
| image view can: be used as a framebuffer depth/stencil attachment and as |
| an input attachment. |
| * ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT specifies that an image can: be |
| used as the pname:srcImage for |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and] |
| flink:vkCmdBlitImage. |
| * ename:VK_FORMAT_FEATURE_2_BLIT_DST_BIT specifies that an image can: be |
| used as the pname:dstImage for |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and] |
| flink:vkCmdBlitImage. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT specifies that |
| if ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT is also set, an image |
| view can: be used with a sampler that has either of pname:magFilter or |
| pname:minFilter set to ename:VK_FILTER_LINEAR, or pname:mipmapMode set |
| to ename:VK_SAMPLER_MIPMAP_MODE_LINEAR. |
| If ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT is also set, an image can be |
| used as the pname:srcImage for |
| ifdef::VK_VERSION_1_3,VK_KHR_copy_commands2[flink:vkCmdBlitImage2 and] |
| fname:vkCmdBlitImage with a pname:filter of ename:VK_FILTER_LINEAR. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT or |
| ename:VK_FORMAT_FEATURE_2_BLIT_SRC_BIT. |
| + |
| If the format being queried is a depth/stencil format, this bit only |
| specifies that the depth aspect (not the stencil aspect) of an image of this |
| format supports linear filtering. |
| Where depth comparison is supported it may: be linear filtered whether this |
| bit is present or not, but where this bit is not present the filtered value |
| may: be computed in an implementation-dependent manner which differs from |
| the normal rules of linear filtering. |
| The resulting value must: be in the range [eq]#[0,1]# and should: be |
| proportional to, or a weighted average of, the number of comparison passes |
| or failures. |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| * ename:VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT specifies that an image can: |
| be used as a source image for <<copies, copy commands>>. |
| * ename:VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT specifies that an image can: |
| be used as a destination image for <<copies, copy commands>> and |
| <<clears, clear commands>>. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT specifies |
| sname:VkImage can: be used as a sampled image with a min or max |
| elink:VkSamplerReductionMode. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT. |
| endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT specifies that |
| sname:VkImage can: be used with a sampler that has either of |
| pname:magFilter or pname:minFilter set to ename:VK_FILTER_CUBIC_EXT, or |
| be the source image for a blit with pname:filter set to |
| ename:VK_FILTER_CUBIC_EXT. |
| This bit must: only be exposed for formats that also support the |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT. |
| If the format being queried is a depth/stencil format, this only |
| specifies that the depth aspect is cubic filterable. |
| endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT specifies that an |
| application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr} |
| conversion>> using this format as a source, and that an image of this |
| format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo |
| pname:xChromaOffset and/or pname:yChromaOffset of |
| ename:VK_CHROMA_LOCATION_MIDPOINT. |
| Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be |
| ename:VK_CHROMA_LOCATION_COSITED_EVEN. |
| If a format does not incorporate chroma downsampling (it is not a |
| "`422`" or "`420`" format) but the implementation supports sampler |
| {YCbCr} conversion for this format, the implementation must: set |
| ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT. |
| * ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT specifies that an |
| application can: define a <<samplers-YCbCr-conversion,sampler {YCbCr} |
| conversion>> using this format as a source, and that an image of this |
| format can: be used with a slink:VkSamplerYcbcrConversionCreateInfo |
| pname:xChromaOffset and/or pname:yChromaOffset of |
| ename:VK_CHROMA_LOCATION_COSITED_EVEN. |
| Otherwise both pname:xChromaOffset and pname:yChromaOffset must: be |
| ename:VK_CHROMA_LOCATION_MIDPOINT. |
| If neither ename:VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT nor |
| ename:VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT is set, the |
| application must: not define a <<samplers-YCbCr-conversion,sampler |
| {YCbCr} conversion>> using this format as a source. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT |
| specifies that an application can: define a |
| <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>> using this |
| format as a source with pname:chromaFilter set to |
| ename:VK_FILTER_LINEAR. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT |
| specifies that the format can have different chroma, min, and mag |
| filters. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT |
| specifies that reconstruction is explicit, as described in |
| <<textures-chroma-reconstruction>>. |
| If this bit is not present, reconstruction is implicit by default. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT |
| specifies that reconstruction can: be forcibly made explicit by setting |
| slink:VkSamplerYcbcrConversionCreateInfo::pname:forceExplicitReconstruction |
| to ename:VK_TRUE. |
| If the format being queried supports |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT |
| it must: also support |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT. |
| * ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT specifies that a multi-planar |
| image can: have the ename:VK_IMAGE_CREATE_DISJOINT_BIT set during image |
| creation. |
| An implementation must: not set ename:VK_FORMAT_FEATURE_2_DISJOINT_BIT |
| for _single-plane formats_. |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| ifdef::VK_EXT_fragment_density_map[] |
| * ename:VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT specifies that an |
| image view can: be used as a |
| <<renderpass-fragmentdensitymapattachment,fragment density map |
| attachment>>. |
| endif::VK_EXT_fragment_density_map[] |
| ifdef::VK_KHR_fragment_shading_rate[] |
| * ename:VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
| specifies that an image view can: be used as a |
| <<primsrast-fragment-shading-rate-attachment, fragment shading rate |
| attachment>>. |
| An implementation must: not set this feature for formats with a |
| <<formats-numericformat, numeric format>> other than etext:UINT, or set |
| it as a buffer feature. |
| endif::VK_KHR_fragment_shading_rate[] |
| ifdef::VK_KHR_video_decode_queue[] |
| * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR specifies that an |
| image view with this format can: be used as a <<decode-output-picture, |
| decode output picture>> in <<video-decode-operations, video decode |
| operations>>. |
| * ename:VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR specifies that an |
| image view with this format can: be used as an output |
| <<reconstructed-picture, reconstructed picture>> or an input |
| <<reference-picture,reference picture>> in |
| <<video-decode-operations,video decode operations>>. |
| endif::VK_KHR_video_decode_queue[] |
| ifdef::VK_KHR_video_encode_queue[] |
| * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an |
| image view with this format can: be used as an <<encode-input-picture, |
| encode input picture>> in <<video-encode-operations,video encode |
| operations>>. |
| * ename:VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR specifies that an |
| image view with this format can: be used as an output |
| <<reconstructed-picture, reconstructed picture>> or an input |
| <<reference-picture,reference picture>> in |
| <<video-encode-operations,video encode operations>>. |
| endif::VK_KHR_video_encode_queue[] |
| ifdef::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[] |
| + |
| [NOTE] |
| .Note |
| ==== |
| Specific <<video-profiles,video profiles>> may: have additional restrictions |
| on the format and other image creation parameters corresponding to image |
| views used by video coding operations that can: be enumerated using the |
| flink:vkGetPhysicalDeviceVideoFormatPropertiesKHR command. |
| ==== |
| endif::VK_KHR_video_decode_queue,VK_KHR_video_encode_queue[] |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT specifies that |
| image views or buffer views created with this format can: be used as |
| <<descriptorsets-storageimage, storage images>> or |
| <<descriptorsets-storagetexelbuffer, storage texel buffers>> |
| respectively for read operations without specifying a format. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT specifies |
| that image views or buffer views created with this format can: be used |
| as <<descriptorsets-storageimage, storage images>> or |
| <<descriptorsets-storagetexelbuffer, storage texel buffers>> |
| respectively for write operations without specifying a format. |
| * ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT specifies |
| that image views created with this format can: be used for depth |
| comparison performed by code:OpImage*Dref* instructions. |
| ifdef::VK_NV_linear_color_attachment[] |
| * ename:VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV specifies that |
| the format is supported as a renderable |
| <<glossary-linear-color-attachment, Linear Color Attachment>>. |
| This bit will be set for renderable color formats in the |
| pname:linearTilingFeatures. |
| This must: not be set in the pname:optimalTilingFeatures or |
| pname:bufferFeatures members. |
| endif::VK_NV_linear_color_attachment[] |
| ifdef::VK_QCOM_image_processing[] |
| * ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM specifies that image |
| views created with this format can: be used as the |
| <<descriptorsets-weightimage, weight image>> input to |
| <<textures-weightimage,weight image sampling>> operations. |
| * ename:VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM specifies that |
| image views created with this format can: be sampled in |
| <<textures-weightimage,weight image sampling>> operations. |
| * ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM specifies that image |
| views created with this format can: be used in |
| <<textures-blockmatch,block matching>> operations. |
| * ename:VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM specifies that |
| image views created with this format can: be sampled in |
| <<textures-boxfilter,box filter sampling>> operations. |
| endif::VK_QCOM_image_processing[] |
| ifdef::VK_EXT_host_image_copy[] |
| * ename:VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT specifies that an |
| image can: be created with ename:VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT. |
| endif::VK_EXT_host_image_copy[] |
| |
| The following bits may: be set in pname:bufferFeatures, specifying that the |
| features are supported by <<VkBuffer,buffers>> or <<VkBufferView,buffer |
| views>> created with the queried |
| flink:vkGetPhysicalDeviceFormatProperties2::pname:format: |
| |
| * ename:VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT specifies that the |
| format can: be used to create a buffer view that can: be bound to a |
| ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT specifies that the |
| format can: be used to create a buffer view that can: be bound to a |
| ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT specifies that |
| atomic operations are supported on |
| ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER with this format. |
| * ename:VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT specifies that the format |
| can: be used as a vertex attribute format |
| (sname:VkVertexInputAttributeDescription::pname:format). |
| ifdef::VK_KHR_acceleration_structure[] |
| * ename:VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR |
| specifies that the format can: be used as the vertex format when |
| creating an <<acceleration-structure,acceleration structure>> |
| (sname:VkAccelerationStructureGeometryTrianglesDataKHR::pname:vertexFormat). |
| This format can: also be used as the vertex format in host memory when |
| doing <<host-acceleration-structure, host acceleration structure>> |
| builds. |
| endif::VK_KHR_acceleration_structure[] |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT specifies that |
| buffer views created with this format can: be used as |
| <<descriptorsets-storagetexelbuffer, storage texel buffers>> for read |
| operations without specifying a format. |
| * ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT specifies |
| that buffer views created with this format can: be used as |
| <<descriptorsets-storagetexelbuffer, storage texel buffers>> for write |
| operations without specifying a format. |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| ifdef::VK_NV_optical_flow[] |
| * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV specifies that an |
| image view with this format can: be used as an input or reference to |
| <<opticalflow-operations,optical flow operations>> |
| * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV specifies that an |
| image view with this format can: be used as a flow vector map (either as |
| hint, output or global flow) for <<opticalflow-operations,optical flow |
| operations>> |
| * ename:VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV specifies that an |
| image view with this format can: be used as an output cost map for |
| <<opticalflow-operations,optical flow operations>> |
| endif::VK_NV_optical_flow[] |
| -- |
| |
| [open,refpage='VkFormatFeatureFlags2',desc='Bitmask of VkFormatFeatureFlagBits2',type='flags',alias='VkFormatFeatureFlags2KHR'] |
| -- |
| include::{generated}/api/flags/VkFormatFeatureFlags2.adoc[] |
| |
| ifdef::VK_KHR_format_feature_flags2[] |
| or the equivalent |
| |
| include::{generated}/api/flags/VkFormatFeatureFlags2KHR.adoc[] |
| endif::VK_KHR_format_feature_flags2[] |
| |
| tname:VkFormatFeatureFlags2 is a bitmask type for setting a mask of zero or |
| more elink:VkFormatFeatureFlagBits2. |
| -- |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[] |
| |
| ifdef::VK_EXT_multisampled_render_to_single_sampled[] |
| [open,refpage='VkSubpassResolvePerformanceQueryEXT',desc='Structure specifying the efficiency of subpass resolve for an attachment with a format',type='structs'] |
| -- |
| To query the performance characteristics of a <<renderpass-subpass,subpass |
| resolve>> operation for an attachment with a elink:VkFormat, add a |
| slink:VkSubpassResolvePerformanceQueryEXT structure to the pname:pNext chain |
| of slink:VkFormatProperties2. |
| |
| The slink:VkSubpassResolvePerformanceQueryEXT structure is defined as: |
| |
| include::{generated}/api/structs/VkSubpassResolvePerformanceQueryEXT.adoc[] |
| |
| * pname:sType is a elink:VkStructureType value identifying this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:optimal specifies that a subpass resolve operation is optimally |
| performed. |
| |
| If pname:optimal is ename:VK_FALSE for a elink:VkFormat, using a subpass |
| resolve operation on a multisampled attachment with this format can incur |
| additional costs, including additional memory bandwidth usage and a higher |
| memory footprint. |
| If an attachment with such a format is used in a |
| <<subpass-multisampledrendertosinglesampled,multisampled-render-to-single-sampled>> |
| subpass, the additional memory and memory bandwidth usage can nullify the |
| benefits of using the `apiext:VK_EXT_multisampled_render_to_single_sampled` |
| extension. |
| |
| include::{generated}/validity/structs/VkSubpassResolvePerformanceQueryEXT.adoc[] |
| -- |
| endif::VK_EXT_multisampled_render_to_single_sampled[] |
| |
| |
| [[potential-format-features]] |
| === Potential Format Features |
| |
| Some <<fundamentals-validusage,valid usage conditions>> depend on the format |
| features supported by a slink:VkImage whose elink:VkImageTiling is unknown. |
| In such cases the exact elink:VkFormatFeatureFlagBits supported by the |
| slink:VkImage cannot be determined, so the valid usage conditions are |
| expressed in terms of the _potential format features_ of the slink:VkImage |
| format. |
| |
| The _potential format features_ of a elink:VkFormat are defined as follows: |
| |
| * The union of elink:VkFormatFeatureFlagBits |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| and elink:VkFormatFeatureFlagBits2, |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| supported when the elink:VkImageTiling is ename:VK_IMAGE_TILING_OPTIMAL |
| ifdef::VK_EXT_image_drm_format_modifier[] |
| , ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, |
| endif::VK_EXT_image_drm_format_modifier[] |
| or ename:VK_IMAGE_TILING_LINEAR |
| ifdef::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[] |
| if elink:VkFormat is not ename:VK_FORMAT_UNDEFINED |
| endif::VK_ANDROID_external_memory_android_hardware_buffer,VK_QNX_external_memory_screen_buffer[] |
| ifdef::VK_ANDROID_external_memory_android_hardware_buffer[] |
| * slink:VkAndroidHardwareBufferFormatPropertiesANDROID::pname:formatFeatures |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| and |
| slink:VkAndroidHardwareBufferFormatProperties2ANDROID::pname:formatFeatures |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| of a valid external format if elink:VkFormat is |
| ename:VK_FORMAT_UNDEFINED |
| endif::VK_ANDROID_external_memory_android_hardware_buffer[] |
| ifdef::VK_QNX_external_memory_screen_buffer[] |
| * slink:VkScreenBufferFormatPropertiesQNX::pname:formatFeatures of a valid |
| external format if elink:VkFormat is ename:VK_FORMAT_UNDEFINED |
| endif::VK_QNX_external_memory_screen_buffer[] |
| |
| |
| [[features-required-format-support]] |
| == Required Format Support |
| |
| // Jon 1.3 TBD - add any appropriate required formats for 1.3 |
| |
| Implementations must: support at least the following set of features on the |
| listed formats. |
| For images, these features must: be supported for every elink: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 flink:vkGetPhysicalDeviceFormatProperties command. |
| |
| [NOTE] |
| .Note |
| ==== |
| Unless otherwise excluded below, the required formats are supported for all |
| tlink:VkImageCreateFlags values as long as those flag values are otherwise |
| allowed. |
| ==== |
| |
| The following tables show which feature bits must: be supported for each |
| format. |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| Formats that are required to support |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: also support |
| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT and |
| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT. |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| |
| .Key for format feature tables |
| [width="70%",cols="1,10"] |
| |==== |
| ^|{sym1} | This feature must: be supported on the named format |
| ^|{sym2} | This feature must: be supported on at least some |
| of the named formats, with more information in the table |
| where the symbol appears |
| ^|{sym3} | This feature must: be supported with some caveats or |
| preconditions, with more information in the table where the symbol appears |
| |==== |
| |
| .Feature bits in pname:optimalTilingFeatures |
| [width="70%"] |
| |==== |
| ifdef::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| |ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
| |ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT |
| endif::VK_VERSION_1_1,VK_KHR_maintenance1[] |
| |ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
| |ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT |
| |ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT |
| |ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
| |ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
| |ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
| |ename:VK_FORMAT_FEATURE_BLIT_DST_BIT |
| |ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
| |ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
| ifdef::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| |ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT |
| endif::VK_VERSION_1_2,VK_EXT_sampler_filter_minmax[] |
| |==== |
| |
| .Feature bits in pname:bufferFeatures |
| [width="70%"] |
| |==== |
| |ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
| |ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
| |ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
| |ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-subbyte]] |
| .Mandatory format support: sub-byte components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_UNDEFINED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R4G4_UNORM_PACK8 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | | | | | | | | |
| | ename:VK_FORMAT_R5G6B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |
| | ename:VK_FORMAT_B5G6R5_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |
| ifdef::VK_KHR_maintenance5[] |
| | ename:VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR | | | | | | | | | | | | | |
| endif::VK_KHR_maintenance5[] |
| ifdef::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| | ename:VK_FORMAT_A4R4G4B4_UNORM_PACK16 | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_A4B4G4R4_UNORM_PACK16 | {sym3} | {sym3} | {sym3} | | | | | | | | | | |
| // Jon 1.3 TBD - define interaction with 1.3 core here |
| 14+| Format features marked {sym2} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4R4G4B4 feature. |
| 14+| Format features marked {sym3} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| slink:VkPhysicalDevice4444FormatsFeaturesEXT::pname:formatA4B4G4R4 feature. |
| endif::VK_VERSION_1_3,VK_EXT_4444_formats[] |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-2byte]] |
| .Mandatory format support: 1-3 byte-sized components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_R8_UNORM | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8_SNORM | {sym1} | {sym1} | {sym1} | {sym3} | | | | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8_SRGB | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8_UNORM | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8G8_SNORM | {sym1} | {sym1} | {sym1} | {sym3} | | | | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8G8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8G8_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R8G8_SRGB | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_UNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_SNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8_SRGB | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_UNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_SNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8_SRGB | | | | | | | | | | | | | |
| ifdef::VK_KHR_maintenance5[] |
| | ename:VK_FORMAT_A8_UNORM_KHR | | | | | | | | | | | | | |
| endif::VK_KHR_maintenance5[] |
| 14+| Format features marked with {sym3} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| <<features-shaderStorageImageExtendedFormats, |
| pname:shaderStorageImageExtendedFormats>> feature. |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-4byte]] |
| .Mandatory format support: 4 byte-sized components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_R8G8B8A8_UNORM | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R8G8B8A8_SNORM | {sym1} | {sym1} | {sym1} | {sym1} | | | | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R8G8B8A8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8A8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R8G8B8A8_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R8G8B8A8_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R8G8B8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_UNORM | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_B8G8R8A8_SNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8A8_SRGB | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |
| | ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_A8B8G8R8_USCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A8B8G8R8_SSCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A8B8G8R8_UINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_A8B8G8R8_SINT_PACK32 | {sym1} | {sym1} | | | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | | | | | |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-10bit]] |
| .Mandatory format support: 10- and 12-bit components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_A2R10G10B10_UNORM_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2R10G10B10_SNORM_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2R10G10B10_USCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2R10G10B10_SSCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2R10G10B10_UINT_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2R10G10B10_SINT_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_A2B10G10R10_SNORM_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2B10G10R10_USCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2B10G10R10_SSCALED_PACK32 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | | {sym1} | | |
| | ename:VK_FORMAT_A2B10G10R10_SINT_PACK32 | | | | | | | | | | | | | |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| | ename:VK_FORMAT_R10X6_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R10X6G10X6_UNORM_2PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R12X4_UNORM_PACK16 | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R12X4G12X4_UNORM_2PACK16 | | | | | | | | | | | | | |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| 14+| Format features marked with {sym3} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| <<features-shaderStorageImageExtendedFormats, |
| pname:shaderStorageImageExtendedFormats>> feature. |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-16bit]] |
| .Mandatory format support: 16-bit components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_R16_UNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16_SNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16G16_UNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16G16_SNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16G16_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16_UINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16G16_SINT | {sym1} | {sym1} | | {sym3} | | {sym1} | {sym1} | | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16G16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym3} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | | |
| | ename:VK_FORMAT_R16G16B16_UNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_SNORM | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16_SFLOAT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16A16_UNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16G16B16A16_SNORM | | | | {sym3} | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R16G16B16A16_USCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16A16_SSCALED | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R16G16B16A16_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R16G16B16A16_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R16G16B16A16_SFLOAT | {sym1} | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | |
| 14+| Format features marked with {sym3} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| <<features-shaderStorageImageExtendedFormats, |
| pname:shaderStorageImageExtendedFormats>> feature. |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-32bit]] |
| .Mandatory format support: 32-bit components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_R32_UINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1} |
| | ename:VK_FORMAT_R32_SINT | {sym1} | {sym1} | | {sym1} | {sym1} | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | {sym1} |
| | ename:VK_FORMAT_R32_SFLOAT | {sym1} | {sym1} | | {sym1} |
| | |
| ifdef::VK_EXT_shader_atomic_float[{sym2}] |
| | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32B32_UINT | | | | | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R32G32B32_SINT | | | | | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R32G32B32_SFLOAT | | | | | | | | | | {sym1} | | | |
| | ename:VK_FORMAT_R32G32B32A32_UINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32B32A32_SINT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| | ename:VK_FORMAT_R32G32B32A32_SFLOAT | {sym1} | {sym1} | | {sym1} | | {sym1} | {sym1} | | | {sym1} | {sym1} | {sym1} | |
| ifdef::VK_EXT_shader_atomic_float[] |
| 14+| Format features marked with {sym2} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports |
| the <<features-shaderImageFloat32Atomics, pname:shaderImageFloat32Atomics>> |
| or the <<features-shaderImageFloat32AtomicAdd, pname:shaderImageFloat32AtomicAdd>> |
| ifdef::VK_EXT_shader_atomic_float2[] |
| or the <<features-shaderImageFloat32AtomicMinMax, pname:shaderImageFloat32AtomicMinMax>> |
| endif::VK_EXT_shader_atomic_float2[] |
| feature. |
| endif::VK_EXT_shader_atomic_float[] |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-64bit]] |
| .Mandatory format support: 64-bit/uneven components |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_R64_UINT | | | |
| | |
| ifdef::VK_EXT_shader_image_atomic_int64[{sym2}] |
| | |
| ifdef::VK_EXT_shader_image_atomic_int64[{sym2}] |
| | | | | | | | | |
| | ename:VK_FORMAT_R64_SINT | | | |
| | |
| ifdef::VK_EXT_shader_image_atomic_int64[{sym2}] |
| | |
| ifdef::VK_EXT_shader_image_atomic_int64[{sym2}] |
| | | | | | | | | |
| | ename:VK_FORMAT_R64_SFLOAT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64_SFLOAT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64_SFLOAT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64A64_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64A64_SINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_R64G64B64A64_SFLOAT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | {sym3} | | | | | | | {sym1} | | |
| | ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 | {sym1} | {sym1} | {sym1} | | | | | | | | | | |
| 14+| Format features marked with {sym3} must: be supported for |
| pname:optimalTilingFeatures if the sname:VkPhysicalDevice supports the |
| <<features-shaderStorageImageExtendedFormats, |
| pname:shaderStorageImageExtendedFormats>> feature. |
| ifdef::VK_EXT_shader_image_atomic_int64[] |
| 14+| |
| If the <<features-shaderImageInt64Atomics, pname:shaderImageInt64Atomics>> |
| feature is supported, ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT and |
| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT must: be advertised in |
| pname:optimalTilingFeatures for both ename:VK_FORMAT_R64_UINT and |
| ename:VK_FORMAT_R64_SINT. |
| endif::VK_EXT_shader_image_atomic_int64[] |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-depth-stencil]] |
| .Mandatory format support: depth/stencil with `VkImageType` ename:VK_IMAGE_TYPE_2D |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_D16_UNORM | {sym1} | {sym1} | | | | | | | {sym1} | | | | |
| | ename:VK_FORMAT_X8_D24_UNORM_PACK32 | | | | | | | | | {sym2} | | | | |
| | ename:VK_FORMAT_D32_SFLOAT | {sym1} | {sym1} | | | | | | | {sym2} | | | | |
| | ename:VK_FORMAT_S8_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_D16_UNORM_S8_UINT | | | | | | | | | | | | | |
| | ename:VK_FORMAT_D24_UNORM_S8_UINT | | | | | | | | | {sym2} | | | | |
| | ename:VK_FORMAT_D32_SFLOAT_S8_UINT | | | | | | | | | {sym2} | | | | |
| 14+| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT feature must: be |
| supported for at least one of ename:VK_FORMAT_X8_D24_UNORM_PACK32 and |
| ename:VK_FORMAT_D32_SFLOAT, and must: be supported for at least one of |
| ename:VK_FORMAT_D24_UNORM_S8_UINT and ename:VK_FORMAT_D32_SFLOAT_S8_UINT. |
| 14+| pname:bufferFeatures must: not support any features for these formats |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-bcn]] |
| .Mandatory format support: BC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D and ename:VK_IMAGE_TYPE_3D |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC2_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC2_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC3_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC3_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC4_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC5_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC6H_UFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC6H_SFLOAT_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC7_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_BC7_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| 14+| The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, |
| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be |
| supported in pname:optimalTilingFeatures for all the formats in at least |
| one of: this table, <<formats-mandatory-features-etc>>, or |
| <<formats-mandatory-features-astc>>. |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-etc]] |
| .Mandatory format support: ETC2 and EAC compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_EAC_R11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_EAC_R11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| 14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, |
| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be |
| supported in pname:optimalTilingFeatures for all the formats in at least |
| one of: this table, <<formats-mandatory-features-bcn>>, or |
| <<formats-mandatory-features-astc>>. |
| |==== |
| |
| <<< |
| |
| [[formats-mandatory-features-astc]] |
| .Mandatory format support: ASTC LDR compressed formats with `VkImageType` ename:VK_IMAGE_TYPE_2D |
| [width="100%",cols="12,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 13+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT .14+^.^| {downarrow} |
| 12+>| ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT .13+^.^| {downarrow} |
| 11+>| ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT .12+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT .11+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT .10+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT .9+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_BLIT_DST_BIT .8+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT .7+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT .6+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT .5+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT .4+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT .3+^.^| {downarrow} |
| 1+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .2+^.^| {downarrow} |
| s| Format |
| | ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| | ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK | {sym2} | {sym2} | {sym2} | | | | | | | | | | |
| 14+|The ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, |
| ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT and |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT features must: be |
| supported in pname:optimalTilingFeatures for all the formats in at least |
| one of: this table, <<formats-mandatory-features-bcn>>, or |
| <<formats-mandatory-features-etc>>. |
| |==== |
| |
| ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| If cubic filtering is supported, |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be |
| supported for the following image view types: |
| |
| * ename:VK_IMAGE_VIEW_TYPE_2D |
| * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY |
| |
| for the following formats: |
| |
| * ename:VK_FORMAT_R4G4_UNORM_PACK8 |
| * ename:VK_FORMAT_R4G4B4A4_UNORM_PACK16 |
| * ename:VK_FORMAT_B4G4R4A4_UNORM_PACK16 |
| * ename:VK_FORMAT_R5G6B5_UNORM_PACK16 |
| * ename:VK_FORMAT_B5G6R5_UNORM_PACK16 |
| * ename:VK_FORMAT_R5G5B5A1_UNORM_PACK16 |
| * ename:VK_FORMAT_B5G5R5A1_UNORM_PACK16 |
| * ename:VK_FORMAT_A1R5G5B5_UNORM_PACK16 |
| * ename:VK_FORMAT_R8_UNORM |
| * ename:VK_FORMAT_R8_SNORM |
| * ename:VK_FORMAT_R8_SRGB |
| * ename:VK_FORMAT_R8G8_UNORM |
| * ename:VK_FORMAT_R8G8_SNORM |
| * ename:VK_FORMAT_R8G8_SRGB |
| * ename:VK_FORMAT_R8G8B8_UNORM |
| * ename:VK_FORMAT_R8G8B8_SNORM |
| * ename:VK_FORMAT_R8G8B8_SRGB |
| * ename:VK_FORMAT_B8G8R8_UNORM |
| * ename:VK_FORMAT_B8G8R8_SNORM |
| * ename:VK_FORMAT_B8G8R8_SRGB |
| * ename:VK_FORMAT_R8G8B8A8_UNORM |
| * ename:VK_FORMAT_R8G8B8A8_SNORM |
| * ename:VK_FORMAT_R8G8B8A8_SRGB |
| * ename:VK_FORMAT_B8G8R8A8_UNORM |
| * ename:VK_FORMAT_B8G8R8A8_SNORM |
| * ename:VK_FORMAT_B8G8R8A8_SRGB |
| * ename:VK_FORMAT_A8B8G8R8_UNORM_PACK32 |
| * ename:VK_FORMAT_A8B8G8R8_SNORM_PACK32 |
| * ename:VK_FORMAT_A8B8G8R8_SRGB_PACK32 |
| |
| If ETC compressed formats are supported, |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT must: be |
| supported for the following image view types: |
| |
| * ename:VK_IMAGE_VIEW_TYPE_2D |
| * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY |
| |
| for the following additional formats: |
| |
| * ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK |
| * ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK |
| * ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK |
| * ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK |
| * ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK |
| * ename: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: |
| |
| * ename:VK_IMAGE_VIEW_TYPE_2D |
| * ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY |
| |
| endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| To be used with sname:VkImageView with pname:subresourceRange.aspectMask |
| equal to ename:VK_IMAGE_ASPECT_COLOR_BIT, <<samplers-YCbCr-conversion, |
| sampler {YCbCr} conversion>> must: be enabled for the following formats: |
| |
| [[formats-requiring-sampler-ycbcr-conversion]] |
| .Formats requiring sampler {YCbCr} conversion for ename:VK_IMAGE_ASPECT_COLOR_BIT image views |
| [width="100%",cols="18,^3,^1,^1,^1,^1,^1,^1,^1,^1,^1,^1",options="unbreakable"] |
| |==== |
| 11+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT .11+^.^| {downarrow} |
| 10+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT .10+^.^| {downarrow} |
| 9+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT .9+^.^| {downarrow} |
| 8+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT .8+^.^| {downarrow} |
| 7+>| ename:VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT .7+^.^| {downarrow} |
| 6+>| ename:VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT .6+^.^| {downarrow} |
| 5+>| ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT .5+^.^| {downarrow} |
| 4+>| ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT .4+^.^| {downarrow} |
| 3+>| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT .3+^.^| {downarrow} |
| 2+>| ename:VK_FORMAT_FEATURE_DISJOINT_BIT .2+^.^| {downarrow} |
| s| Format s| Planes |
| | ename:VK_FORMAT_G8B8G8R8_422_UNORM | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_B8G8R8G8_422_UNORM | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM | 3 | | {sym2} | {sym2} | {sym2} | {sym2} | | | | | |
| | ename:VK_FORMAT_G8_B8R8_2PLANE_420_UNORM | 2 | | {sym2} | {sym2} | {sym2} | {sym2} | | | | | |
| | ename:VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G8_B8R8_2PLANE_422_UNORM | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM | 3 | | | | | | | | | | |
| ifdef::VK_EXT_rgba10x6_formats[] |
| | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 {sym3} | 1 | | | | | | | | | | |
| endif::VK_EXT_rgba10x6_formats[] |
| ifndef::VK_EXT_rgba10x6_formats[] |
| | ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 | 1 | | | | | | | | | | |
| endif::VK_EXT_rgba10x6_formats[] |
| | ename:VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G16B16G16R16_422_UNORM | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_B16G16R16G16_422_UNORM | 1 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16R16_2PLANE_420_UNORM | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM | 3 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16R16_2PLANE_422_UNORM | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM | 3 | | | | | | | | | | |
| ifdef::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[] |
| | ename:VK_FORMAT_G8_B8R8_2PLANE_444_UNORM | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 | 2 | | | | | | | | | | |
| | ename:VK_FORMAT_G16_B16R16_2PLANE_444_UNORM | 2 | | | | | | | | | | |
| endif::VK_VERSION_1_3,VK_EXT_ycbcr_2plane_444_formats[] |
| 12+| Format features marked {sym2} must: be supported for |
| pname:optimalTilingFeatures with elink:VkImageType |
| ename:VK_IMAGE_TYPE_2D if the sname:VkPhysicalDevice supports the |
| slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures feature. |
| ifdef::VK_EXT_rgba10x6_formats[] |
| 12+| Formats marked {sym3} do not require a sampler {YCbCr} conversion for |
| ename:VK_IMAGE_ASPECT_COLOR_BIT image views if the |
| slink:VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT::pname:formatRgba10x6WithoutYCbCrSampler |
| feature is enabled. |
| endif::VK_EXT_rgba10x6_formats[] |
| |==== |
| |
| Implementations are not required to support the |
| ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, |
| ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or |
| ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT tlink:VkImageCreateFlags for the |
| above formats that require <<samplers-YCbCr-conversion,sampler {YCbCr} |
| conversion>>. |
| To determine whether the implementation supports sparse image creation flags |
| with these formats use flink:vkGetPhysicalDeviceImageFormatProperties or |
| flink:vkGetPhysicalDeviceImageFormatProperties2. |
| |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| |
| ifdef::VK_EXT_fragment_density_map[] |
| ename:VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT must: be supported for |
| the following formats if the <<features-fragmentDensityMap, |
| pname:fragmentDensityMap>> feature is enabled: |
| |
| * ename:VK_FORMAT_R8G8_UNORM |
| endif::VK_EXT_fragment_density_map[] |
| |
| ifdef::VK_KHR_acceleration_structure[] |
| ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR must: |
| be supported in pname:bufferFeatures for the following formats if the |
| <<features-accelerationStructure, pname:accelerationStructure>> feature is |
| supported: |
| |
| * ename:VK_FORMAT_R32G32_SFLOAT |
| * ename:VK_FORMAT_R32G32B32_SFLOAT |
| * ename:VK_FORMAT_R16G16_SFLOAT |
| * ename:VK_FORMAT_R16G16B16A16_SFLOAT |
| * ename:VK_FORMAT_R16G16_SNORM |
| * ename:VK_FORMAT_R16G16B16A16_SNORM |
| endif::VK_KHR_acceleration_structure[] |
| |
| ifdef::VK_KHR_fragment_shading_rate[] |
| ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR must: be |
| supported for the following formats if the |
| <<features-attachmentFragmentShadingRate, |
| pname:attachmentFragmentShadingRate>> feature is supported: |
| |
| * ename:VK_FORMAT_R8_UINT |
| endif::VK_KHR_fragment_shading_rate[] |
| |
| ifdef::VK_EXT_host_image_copy[] |
| If `apiext:VK_EXT_host_image_copy` is supported and |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT is supported in |
| pname:optimalTilingFeatures or pname:linearTilingFeatures for a color |
| format, ename:VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT must: also be |
| supported in pname:optimalTilingFeatures or pname:linearTilingFeatures |
| respectively. |
| endif::VK_EXT_host_image_copy[] |
| |
| |
| [[formats-without-shader-storage-format]] |
| === Formats Without Shader Storage Format |
| |
| The device-level features for using a storage image or a storage texel |
| buffer with an image format of code:Unknown, |
| <<features-shaderStorageImageReadWithoutFormat, |
| pname:shaderStorageImageReadWithoutFormat>> and |
| <<features-shaderStorageImageWriteWithoutFormat, |
| pname:shaderStorageImageWriteWithoutFormat>>, only apply to the following |
| formats: |
| |
| * ename:VK_FORMAT_R8G8B8A8_UNORM |
| * ename:VK_FORMAT_R8G8B8A8_SNORM |
| * ename:VK_FORMAT_R8G8B8A8_UINT |
| * ename:VK_FORMAT_R8G8B8A8_SINT |
| * ename:VK_FORMAT_R32_UINT |
| * ename:VK_FORMAT_R32_SINT |
| * ename:VK_FORMAT_R32_SFLOAT |
| * ename:VK_FORMAT_R32G32_UINT |
| * ename:VK_FORMAT_R32G32_SINT |
| * ename:VK_FORMAT_R32G32_SFLOAT |
| * ename:VK_FORMAT_R32G32B32A32_UINT |
| * ename:VK_FORMAT_R32G32B32A32_SINT |
| * ename:VK_FORMAT_R32G32B32A32_SFLOAT |
| * ename:VK_FORMAT_R16G16B16A16_UINT |
| * ename:VK_FORMAT_R16G16B16A16_SINT |
| * ename:VK_FORMAT_R16G16B16A16_SFLOAT |
| * ename:VK_FORMAT_R16G16_SFLOAT |
| * ename:VK_FORMAT_B10G11R11_UFLOAT_PACK32 |
| * ename:VK_FORMAT_R16_SFLOAT |
| * ename:VK_FORMAT_R16G16B16A16_UNORM |
| * ename:VK_FORMAT_A2B10G10R10_UNORM_PACK32 |
| * ename:VK_FORMAT_R16G16_UNORM |
| * ename:VK_FORMAT_R8G8_UNORM |
| * ename:VK_FORMAT_R16_UNORM |
| * ename:VK_FORMAT_R8_UNORM |
| * ename:VK_FORMAT_R16G16B16A16_SNORM |
| * ename:VK_FORMAT_R16G16_SNORM |
| * ename:VK_FORMAT_R8G8_SNORM |
| * ename:VK_FORMAT_R16_SNORM |
| * ename:VK_FORMAT_R8_SNORM |
| * ename:VK_FORMAT_R16G16_SINT |
| * ename:VK_FORMAT_R8G8_SINT |
| * ename:VK_FORMAT_R16_SINT |
| * ename:VK_FORMAT_R8_SINT |
| * ename:VK_FORMAT_A2B10G10R10_UINT_PACK32 |
| * ename:VK_FORMAT_R16G16_UINT |
| * ename:VK_FORMAT_R8G8_UINT |
| * ename:VK_FORMAT_R16_UINT |
| * ename:VK_FORMAT_R8_UINT |
| ifdef::VK_KHR_maintenance5[] |
| * ename:VK_FORMAT_A8_UNORM_KHR |
| endif::VK_KHR_maintenance5[] |
| |
| [NOTE] |
| .Note |
| ==== |
| This list of formats is the union of required storage formats from |
| <<features-required-format-support, Required Format Support>> section and |
| formats listed in <<features-shaderStorageImageExtendedFormats, |
| pname:shaderStorageImageExtendedFormats>>. |
| ==== |
| |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
| for any format from the given list of formats and supports |
| <<features-shaderStorageImageReadWithoutFormat, |
| pname:shaderStorageImageReadWithoutFormat>> must: support |
| ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT for that same |
| format if Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension |
| is supported. |
| |
| An implementation that supports ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
| for any format from the given list of formats and supports |
| <<features-shaderStorageImageWriteWithoutFormat, |
| pname:shaderStorageImageWriteWithoutFormat>> must: support |
| ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT for that same |
| format if Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension |
| is supported. |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| |
| |
| ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| === Depth Comparison Format Support |
| |
| If Vulkan 1.3 or the `apiext:VK_KHR_format_feature_flags2` extension is |
| supported, a depth/stencil format with a depth component supporting |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT must: support |
| ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT. |
| |
| endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[] |
| |
| |
| [[format-feature-dependent-usage-flags]] |
| === 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 elink:VkBufferUsageFlagBits and |
| elink: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. |
| |
| .Format feature dependent buffer usage flags |
| [cols="50%,50%",options="header"] |
| |==== |
| |Buffer usage flag | Required format feature flag |
| |ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
| |ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
| |ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
| |==== |
| |
| .Format feature dependent image usage flags |
| [cols="50%,50%",options="header"] |
| |==== |
| |Image usage flag | Required format feature flag |
| |ename:VK_IMAGE_USAGE_SAMPLED_BIT | ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
| |ename:VK_IMAGE_USAGE_STORAGE_BIT | ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
| |ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
| |ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
| |ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT or ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
| ifdef::VK_KHR_fragment_shading_rate[] |
| |ename:VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | ename:VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
| endif::VK_KHR_fragment_shading_rate[] |
| ifdef::VK_KHR_video_decode_queue[] |
| |ename:VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR |
| |ename:VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR |
| endif::VK_KHR_video_decode_queue[] |
| ifdef::VK_KHR_video_encode_queue[] |
| |ename:VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR |
| |ename:VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR | ename:VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR |
| endif::VK_KHR_video_encode_queue[] |
| |==== |