| // Copyright 2015-2023 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| [appendix] |
| |
| [[versions]] |
| = Core Revisions (Informative) |
| |
| New minor versions of the Vulkan API are defined periodically by the Khronos |
| Vulkan Working Group. |
| These consist of some amount of additional functionality added to the core |
| API, potentially including both new functionality and functionality |
| <<extendingvulkan-compatibility-promotion,promoted>> from extensions. |
| |
| ifdef::VK_VERSION_1_1[] |
| It is possible to build the specification for earlier versions, but to aid |
| readability of the latest versions, this appendix gives an overview of the |
| changes as compared to earlier versions. |
| endif::VK_VERSION_1_1[] |
| |
| ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta] |
| ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static] |
| |
| ifdef::VK_VERSION_1_3[] |
| [[versions-1.3]] |
| == Version 1.3 |
| |
| // Unfortunately we cannot include titles in an open refpage block, so this |
| // is a refpage-specific alternate form of the section. |
| ifdef::isrefpage[] |
| [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'] |
| -- |
| Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.3 functionality are summarized in the <<versions-1.3-promotions, |
| Vulkan 1.3 specification appendix>>. |
| |
| include::{generated}/interfaces/VK_VERSION_1_3.adoc[] |
| -- |
| endif::isrefpage[] |
| |
| // This is the spec-specific form of the section |
| [[versions-1.3-promotions]] |
| Vulkan Version 1.3 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.3 functionality are summarized below. |
| |
| === Differences Relative to `VK_EXT_4444_formats` |
| |
| If the `apiext:VK_EXT_4444_formats` extension is not supported, support for |
| all formats defined by it are optional in Vulkan 1.3. |
| There are no members in the slink:VkPhysicalDeviceVulkan13Features structure |
| corresponding to the slink:VkPhysicalDevice4444FormatsFeaturesEXT structure. |
| |
| === Differences Relative to `VK_EXT_extended_dynamic_state` |
| |
| All dynamic state enumerants and entry points defined by |
| `apiext:VK_EXT_extended_dynamic_state` are required in Vulkan 1.3. |
| There are no members in the slink:VkPhysicalDeviceVulkan13Features structure |
| corresponding to the slink:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT |
| structure. |
| |
| === Differences Relative to `VK_EXT_extended_dynamic_state2` |
| |
| The optional dynamic state enumerants and entry points defined by |
| `apiext:VK_EXT_extended_dynamic_state2` for patch control points and logic |
| op are not promoted in Vulkan 1.3. |
| There are no members in the slink:VkPhysicalDeviceVulkan13Features structure |
| corresponding to the slink:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT |
| structure. |
| |
| === Differences Relative to `VK_EXT_texel_buffer_alignment` |
| |
| The more specific alignment requirements defined by |
| slink:VkPhysicalDeviceTexelBufferAlignmentProperties are required in Vulkan |
| 1.3. |
| There are no members in the slink:VkPhysicalDeviceVulkan13Features structure |
| corresponding to the slink:VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT |
| structure. |
| The pname:texelBufferAlignment feature is enabled if using a Vulkan 1.3 |
| instance. |
| |
| === Differences Relative to `VK_EXT_texture_compression_astc_hdr` |
| |
| If the `apiext:VK_EXT_texture_compression_astc_hdr` extension is not |
| supported, support for all formats defined by it are optional in Vulkan 1.3. |
| The <<features-textureCompressionASTC_HDR, |
| pname:textureCompressionASTC_HDR>> member of |
| slink:VkPhysicalDeviceVulkan13Features indicates whether a Vulkan 1.3 |
| implementation supports these formats. |
| |
| === Differences Relative to `VK_EXT_ycbcr_2plane_444_formats` |
| |
| If the `apiext:VK_EXT_ycbcr_2plane_444_formats` extension is not supported, |
| support for all formats defined by it are optional in Vulkan 1.3. |
| There are no members in the slink:VkPhysicalDeviceVulkan13Features structure |
| corresponding to the slink:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT |
| structure. |
| |
| === Additional Vulkan 1.3 Feature Support |
| |
| [[versions-1.3-new-features]] |
| In addition to the promoted extensions described above, Vulkan 1.3 added |
| required support for: |
| |
| * SPIR-V version 1.6 |
| ** SPIR-V 1.6 deprecates (but does not remove) the code:WorkgroupSize |
| decoration. |
| * The <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> feature |
| which indicates support for accessing memory in shaders as storage |
| buffers via flink:vkGetBufferDeviceAddress. |
| * The <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> and |
| <<features-vulkanMemoryModelDeviceScope, |
| pname:vulkanMemoryModelDeviceScope>> features, which indicate support |
| for the corresponding Vulkan Memory Model capabilities. |
| * The <<limits-maxInlineUniformTotalSize, |
| pname:maxInlineUniformTotalSize>> limit is added to provide the total |
| size of all inline uniform block bindings in a pipeline layout. |
| |
| include::{generated}/interfaces/VK_VERSION_1_3.adoc[] |
| |
| endif::VK_VERSION_1_3[] |
| |
| |
| ifdef::VK_VERSION_1_2[] |
| [[versions-1.2]] |
| == Version 1.2 |
| |
| // Unfortunately we cannot include titles in an open refpage block, so this |
| // is a refpage-specific alternate form of the section. |
| ifdef::isrefpage[] |
| [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'] |
| -- |
| Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| // Must be redefined in the refpage content |
| ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta] |
| ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static] |
| |
| include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.2 functionality are summarized in the <<versions-1.2-promotions, |
| Vulkan 1.2 specification appendix>>. |
| |
| include::{generated}/interfaces/VK_VERSION_1_2.adoc[] |
| -- |
| endif::isrefpage[] |
| |
| // This is the spec-specific form of the section |
| [[versions-1.2-promotions]] |
| Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| include::{promoted}/promoted_extensions_VK_VERSION_1_2.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.2 functionality are summarized below. |
| |
| === Differences Relative to `VK_KHR_8bit_storage` |
| |
| If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for |
| the SPIR-V <<features-storageBuffer8BitAccess, |
| pname:storageBuffer8BitAccess>> capability in shader modules is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:storageBuffer8BitAccess when |
| queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_draw_indirect_count` |
| |
| If the `apiext:VK_KHR_draw_indirect_count` extension is not supported, |
| support for the entry points flink:vkCmdDrawIndirectCount and |
| flink:vkCmdDrawIndexedIndirectCount is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:drawIndirectCount when queried |
| via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_sampler_mirror_clamp_to_edge` |
| |
| If the `apiext:VK_KHR_sampler_mirror_clamp_to_edge` extension is not |
| supported, support for the elink:VkSamplerAddressMode |
| ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:samplerMirrorClampToEdge when |
| queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_EXT_descriptor_indexing` |
| |
| If the `apiext:VK_EXT_descriptor_indexing` extension is not supported, |
| support for the <<features-descriptorIndexing, pname:descriptorIndexing>> |
| feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when |
| queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_EXT_scalar_block_layout` |
| |
| If the `apiext:VK_EXT_scalar_block_layout` extension is not supported, |
| support for the <<features-scalarBlockLayout, pname:scalarBlockLayout>> |
| feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried |
| via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_EXT_shader_viewport_index_layer` |
| |
| The code:ShaderViewportIndexLayerEXT SPIR-V capability was replaced with the |
| code:ShaderViewportIndex and code:ShaderLayer capabilities. |
| Declaring both is equivalent to declaring code:ShaderViewportIndexLayerEXT. |
| If the `apiext:VK_EXT_shader_viewport_index_layer` extension is not |
| supported, support for the code:ShaderViewportIndexLayerEXT SPIR-V |
| capability is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputViewportIndex and |
| slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried |
| via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_buffer_device_address` |
| |
| If the `apiext:VK_KHR_buffer_device_address` extension is not supported, |
| support for the <<features-bufferDeviceAddress, pname:bufferDeviceAddress>> |
| feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when |
| queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_shader_atomic_int64` |
| |
| If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported, |
| support for the <<features-shaderBufferInt64Atomics, |
| pname:shaderBufferInt64Atomics>> feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:shaderBufferInt64Atomics when |
| queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_shader_float16_int8` |
| |
| If the `apiext:VK_KHR_shader_float16_int8` extension is not supported, |
| support for the <<features-shaderFloat16, pname:shaderFloat16>> and |
| <<features-shaderInt8, pname:shaderInt8>> features is optional. |
| Support for these features are defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:shaderFloat16 and |
| slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via |
| flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_vulkan_memory_model` |
| |
| If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported, |
| support for the <<features-vulkanMemoryModel, pname:vulkanMemoryModel>> |
| feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried |
| via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Additional Vulkan 1.2 Feature Support |
| |
| [[versions-1.2-new-features]] |
| In addition to the promoted extensions described above, Vulkan 1.2 added |
| support for: |
| |
| * SPIR-V version 1.4. |
| * SPIR-V version 1.5. |
| * The <<features-samplerMirrorClampToEdge, |
| pname:samplerMirrorClampToEdge>> feature which indicates whether the |
| implementation supports the |
| ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE sampler address mode. |
| * The <<spirvenv-capabilities-table-ShaderNonUniform, |
| code:ShaderNonUniform>> capability in SPIR-V version 1.5. |
| * The <<features-shaderOutputViewportIndex, |
| pname:shaderOutputViewportIndex>> feature which indicates that the |
| <<spirvenv-capabilities-table-ShaderViewportIndex, |
| code:ShaderViewportIndex>> capability can be used. |
| * The <<features-shaderOutputLayer, pname:shaderOutputLayer>> feature |
| which indicates that the <<spirvenv-capabilities-table-ShaderLayer, |
| code:ShaderLayer>> capability can be used. |
| * The <<features-subgroupBroadcastDynamicId, |
| pname:subgroupBroadcastDynamicId>> feature which allows the "`Id`" |
| operand of code:OpGroupNonUniformBroadcast to be dynamically uniform |
| within a subgroup, and the "`Index`" operand of |
| code:OpGroupNonUniformQuadBroadcast to be dynamically uniform within a |
| derivative group, in shader modules of version 1.5 or higher. |
| * The <<features-drawIndirectCount, pname:drawIndirectCount>> feature |
| which indicates whether the flink:vkCmdDrawIndirectCount and |
| flink:vkCmdDrawIndexedIndirectCount functions can be used. |
| * The <<features-descriptorIndexing, pname:descriptorIndexing>> feature |
| which indicates the implementation supports the minimum number of |
| descriptor indexing features as defined in the <<features-requirements, |
| Feature Requirements>> section. |
| * The <<features-samplerFilterMinmax, pname:samplerFilterMinmax>> feature |
| which indicates whether the implementation supports the minimum number |
| of image formats that support the |
| ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature bit as |
| defined by the |
| <<limits-filterMinmaxSingleComponentFormats-minimum-requirements, |
| pname:filterMinmaxSingleComponentFormats>> property minimum |
| requirements. |
| * The <<limits-framebufferIntegerColorSampleCounts, |
| pname:framebufferIntegerColorSampleCounts>> limit which indicates the |
| color sample counts that are supported for all framebuffer color |
| attachments with integer formats. |
| |
| include::{generated}/interfaces/VK_VERSION_1_2.adoc[] |
| |
| endif::VK_VERSION_1_2[] |
| |
| |
| ifdef::VK_VERSION_1_1[] |
| [[versions-1.1]] |
| == Version 1.1 |
| |
| // Unfortunately we cannot include titles in an open refpage block, so this |
| // is a refpage-specific alternate form of the section. |
| ifdef::isrefpage[] |
| [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'] |
| -- |
| Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| // Must be redefined in the refpage content |
| ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta] |
| ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static] |
| |
| include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.1 functionality are summarized in the <<versions-1.1-promotions, |
| Vulkan 1.1 specification appendix>>. |
| |
| include::{generated}/interfaces/VK_VERSION_1_1.adoc[] |
| -- |
| endif::isrefpage[] |
| |
| // This is the spec-specific form of the section |
| [[versions-1.1-promotions]] |
| Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a |
| number of key extensions into the core API: |
| |
| include::{promoted}/promoted_extensions_VK_VERSION_1_1.adoc[] |
| |
| All differences in behavior between these extensions and the corresponding |
| Vulkan 1.1 functionality are summarized below. |
| |
| === Differences Relative to `VK_KHR_16bit_storage` |
| |
| If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for |
| the <<features-storageBuffer16BitAccess, pname:storageBuffer16BitAccess>> |
| feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDevice16BitStorageFeatures::pname:storageBuffer16BitAccess |
| ifdef::VK_VERSION_1_2[] |
| or slink:VkPhysicalDeviceVulkan11Features::pname:storageBuffer16BitAccess |
| endif::VK_VERSION_1_2[] |
| when queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_sampler_ycbcr_conversion` |
| |
| If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported, |
| support for the <<features-samplerYcbcrConversion, |
| pname:samplerYcbcrConversion>> feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceSamplerYcbcrConversionFeatures::pname:samplerYcbcrConversion |
| ifdef::VK_VERSION_1_2[] |
| or slink:VkPhysicalDeviceVulkan11Features::pname:samplerYcbcrConversion |
| endif::VK_VERSION_1_2[] |
| when queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_shader_draw_parameters` |
| |
| If the `apiext:VK_KHR_shader_draw_parameters` extension is not supported, |
| support for the |
| {spirv}/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`] |
| SPIR-V extension is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceShaderDrawParametersFeatures::pname:shaderDrawParameters |
| ifdef::VK_VERSION_1_2[] |
| or slink:VkPhysicalDeviceVulkan11Features::pname:shaderDrawParameters |
| endif::VK_VERSION_1_2[] |
| when queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Differences Relative to `VK_KHR_variable_pointers` |
| |
| If the `apiext:VK_KHR_variable_pointers` extension is not supported, support |
| for the <<features-variablePointersStorageBuffer, |
| pname:variablePointersStorageBuffer>> feature is optional. |
| Support for this feature is defined by |
| slink:VkPhysicalDeviceVariablePointersFeatures::pname:variablePointersStorageBuffer |
| ifdef::VK_VERSION_1_2[] |
| or |
| slink:VkPhysicalDeviceVulkan11Features::pname:variablePointersStorageBuffer |
| endif::VK_VERSION_1_2[] |
| when queried via flink:vkGetPhysicalDeviceFeatures2. |
| |
| === Additional Vulkan 1.1 Feature Support |
| |
| [[versions-1.1-new-features]] |
| In addition to the promoted extensions described above, Vulkan 1.1 added |
| support for: |
| |
| * The <<shaders-group-operations, group operations>> and |
| <<shaders-scope-subgroup, subgroup scope>>. |
| * The <<memory-protected-memory, protected memory>> feature. |
| * A new command to enumerate the instance version: |
| flink:vkEnumerateInstanceVersion. |
| * The slink:VkPhysicalDeviceShaderDrawParametersFeatures feature query |
| struct (where the `apiext:VK_KHR_shader_draw_parameters` extension did |
| not have one). |
| |
| include::{generated}/interfaces/VK_VERSION_1_1.adoc[] |
| |
| endif::VK_VERSION_1_1[] |
| |
| |
| [[versions-1.0]] |
| == Version 1.0 |
| |
| // Unfortunately we cannot include titles in an open refpage block, so this |
| // is a refpage-specific alternate form of the section. |
| ifdef::isrefpage[] |
| [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'] |
| -- |
| Vulkan Version 1.0 was the initial release of the Vulkan API. |
| |
| include::{generated}/interfaces/VK_VERSION_1_0.adoc[] |
| -- |
| endif::isrefpage[] |
| |
| // This is the spec-specific form of the section |
| Vulkan Version 1.0 was the initial release of the Vulkan API. |
| |
| include::{generated}/interfaces/VK_VERSION_1_0.adoc[] |