Author: The Khronos® Vulkan Working Group

# Vulkan® 1.4.321 - A Specification (with all registered extensions)

The Khronos® Vulkan Working Group
version 1.4.321, 2025-07-17 19:31:47Z
from git branch: makepkg commit: dad857284bf63d027ac9d6a97e9a1689831bab0d

Loading… please wait.

Search:

## Appendix F: Vulkan Roadmap Milestones

Roadmap milestones are intended to be supported by mid-to-high-end smartphones, tablets, laptops, consoles, and desktop devices.

Each milestone indicates support for a set of extensions, features, limits, and formats across these devices, and should be supported by all such new hardware shipping by the end of the target year or shortly thereafter.

### Roadmap 2022

The Roadmap 2022 milestone is intended to be supported by newer mid-to-high-end devices shipping in 2022 or shortly thereafter across mainstream smartphone, tablet, laptops, console and desktop devices.

#### Required API Versions

This profile requires Vulkan 1.3.

#### Required Features

The following core optional features are required to be supported:

- Vulkan 1.0 Optional Features

  - `fullDrawIndexUint32`

  - `imageCubeArray`

  - `independentBlend`

  - `sampleRateShading`

  - `drawIndirectFirstInstance`

  - `depthClamp`

  - `depthBiasClamp`

  - `samplerAnisotropy`

  - `occlusionQueryPrecise`

  - `fragmentStoresAndAtomics`

  - `shaderStorageImageExtendedFormats`

  - `shaderUniformBufferArrayDynamicIndexing`

  - `shaderSampledImageArrayDynamicIndexing`

  - `shaderStorageBufferArrayDynamicIndexing`

  - `shaderStorageImageArrayDynamicIndexing`

- Vulkan 1.1 Optional Features

  - `samplerYcbcrConversion`

- Vulkan 1.2 Optional Features

  - `samplerMirrorClampToEdge`

  - `descriptorIndexing`

  - `shaderUniformTexelBufferArrayDynamicIndexing`

  - `shaderStorageTexelBufferArrayDynamicIndexing`

  - `shaderUniformBufferArrayNonUniformIndexing`

  - `shaderSampledImageArrayNonUniformIndexing`

  - `shaderStorageBufferArrayNonUniformIndexing`

  - `shaderStorageImageArrayNonUniformIndexing`

  - `shaderUniformTexelBufferArrayNonUniformIndexing`

  - `shaderStorageTexelBufferArrayNonUniformIndexing`

  - `descriptorBindingSampledImageUpdateAfterBind`

  - `descriptorBindingStorageImageUpdateAfterBind`

  - `descriptorBindingStorageBufferUpdateAfterBind`

  - `descriptorBindingUniformTexelBufferUpdateAfterBind`

  - `descriptorBindingStorageTexelBufferUpdateAfterBind`

  - `descriptorBindingUpdateUnusedWhilePending`

  - `descriptorBindingPartiallyBound`

  - `descriptorBindingVariableDescriptorCount`

  - `runtimeDescriptorArray`

  - `scalarBlockLayout`

#### Required Limits

The following core increased limits are required

Table 120. Vulkan 1.0 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`maxImageDimension1D` | - | 4096 | 8192 | min
`maxImageDimension2D` | - | 4096 | 8192 | min
`maxImageDimensionCube` | - | 4096 | 8192 | min
`maxImageArrayLayers` | - | 256 | 2048 | min
`maxUniformBufferRange` | - | 16384 | 65536 | min
`bufferImageGranularity` | - | 131072 | 4096 | max
`maxPerStageDescriptorSamplers` | - | 16 | 64 | min
`maxPerStageDescriptorUniformBuffers` | - | 12 | 15 | min
`maxPerStageDescriptorStorageBuffers` | - | 4 | 30 | min
`maxPerStageDescriptorSampledImages` | - | 16 | 200 | min
`maxPerStageDescriptorStorageImages` | - | 4 | 16 | min
`maxPerStageResources` | - | 128 | 200 | min
`maxDescriptorSetSamplers` | - | 96 | 576 | min, n × PerStage
`maxDescriptorSetUniformBuffers` | - | 72 | 90 | min, n × PerStage
`maxDescriptorSetStorageBuffers` | - | 24 | 96 | min, n × PerStage
`maxDescriptorSetSampledImages` | - | 96 | 1800 | min, n × PerStage
`maxDescriptorSetStorageImages` | - | 24 | 144 | min, n × PerStage
`maxFragmentCombinedOutputResources` | - | 4 | 16 | min
`maxComputeWorkGroupInvocations` | - | 128 | 256 | min
`maxComputeWorkGroupSize` | - | (128,128,64) | (256,256,64) | min
`subTexelPrecisionBits` | - | 4 | 8 | min
`mipmapPrecisionBits` | - | 4 | 6 | min
`maxSamplerLodBias` | - | 2 | 14 | min
`pointSizeGranularity` | 0.0 | 1.0 | 0.125 | max, fixed point increment
`lineWidthGranularity` | 0.0 | 1.0 | 0.5 | max, fixed point increment
`standardSampleLocations` | - | - | `VK_TRUE` | implementation-dependent
`maxColorAttachments` | - | 4 | 7 | min

Table 121. Vulkan 1.1 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`subgroupSize` | - | 1/4 | 4 | implementation-dependent
`subgroupSupportedStages` | - | `VK_SHADER_STAGE_COMPUTE_BIT` | `VK_SHADER_STAGE_COMPUTE_BIT` `VK_SHADER_STAGE_FRAGMENT_BIT` | implementation-dependent
`subgroupSupportedOperations` | - | `VK_SUBGROUP_FEATURE_BASIC_BIT` | `VK_SUBGROUP_FEATURE_BASIC_BIT` `VK_SUBGROUP_FEATURE_VOTE_BIT` `VK_SUBGROUP_FEATURE_ARITHMETIC_BIT` `VK_SUBGROUP_FEATURE_BALLOT_BIT` `VK_SUBGROUP_FEATURE_SHUFFLE_BIT` `VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT` `VK_SUBGROUP_FEATURE_QUAD_BIT` | implementation-dependent

Table 122. Vulkan 1.2 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`shaderSignedZeroInfNanPreserveFloat16` | - | - | `VK_TRUE` | implementation-dependent
`shaderSignedZeroInfNanPreserveFloat32` | - | - | `VK_TRUE` | implementation-dependent
`maxPerStageDescriptorUpdateAfterBindInputAttachments` | 0 | 4 | 7 | min

Table 123. Vulkan 1.3 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`maxSubgroupSize` | - | - | 4 | min

#### Required Extensions

The following extensions are required

VK_KHR_global_priority

### Roadmap 2024

The Roadmap 2024 milestone is intended to be supported by newer mid-to-high-end devices shipping in 2024 or shortly thereafter across mainstream smartphone, tablet, laptops, console and desktop devices.

Two of the core aims of this roadmap profile are to enable developers to rely on a number of important rasterization and shader features have been available for a long time, but until now have not enjoyed wide support.

Shader features required include smaller types (8/16-bit integers and 16-bit floats), reconvergence guarantees for subgroup ops (VK_KHR_shader_maximal_reconvergence and VK_KHR_shader_quad_control), and more consistent floating-point handling (VK_KHR_shader_float_controls2 and round-to-nearest-even for 32-/16-bit floats). Rasterization features include requiring support for multi-draw indirect, shader draw parameters, 8-bit indices, better line rasterization definitions, and local reads when using dynamic rendering. A few other features have been added opportunistically, in lieu of shipping a Vulkan 1.4 in the same time frame, such as push descriptors and the various minor improvements included in VK_KHR_maintenance5.

#### Required Profiles

This profile requires the Roadmap 2022 profile.

#### Required Features

The following core optional features are required to be supported:

- Vulkan 1.0 Optional Features

  - `multiDrawIndirect`

  - `shaderImageGatherExtended`

  - `shaderInt16`

- Vulkan 1.1 Optional Features

  - `shaderDrawParameters`

  - `storageBuffer16BitAccess`

- Vulkan 1.2 Optional Features

  - `shaderInt8`

  - `shaderFloat16`

  - `storageBuffer8BitAccess`

#### Required Limits

The following core increased limits are required

Table 124. Vulkan 1.0 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`maxBoundDescriptorSets` | - | 4 | 7 | min
`maxColorAttachments` | - | 4 | 8 | min
`timestampComputeAndGraphics` | - | FALSE | TRUE | Boolean

Table 125. Vulkan 1.2 Limits
Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type1
--- | --- | --- | --- | ---
`shaderRoundingModeRTEFloat16` | - | FALSE | TRUE | Boolean
`shaderRoundingModeRTEFloat32` | - | FALSE | TRUE | Boolean

#### Required Extensions

The following extensions are required

- VK_KHR_dynamic_rendering_local_read

- VK_KHR_load_store_op_none

- VK_KHR_shader_quad_control

- VK_KHR_shader_maximal_reconvergence

- VK_KHR_shader_subgroup_uniform_control_flow

- VK_KHR_shader_subgroup_rotate

- VK_KHR_shader_float_controls2

- VK_KHR_shader_expect_assume

- VK_KHR_line_rasterization

- VK_KHR_vertex_attribute_divisor

- VK_KHR_index_type_uint8

- VK_KHR_map_memory2

- VK_KHR_maintenance5

- VK_KHR_push_descriptor