1// Copyright 2021-2023 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5:times: × 6 7[[roadmap-2022]] 8== Roadmap 2022 9 10The 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. 11 12=== Required API Versions 13 14This profile requires Vulkan 1.3. 15 16=== Required Features 17 18The following core optional features are required to be supported: 19 20 * Vulkan 1.0 Optional Features 21 ** <<features-fullDrawIndexUint32, pname:fullDrawIndexUint32>> 22 ** <<features-imageCubeArray, pname:imageCubeArray>> 23 ** <<features-independentBlend, pname:independentBlend>> 24 ** <<features-sampleRateShading, pname:sampleRateShading>> 25 ** <<features-drawIndirectFirstInstance, pname:drawIndirectFirstInstance>> 26 ** <<features-depthClamp, pname:depthClamp>> 27 ** <<features-depthBiasClamp, pname:depthBiasClamp>> 28 ** <<features-samplerAnisotropy, pname:samplerAnisotropy>> 29 ** <<features-occlusionQueryPrecise, pname:occlusionQueryPrecise>> 30 ** <<features-fragmentStoresAndAtomics, pname:fragmentStoresAndAtomics>> 31 ** <<features-shaderStorageImageExtendedFormats, pname:shaderStorageImageExtendedFormats>> 32 ** <<features-shaderUniformBufferArrayDynamicIndexing, pname:shaderUniformBufferArrayDynamicIndexing>> 33 ** <<features-shaderSampledImageArrayDynamicIndexing, pname:shaderSampledImageArrayDynamicIndexing>> 34 ** <<features-shaderStorageBufferArrayDynamicIndexing, pname:shaderStorageBufferArrayDynamicIndexing>> 35 ** <<features-shaderStorageImageArrayDynamicIndexing, pname:shaderStorageImageArrayDynamicIndexing>> 36 * Vulkan 1.1 Optional Features 37 ** <<features-samplerYcbcrConversion, pname:samplerYcbcrConversion>> 38 * Vulkan 1.2 Optional Features 39 ** <<features-samplerMirrorClampToEdge, pname:samplerMirrorClampToEdge>> 40 ** <<features-descriptorIndexing, pname:descriptorIndexing>> 41 ** <<features-shaderUniformTexelBufferArrayDynamicIndexing, pname:shaderUniformTexelBufferArrayDynamicIndexing>> 42 ** <<features-shaderStorageTexelBufferArrayDynamicIndexing, pname:shaderStorageTexelBufferArrayDynamicIndexing>> 43 ** <<features-shaderUniformBufferArrayNonUniformIndexing, pname:shaderUniformBufferArrayNonUniformIndexing>> 44 ** <<features-shaderSampledImageArrayNonUniformIndexing, pname:shaderSampledImageArrayNonUniformIndexing>> 45 ** <<features-shaderStorageBufferArrayNonUniformIndexing, pname:shaderStorageBufferArrayNonUniformIndexing>> 46 ** <<features-shaderStorageImageArrayNonUniformIndexing, pname:shaderStorageImageArrayNonUniformIndexing>> 47 ** <<features-shaderUniformTexelBufferArrayNonUniformIndexing, pname:shaderUniformTexelBufferArrayNonUniformIndexing>> 48 ** <<features-shaderStorageTexelBufferArrayNonUniformIndexing, pname:shaderStorageTexelBufferArrayNonUniformIndexing>> 49 ** <<features-descriptorBindingSampledImageUpdateAfterBind, pname:descriptorBindingSampledImageUpdateAfterBind>> 50 ** <<features-descriptorBindingStorageImageUpdateAfterBind, pname:descriptorBindingStorageImageUpdateAfterBind>> 51 ** <<features-descriptorBindingStorageBufferUpdateAfterBind, pname:descriptorBindingStorageBufferUpdateAfterBind>> 52 ** <<features-descriptorBindingUniformTexelBufferUpdateAfterBind, pname:descriptorBindingUniformTexelBufferUpdateAfterBind>> 53 ** <<features-descriptorBindingStorageTexelBufferUpdateAfterBind, pname:descriptorBindingStorageTexelBufferUpdateAfterBind>> 54 ** <<features-descriptorBindingUpdateUnusedWhilePending, pname:descriptorBindingUpdateUnusedWhilePending>> 55 ** <<features-descriptorBindingPartiallyBound, pname:descriptorBindingPartiallyBound>> 56 ** <<features-descriptorBindingVariableDescriptorCount, pname:descriptorBindingVariableDescriptorCount>> 57 ** <<features-runtimeDescriptorArray, pname:runtimeDescriptorArray>> 58 ** <<features-scalarBlockLayout, pname:scalarBlockLayout>> 59 60=== Required Limits 61 62The following core increased limits are required: 63 64.Vulkan 1.0 Limits 65[width="100%",cols="<35,<9,<14,<14,<11",options="header"] 66|==== 67| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^ 68| pname:maxImageDimension1D | - | 4096 | 8192 | min 69| pname:maxImageDimension2D | - | 4096 | 8192 | min 70| pname:maxImageDimensionCube | - | 4096 | 8192 | min 71| pname:maxImageArrayLayers | - | 256 | 2048 | min 72| pname:maxUniformBufferRange | - | 16384 | 65536 | min 73| pname:bufferImageGranularity | - | 131072 | 4096 | max 74| pname:maxPerStageDescriptorSamplers | - | 16 | 64 | min 75| pname:maxPerStageDescriptorUniformBuffers | - | 12 | 15 | min 76| pname:maxPerStageDescriptorStorageBuffers | - | 4 | 30 | min 77| pname:maxPerStageDescriptorSampledImages | - | 16 | 200 | min 78| pname:maxPerStageDescriptorStorageImages | - | 4 | 16 | min 79| pname:maxPerStageResources | - | 128 | 200 | min 80| pname:maxDescriptorSetSamplers | - | 96 | 576 | min, _n_ {times} PerStage 81| pname:maxDescriptorSetUniformBuffers | - | 72 | 90 | min, _n_ {times} PerStage 82| pname:maxDescriptorSetStorageBuffers | - | 24 | 96 | min, _n_ {times} PerStage 83| pname:maxDescriptorSetSampledImages | - | 96 | 1800 | min, _n_ {times} PerStage 84| pname:maxDescriptorSetStorageImages | - | 24 | 144 | min, _n_ {times} PerStage 85| pname:maxFragmentCombinedOutputResources | - | 4 | 16 | min 86| pname:maxComputeWorkGroupInvocations | - | 128 | 256 | min 87| pname:maxComputeWorkGroupSize | - | (128,128,64) | (256,256,64) | min 88| pname:subTexelPrecisionBits | - | 4 | 8 | min 89| pname:mipmapPrecisionBits | - | 4 | 6 | min 90| pname:maxSamplerLodBias | - | 2 | 14 | min 91| pname:pointSizeGranularity | 0.0 | 1.0 | 0.125 | max, fixed point increment 92| pname:lineWidthGranularity | 0.0 | 1.0 | 0.5 | max, fixed point increment 93| pname:standardSampleLocations | - | - | ename:VK_TRUE | implementation-dependent 94| pname:maxColorAttachments | - | 4 | 7 | min 95|==== 96 97.Vulkan 1.1 Limits 98[width="100%",cols="<35,<9,<14,<14,<11",options="header"] 99|==== 100| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^ 101| pname:subgroupSize | - | 1/4 | 4 | implementation-dependent 102| pname:subgroupSupportedStages | - | ename:VK_SHADER_STAGE_COMPUTE_BIT 103 | ename:VK_SHADER_STAGE_COMPUTE_BIT + 104 ename:VK_SHADER_STAGE_FRAGMENT_BIT 105 | implementation-dependent 106| pname:subgroupSupportedOperations | - | ename:VK_SUBGROUP_FEATURE_BASIC_BIT 107 | ename:VK_SUBGROUP_FEATURE_BASIC_BIT + 108 ename:VK_SUBGROUP_FEATURE_VOTE_BIT + 109 ename:VK_SUBGROUP_FEATURE_ARITHMETIC_BIT + 110 ename:VK_SUBGROUP_FEATURE_BALLOT_BIT + 111 ename:VK_SUBGROUP_FEATURE_SHUFFLE_BIT + 112 ename:VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT + 113 ename:VK_SUBGROUP_FEATURE_QUAD_BIT 114 | implementation-dependent 115|==== 116 117.Vulkan 1.2 Limits 118[width="100%",cols="<35,<9,<14,<14,<11",options="header"] 119|==== 120| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^ 121| pname:shaderSignedZeroInfNanPreserveFloat16 | - | - | ename:VK_TRUE | implementation-dependent 122| pname:shaderSignedZeroInfNanPreserveFloat32 | - | - | ename:VK_TRUE | implementation-dependent 123| pname:maxPerStageDescriptorUpdateAfterBindInputAttachments | 0 | 4 | 7 | min 124|==== 125 126.Vulkan 1.3 Limits 127[width="100%",cols="<35,<9,<14,<14,<11",options="header"] 128|==== 129| Limit Name | Unsupported Limit | Core Limit | Profile Limit | Limit Type^1^ 130| pname:maxSubgroupSize | - | - | 4 | min 131|==== 132 133=== Required Extensions 134 135The following extensions are required: 136 137apiext:VK_KHR_global_priority 138