// Copyright 2017-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2021-09-30
*Contributors*::
  - Samuel Bourasseau, Adobe
  - Matthäus Chajdas, AMD
  - Greg Grebe, AMD
  - Nicolai Hähnle, AMD
  - Tobias Hector, AMD
  - Dave Oldcorn, AMD
  - Skyler Saleh, AMD
  - Mathieu Robart, Arm
  - Marius Bjorge, Arm
  - Tom Olson, Arm
  - Sebastian Tafuri, EA
  - Henrik Rydgard, Embark
  - Juan Cañada, Epic Games
  - Patrick Kelly, Epic Games
  - Yuriy O'Donnell, Epic Games
  - Michael Doggett, Facebook/Oculus
  - Ricardo Garcia, Igalia
  - Andrew Garrard, Imagination
  - Don Scorgie, Imagination
  - Dae Kim, Imagination
  - Joshua Barczak, Intel
  - Slawek Grajewski, Intel
  - Jeff Bolz, NVIDIA
  - Pascal Gautron, NVIDIA
  - Daniel Koch, NVIDIA
  - Christoph Kubisch, NVIDIA
  - Ashwin Lele, NVIDIA
  - Robert Stepinski, NVIDIA
  - Martin Stich, NVIDIA
  - Nuno Subtil, NVIDIA
  - Eric Werness, NVIDIA
  - Jon Leech, Khronos
  - Jeroen van Schijndel, OTOY
  - Juul Joosten, OTOY
  - Alex Bourd, Qualcomm
  - Roman Larionov, Qualcomm
  - David McAllister, Qualcomm
  - Lewis Gordon, Samsung
  - Ralph Potter, Samsung
  - Jasper Bekkers, Traverse Research
  - Jesse Barker, Unity
  - Baldur Karlsson, Valve

=== Description

In order to be efficient, rendering techniques such as ray tracing need a
quick way to identify which primitives may be intersected by a ray
traversing the geometries.
Acceleration structures are the most common way to represent the geometry
spatially sorted, in order to quickly identify such potential intersections.

This extension adds new functionalities:

  * Acceleration structure objects and build commands
  * Structures to describe geometry inputs to acceleration structure builds
  * Acceleration structure copy commands


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


=== Issues

(1) How does this extension differ from VK_NV_ray_tracing?
--
*DISCUSSION*:

The following is a summary of the main functional differences between
VK_KHR_acceleration_structure and VK_NV_ray_tracing:

  * added acceleration structure serialization / deserialization
    (ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR,
    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
    flink:vkCmdCopyMemoryToAccelerationStructureKHR)
  * document <<acceleration-structure-inactive-prims,inactive primitives and
    instances>>
  * added slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
  * added indirect and batched acceleration structure builds
    (flink:vkCmdBuildAccelerationStructuresIndirectKHR)
  * added <<host-acceleration-structure,host acceleration structure>>
    commands
  * reworked geometry structures so they could be better shared between
    device, host, and indirect builds
  * explicitly made slink:VkAccelerationStructureKHR use device addresses
  * added acceleration structure compatibility check function
    (flink:vkGetDeviceAccelerationStructureCompatibilityKHR)
  * add parameter for requesting memory requirements for host and/or device
    build
  * added format feature for acceleration structure build vertex formats
    (ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
--

ifdef::VK_NV_ray_tracing[]
(2) Can you give a more detailed comparision of differences and similarities
between VK_NV_ray_tracing and VK_KHR_acceleration_structure?
--
*DISCUSSION*:

The following is a more detailed comparision of which commands, structures,
and enums are aliased, changed, or removed.

  * Aliased functionality -- enums, structures, and commands that are
    considered equivalent:
  ** elink:VkGeometryTypeNV {harr} elink:VkGeometryTypeKHR
  ** elink:VkAccelerationStructureTypeNV {harr}
     elink:VkAccelerationStructureTypeKHR
  ** elink:VkCopyAccelerationStructureModeNV {harr}
     elink:VkCopyAccelerationStructureModeKHR
  ** tlink:VkGeometryFlagsNV {harr} tlink:VkGeometryFlagsKHR
  ** elink:VkGeometryFlagBitsNV {harr} elink:VkGeometryFlagBitsKHR
  ** tlink:VkGeometryInstanceFlagsNV {harr} tlink:VkGeometryInstanceFlagsKHR
  ** elink:VkGeometryInstanceFlagBitsNV {harr}
     elink:VkGeometryInstanceFlagBitsKHR
  ** tlink:VkBuildAccelerationStructureFlagsNV {harr}
     tlink:VkBuildAccelerationStructureFlagsKHR
  ** elink:VkBuildAccelerationStructureFlagBitsNV {harr}
     elink:VkBuildAccelerationStructureFlagBitsKHR
  ** slink:VkTransformMatrixNV {harr} slink:VkTransformMatrixKHR (added to
     VK_NV_ray_tracing for descriptive purposes)
  ** slink:VkAabbPositionsNV {harr} slink:VkAabbPositionsKHR (added to
     VK_NV_ray_tracing for descriptive purposes)
  ** slink:VkAccelerationStructureInstanceNV {harr}
     slink:VkAccelerationStructureInstanceKHR (added to VK_NV_ray_tracing
     for descriptive purposes)

  * Changed enums, structures, and commands:
  ** renamed ename:VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV ->
     ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR in
     elink:VkGeometryInstanceFlagBitsKHR
  ** slink:VkGeometryTrianglesNV ->
     slink:VkAccelerationStructureGeometryTrianglesDataKHR (device or host
     address instead of buffer+offset)
  ** slink:VkGeometryAABBNV ->
     slink:VkAccelerationStructureGeometryAabbsDataKHR (device or host
     address instead of buffer+offset)
  ** slink:VkGeometryDataNV -> slink:VkAccelerationStructureGeometryDataKHR
     (union of triangle/aabbs/instances)
  ** slink:VkGeometryNV -> slink:VkAccelerationStructureGeometryKHR (changed
     type of geometry)
  ** slink:VkAccelerationStructureCreateInfoNV ->
     slink:VkAccelerationStructureCreateInfoKHR (reshuffle geometry
     layout/information)
  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
     slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR (for
     acceleration structure properties, renamed pname:maxTriangleCount to
     pname:maxPrimitiveCount, added per stage and update after bind limits)
     and slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR (for ray
     tracing pipeline properties)
  ** slink:VkAccelerationStructureMemoryRequirementsInfoNV (deleted -
     replaced by allocating on top of slink:VkBuffer)
  ** slink:VkWriteDescriptorSetAccelerationStructureNV ->
     slink:VkWriteDescriptorSetAccelerationStructureKHR (different
     acceleration structure type)
  ** flink:vkCreateAccelerationStructureNV ->
     flink:vkCreateAccelerationStructureKHR (device address, different
     geometry layout/information)
  ** flink:vkGetAccelerationStructureMemoryRequirementsNV (deleted -
     replaced by allocating on top of slink:VkBuffer)
  ** flink:vkCmdBuildAccelerationStructureNV ->
     flink:vkCmdBuildAccelerationStructuresKHR (params moved to structs,
     layout differences)
  ** flink:vkCmdCopyAccelerationStructureNV ->
     flink:vkCmdCopyAccelerationStructureKHR (params to struct, extendable)
  ** flink:vkGetAccelerationStructureHandleNV ->
     flink:vkGetAccelerationStructureDeviceAddressKHR (device address
     instead of handle)
  ** elink:VkAccelerationStructureMemoryRequirementsTypeNV -> size queries
     for scratch space moved to
     flink:vkGetAccelerationStructureBuildSizesKHR
  ** flink:vkDestroyAccelerationStructureNV ->
     flink:vkDestroyAccelerationStructureKHR (different acceleration
     structure types)
  ** flink:vkCmdWriteAccelerationStructuresPropertiesNV ->
     flink:vkCmdWriteAccelerationStructuresPropertiesKHR (different
     acceleration structure types)
  * Added enums, structures and commands:
  ** ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to elink:VkGeometryTypeKHR enum
  ** ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
     ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR to
     elink:VkCopyAccelerationStructureModeKHR enum
  ** slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
  ** elink:VkAccelerationStructureBuildTypeKHR enum
  ** elink:VkBuildAccelerationStructureModeKHR enum
  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
     unions
  ** slink:VkAccelerationStructureBuildRangeInfoKHR struct
  ** slink:VkAccelerationStructureGeometryInstancesDataKHR struct
  ** slink:VkAccelerationStructureDeviceAddressInfoKHR struct
  ** slink:VkAccelerationStructureVersionInfoKHR struct
  ** slink:VkStridedDeviceAddressRegionKHR struct
  ** slink:VkCopyAccelerationStructureToMemoryInfoKHR struct
  ** slink:VkCopyMemoryToAccelerationStructureInfoKHR struct
  ** slink:VkCopyAccelerationStructureInfoKHR struct
  ** flink:vkBuildAccelerationStructuresKHR command (host build)
  ** flink:vkCopyAccelerationStructureKHR command (host copy)
  ** flink:vkCopyAccelerationStructureToMemoryKHR (host serialize)
  ** flink:vkCopyMemoryToAccelerationStructureKHR (host deserialize)
  ** flink:vkWriteAccelerationStructuresPropertiesKHR (host properties)
  ** flink:vkCmdCopyAccelerationStructureToMemoryKHR (device serialize)
  ** flink:vkCmdCopyMemoryToAccelerationStructureKHR (device deserialize)
  ** flink:vkGetDeviceAccelerationStructureCompatibilityKHR (serialization)

--
endif::VK_NV_ray_tracing[]

(3) What are the changes between the public provisional (VK_KHR_ray_tracing
v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
--
  * added pname:geometryFlags to
    stext:VkAccelerationStructureCreateGeometryTypeInfoKHR (later reworked
    to obsolete this)
  * added pname:minAccelerationStructureScratchOffsetAlignment property to
    VkPhysicalDeviceRayTracingPropertiesKHR
  * fix naming and return enum from
    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
  ** renamed stext:VkAccelerationStructureVersionKHR to
     slink:VkAccelerationStructureVersionInfoKHR
  ** renamed etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR to
     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
  ** removed etext:VK_ERROR_INCOMPATIBLE_VERSION_KHR
  ** added elink:VkAccelerationStructureCompatibilityKHR enum
  ** remove return value from
     flink:vkGetDeviceAccelerationStructureCompatibilityKHR and added return
     enum parameter
  * Require Vulkan 1.1
  * added creation time capture and replay flags
  ** added elink:VkAccelerationStructureCreateFlagBitsKHR and
     tlink:VkAccelerationStructureCreateFlagsKHR
  ** renamed the pname:flags member of
     slink:VkAccelerationStructureCreateInfoKHR to pname:buildFlags (later
     removed) and added the pname:createFlags member
  * change flink:vkCmdBuildAccelerationStructuresIndirectKHR to use buffer
    device address for indirect parameter
  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
    a required extension (later went back on this)
  * renamed stext:VkAccelerationStructureBuildOffsetInfoKHR to
    slink:VkAccelerationStructureBuildRangeInfoKHR
  ** renamed the pname:ppOffsetInfos parameter of
     flink:vkCmdBuildAccelerationStructuresKHR to pname:ppBuildRangeInfos
  * Re-unify geometry description between build and create
  ** remove stext:VkAccelerationStructureCreateGeometryTypeInfoKHR and
     etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
  ** added stext:VkAccelerationStructureCreateSizeInfoKHR structure (later
     removed)
  ** change type of the pname:pGeometryInfos member of
     slink:VkAccelerationStructureCreateInfoKHR from
     stext:VkAccelerationStructureCreateGeometryTypeInfoKHR to
     slink:VkAccelerationStructureGeometryKHR (later removed)
  ** added pname:pCreateSizeInfos member to
     slink:VkAccelerationStructureCreateInfoKHR (later removed)
  * Fix ppGeometries ambiguity, add pGeometries
  ** remove pname:geometryArrayOfPointers member of
     VkAccelerationStructureBuildGeometryInfoKHR
  ** disambiguate two meanings of pname:ppGeometries by explicitly adding
     pname:pGeometries to the
     slink:VkAccelerationStructureBuildGeometryInfoKHR structure and require
     one of them be `NULL`
  * added <<features-nullDescriptor,nullDescriptor>> support for
    acceleration structures
  * changed the pname:update member of
    slink:VkAccelerationStructureBuildGeometryInfoKHR from a bool to the
    pname:mode elink:VkBuildAccelerationStructureModeKHR enum which allows
    future extensibility in update types
  * Clarify deferred host ops for pipeline creation
  ** slink:VkDeferredOperationKHR is now a top-level parameter for
     flink:vkBuildAccelerationStructuresKHR,
     flink:vkCreateRayTracingPipelinesKHR,
     flink:vkCopyAccelerationStructureToMemoryKHR,
     flink:vkCopyAccelerationStructureKHR, and
     flink:vkCopyMemoryToAccelerationStructureKHR
  ** removed stext:VkDeferredOperationInfoKHR structure
  ** change deferred host creation/return parameter behavior such that the
     implementation can modify such parameters until the deferred host
     operation completes
  ** `apiext:VK_KHR_deferred_host_operations` is required again
  * Change acceleration structure build to always be sized
  ** de-alias ename:VkAccelerationStructureMemoryRequirementsTypeNV and
     etext:VkAccelerationStructureMemoryRequirementsTypeKHR, and remove
     etext:VkAccelerationStructureMemoryRequirementsTypeKHR
  ** add flink:vkGetAccelerationStructureBuildSizesKHR command and
     slink:VkAccelerationStructureBuildSizesInfoKHR structure and
     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
     enum to query sizes for acceleration structures and scratch storage
  ** move size queries for scratch space to
     flink:vkGetAccelerationStructureBuildSizesKHR
  ** remove pname:compactedSize, pname:buildFlags, pname:maxGeometryCount,
     pname:pGeometryInfos, pname:pCreateSizeInfos members of
     slink:VkAccelerationStructureCreateInfoKHR and add the pname:size
     member
  ** add pname:maxVertex member to
     slink:VkAccelerationStructureGeometryTrianglesDataKHR structure
  ** remove stext:VkAccelerationStructureCreateSizeInfoKHR structure
--

(4) What are the changes between the internal provisional
(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
v11) release?
--
  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
    flexibility and decoupling ray query support from ray pipelines:
  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
     operations)
  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
     shader stages)
  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
  * clarify buffer usage flags for ray tracing
  ** ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV is left alone in
     `apiext:VK_NV_ray_tracing` (required on pname:scratch and
     pname:instanceData)
  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV in
     `apiext:VK_KHR_ray_tracing_pipeline` and is required on shader binding
     table buffers
  ** ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
     is added in `apiext:VK_KHR_acceleration_structure` for all vertex,
     index, transform, aabb, and instance buffer data referenced by device
     build commands
  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used for pname:scratchData
  * add max primitive counts (pname:ppMaxPrimitiveCounts) to
    flink:vkCmdBuildAccelerationStructuresIndirectKHR
  * Allocate acceleration structures from stext:VkBuffers and add a mode to
    constrain the device address
  ** de-alias sname:VkBindAccelerationStructureMemoryInfoNV and
     fname:vkBindAccelerationStructureMemoryNV, and remove
     stext:VkBindAccelerationStructureMemoryInfoKHR,
     stext:VkAccelerationStructureMemoryRequirementsInfoKHR, and
     ftext:vkGetAccelerationStructureMemoryRequirementsKHR
  ** acceleration structures now take a slink:VkBuffer and offset at
     creation time for memory placement
  ** add a new ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
     buffer usage for such buffers
  ** add a new ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR acceleration
     structure type for layering
  * move ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum instead of being
    added via extension
  * make build commands more consistent - all now build multiple
    acceleration structures and are named plurally
    (flink:vkCmdBuildAccelerationStructuresIndirectKHR,
    flink:vkCmdBuildAccelerationStructuresKHR,
    flink:vkBuildAccelerationStructuresKHR)
  * add interactions with
    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT for
    acceleration structures, including a new feature
    (pname:descriptorBindingAccelerationStructureUpdateAfterBind) and 3 new
    properties (pname:maxPerStageDescriptorAccelerationStructures,
    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures,
    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures)
  * extension is no longer provisional
  * define synchronization requirements for builds, traces, and copies
  * define synchronization requirements for AS build inputs and indirect
    build buffer
--

(5) What is ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR for?
--
*RESOLVED*: It is primarily intended for API layering.
In DXR, the acceleration structure is basically just a buffer in a special
layout, and you do not know at creation time whether it will be used as a
top or bottom level acceleration structure.
We thus added a generic acceleration structure type whose type is unknown at
creation time, but is specified at build time instead.
Applications which are written directly for Vulkan should not use it.
--

=== Version History
  * Revision 1, 2019-12-05 (Members of the Vulkan Ray Tracing TSG)
    - Internal revisions (forked from VK_NV_ray_tracing)
  * Revision 2, 2019-12-20 (Daniel Koch, Eric Werness)
    - Add const version of DeviceOrHostAddress (!3515)
    - Add VU to clarify that only handles in the current pipeline are valid
      (!3518)
    - Restore some missing VUs and add in-place update language (#1902,
      !3522)
    - rename VkAccelerationStructureInstanceKHR member from
      accelerationStructure to accelerationStructureReference to better
      match its type (!3523)
    - Allow VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS for pipeline creation if
      shader group handles cannot be reused (!3523)
    - update documentation for the VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
      error code and add missing documentation for new return codes from
      VK_KHR_deferred_host_operations (!3523)
    - list new query types for VK_KHR_ray_tracing (!3523)
    - Fix VU statements for VkAccelerationStructureGeometryKHR referring to
      correct union members and update to use more current wording (!3523)
  * Revision 3, 2020-01-10 (Daniel Koch, Jon Leech, Christoph Kubisch)
    - Fix 'instance of' and 'that/which contains/defines' markup issues
      (!3528)
    - factor out VK_KHR_pipeline_library as stand-alone extension (!3540)
    - Resolve Vulkan-hpp issues (!3543)
      - add missing require for VkGeometryInstanceFlagsKHR
      - de-alias VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
        since the KHR structure is no longer equivalent
      - add len to pDataSize attribute for
        vkWriteAccelerationStructuresPropertiesKHR
  * Revision 4, 2020-01-23 (Daniel Koch, Eric Werness)
    - Improve vkWriteAccelerationStructuresPropertiesKHR, add return value
      and VUs (#1947)
    - Clarify language to allow multiple raygen shaders (#1959)
    - Various editorial feedback (!3556)
    - Add language to help deal with looped self-intersecting fans (#1901)
    - Change vkCmdTraceRays{Indirect}KHR args to pointers (!3559)
    - Add scratch address validation language (#1941, !3551)
    - Fix definition and add hierarchy information for shader call scope
      (#1977, !3571)
  * Revision 5, 2020-02-04 (Eric Werness, Jeff Bolz, Daniel Koch)
    - remove vestigial accelerationStructureUUID (!3582)
    - update definition of repack instructions and improve memory model
      interactions (#1910, #1913, !3584)
    - Fix wrong sType for VkPhysicalDeviceRayTracingFeaturesKHR (#1988)
    - Use provisional SPIR-V capabilities (#1987)
    - require rayTraversalPrimitiveCulling if rayQuery is supported (#1927)
    - Miss shaders do not have object parameters (!3592)
    - Fix missing required types in XML (!3592)
    - clarify matching conditions for update (!3592)
    - add goal that host and device builds be similar (!3592)
    - clarify that pname:maxPrimitiveCount limit should apply to triangles
      and AABBs (!3592)
    - Require alignment for instance arrayOfPointers (!3592)
    - Zero is a valid value for instance flags (!3592)
    - Add some alignment VUs that got lost in refactoring (!3592)
    - Recommend TMin epsilon rather than culling (!3592)
    - Get angle from dot product not cross product (!3592)
    - Clarify that AH can access the payload and attributes (!3592)
    - Match DXR behavior for inactive primitive definition (!3592)
    - Use a more generic term than degenerate for inactive to avoid
      confusion (!3592)
  * Revision 6, 2020-02-20 (Daniel Koch)
    - fix some dangling NV references (#1996)
    - rename VkCmdTraceRaysIndirectCommandKHR to
      VkTraceRaysIndirectCommandKHR (!3607)
    - update contributor list (!3611)
    - use uint64_t instead of VkAccelerationStructureReferenceKHR in
      VkAccelerationStructureInstanceKHR (#2004)
  * Revision 7, 2020-02-28 (Tobias Hector)
    - remove HitTKHR SPIR-V builtin (spirv/spirv-extensions#7)
  * Revision 8, 2020-03-06 (Tobias Hector, Dae Kim, Daniel Koch, Jeff Bolz,
    Eric Werness)
    - explicitly state that Tmax is updated when new closest intersection is
      accepted (#2020,!3536)
    - Made references to min and max t values consistent (!3644)
    - finish enumerating differences relative to VK_NV_ray_tracing in issues
      (1) and (2) (#1974,!3642)
    - fix formatting in some math equations (!3642)
    - Restrict the Hit Kind operand of code:OpReportIntersectionKHR to
      7-bits (spirv/spirv-extensions#8,!3646)
    - Say ray tracing 'should:' be watertight (#2008,!3631)
    - Clarify memory requirements for ray tracing buffers (#2005,!3649)
    - Add callable size limits (#1997,!3652)
  * Revision 9, 2020-04-15 (Eric Werness, Daniel Koch, Tobias Hector, Joshua
    Barczak)
    - Add geometry flags to acceleration structure creation (!3672)
    - add build scratch memory alignment
      (minAccelerationStructureScratchOffsetAlignment) (#2065,!3725)
    - fix naming and return enum from
      vkGetDeviceAccelerationStructureCompatibilityKHR (#2051,!3726)
    - require SPIR-V 1.4 (#2096,!3777)
    - added creation time capture/replay flags (#2104,!3774)
    - require Vulkan 1.1 (#2133,!3806)
    - use device addresses instead of VkBuffers for ray tracing commands
      (#2074,!3815)
    - add interactions with Vulkan 1.2 and VK_KHR_vulkan_memory_model
      (#2133,!3830)
    - make VK_KHR_pipeline_library an interaction instead of required
      (#2045,#2108,!3830)
    - make VK_KHR_deferred_host_operations an interaction instead of
      required (#2045,!3830)
    - removed maxCallableSize and added explicit stack size management for
      ray pipelines (#1997,!3817,!3772,!3844)
    - improved documentation for VkAccelerationStructureVersionInfoKHR
      (#2135,3835)
    - rename VkAccelerationStructureBuildOffsetInfoKHR to
      VkAccelerationStructureBuildRangeInfoKHR (#2058,!3754)
    - Re-unify geometry description between build and create (!3754)
    - Fix ppGeometries ambiguity, add pGeometries (#2032,!3811)
    - add interactions with VK_EXT_robustness2 and allow nullDescriptor
      support for acceleration structures (#1920,!3848)
    - added future extensibility for AS updates (#2114,!3849)
    - Fix VU for dispatchrays and add a limit on the size of the full grid
      (#2160,!3851)
    - Add shaderGroupHandleAlignment property (#2180,!3875)
    - Clarify deferred host ops for pipeline creation (#2067,!3813)
    - Change acceleration structure build to always be sized
      (#2131,#2197,#2198,!3854,!3883,!3880)
  * Revision 10, 2020-07-03 (Mathieu Robart, Daniel Koch, Eric Werness,
    Tobias Hector)
    - Decomposition of the specification, from VK_KHR_ray_tracing to
      VK_KHR_acceleration_structure (#1918,!3912)
    - clarify buffer usage flags for ray tracing (#2181,!3939)
    - add max primitive counts to build indirect command (#2233,!3944)
    - Allocate acceleration structures from VkBuffers and add a mode to
      constrain the device address (#2131,!3936)
    - Move VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum (#2243,!3952)
    - make build commands more consistent (#2247,!3958)
    - add interactions with UPDATE_AFTER_BIND (#2128,!3986)
    - correct and expand build command VUs (!4020)
    - fix copy command VUs (!4018)
    - added various alignment requirements (#2229,!3943)
    - fix valid usage for arrays of geometryCount items (#2198,!4010)
    - define what is allowed to change on RTAS updates and relevant VUs
      (#2177,!3961)
  * Revision 11, 2020-11-12 (Eric Werness, Josh Barczak, Daniel Koch, Tobias
    Hector)
    - de-alias NV and KHR acceleration structure types and associated
      commands (#2271,!4035)
    - specify alignment for host copy commands (#2273,!4037)
    - document
      ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
    - specify that acceleration structures are non-linear (#2289,!4068)
    - add several missing VUs for strides, vertexFormat, and indexType
      (#2315,!4069)
    - restore VUs for VkAccelerationStructureBuildGeometryInfoKHR
      (#2337,!4098)
    - ban multi-instance memory for host operations (#2324,!4102)
    - allow dstAccelerationStructure to be null for
      vkGetAccelerationStructureBuildSizesKHR (#2330,!4111)
    - more build VU cleanup (#2138,#4130)
    - specify host endianness for AS serialization (#2261,!4136)
    - add invertible transform matrix VU (#1710,!4140)
    - require geometryCount to be 1 for TLAS builds (!4145)
    - improved validity conditions for build addresses (#4142)
    - add single statement SPIR-V VUs, build limit VUs (!4158)
    - document limits for vertex and aabb strides (#2390,!4184)
    - specify that
      ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR applies
      to AS copies (#2382,#4173)
    - define sync for AS build inputs and indirect buffer (#2407,!4208)
  * Revision 12, 2021-08-06 (Samuel Bourasseau)
    - rename VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
      VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR (keep previous as
      alias).
    - Clarify description and add note.
  * Revision 13, 2021-09-30 (Jon Leech)
    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
