blob: a51acba382da8b2b22da40d0df11db115041f796 [file] [log] [blame]
// 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