// Copyright 2015-2021 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[]


ifdef::VK_VERSION_1_2[]
[[versions-1.2]]
== Version 1.2

[[versions-1.2-promotions]]
Vulkan Version 1.2 <<extendingvulkan-compatibility-promotion,promoted>> a
number of key extensions into the core API:

// Jon - make sure VK_VERSION_1_2 extensions list is generated correctly
include::{generated}/meta/promoted_extensions_VK_VERSION_1_2.txt[]

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 `<<VK_KHR_8bit_storage>>` extension is not supported, support for the
SPIR-V <<features-storageBuffer8BitAccess, code: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 `<<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 `<<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 `<<VK_EXT_descriptor_indexing>>` extension is not supported, support
for the <<features-descriptorIndexing,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 `<<VK_EXT_scalar_block_layout>>` extension is not supported, support
for the <<features-scalarBlockLayout,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`

If the `<<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 `<<VK_KHR_buffer_device_address>>` extension is not supported,
support for the <<features-bufferDeviceAddress,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 `<<VK_KHR_shader_atomic_int64>>` extension is not supported, support
for the <<features-shaderBufferInt64Atomics,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 `<<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 `<<VK_KHR_vulkan_memory_model>>` extension is not supported, support
for the <<features-vulkanMemoryModel,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,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,shaderOutputViewportIndex>>
    feature which indicates that the
    <<spirvenv-capabilities-table-ShaderViewportIndex,code:ShaderViewportIndex>>
    capability can be used.
  * The <<features-shaderOutputLayer,shaderOutputLayer>> feature which
    indicates that the
    <<spirvenv-capabilities-table-ShaderLayer,code:ShaderLayer>> capability
    can be used.
  * The <<features-subgroupBroadcastDynamicId,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,drawIndirectCount>> feature which
    indicates whether the flink:vkCmdDrawIndirectCount and
    flink:vkCmdDrawIndexedIndirectCount functions can be used.
  * The <<features-descriptorIndexing,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,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,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.txt[]

endif::VK_VERSION_1_2[]


ifdef::VK_VERSION_1_1[]
[[versions-1.1]]
== Version 1.1

[[versions-1.1-promotions]]
Vulkan Version 1.1 <<extendingvulkan-compatibility-promotion,promoted>> a
number of key extensions into the core API:

include::{generated}/meta/promoted_extensions_VK_VERSION_1_1.txt[]

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 `<<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 `<<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 `<<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 `<<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 `<<VK_KHR_shader_draw_parameters>>` extension did not
    have one).

include::{generated}/interfaces/VK_VERSION_1_1.txt[]

endif::VK_VERSION_1_1[]
