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