// Copyright 2021-2023 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

:times: ×

[[roadmap-2022]]
== 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
  ** <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>>
  ** <<features-imageCubeArray, pname:imageCubeArray>>
  ** <<features-independentBlend, pname:independentBlend>>
  ** <<features-sampleRateShading, pname:sampleRateShading>>
  ** <<features-drawIndirectFirstInstance, pname:drawIndirectFirstInstance>>
  ** <<features-depthClamp, pname:depthClamp>>
  ** <<features-depthBiasClamp, pname:depthBiasClamp>>
  ** <<features-samplerAnisotropy, pname:samplerAnisotropy>>
  ** <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>>
  ** <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>>
  ** <<features-shaderStorageImageExtendedFormats, pname:shaderStorageImageExtendedFormats>>
  ** <<features-shaderUniformBufferArrayDynamicIndexing, pname:shaderUniformBufferArrayDynamicIndexing>>
  ** <<features-shaderSampledImageArrayDynamicIndexing, pname:shaderSampledImageArrayDynamicIndexing>>
  ** <<features-shaderStorageBufferArrayDynamicIndexing, pname:shaderStorageBufferArrayDynamicIndexing>>
  ** <<features-shaderStorageImageArrayDynamicIndexing, pname:shaderStorageImageArrayDynamicIndexing>>
  * Vulkan 1.1 Optional Features
  ** <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>>
  * Vulkan 1.2 Optional Features
  ** <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>>
  ** <<features-descriptorIndexing, pname:descriptorIndexing>>
  ** <<features-shaderUniformTexelBufferArrayDynamicIndexing, pname:shaderUniformTexelBufferArrayDynamicIndexing>>
  ** <<features-shaderStorageTexelBufferArrayDynamicIndexing, pname:shaderStorageTexelBufferArrayDynamicIndexing>>
  ** <<features-shaderUniformBufferArrayNonUniformIndexing, pname:shaderUniformBufferArrayNonUniformIndexing>>
  ** <<features-shaderSampledImageArrayNonUniformIndexing, pname:shaderSampledImageArrayNonUniformIndexing>>
  ** <<features-shaderStorageBufferArrayNonUniformIndexing, pname:shaderStorageBufferArrayNonUniformIndexing>>
  ** <<features-shaderStorageImageArrayNonUniformIndexing, pname:shaderStorageImageArrayNonUniformIndexing>>
  ** <<features-shaderUniformTexelBufferArrayNonUniformIndexing, pname:shaderUniformTexelBufferArrayNonUniformIndexing>>
  ** <<features-shaderStorageTexelBufferArrayNonUniformIndexing, pname:shaderStorageTexelBufferArrayNonUniformIndexing>>
  ** <<features-descriptorBindingSampledImageUpdateAfterBind, pname:descriptorBindingSampledImageUpdateAfterBind>>
  ** <<features-descriptorBindingStorageImageUpdateAfterBind, pname:descriptorBindingStorageImageUpdateAfterBind>>
  ** <<features-descriptorBindingStorageBufferUpdateAfterBind, pname:descriptorBindingStorageBufferUpdateAfterBind>>
  ** <<features-descriptorBindingUniformTexelBufferUpdateAfterBind, pname:descriptorBindingUniformTexelBufferUpdateAfterBind>>
  ** <<features-descriptorBindingStorageTexelBufferUpdateAfterBind, pname:descriptorBindingStorageTexelBufferUpdateAfterBind>>
  ** <<features-descriptorBindingUpdateUnusedWhilePending, pname:descriptorBindingUpdateUnusedWhilePending>>
  ** <<features-descriptorBindingPartiallyBound, pname:descriptorBindingPartiallyBound>>
  ** <<features-descriptorBindingVariableDescriptorCount, pname:descriptorBindingVariableDescriptorCount>>
  ** <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>>
  ** <<features-scalarBlockLayout, pname:scalarBlockLayout>>

=== Required Limits

The following core increased limits are required:

.Vulkan 1.0 Limits
[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
|====
| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
| pname:maxImageDimension1D                  | - | 4096    | 8192    | min
| pname:maxImageDimension2D                  | - | 4096    | 8192    | min
| pname:maxImageDimensionCube                | - | 4096    | 8192    | min
| pname:maxImageArrayLayers                  | - | 256     | 2048    | min
| pname:maxUniformBufferRange                | - | 16384   | 65536   | min
| pname:bufferImageGranularity               | - | 131072  | 4096    | max
| pname:maxPerStageDescriptorSamplers        | - | 16      | 64      | min
| pname:maxPerStageDescriptorUniformBuffers  | - | 12      | 15      | min
| pname:maxPerStageDescriptorStorageBuffers  | - | 4       | 30      | min
| pname:maxPerStageDescriptorSampledImages   | - | 16      | 200     | min
| pname:maxPerStageDescriptorStorageImages   | - | 4       | 16      | min
| pname:maxPerStageResources                 | - | 128     | 200     | min
| pname:maxDescriptorSetSamplers             | - | 96      | 576     | min, _n_ {times} PerStage
| pname:maxDescriptorSetUniformBuffers       | - | 72      | 90      | min, _n_ {times} PerStage
| pname:maxDescriptorSetStorageBuffers       | - | 24      | 96      | min, _n_ {times} PerStage
| pname:maxDescriptorSetSampledImages        | - | 96      | 1800    | min, _n_ {times} PerStage
| pname:maxDescriptorSetStorageImages        | - | 24      | 144     | min, _n_ {times} PerStage
| pname:maxFragmentCombinedOutputResources   | - | 4       | 16      | min
| pname:maxComputeWorkGroupInvocations       | - | 128     | 256     | min
| pname:maxComputeWorkGroupSize              | - | (128,128,64) | (256,256,64) | min
| pname:subTexelPrecisionBits                | - | 4       | 8       | min
| pname:mipmapPrecisionBits                  | - | 4       | 6       | min
| pname:maxSamplerLodBias                    | - | 2       | 14      | min
| pname:pointSizeGranularity                 | 0.0 | 1.0   | 0.125   | max, fixed point increment
| pname:lineWidthGranularity                 | 0.0 | 1.0   | 0.5     | max, fixed point increment
| pname:standardSampleLocations              | - | -       | ename:VK_TRUE | implementation-dependent
| pname:maxColorAttachments                  | - | 4       | 7       | min
|====

.Vulkan 1.1 Limits
[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
|====
| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
| pname:subgroupSize                         | - | 1/4     | 4       | implementation-dependent
| pname:subgroupSupportedStages              | - | ename:VK_SHADER_STAGE_COMPUTE_BIT
                                                 | ename:VK_SHADER_STAGE_COMPUTE_BIT +
                                                   ename:VK_SHADER_STAGE_FRAGMENT_BIT
                                                 | implementation-dependent
| pname:subgroupSupportedOperations          | - | ename:VK_SUBGROUP_FEATURE_BASIC_BIT
                                                 | ename:VK_SUBGROUP_FEATURE_BASIC_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_VOTE_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_BALLOT_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT +
                                                   ename:VK_SUBGROUP_FEATURE_QUAD_BIT
                                                 | implementation-dependent
|====

.Vulkan 1.2 Limits
[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
|====
| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
| pname:shaderSignedZeroInfNanPreserveFloat16 | - | -     | ename:VK_TRUE       | implementation-dependent
| pname:shaderSignedZeroInfNanPreserveFloat32 | - | -     | ename:VK_TRUE       | implementation-dependent
| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 0 | 4     | 7    | min
|====

.Vulkan 1.3 Limits
[width="100%",cols="<35,<9,<14,<14,<11",options="header"]
|====
| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^
| pname:maxSubgroupSize | - | -     | 4       | min
|====

=== Required Extensions

The following extensions are required:

apiext:VK_KHR_global_priority
