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