1// Copyright 2015-2021 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_2[] 24[[versions-1.2]] 25== Version 1.2 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_2',desc='Vulkan version 1.2',type='feature',anchor='versions-1.2',xrefs='VK_VERSION_1_0 VK_VERSION_1_1'] 31-- 32Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a 33number of key extensions into the core API: 34 35include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[] 36 37All differences in behavior between these extensions and the corresponding 38Vulkan 1.2 functionality are summarized in the <<versions-1.2-promotions, 39Vulkan 1.2 specification appendix>>. 40 41include::{generated}/interfaces/VK_VERSION_1_2.txt[] 42-- 43endif::isrefpage[] 44 45// This is the spec-specific form of the section 46[[versions-1.2-promotions]] 47Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a 48number of key extensions into the core API: 49 50include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[] 51 52All differences in behavior between these extensions and the corresponding 53Vulkan 1.2 functionality are summarized below. 54 55=== Differences relative to `VK_KHR_8bit_storage` 56 57If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for 58the SPIR-V <<features-storageBuffer8BitAccess, 59code:StorageBuffer8BitAccess>> capability in shader modules is optional. 60Support for this feature is defined by 61slink:VkPhysicalDeviceVulkan12Features::pname:storageBuffer8BitAccess when 62queried via flink:vkGetPhysicalDeviceFeatures2. 63 64=== Differences relative to `VK_KHR_draw_indirect_count` 65 66If the `apiext:VK_KHR_draw_indirect_count` extension is not supported, 67support for the entry points flink:vkCmdDrawIndirectCount and 68flink:vkCmdDrawIndexedIndirectCount is optional. 69Support for this feature is defined by 70slink:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount when queried 71via flink:vkGetPhysicalDeviceFeatures2. 72 73=== Differences relative to `VK_KHR_sampler_mirror_clamp_to_edge` 74 75If the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is not 76supported, support for the elink:VkSamplerAddressMode 77ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional. 78Support for this feature is defined by 79slink:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge when 80queried via flink:vkGetPhysicalDeviceFeatures2. 81 82=== Differences relative to `VK_EXT_descriptor_indexing` 83 84If the `apiext:VK_EXT_descriptor_indexing` extension is not supported, 85support for the <<features-descriptorIndexing,descriptorIndexing>> feature 86is optional. 87Support for this feature is defined by 88slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when 89queried via flink:vkGetPhysicalDeviceFeatures2. 90 91=== Differences relative to `VK_EXT_scalar_block_layout` 92 93If the `apiext:VK_EXT_scalar_block_layout` extension is not supported, 94support for the <<features-scalarBlockLayout,scalarBlockLayout>> feature is 95optional. 96Support for this feature is defined by 97slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried 98via flink:vkGetPhysicalDeviceFeatures2. 99 100=== Differences relative to `VK_EXT_shader_viewport_index_layer` 101 102If the `apiext:VK_EXT_shader_viewport_index_layer` extension is not 103supported, support for the code:ShaderViewportIndexLayerEXT SPIR-V 104capability is optional. 105Support for this feature is defined by 106slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex and 107slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried 108via flink:vkGetPhysicalDeviceFeatures2. 109 110=== Differences relative to `VK_KHR_buffer_device_address` 111 112If the `apiext:VK_KHR_buffer_device_address` extension is not supported, 113support for the <<features-bufferDeviceAddress,bufferDeviceAddress>> feature 114is optional. 115Support for this feature is defined by 116slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when 117queried via flink:vkGetPhysicalDeviceFeatures2. 118 119=== Differences relative to `VK_KHR_shader_atomic_int64` 120 121If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported, 122support for the 123<<features-shaderBufferInt64Atomics,shaderBufferInt64Atomics>> feature is 124optional. 125Support for this feature is defined by 126slink:VkPhysicalDeviceVulkan12Features::pname:shaderBufferInt64Atomics when 127queried via flink:vkGetPhysicalDeviceFeatures2. 128 129=== Differences relative to `VK_KHR_shader_float16_int8` 130 131If the `apiext:VK_KHR_shader_float16_int8` extension is not supported, 132support for the <<features-shaderFloat16, pname:shaderFloat16>> and 133<<features-shaderInt8, pname:shaderInt8>> features is optional. 134Support for these features are defined by 135slink:VkPhysicalDeviceVulkan12Features::pname:shaderFloat16 and 136slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via 137flink:vkGetPhysicalDeviceFeatures2. 138 139=== Differences relative to `VK_KHR_vulkan_memory_model` 140 141If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported, 142support for the <<features-vulkanMemoryModel,vulkanMemoryModel>> feature is 143optional. 144Support for this feature is defined by 145slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried 146via flink:vkGetPhysicalDeviceFeatures2. 147 148=== Additional Vulkan 1.2 Feature Support 149 150[[versions-1.2-new-features]] 151In addition to the promoted extensions described above, Vulkan 1.2 added 152support for: 153 154 * SPIR-V version 1.4. 155 * SPIR-V version 1.5. 156 * The <<features-samplerMirrorClampToEdge,samplerMirrorClampToEdge>> 157 feature which indicates whether the implementation supports the 158 ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode. 159 * The 160 <<spirvenv-capabilities-table-ShaderNonUniform,code:ShaderNonUniform>> 161 capability in SPIR-V version 1.5. 162 * The <<features-shaderOutputViewportIndex,shaderOutputViewportIndex>> 163 feature which indicates that the 164 <<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>> 165 capability can be used. 166 * The <<features-shaderOutputLayer,shaderOutputLayer>> feature which 167 indicates that the 168 <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>> capability 169 can be used. 170 * The <<features-subgroupBroadcastDynamicId,subgroupBroadcastDynamicId>> 171 feature which allows the "`Id`" operand of 172 code:OpGroupNonUniformBroadcast to be dynamically uniform within a 173 subgroup, and the "`Index`" operand of 174 code:OpGroupNonUniformQuadBroadcast to be dynamically uniform within a 175 derivative group, in shader modules of version 1.5 or higher. 176 * The <<features-drawIndirectCount,drawIndirectCount>> feature which 177 indicates whether the flink:vkCmdDrawIndirectCount and 178 flink:vkCmdDrawIndexedIndirectCount functions can be used. 179 * The <<features-descriptorIndexing,descriptorIndexing>> feature which 180 indicates the implementation supports the minimum number of descriptor 181 indexing features as defined in the <<features-requirements,Feature 182 Requirements>> section. 183 * The <<features-samplerFilterMinmax,samplerFilterMinmax>> feature which 184 indicates whether the implementation supports the minimum number of 185 image formats that support the 186 ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature bit as 187 defined by the 188 <<limits-filterMinmaxSingleComponentFormats-minimum-requirements,pname:filterMinmaxSingleComponentFormats>> 189 property minimum requirements. 190 * The 191 <<limits-framebufferIntegerColorSampleCounts,framebufferIntegerColorSampleCounts>> 192 limit which indicates the color sample counts that are supported for all 193 framebuffer color attachments with integer formats. 194 195include::{generated}/interfaces/VK_VERSION_1_2.txt[] 196 197endif::VK_VERSION_1_2[] 198 199 200ifdef::VK_VERSION_1_1[] 201[[versions-1.1]] 202== Version 1.1 203 204// Unfortunately we cannot include titles in an open refpage block, so this 205// is a refpage-specific alternate form of the section. 206ifdef::isrefpage[] 207[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'] 208-- 209Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a 210number of key extensions into the core API: 211 212include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[] 213 214All differences in behavior between these extensions and the corresponding 215Vulkan 1.1 functionality are summarized in the <<versions-1.1-promotions, 216Vulkan 1.1 specification appendix>>. 217 218include::{generated}/interfaces/VK_VERSION_1_1.txt[] 219-- 220endif::isrefpage[] 221 222// This is the spec-specific form of the section 223[[versions-1.1-promotions]] 224Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a 225number of key extensions into the core API: 226 227include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[] 228 229All differences in behavior between these extensions and the corresponding 230Vulkan 1.1 functionality are summarized below. 231 232=== Differences relative to `VK_KHR_16bit_storage` 233 234If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for 235the <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>> 236feature is optional. 237Support for this feature is defined by 238slink:VkPhysicalDevice16BitStorageFeatures::pname:storageBuffer16BitAccess 239ifdef::VK_VERSION_1_2[] 240or slink:VkPhysicalDeviceVulkan11Features::pname:storageBuffer16BitAccess 241endif::VK_VERSION_1_2[] 242when queried via flink:vkGetPhysicalDeviceFeatures2. 243 244=== Differences relative to `VK_KHR_sampler_ycbcr_conversion` 245 246If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported, 247support for the 248<<features-samplerYcbcrConversion,pname:samplerYcbcrConversion>> feature is 249optional. 250Support for this feature is defined by 251slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures::pname:samplerYcbcrConversion 252ifdef::VK_VERSION_1_2[] 253or slink:VkPhysicalDeviceVulkan11Features::pname:samplerYcbcrConversion 254endif::VK_VERSION_1_2[] 255when queried via flink:vkGetPhysicalDeviceFeatures2. 256 257=== Differences relative to `VK_KHR_shader_draw_parameters` 258 259If the `apiext:VK_KHR_shader_draw_parameters` extension is not supported, 260support for the 261{spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`] 262SPIR-V extension is optional. 263Support for this feature is defined by 264slink:VkPhysicalDeviceShaderDrawParametersFeatures::pname:shaderDrawParameters 265ifdef::VK_VERSION_1_2[] 266or slink:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters 267endif::VK_VERSION_1_2[] 268when queried via flink:vkGetPhysicalDeviceFeatures2. 269 270=== Differences relative to `VK_KHR_variable_pointers` 271 272If the `apiext:VK_KHR_variable_pointers` extension is not supported, support 273for the <<features-variablePointersStorageBuffer, 274pname:variablePointersStorageBuffer>> feature is optional. 275Support for this feature is defined by 276slink:VkPhysicalDeviceVariablePointersFeatures::pname:variablePointersStorageBuffer 277ifdef::VK_VERSION_1_2[] 278or 279slink:VkPhysicalDeviceVulkan11Features::pname:variablePointersStorageBuffer 280endif::VK_VERSION_1_2[] 281when queried via flink:vkGetPhysicalDeviceFeatures2. 282 283=== Additional Vulkan 1.1 Feature Support 284 285[[versions-1.1-new-features]] 286In addition to the promoted extensions described above, Vulkan 1.1 added 287support for: 288 289 * The <<shaders-group-operations, group operations>> and 290 <<shaders-scope-subgroup, subgroup scope>>. 291 * The <<memory-protected-memory, protected memory>> feature. 292 * A new command to enumerate the instance version: 293 flink:vkEnumerateInstanceVersion. 294 * The slink:VkPhysicalDeviceShaderDrawParametersFeatures feature query 295 struct (where the `apiext:VK_KHR_shader_draw_parameters` extension did 296 not have one). 297 298include::{generated}/interfaces/VK_VERSION_1_1.txt[] 299 300endif::VK_VERSION_1_1[] 301 302 303[[versions-1.0]] 304== Version 1.0 305 306// Unfortunately we cannot include titles in an open refpage block, so this 307// is a refpage-specific alternate form of the section. 308ifdef::isrefpage[] 309[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'] 310-- 311Vulkan Version 1.0 was the initial release of the Vulkan API. 312 313include::{generated}/interfaces/VK_VERSION_1_0.txt[] 314-- 315endif::isrefpage[] 316 317// This is the spec-specific form of the section 318Vulkan Version 1.0 was the initial release of the Vulkan API. 319 320include::{generated}/interfaces/VK_VERSION_1_0.txt[] 321