diff --git a/ChangeLog.adoc b/ChangeLog.adoc
index 8d7538814..19256819d 100644
--- a/ChangeLog.adoc
+++ b/ChangeLog.adoc
@@ -14,6 +14,81 @@ appears frequently in the change log.
'''
+Change log for September 26, 2024 Vulkan 1.3.296 spec update:
+
+Public Issues
+
+ * Fix spelling of StdVideoH264SpsVuiFlags::color_description_present_flag
+ member in video.xml (public issue 2428).
+ * Fix copy-paste typo in vkAcquireNextImageKHR VU 07783 (public issue
+ 2433).
+ * Document support for the `stride` XML attribute for array pointers in
+ both command `` and structure `` tags (public issue
+ 2435).
+
+Internal Issues
+
+ * Add accuracy and denorm specifications for SPIR-V OpSubgroupAllEqualKHR
+ and OpGroupNonUniformAllEqual to the <> section (internal issue
+ 3902).
+ * Clean up markup and description of the Cube Map Derivative
+ Transformation equations (internal issue 4010).
+ * Add new `Required_Limits` refpage containing the tables from the
+ <> section (internal issue 4014).
+ * Move the description of VkResult code VK_ERROR_NOT_ENOUGH_SPACE_KHR to
+ the <> list instead of the Success
+ Codes list (internal issue 4017).
+ * Fix some VUs for VK_EXT_swapchain_maintenance1 (internal MR 6199).
+ * Reword the first synchronization scope description for
+ <> to be more
+ clear and explicit (internal MR 6835).
+ * Coalesce decode output variants in XML `` tags (internal MR
+ 6850).
+ * Fix some structure names in new 'require' / 'feature' tags (internal MR
+ 6852).
+ * Move VK_KHR_compute_shader_derivatives feature requirement to vk.xml
+ (internal MR 6854).
+ * Remove redundant VkDrawIndirectCommand VU 00500 and
+ VkDrawIndexedIndirectCommand VU 00552 (internal MR 6856).
+ * Add SPIR-V definition for "`<>`" and use it to not imply rounding for exact operations in the
+ <>
+ table (internal MR 6859).
+ * Remove asciidoctor-generated footer text from spec outputs (internal MR
+ 6860).
+ * Require OpFDiv to respect SignedZeroInfNanPreserve in the
+ <> section (internal MR 6862).
+ * Add feature tags to vk.xml that were tested in CTS already but not
+ mentioned in the specification (internal MR 6864).
+ * Improve API code version refpages by including the
+ automatically-generated API interface content from the version appendix
+ of the specification that was previously omitted (internal MR 6865).
+ * Merge common draw VUs for shader object and pipeline viewport scaling
+ when VK_NV_clip_space_w_scaling is enabled (internal MR 6871).
+ * Merge common draw VUs for shader object and pipeline viewport rate
+ palette when VK_NV_shading_rate_image is enabled (internal MR 6872).
+ * Merge common draw vertex binding VUs for shader object and pipeline
+ patch control and update corresponding language in the shader object
+ <> section (internal MR 6876).
+ * Fix definition of the built-in variable
+ <> to specify it
+ returns bit indexes, not bit values (internal MR 6877).
+ * Add pipeline coarse sample order to shader object common draw VU 09233
+ when VK_NV_shading_rate_image is enabled (internal MR 6882).
+ * Add missing XML `feature` tags for AMD vendor extensions (internal MR
+ 6889).
+ * Fix common draw VU interactions with dynamic rasterization samples state
+ from VK_EXT_sample_locations (internal MR 6896).
+
+New Extensions
+
+ * VK_EXT_depth_clamp_control
+ * VK_EXT_device_generated_commands
+
+'''
+
Change log for August 30, 2024 Vulkan 1.3.295 spec update:
Public Issues
diff --git a/Makefile b/Makefile
index 881b63716..67a5bdffb 100644
--- a/Makefile
+++ b/Makefile
@@ -139,7 +139,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
-PATCHVERSION = 295
+PATCHVERSION = 296
BASEOPTS =
ifneq (,$(findstring VKSC_VERSION_1_0,$(VERSIONS)))
@@ -201,6 +201,7 @@ ATTRIBOPTS = -a revnumber="$(SPECREVISION)" $(BASEOPTS) \
-a images=$(IMAGEPATH) \
-a generated=$(GENERATED) \
-a refprefix \
+ -a nofooter \
$(EXTRAATTRIBS)
ADOCMISCOPTS = --failure-level ERROR
# Non target-specific Asciidoctor extensions and options
diff --git a/antora/spec/modules/ROOT/nav.adoc b/antora/spec/modules/ROOT/nav.adoc
index e41640ad0..9c2de61ec 100644
--- a/antora/spec/modules/ROOT/nav.adoc
+++ b/antora/spec/modules/ROOT/nav.adoc
@@ -38,7 +38,7 @@ ifeval::["{test}"=="0"]
* xref:chapters/fragops.adoc[]
* xref:chapters/framebuffer.adoc[]
* xref:chapters/dispatch.adoc[]
-* xref:chapters/VK_NV_device_generated_commands/generatedcommands.adoc[]
+* xref:chapters/device_generated_commands/generatedcommands.adoc[]
* xref:chapters/sparsemem.adoc[]
* xref:chapters/VK_KHR_surface/wsi.adoc[]
* xref:chapters/VK_KHR_deferred_host_operations/deferred_host_operations.adoc[]
diff --git a/appendices/VK_AMD_draw_indirect_count.adoc b/appendices/VK_AMD_draw_indirect_count.adoc
index 1ebc376f7..a20a73f83 100644
--- a/appendices/VK_AMD_draw_indirect_count.adoc
+++ b/appendices/VK_AMD_draw_indirect_count.adoc
@@ -28,7 +28,7 @@ commands and execute them without host intervention.
All functionality in this extension is included in
`apiext:VK_KHR_draw_indirect_count`, with the suffix changed to KHR.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
include::{generated}/interfaces/VK_AMD_draw_indirect_count.adoc[]
diff --git a/appendices/VK_EXT_depth_clamp_control.adoc b/appendices/VK_EXT_depth_clamp_control.adoc
new file mode 100644
index 000000000..ff26b4fbc
--- /dev/null
+++ b/appendices/VK_EXT_depth_clamp_control.adoc
@@ -0,0 +1,71 @@
+// Copyright 2021-2024 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_depth_clamp_control.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+ 2024-07-15
+*Contributors*::
+ - Jules Blok, Independent
+
+=== Description
+
+This extension allows the application to control the viewport depth clamp
+range separately from the viewport pname:minDepth and pname:maxDepth.
+This gives the ability for the application to restrict depth values to an
+application-defined range rather than
+ifdef::VK_EXT_depth_clamp_zero_one[]
+the viewport depth range or the range defined in the
+apiext:VK_EXT_depth_clamp_zero_one extension.
+endif::VK_EXT_depth_clamp_zero_one[]
+ifndef::VK_EXT_depth_clamp_zero_one[]
+the viewport depth range.
+endif::VK_EXT_depth_clamp_zero_one[]
+
+It can be used to set a smaller or larger clamping range than the viewport
+depth range without affecting the depth mapping of the viewport transform.
+ifdef::VK_EXT_depth_clamp_zero_one[]
+Another possible use of this extension is to restrict depth values beyond
+the viewport depth range to a clamping range other than the [0, 1] range
+defined in the apiext:VK_EXT_depth_clamp_zero_one extension.
+endif::VK_EXT_depth_clamp_zero_one[]
+
+include::{generated}/interfaces/VK_EXT_depth_clamp_control.adoc[]
+
+=== Issues
+
+1) Should the depth clamp range be a per-viewport parameter?
+
+*RESOLVED*: No.
+Because the depth clamp range was previously defined to be equal to the
+viewport depth range, conformant runtimes are already handling the depth
+clamp range as a per-viewport parameter.
+However because of complexities from interactions with multiple viewports a
+per-viewport clamp range is left to a future extensions if a use case
+arises.
+
+2) Should this pipeline state be dynamic?
+
+*RESOLVED*: Yes.
+Since the viewport depth range can already be a dynamic state conformant
+runtimes are already able to handle the depth clamp range as a dynamic
+state.
+
+3) Can the depth clamp range be ignored when depth clamping is disabled?
+
+*RESOLVED*: Yes.
+This extension overrides the clamping range used only when depth clamping is
+enabled.
+The alternative would be highly unintuitive.
+ifdef::VK_EXT_depth_clip_enable[]
+As a consequence the apiext:VK_EXT_depth_clip_enable extension is required
+if depth clipping is desired in combination with this extension.
+endif::VK_EXT_depth_clip_enable[]
+
+=== Version History
+
+ * Revision 1, 2024-02-13 (Jules Blok)
+ ** Initial draft
diff --git a/appendices/VK_EXT_descriptor_indexing.adoc b/appendices/VK_EXT_descriptor_indexing.adoc
index a6a4f8fbc..5bcbf4d13 100644
--- a/appendices/VK_EXT_descriptor_indexing.adoc
+++ b/appendices/VK_EXT_descriptor_indexing.adoc
@@ -69,7 +69,7 @@ Functionality in this extension is included in core Vulkan 1.2, with the EXT
suffix omitted.
However, if Vulkan 1.2 is supported and this extension is not, the
code:descriptorIndexing capability is optional.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
=== Version History
diff --git a/appendices/VK_EXT_device_generated_commands.adoc b/appendices/VK_EXT_device_generated_commands.adoc
new file mode 100644
index 000000000..e47b5673a
--- /dev/null
+++ b/appendices/VK_EXT_device_generated_commands.adoc
@@ -0,0 +1,142 @@
+// Copyright (c) 2024 Valve Corporation
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+include::{generated}/meta/{refprefix}VK_EXT_device_generated_commands.adoc[]
+
+=== Other Extension Metadata
+
+*Last Modified Date*::
+ 2024-02-23
+*Interactions and External Dependencies*::
+ - This extension requires Vulkan 1.1
+ - This extension requires `VK_EXT_buffer_device_address` or
+ `VK_KHR_buffer_device_address` or Vulkan 1.2 for the ability to bind
+ vertex and index buffers on the device.
+ - This extension requires `VK_KHR_maintenance5` for the ability to use
+ VkPipelineCreateFlags2KHR.
+ - This extension interacts with `VK_NV_mesh_shader`.
+ If the latter extension is not supported, remove the command tokens to
+ initiate NV mesh tasks drawing in this extension.
+ - This extension interacts with `VK_EXT_mesh_shader`.
+ If the latter extension is not supported, remove the command tokens to
+ initiate EXT mesh tasks drawing in this extension.
+ - This extension interacts with `VK_KHR_ray_tracing_pipeline`.
+ If the latter extension is not supported, remove the command tokens to
+ initiate ray tracing in this extension.
+ - This extension interacts with `VK_EXT_shader_object`.
+ If the latter extension is not supported, remove references to shader
+ objects in this extension.
+*Contributors*::
+ - Mike Blumenkrantz, VALVE
+ - Hans-Kristian Arntzen, VALVE
+ - Jan-Harald Fredriksen, ARM
+ - Spencer Fricke, LunarG
+ - Ricardo Garcia, Igalia
+ - Tobias Hector, AMD
+ - Baldur Karlsson, VALVE
+ - Christoph Kubisch, NVIDIA
+ - Lionel Landwerlin, INTEL
+ - Jon Leech, Khronos
+ - Ting Wei, ARM
+ - Ken Shanyi Zhang, AMD
+ - Faith Ekstrand, Collabora
+ - Vikram Kushwaha, NVIDIA
+ - Connor Abbott, VALVE
+ - Samuel Pitoiset, VALVE
+
+=== Description
+
+This extension allows the device to generate a number of commands for
+command buffers.
+It provides a subset of functionality from both
+`VK_NV_device_generated_commands` and
+`VK_NV_device_generated_commands_compute` as well as some new features.
+
+When rendering a large number of objects, the device can be leveraged to
+implement a number of critical functions, like updating matrices, or
+implementing occlusion culling, frustum culling, front to back sorting, etc.
+Implementing those on the device does not require any special extension,
+since an application is free to define its own data structures, and just
+process them using shaders.
+
+To render objects which have been processed on the device, Vulkan has
+several ways to perform indirect rendering, from the most basic
+`vkCmdDrawIndirect` with one indirect draw to `vkCmdDrawIndirectCount` which
+supports multiple indirect draws batched together, with a way to determine
+number of draws at device execution time.
+
+However, if rendering state needs to change between the indirect draws, then
+unextended Vulkan forces the application to speculatively record a
+prohibitive number of redundant indirect commands covering all possible
+state combinations -
+which could end up processing nothing after culling -
+or read back the processed stream and issue graphics command from the host.
+For very large scenes, the synchronization overhead and cost to generate the
+command buffer can become the bottleneck.
+This extension allows an application to generate a device side stream of
+state changes and commands, and convert it efficiently into a command buffer
+without having to read it back to the host.
+
+Furthermore, it allows incremental changes to such command buffers by
+manipulating only partial sections of a command stream -- for example
+pipeline and shader object bindings.
+Unextended Vulkan requires re-creation of entire command buffers in such a
+scenario, or updates synchronized on the host.
+
+The intended usage for this extension is for the application to:
+
+ * create sname:VkBuffer objects and retrieve physical addresses from them
+ via flink:vkGetBufferDeviceAddress
+ * create a sname:VkIndirectExecutionSetEXT for the ability to change
+ shaders on the device.
+ * create a slink:VkIndirectCommandsLayoutEXT, which lists the
+ elink:VkIndirectCommandsTokenTypeEXT it wants to dynamically execute as
+ an atomic command sequence.
+ This step likely involves some internal device code compilation, since
+ the intent is for the GPU to generate the command buffer based on the
+ layout.
+ * fill the input stream buffers with the data for each of the inputs it
+ needs.
+ Each input is an array that will be filled with token-dependent data.
+ * set up a preprocess sname:VkBuffer that uses memory according to the
+ information retrieved via
+ flink:vkGetGeneratedCommandsMemoryRequirementsEXT.
+ * optionally preprocess the generated content using
+ flink:vkCmdPreprocessGeneratedCommandsEXT, for example on an
+ asynchronous compute queue, or for the purpose of re-using the data in
+ multiple executions.
+ * call flink:vkCmdExecuteGeneratedCommandsEXT to create and execute the
+ actual device commands for all sequences based on the inputs provided.
+
+For each draw in a sequence, the following can be specified:
+
+ * a number of vertex buffer bindings
+ * a different index buffer, with an optional dynamic offset and index type
+ * a number of different push constants
+ * updates to bound shader stages
+
+For each dispatch in a sequence, the following can be specified:
+
+ * a number of different push constants
+ * updates to bound shader stages
+
+For each trace rays in a sequence, the following can be specified:
+ * a number of different push constants
+ * updates to bound shader stages
+
+While the GPU can be faster than a CPU to generate the commands, it will not
+happen asynchronously to the device, therefore the primary use case is
+generating "`less`" total work (occlusion culling, classification to use
+specialized shaders, etc.).
+
+include::{generated}/interfaces/VK_EXT_device_generated_commands.adoc[]
+
+=== Example Code
+
+TODO
+
+=== Version History
+
+ * Revision 1, 2024-02-23 (Mike Blumenkrantz)
+ ** Initial version
diff --git a/appendices/VK_EXT_host_query_reset.adoc b/appendices/VK_EXT_host_query_reset.adoc
index 63834d0e0..6372ca7be 100644
--- a/appendices/VK_EXT_host_query_reset.adoc
+++ b/appendices/VK_EXT_host_query_reset.adoc
@@ -24,7 +24,7 @@ This extension adds a new function to reset queries from the host.
All functionality in this extension is included in core Vulkan 1.2, with the
EXT suffix omitted.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
include::{generated}/interfaces/VK_EXT_host_query_reset.adoc[]
diff --git a/appendices/VK_EXT_image_robustness.adoc b/appendices/VK_EXT_image_robustness.adoc
index 4c49e776c..05b478cc8 100644
--- a/appendices/VK_EXT_image_robustness.adoc
+++ b/appendices/VK_EXT_image_robustness.adoc
@@ -34,7 +34,7 @@ include::{generated}/interfaces/VK_EXT_image_robustness.adoc[]
Functionality in this extension is included in core Vulkan 1.3, with the EXT
suffix omitted.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
=== Issues
diff --git a/appendices/VK_EXT_inline_uniform_block.adoc b/appendices/VK_EXT_inline_uniform_block.adoc
index 569e01909..04e33b820 100644
--- a/appendices/VK_EXT_inline_uniform_block.adoc
+++ b/appendices/VK_EXT_inline_uniform_block.adoc
@@ -32,7 +32,7 @@ include::{generated}/interfaces/VK_EXT_inline_uniform_block.adoc[]
Functionality in this extension is included in core Vulkan 1.3, with the EXT
suffix omitted.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
Vulkan 1.3 adds <> feature is made optional.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
include::{generated}/interfaces/VK_KHR_variable_pointers.adoc[]
diff --git a/appendices/VK_KHR_vulkan_memory_model.adoc b/appendices/VK_KHR_vulkan_memory_model.adoc
index f0fd4fb93..5a98a6376 100644
--- a/appendices/VK_KHR_vulkan_memory_model.adoc
+++ b/appendices/VK_KHR_vulkan_memory_model.adoc
@@ -42,7 +42,7 @@ All functionality in this extension is included in core Vulkan 1.2, with the
KHR suffix omitted.
However, if Vulkan 1.2 is supported and this extension is not, the
code:vulkanMemoryModel capability is optional.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
include::{generated}/interfaces/VK_KHR_vulkan_memory_model.adoc[]
diff --git a/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc b/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc
index c12bfd4e6..086067df9 100644
--- a/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc
+++ b/appendices/VK_KHR_zero_initialize_workgroup_memory.adoc
@@ -29,7 +29,7 @@ include::{generated}/interfaces/VK_KHR_zero_initialize_workgroup_memory.adoc[]
Functionality in this extension is included in core Vulkan 1.3, with the KHR
suffix omitted.
-The original type, enum and command names are still available as aliases of
+The original type, enum, and command names are still available as aliases of
the core functionality.
=== Version History
diff --git a/appendices/compressedtex.adoc b/appendices/compressedtex.adoc
index be545a314..ae8bc3240 100644
--- a/appendices/compressedtex.adoc
+++ b/appendices/compressedtex.adoc
@@ -36,7 +36,7 @@ chapter.
BC6H and BC7 are described in the "`BPTC Compressed Texture Image Formats`"
chapter.
-.Mapping of Vulkan BC formats to descriptions
+.Mapping of Vulkan BC Formats to Descriptions
[width="90%",options="header",cols="5,4"]
|====
| elink:VkFormat | <> description
@@ -70,7 +70,7 @@ chapter.
The following formats are described in the "`ETC2 Compressed Texture Image
Formats`" chapter of the <>.
-.Mapping of Vulkan ETC formats to descriptions
+.Mapping of Vulkan ETC Formats to Descriptions
[options="header",cols="1,1"]
|====
| elink:VkFormat | <> description
@@ -95,7 +95,7 @@ Formats`" chapter of the <>.
ASTC formats are described in the "`ASTC Compressed Texture Image Formats`"
chapter of the <>.
-.Mapping of Vulkan ASTC formats to descriptions
+.Mapping of Vulkan ASTC Formats to Descriptions
[width="90%",options="header",cols="55%,20%,25%"]
|====
| elink:VkFormat ^| Compressed texel block dimensions ^| Requested mode
@@ -169,7 +169,7 @@ ifdef::VK_EXT_astc_decode_mode[]
If the `VK_EXT_astc_decode_mode` extension is enabled, the decode mode is
determined as follows:
-.Mapping of Vulkan ASTC decoding format to ASTC decoding modes
+.Mapping of Vulkan ASTC Decoding Format to ASTC Decoding Modes
[width="75%",options="header",cols="75%,25%"]
|====
| elink:VkFormat ^| Decoding mode
@@ -200,7 +200,7 @@ ifdef::VK_IMG_format_pvrtc[]
PVRTC formats are described in the "`PVRTC Compressed Texture Image
Formats`" chapter of the <>.
-.Mapping of Vulkan PVRTC formats to descriptions
+.Mapping of Vulkan PVRTC Formats to Descriptions
[width="75%",options="header",cols="63%,15%,22%"]
|====
| elink:VkFormat ^| Compressed texel block dimensions ^| sRGB-encoded
diff --git a/appendices/spirvenv.adoc b/appendices/spirvenv.adoc
index 2cc89ae4b..6a9dd214f 100644
--- a/appendices/spirvenv.adoc
+++ b/appendices/spirvenv.adoc
@@ -84,7 +84,7 @@ endif::VKSC_VERSION_1_0[]
:captableindent: {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp} {nbsp}
[[spirvenv-capabilities-table]]
-.List of SPIR-V Capabilities and corresponding Vulkan features, extensions, or core version
+.List of SPIR-V Capabilities and Corresponding Vulkan Features, Extensions, or Core Version
[options="header"]
|====
| SPIR-V code:OpCapability +
@@ -134,7 +134,7 @@ endif::VKSC_VERSION_1_0[]
slink:VkPhysicalDeviceProperties::pname:apiVersion).
[[spirvenv-extensions-table]]
-.List of SPIR-V Extensions and corresponding Vulkan extensions or core version
+.List of SPIR-V Extensions and Corresponding Vulkan Extensions or Core Version
[options="header"]
|====
| SPIR-V code:OpExtension +
@@ -2331,7 +2331,7 @@ ifdef::VK_KHR_shader_float_controls2[]
of the operands or to the result type.
**** The operation is not a bit-preserving operation and is not one of
code:OpFConvert, code:OpFNegate, code:OpFAdd, code:OpFSub,
- code:OpFMul, code:OpIsNan, or code:OpIsInf.
+ code:OpFMul, code:OpFDiv, code:OpIsNan, or code:OpIsInf.
**** The operation is an code:OpLoad from the code:Input {StorageClass} in
the fragment shader stage.
endif::VK_KHR_shader_float_controls2[]
@@ -2349,8 +2349,8 @@ ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
code:SignedZeroInfNanPreserve {ExecutionMode}.
** The following core SPIR-V instructions must: respect the
code:SignedZeroInfNanPreserve {ExecutionMode}: code:OpFConvert,
- code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul, code:OpIsNan,
- and code:OpIsInf.
+ code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul, code:OpFDiv,
+ code:OpIsNan, and code:OpIsInf.
endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
endif::VK_KHR_shader_float_controls2[]
* All bit-preserving operations and the following instructions must: not
@@ -2406,12 +2406,15 @@ ifdef::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
code:OpFUnordNotEqual, code:OpFOrdLessThan, code:OpFUnordLessThan,
code:OpFOrdGreaterThan, code:OpFUnordGreaterThan,
code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual,
- code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual; and the
- following extended instructions for GLSL: code:FAbs, code:FSign,
- code:Radians, code:Degrees, code:FMin, code:FMax, code:FClamp,
- code:FMix, code:Fma, code:PackHalf2x16, code:PackDouble2x32,
- code:UnpackHalf2x16, code:UnpackDouble2x32, code:NMin, code:NMax, and
- code:NClamp.
+ code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual,
+ifdef::VK_EXT_shader_subgroup_vote[]
+ code:OpSubgroupAllEqualKHR,
+endif::VK_EXT_shader_subgroup_vote[]
+ code:OpGroupNonUniformAllEqual; and the following extended instructions
+ for GLSL: code:FAbs, code:FSign, code:Radians, code:Degrees, code:FMin,
+ code:FMax, code:FClamp, code:FMix, code:Fma, code:PackHalf2x16,
+ code:PackDouble2x32, code:UnpackHalf2x16, code:UnpackDouble2x32,
+ code:NMin, code:NMax, and code:NClamp.
endif::VK_VERSION_1_2,VK_KHR_shader_float_controls[]
The precision of double-precision instructions is at least that of single
@@ -2468,6 +2471,12 @@ The precision of individual operations is defined either in terms of
rounding (correctly rounded), as an error bound in ULP, or as inherited from
a formula as follows:
+[[spirvenv-correct-result]]
+.Correct Result
+Operations that are described as returning the "correct result" will return
+the infinitely precise result which, due to the nature of the operation,
+will not need rounding.
+
[[spirvenv-correctly-rounded]]
.Correctly Rounded
Operations described as "`correctly rounded`" will return the infinitely
@@ -2548,7 +2557,7 @@ at least as follows:
endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
[[spirvenv-precision-core-table]]
-.Precision of core SPIR-V Instructions
+.Precision of Core SPIR-V Instructions
[options="header", cols=",,"]
|====
| Instruction
@@ -2572,7 +2581,7 @@ endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
| code:OpDot(x, y)
2+a| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
| code:OpIsNan, code:OpIsInf
-2+| Correct Result.
+2+| Correct result.
| code:OpFOrdEqual, code:OpFUnordEqual
2+| Correct result.
| code:OpFOrdNotEqual, code:OpFUnordNotEqual
@@ -2585,6 +2594,14 @@ endif::VK_VERSION_1_2,VK_KHR_shader_float16_int8[]
2+| Correct result.
| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual
2+| Correct result.
+ifdef::VK_EXT_shader_subgroup_vote[]
+| code:OpSubgroupAllEqualKHR
+2+| Correct result.
+endif::VK_EXT_shader_subgroup_vote[]
+ifdef::VK_VERSION_1_1[]
+| code:OpGroupNonUniformAllEqual
+2+| Correct result.
+endif::VK_VERSION_1_1[]
| code:OpFDiv(x,y)
| 2.5 ULP for [eq]#{vert}y{vert} = 0# or [eq]#{vert}y{vert}# in the range [2^-126^, 2^126^]. | 2.5 ULP for [eq]#{vert}y{vert} = 0# or [eq]#{vert}y{vert}# in the range [2^-14^, 2^14^].
| code:OpFRem(x,y)
@@ -2654,7 +2671,7 @@ different sign than the infinitely precise result.
| code:atanh(x)
2+a| Inherited from latexmath:[\log(\frac{1.0 + x}{1.0 - x}) \times 0.5].
| code:frexp()
-2+| Correctly rounded.
+2+| Correct result.
| code:ldexp()
2+| Correctly rounded.
| code:length(x)
@@ -2678,9 +2695,9 @@ different sign than the infinitely precise result.
| code:trunc
2+| Correctly rounded.
| code:fabs
-2+| Correctly rounded.
+2+| Correct result.
| code:fsign
-2+| Correctly rounded.
+2+| Correct result.
| code:floor
2+| Correctly rounded.
| code:ceil
@@ -2690,11 +2707,11 @@ different sign than the infinitely precise result.
| code:modf
2+| Correctly rounded.
| code:fmin
-2+| Correctly rounded.
+2+| Correct result.
| code:fmax
-2+| Correctly rounded.
+2+| Correct result.
| code:fclamp
-2+| Correctly rounded.
+2+| Correct result.
| code:fmix(x, y, a)
2+a| Inherited from latexmath:[x \times (1.0 - a) + y \times a].
| code:step
@@ -2703,11 +2720,11 @@ different sign than the infinitely precise result.
2+a| Inherited from latexmath:[t \times t \times (3.0 - 2.0 \times t)],
where latexmath:[t = clamp(\frac{x - edge0}{edge1 - edge0}, 0.0, 1.0)].
| code:nmin
-2+| Correctly rounded.
+2+| Correct result.
| code:nmax
-2+| Correctly rounded.
+2+| Correct result.
| code:nclamp
-2+| Correctly rounded.
+2+| Correct result.
| code:packHalf2x16
2+| Correctly rounded.
|====
diff --git a/appendices/versions.adoc b/appendices/versions.adoc
index 2c45c2b80..c33177e99 100644
--- a/appendices/versions.adoc
+++ b/appendices/versions.adoc
@@ -1,5 +1,4 @@
// Copyright 2015-2024 The Khronos Group Inc.
-//
// SPDX-License-Identifier: CC-BY-4.0
[appendix]
@@ -27,36 +26,23 @@ ifdef::VK_VERSION_1_3[]
[[versions-1.3]]
== Vulkan 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 <> 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 <>.
-
-include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
---
-endif::isrefpage[]
+// This allows the Vulkan refpages to work when built separately from this chapter
+ifndef::VKSC_VERSION_1_0[:promoted: {generated}/meta]
+ifdef::VKSC_VERSION_1_0[:promoted: {appendices}/sc_static]
-// This is the spec-specific form of the section
[[versions-1.3-promotions]]
Vulkan Version 1.3 <> a
number of key extensions into the core API:
-include::{generated}/meta/promoted_extensions_VK_VERSION_1_3.adoc[]
+include::{promoted}/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`
+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.
@@ -64,7 +50,7 @@ There are no members in the slink:VkPhysicalDeviceVulkan13Features structure
corresponding to the slink:VkPhysicalDevice4444FormatsFeaturesEXT structure.
-=== Differences Relative to `VK_EXT_extended_dynamic_state`
+Differences Relative to `VK_EXT_extended_dynamic_state`::
All dynamic state enumerants and commands defined by
`apiext:VK_EXT_extended_dynamic_state` are required in Vulkan 1.3.
@@ -73,7 +59,7 @@ corresponding to the slink:VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
structure.
-=== Differences Relative to `VK_EXT_extended_dynamic_state2`
+Differences Relative to `VK_EXT_extended_dynamic_state2`::
The optional dynamic state enumerants and commands defined by
`apiext:VK_EXT_extended_dynamic_state2` for patch control points and logic
@@ -83,7 +69,7 @@ corresponding to the slink:VkPhysicalDeviceExtendedDynamicState2FeaturesEXT
structure.
-=== Differences Relative to `VK_EXT_texel_buffer_alignment`
+Differences Relative to `VK_EXT_texel_buffer_alignment`::
The more specific alignment requirements defined by
slink:VkPhysicalDeviceTexelBufferAlignmentProperties are required in Vulkan
@@ -95,7 +81,7 @@ The pname:texelBufferAlignment feature is enabled if using a Vulkan 1.3
instance.
-=== Differences Relative to `VK_EXT_texture_compression_astc_hdr`
+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.
@@ -105,7 +91,7 @@ slink:VkPhysicalDeviceVulkan13Features indicates whether a Vulkan 1.3
implementation supports these formats.
-=== Differences Relative to `VK_EXT_ycbcr_2plane_444_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.
@@ -114,8 +100,10 @@ corresponding to the slink:VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
structure.
-=== Additional Vulkan 1.3 Feature Support
-
+Additional Vulkan 1.3 Feature Support::
++
+[open]
+----
[[versions-1.3-new-features]]
In addition to the promoted extensions described above, Vulkan 1.3 added
required support for:
@@ -133,8 +121,20 @@ required support for:
* The <> limit is added to provide the total
size of all inline uniform block bindings in a pipeline layout.
+----
+// This include does not work inside the open block in the spec used to
+// delimit refpage content, but does work in the refpage extracted from the
+// spec.
+
+ifdef::isrefpage[]
include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
+endif::isrefpage[]
+--
+
+ifndef::isrefpage[]
+include::{generated}/interfaces/VK_VERSION_1_3.adoc[]
+endif::isrefpage[]
endif::VK_VERSION_1_3[]
@@ -143,29 +143,12 @@ ifdef::VK_VERSION_1_2[]
[[versions-1.2]]
== Vulkan 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 <> a
-number of key extensions into the core API:
-
-// Must be redefined in the refpage content
+// This allows the Vulkan refpages to work when built separately from this chapter
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 <>.
-
-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 <> a
number of key extensions into the core API:
@@ -176,7 +159,7 @@ All differences in behavior between these extensions and the corresponding
Vulkan 1.2 functionality are summarized below.
-=== Differences Relative to `VK_KHR_8bit_storage`
+Differences Relative to `VK_KHR_8bit_storage`::
If the `apiext:VK_KHR_8bit_storage` extension is not supported, support for
the SPIR-V <>
@@ -216,7 +199,7 @@ slink:VkPhysicalDeviceVulkan12Features::pname:descriptorIndexing when
queried via flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_EXT_scalar_block_layout`
+Differences Relative to `VK_EXT_scalar_block_layout`::
If the `apiext:VK_EXT_scalar_block_layout` extension is not supported,
support for the <>
@@ -226,7 +209,7 @@ slink:VkPhysicalDeviceVulkan12Features::pname:scalarBlockLayout when queried
via flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_EXT_shader_viewport_index_layer`
+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.
@@ -240,7 +223,7 @@ slink:VkPhysicalDeviceVulkan12Features::pname:shaderOutputLayer when queried
via flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_KHR_buffer_device_address`
+Differences Relative to `VK_KHR_buffer_device_address`::
If the `apiext:VK_KHR_buffer_device_address` extension is not supported,
support for the <>
@@ -250,7 +233,7 @@ slink:VkPhysicalDeviceVulkan12Features::pname:bufferDeviceAddress when
queried via flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_KHR_shader_atomic_int64`
+Differences Relative to `VK_KHR_shader_atomic_int64`::
If the `apiext:VK_KHR_shader_atomic_int64` extension is not supported,
support for the <> and
@@ -271,7 +254,7 @@ slink:VkPhysicalDeviceVulkan12Features::pname:shaderInt8 when queried via
flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_KHR_vulkan_memory_model`
+Differences Relative to `VK_KHR_vulkan_memory_model`::
If the `apiext:VK_KHR_vulkan_memory_model` extension is not supported,
support for the <>
@@ -281,8 +264,10 @@ slink:VkPhysicalDeviceVulkan12Features::pname:vulkanMemoryModel when queried
via flink:vkGetPhysicalDeviceFeatures2.
-=== Additional Vulkan 1.2 Feature Support
-
+Additional Vulkan 1.2 Feature Support::
++
+[open]
+----
[[versions-1.2-new-features]]
In addition to the promoted extensions described above, Vulkan 1.2 added
support for:
@@ -327,8 +312,20 @@ support for:
pname:framebufferIntegerColorSampleCounts>> limit which indicates the
color sample counts that are supported for all framebuffer color
attachments with integer formats.
+----
+
+// This include does not work inside the open block in the spec used to
+// delimit refpage content, but does work in the refpage extracted from the
+// spec.
+ifdef::isrefpage[]
include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
+endif::isrefpage[]
+--
+
+ifndef::isrefpage[]
+include::{generated}/interfaces/VK_VERSION_1_2.adoc[]
+endif::isrefpage[]
endif::VK_VERSION_1_2[]
@@ -337,29 +334,12 @@ ifdef::VK_VERSION_1_1[]
[[versions-1.1]]
== Vulkan 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 <> a
-number of key extensions into the core API:
-
-// Must be redefined in the refpage content
+// This allows the Vulkan refpages to work when built separately from this chapter
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 <>.
-
-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 <> a
number of key extensions into the core API:
@@ -370,7 +350,7 @@ All differences in behavior between these extensions and the corresponding
Vulkan 1.1 functionality are summarized below.
-=== Differences Relative to `VK_KHR_16bit_storage`
+Differences Relative to `VK_KHR_16bit_storage`::
If the `apiext:VK_KHR_16bit_storage` extension is not supported, support for
the <>
@@ -383,7 +363,7 @@ endif::VK_VERSION_1_2[]
when queried via flink:vkGetPhysicalDeviceFeatures2.
-=== Differences Relative to `VK_KHR_sampler_ycbcr_conversion`
+Differences Relative to `VK_KHR_sampler_ycbcr_conversion`::
If the `apiext:VK_KHR_sampler_ycbcr_conversion` extension is not supported,
support for the <Version
-