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