1// Copyright 2015-2023 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5[appendix]
6
7[[versions]]
8= Core Revisions (Informative)
9
10New minor versions of the Vulkan API are defined periodically by the Khronos
11Vulkan Working Group.
12These consist of some amount of additional functionality added to the core
13API, potentially including both new functionality and functionality
14<<extendingvulkan-compatibility-promotion,promoted>> from extensions.
15
16ifdef::VK_VERSION_1_1[]
17It is possible to build the specification for earlier versions, but to aid
18readability of the latest versions, this appendix gives an overview of the
19changes as compared to earlier versions.
20endif::VK_VERSION_1_1[]
21
22ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
23ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
24
25ifdef::VK_VERSION_1_3[]
26[[versions-1.3]]
27== Version 1.3
28
29// Unfortunately we cannot include titles in an open refpage block, so this
30// is a refpage-specific alternate form of the section.
31ifdef::isrefpage[]
32[open,refpage='VK_VERSION_1_3',desc='Vulkan version 1.3',type='feature',anchor='versions-1.3',xrefs='VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_2']
33--
34Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a
35number of key extensions into the core API:
36
37include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[]
38
39All differences in behavior between these extensions and the corresponding
40Vulkan 1.3 functionality are summarized in the <<versions-1.3-promotions,
41Vulkan 1.3 specification appendix>>.
42
43include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
44--
45endif::isrefpage[]
46
47// This is the spec-specific form of the section
48[[versions-1.3-promotions]]
49Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a
50number of key extensions into the core API:
51
52include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[]
53
54All differences in behavior between these extensions and the corresponding
55Vulkan 1.3 functionality are summarized below.
56
57=== Differences Relative to `VK_EXT_4444_formats`
58
59If the `apiext:VK_EXT_4444_formats` extension is not supported, support for
60all formats defined by it are optional in Vulkan 1.3.
61There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
62corresponding to the slink:VkPhysicalDevice4444FormatsFeaturesEXT structure.
63
64=== Differences Relative to `VK_EXT_extended_dynamic_state`
65
66All dynamic state enumerants and entry points defined by
67`apiext:VK_EXT_extended_dynamic_state` are required in Vulkan 1.3.
68There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
69corresponding to the slink:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
70structure.
71
72=== Differences Relative to `VK_EXT_extended_dynamic_state2`
73
74The optional dynamic state enumerants and entry points defined by
75`apiext:VK_EXT_extended_dynamic_state2` for patch control points and logic
76op are not promoted in Vulkan 1.3.
77There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
78corresponding to the slink:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
79structure.
80
81=== Differences Relative to `VK_EXT_texel_buffer_alignment`
82
83The more specific alignment requirements defined by
84slink:VkPhysicalDeviceTexelBufferAlignmentProperties are required in Vulkan
851.3.
86There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
87corresponding to the slink:VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
88structure.
89The pname:texelBufferAlignment feature is enabled if using a Vulkan 1.3
90instance.
91
92=== Differences Relative to `VK_EXT_texture_compression_astc_hdr`
93
94If the `apiext:VK_EXT_texture_compression_astc_hdr` extension is not
95supported, support for all formats defined by it are optional in Vulkan 1.3.
96The <<features-textureCompressionASTC_HDR,
97pname:textureCompressionASTC_HDR>> member of
98slink:VkPhysicalDeviceVulkan13Features indicates whether a Vulkan 1.3
99implementation supports these formats.
100
101=== Differences Relative to `VK_EXT_ycbcr_2plane_444_formats`
102
103If the `apiext:VK_EXT_ycbcr_2plane_444_formats` extension is not supported,
104support for all formats defined by it are optional in Vulkan 1.3.
105There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
106corresponding to the slink:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
107structure.
108
109=== Additional Vulkan 1.3 Feature Support
110
111[[versions-1.3-new-features]]
112In addition to the promoted extensions described above, Vulkan 1.3 added
113required support for:
114
115  * SPIR-V version 1.6
116  ** SPIR-V 1.6 deprecates (but does not remove) the code:WorkgroupSize
117     decoration.
118  * The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature
119    which indicates support for accessing memory in shaders as storage
120    buffers via flink:vkGetBufferDeviceAddress.
121  * The <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> and
122    <<features-vulkanMemoryModelDeviceScope,
123    pname:vulkanMemoryModelDeviceScope>> features, which indicate support
124    for the corresponding Vulkan Memory Model capabilities.
125  * The <<limits-maxInlineUniformTotalSize,
126    pname:maxInlineUniformTotalSize>> limit is added to provide the total
127    size of all inline uniform block bindings in a pipeline layout.
128
129include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
130
131endif::VK_VERSION_1_3[]
132
133
134ifdef::VK_VERSION_1_2[]
135[[versions-1.2]]
136== Version 1.2
137
138// Unfortunately we cannot include titles in an open refpage block, so this
139// is a refpage-specific alternate form of the section.
140ifdef::isrefpage[]
141[open,refpage='VK_VERSION_1_2',desc='Vulkan version 1.2',type='feature',anchor='versions-1.2',xrefs='VK_VERSION_1_0 VK_VERSION_1_1 VK_VERSION_1_3']
142--
143Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
144number of key extensions into the core API:
145
146// Must be redefined in the refpage content
147ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
148ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
149
150include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[]
151
152All differences in behavior between these extensions and the corresponding
153Vulkan 1.2 functionality are summarized in the <<versions-1.2-promotions,
154Vulkan 1.2 specification appendix>>.
155
156include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
157--
158endif::isrefpage[]
159
160// This is the spec-specific form of the section
161[[versions-1.2-promotions]]
162Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
163number of key extensions into the core API:
164
165include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[]
166
167All differences in behavior between these extensions and the corresponding
168Vulkan 1.2 functionality are summarized below.
169
170=== Differences Relative to `VK_KHR_8bit_storage`
171
172If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for
173the SPIR-V <<features-storageBuffer8BitAccess,
174pname:storageBuffer8BitAccess>> capability in shader modules is optional.
175Support for this feature is defined by
176slink:VkPhysicalDeviceVulkan12Features::pname:storageBuffer8BitAccess when
177queried via flink:vkGetPhysicalDeviceFeatures2.
178
179=== Differences Relative to `VK_KHR_draw_indirect_count`
180
181If the `apiext:VK_KHR_draw_indirect_count` extension is not supported,
182support for the entry points flink:vkCmdDrawIndirectCount and
183flink:vkCmdDrawIndexedIndirectCount is optional.
184Support for this feature is defined by
185slink:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount when queried
186via flink:vkGetPhysicalDeviceFeatures2.
187
188=== Differences Relative to `VK_KHR_sampler_mirror_clamp_to_edge`
189
190If the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is not
191supported, support for the elink:VkSamplerAddressMode
192ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional.
193Support for this feature is defined by
194slink:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge when
195queried via flink:vkGetPhysicalDeviceFeatures2.
196
197=== Differences Relative to `VK_EXT_descriptor_indexing`
198
199If the `apiext:VK_EXT_descriptor_indexing` extension is not supported,
200support for the <<features-descriptorIndexing, pname:descriptorIndexing>>
201feature is optional.
202Support for this feature is defined by
203slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when
204queried via flink:vkGetPhysicalDeviceFeatures2.
205
206=== Differences Relative to `VK_EXT_scalar_block_layout`
207
208If the `apiext:VK_EXT_scalar_block_layout` extension is not supported,
209support for the <<features-scalarBlockLayout, pname:scalarBlockLayout>>
210feature is optional.
211Support for this feature is defined by
212slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried
213via flink:vkGetPhysicalDeviceFeatures2.
214
215=== Differences Relative to `VK_EXT_shader_viewport_index_layer`
216
217The code:ShaderViewportIndexLayerEXT SPIR-V capability was replaced with the
218code:ShaderViewportIndex and code:ShaderLayer capabilities.
219Declaring both is equivalent to declaring code:ShaderViewportIndexLayerEXT.
220If the `apiext:VK_EXT_shader_viewport_index_layer` extension is not
221supported, support for the code:ShaderViewportIndexLayerEXT SPIR-V
222capability is optional.
223Support for this feature is defined by
224slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex and
225slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried
226via flink:vkGetPhysicalDeviceFeatures2.
227
228=== Differences Relative to `VK_KHR_buffer_device_address`
229
230If the `apiext:VK_KHR_buffer_device_address` extension is not supported,
231support for the <<features-bufferDeviceAddress, pname:bufferDeviceAddress>>
232feature is optional.
233Support for this feature is defined by
234slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when
235queried via flink:vkGetPhysicalDeviceFeatures2.
236
237=== Differences Relative to `VK_KHR_shader_atomic_int64`
238
239If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported,
240support for the <<features-shaderBufferInt64Atomics,
241pname:shaderBufferInt64Atomics>> feature is optional.
242Support for this feature is defined by
243slink:VkPhysicalDeviceVulkan12Features::pname:shaderBufferInt64Atomics when
244queried via flink:vkGetPhysicalDeviceFeatures2.
245
246=== Differences Relative to `VK_KHR_shader_float16_int8`
247
248If the `apiext:VK_KHR_shader_float16_int8` extension is not supported,
249support for the <<features-shaderFloat16, pname:shaderFloat16>> and
250<<features-shaderInt8, pname:shaderInt8>> features is optional.
251Support for these features are defined by
252slink:VkPhysicalDeviceVulkan12Features::pname:shaderFloat16 and
253slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via
254flink:vkGetPhysicalDeviceFeatures2.
255
256=== Differences Relative to `VK_KHR_vulkan_memory_model`
257
258If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported,
259support for the <<features-vulkanMemoryModel, pname:vulkanMemoryModel>>
260feature is optional.
261Support for this feature is defined by
262slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried
263via flink:vkGetPhysicalDeviceFeatures2.
264
265=== Additional Vulkan 1.2 Feature Support
266
267[[versions-1.2-new-features]]
268In addition to the promoted extensions described above, Vulkan 1.2 added
269support for:
270
271  * SPIR-V version 1.4.
272  * SPIR-V version 1.5.
273  * The <<features-samplerMirrorClampToEdge,
274    pname:samplerMirrorClampToEdge>> feature which indicates whether the
275    implementation supports the
276    ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode.
277  * The <<spirvenv-capabilities-table-ShaderNonUniform,
278    code:ShaderNonUniform>> capability in SPIR-V version 1.5.
279  * The <<features-shaderOutputViewportIndex,
280    pname:shaderOutputViewportIndex>> feature which indicates that the
281    <<spirvenv-capabilities-table-ShaderViewportIndex,
282    code:ShaderViewportIndex>> capability can be used.
283  * The <<features-shaderOutputLayer, pname:shaderOutputLayer>> feature
284    which indicates that the <<spirvenv-capabilities-table-ShaderLayer,
285    code:ShaderLayer>> capability can be used.
286  * The <<features-subgroupBroadcastDynamicId,
287    pname:subgroupBroadcastDynamicId>> feature which allows the "`Id`"
288    operand of code:OpGroupNonUniformBroadcast to be dynamically uniform
289    within a subgroup, and the "`Index`" operand of
290    code:OpGroupNonUniformQuadBroadcast to be dynamically uniform within a
291    derivative group, in shader modules of version 1.5 or higher.
292  * The <<features-drawIndirectCount, pname:drawIndirectCount>> feature
293    which indicates whether the flink:vkCmdDrawIndirectCount and
294    flink:vkCmdDrawIndexedIndirectCount functions can be used.
295  * The <<features-descriptorIndexing, pname:descriptorIndexing>> feature
296    which indicates the implementation supports the minimum number of
297    descriptor indexing features as defined in the <<features-requirements,
298    Feature Requirements>> section.
299  * The <<features-samplerFilterMinmax, pname:samplerFilterMinmax>> feature
300    which indicates whether the implementation supports the minimum number
301    of image formats that support the
302    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature bit as
303    defined by the
304    <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,
305    pname:filterMinmaxSingleComponentFormats>> property minimum
306    requirements.
307  * The <<limits-framebufferIntegerColorSampleCounts,
308    pname:framebufferIntegerColorSampleCounts>> limit which indicates the
309    color sample counts that are supported for all framebuffer color
310    attachments with integer formats.
311
312include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
313
314endif::VK_VERSION_1_2[]
315
316
317ifdef::VK_VERSION_1_1[]
318[[versions-1.1]]
319== Version 1.1
320
321// Unfortunately we cannot include titles in an open refpage block, so this
322// is a refpage-specific alternate form of the section.
323ifdef::isrefpage[]
324[open,refpage='VK_VERSION_1_1',desc='Vulkan version 1.1',type='feature',anchor='versions-1.1',xrefs='VK_VERSION_1_0 VK_VERSION_1_2 VK_VERSION_1_3']
325--
326Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
327number of key extensions into the core API:
328
329// Must be redefined in the refpage content
330ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
331ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
332
333include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[]
334
335All differences in behavior between these extensions and the corresponding
336Vulkan 1.1 functionality are summarized in the <<versions-1.1-promotions,
337Vulkan 1.1 specification appendix>>.
338
339include::{generated}/interfaces/VK_VERSION_1_1.adoc[]
340--
341endif::isrefpage[]
342
343// This is the spec-specific form of the section
344[[versions-1.1-promotions]]
345Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
346number of key extensions into the core API:
347
348include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[]
349
350All differences in behavior between these extensions and the corresponding
351Vulkan 1.1 functionality are summarized below.
352
353=== Differences Relative to `VK_KHR_16bit_storage`
354
355If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for
356the <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>>
357feature is optional.
358Support for this feature is defined by
359slink:VkPhysicalDevice16BitStorageFeatures::pname:storageBuffer16BitAccess
360ifdef::VK_VERSION_1_2[]
361or slink:VkPhysicalDeviceVulkan11Features::pname:storageBuffer16BitAccess
362endif::VK_VERSION_1_2[]
363when queried via flink:vkGetPhysicalDeviceFeatures2.
364
365=== Differences Relative to `VK_KHR_sampler_ycbcr_conversion`
366
367If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported,
368support for the <<features-samplerYcbcrConversion,
369pname:samplerYcbcrConversion>> feature is optional.
370Support for this feature is defined by
371slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures::pname:samplerYcbcrConversion
372ifdef::VK_VERSION_1_2[]
373or slink:VkPhysicalDeviceVulkan11Features::pname:samplerYcbcrConversion
374endif::VK_VERSION_1_2[]
375when queried via flink:vkGetPhysicalDeviceFeatures2.
376
377=== Differences Relative to `VK_KHR_shader_draw_parameters`
378
379If the `apiext:VK_KHR_shader_draw_parameters` extension is not supported,
380support for the
381{spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
382SPIR-V extension is optional.
383Support for this feature is defined by
384slink:VkPhysicalDeviceShaderDrawParametersFeatures::pname:shaderDrawParameters
385ifdef::VK_VERSION_1_2[]
386or slink:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters
387endif::VK_VERSION_1_2[]
388when queried via flink:vkGetPhysicalDeviceFeatures2.
389
390=== Differences Relative to `VK_KHR_variable_pointers`
391
392If the `apiext:VK_KHR_variable_pointers` extension is not supported, support
393for the <<features-variablePointersStorageBuffer,
394pname:variablePointersStorageBuffer>> feature is optional.
395Support for this feature is defined by
396slink:VkPhysicalDeviceVariablePointersFeatures::pname:variablePointersStorageBuffer
397ifdef::VK_VERSION_1_2[]
398or
399slink:VkPhysicalDeviceVulkan11Features::pname:variablePointersStorageBuffer
400endif::VK_VERSION_1_2[]
401when queried via flink:vkGetPhysicalDeviceFeatures2.
402
403=== Additional Vulkan 1.1 Feature Support
404
405[[versions-1.1-new-features]]
406In addition to the promoted extensions described above, Vulkan 1.1 added
407support for:
408
409  * The <<shaders-group-operations, group operations>> and
410    <<shaders-scope-subgroup, subgroup scope>>.
411  * The <<memory-protected-memory, protected memory>> feature.
412  * A new command to enumerate the instance version:
413    flink:vkEnumerateInstanceVersion.
414  * The slink:VkPhysicalDeviceShaderDrawParametersFeatures feature query
415    struct (where the `apiext:VK_KHR_shader_draw_parameters` extension did
416    not have one).
417
418include::{generated}/interfaces/VK_VERSION_1_1.adoc[]
419
420endif::VK_VERSION_1_1[]
421
422
423[[versions-1.0]]
424== Version 1.0
425
426// Unfortunately we cannot include titles in an open refpage block, so this
427// is a refpage-specific alternate form of the section.
428ifdef::isrefpage[]
429[open,refpage='VK_VERSION_1_0',desc='Vulkan version 1.0',type='feature',anchor='versions-1.0',xrefs='VK_VERSION_1_1 VK_VERSION_1_2 VK_VERSION_1_3']
430--
431Vulkan Version 1.0 was the initial release of the Vulkan API.
432
433include::{generated}/interfaces/VK_VERSION_1_0.adoc[]
434--
435endif::isrefpage[]
436
437// This is the spec-specific form of the section
438Vulkan Version 1.0 was the initial release of the Vulkan API.
439
440include::{generated}/interfaces/VK_VERSION_1_0.adoc[]
441