| // 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 |