• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2017-2021 The Khronos Group, Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.txt[]
6
7=== Other Extension Metadata
8
9*Last Modified Date*::
10    2021-09-30
11*Contributors*::
12  - Samuel Bourasseau, Adobe
13  - Matthäus Chajdas, AMD
14  - Greg Grebe, AMD
15  - Nicolai Hähnle, AMD
16  - Tobias Hector, AMD
17  - Dave Oldcorn, AMD
18  - Skyler Saleh, AMD
19  - Mathieu Robart, Arm
20  - Marius Bjorge, Arm
21  - Tom Olson, Arm
22  - Sebastian Tafuri, EA
23  - Henrik Rydgard, Embark
24  - Juan Cañada, Epic Games
25  - Patrick Kelly, Epic Games
26  - Yuriy O'Donnell, Epic Games
27  - Michael Doggett, Facebook/Oculus
28  - Ricardo Garcia, Igalia
29  - Andrew Garrard, Imagination
30  - Don Scorgie, Imagination
31  - Dae Kim, Imagination
32  - Joshua Barczak, Intel
33  - Slawek Grajewski, Intel
34  - Jeff Bolz, NVIDIA
35  - Pascal Gautron, NVIDIA
36  - Daniel Koch, NVIDIA
37  - Christoph Kubisch, NVIDIA
38  - Ashwin Lele, NVIDIA
39  - Robert Stepinski, NVIDIA
40  - Martin Stich, NVIDIA
41  - Nuno Subtil, NVIDIA
42  - Eric Werness, NVIDIA
43  - Jon Leech, Khronos
44  - Jeroen van Schijndel, OTOY
45  - Juul Joosten, OTOY
46  - Alex Bourd, Qualcomm
47  - Roman Larionov, Qualcomm
48  - David McAllister, Qualcomm
49  - Lewis Gordon, Samsung
50  - Ralph Potter, Samsung
51  - Jasper Bekkers, Traverse Research
52  - Jesse Barker, Unity
53  - Baldur Karlsson, Valve
54
55=== Description
56
57In order to be efficient, rendering techniques such as ray tracing need a
58quick way to identify which primitives may be intersected by a ray
59traversing the geometries.
60Acceleration structures are the most common way to represent the geometry
61spatially sorted, in order to quickly identify such potential intersections.
62
63This extension adds new functionalities:
64
65  * Acceleration structure objects and build commands
66  * Structures to describe geometry inputs to acceleration structure builds
67  * Acceleration structure copy commands
68
69
70include::{generated}/interfaces/VK_KHR_acceleration_structure.txt[]
71
72
73=== Issues
74
75(1) How does this extension differ from VK_NV_ray_tracing?
76--
77*DISCUSSION*:
78
79The following is a summary of the main functional differences between
80VK_KHR_acceleration_structure and VK_NV_ray_tracing:
81
82  * added acceleration structure serialization / deserialization
83    (ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
84    ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR,
85    flink:vkCmdCopyAccelerationStructureToMemoryKHR,
86    flink:vkCmdCopyMemoryToAccelerationStructureKHR)
87  * document <<acceleration-structure-inactive-prims,inactive primitives and
88    instances>>
89  * added slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
90  * added indirect and batched acceleration structure builds
91    (flink:vkCmdBuildAccelerationStructuresIndirectKHR)
92  * added <<host-acceleration-structure,host acceleration structure>>
93    commands
94  * reworked geometry structures so they could be better shared between
95    device, host, and indirect builds
96  * explicitly made slink:VkAccelerationStructureKHR use device addresses
97  * added acceleration structure compatibility check function
98    (flink:vkGetDeviceAccelerationStructureCompatibilityKHR)
99  * add parameter for requesting memory requirements for host and/or device
100    build
101  * added format feature for acceleration structure build vertex formats
102    (ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)
103--
104
105ifdef::VK_NV_ray_tracing[]
106(2) Can you give a more detailed comparision of differences and similarities
107between VK_NV_ray_tracing and VK_KHR_acceleration_structure?
108--
109*DISCUSSION*:
110
111The following is a more detailed comparision of which commands, structures,
112and enums are aliased, changed, or removed.
113
114  * Aliased functionality -- enums, structures, and commands that are
115    considered equivalent:
116  ** elink:VkGeometryTypeNV {harr} elink:VkGeometryTypeKHR
117  ** elink:VkAccelerationStructureTypeNV {harr}
118     elink:VkAccelerationStructureTypeKHR
119  ** elink:VkCopyAccelerationStructureModeNV {harr}
120     elink:VkCopyAccelerationStructureModeKHR
121  ** tlink:VkGeometryFlagsNV {harr} tlink:VkGeometryFlagsKHR
122  ** elink:VkGeometryFlagBitsNV {harr} elink:VkGeometryFlagBitsKHR
123  ** tlink:VkGeometryInstanceFlagsNV {harr} tlink:VkGeometryInstanceFlagsKHR
124  ** elink:VkGeometryInstanceFlagBitsNV {harr}
125     elink:VkGeometryInstanceFlagBitsKHR
126  ** tlink:VkBuildAccelerationStructureFlagsNV {harr}
127     tlink:VkBuildAccelerationStructureFlagsKHR
128  ** elink:VkBuildAccelerationStructureFlagBitsNV {harr}
129     elink:VkBuildAccelerationStructureFlagBitsKHR
130  ** slink:VkTransformMatrixNV {harr} slink:VkTransformMatrixKHR (added to
131     VK_NV_ray_tracing for descriptive purposes)
132  ** slink:VkAabbPositionsNV {harr} slink:VkAabbPositionsKHR (added to
133     VK_NV_ray_tracing for descriptive purposes)
134  ** slink:VkAccelerationStructureInstanceNV {harr}
135     slink:VkAccelerationStructureInstanceKHR (added to VK_NV_ray_tracing
136     for descriptive purposes)
137
138  * Changed enums, structures, and commands:
139  ** renamed ename:VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV ->
140     ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR in
141     elink:VkGeometryInstanceFlagBitsKHR
142  ** slink:VkGeometryTrianglesNV ->
143     slink:VkAccelerationStructureGeometryTrianglesDataKHR (device or host
144     address instead of buffer+offset)
145  ** slink:VkGeometryAABBNV ->
146     slink:VkAccelerationStructureGeometryAabbsDataKHR (device or host
147     address instead of buffer+offset)
148  ** slink:VkGeometryDataNV -> slink:VkAccelerationStructureGeometryDataKHR
149     (union of triangle/aabbs/instances)
150  ** slink:VkGeometryNV -> slink:VkAccelerationStructureGeometryKHR (changed
151     type of geometry)
152  ** slink:VkAccelerationStructureCreateInfoNV ->
153     slink:VkAccelerationStructureCreateInfoKHR (reshuffle geometry
154     layout/information)
155  ** slink:VkPhysicalDeviceRayTracingPropertiesNV ->
156     slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR (for
157     acceleration structure properties, renamed pname:maxTriangleCount to
158     pname:maxPrimitiveCount, added per stage and update after bind limits)
159     and slink:VkPhysicalDeviceRayTracingPipelinePropertiesKHR (for ray
160     tracing pipeline properties)
161  ** slink:VkAccelerationStructureMemoryRequirementsInfoNV (deleted -
162     replaced by allocating on top of slink:VkBuffer)
163  ** slink:VkWriteDescriptorSetAccelerationStructureNV ->
164     slink:VkWriteDescriptorSetAccelerationStructureKHR (different
165     acceleration structure type)
166  ** flink:vkCreateAccelerationStructureNV ->
167     flink:vkCreateAccelerationStructureKHR (device address, different
168     geometry layout/information)
169  ** flink:vkGetAccelerationStructureMemoryRequirementsNV (deleted -
170     replaced by allocating on top of slink:VkBuffer)
171  ** flink:vkCmdBuildAccelerationStructureNV ->
172     flink:vkCmdBuildAccelerationStructuresKHR (params moved to structs,
173     layout differences)
174  ** flink:vkCmdCopyAccelerationStructureNV ->
175     flink:vkCmdCopyAccelerationStructureKHR (params to struct, extendable)
176  ** flink:vkGetAccelerationStructureHandleNV ->
177     flink:vkGetAccelerationStructureDeviceAddressKHR (device address
178     instead of handle)
179  ** elink:VkAccelerationStructureMemoryRequirementsTypeNV -> size queries
180     for scratch space moved to
181     flink:vkGetAccelerationStructureBuildSizesKHR
182  ** flink:vkDestroyAccelerationStructureNV ->
183     flink:vkDestroyAccelerationStructureKHR (different acceleration
184     structure types)
185  ** flink:vkCmdWriteAccelerationStructuresPropertiesNV ->
186     flink:vkCmdWriteAccelerationStructuresPropertiesKHR (different
187     acceleration structure types)
188  * Added enums, structures and commands:
189  ** ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to elink:VkGeometryTypeKHR enum
190  ** ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR,
191     ename:VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR to
192     elink:VkCopyAccelerationStructureModeKHR enum
193  ** slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure
194  ** elink:VkAccelerationStructureBuildTypeKHR enum
195  ** elink:VkBuildAccelerationStructureModeKHR enum
196  ** slink:VkDeviceOrHostAddressKHR and slink:VkDeviceOrHostAddressConstKHR
197     unions
198  ** slink:VkAccelerationStructureBuildRangeInfoKHR struct
199  ** slink:VkAccelerationStructureGeometryInstancesDataKHR struct
200  ** slink:VkAccelerationStructureDeviceAddressInfoKHR struct
201  ** slink:VkAccelerationStructureVersionInfoKHR struct
202  ** slink:VkStridedDeviceAddressRegionKHR struct
203  ** slink:VkCopyAccelerationStructureToMemoryInfoKHR struct
204  ** slink:VkCopyMemoryToAccelerationStructureInfoKHR struct
205  ** slink:VkCopyAccelerationStructureInfoKHR struct
206  ** flink:vkBuildAccelerationStructuresKHR command (host build)
207  ** flink:vkCopyAccelerationStructureKHR command (host copy)
208  ** flink:vkCopyAccelerationStructureToMemoryKHR (host serialize)
209  ** flink:vkCopyMemoryToAccelerationStructureKHR (host deserialize)
210  ** flink:vkWriteAccelerationStructuresPropertiesKHR (host properties)
211  ** flink:vkCmdCopyAccelerationStructureToMemoryKHR (device serialize)
212  ** flink:vkCmdCopyMemoryToAccelerationStructureKHR (device deserialize)
213  ** flink:vkGetDeviceAccelerationStructureCompatibilityKHR (serialization)
214
215--
216endif::VK_NV_ray_tracing[]
217
218(3) What are the changes between the public provisional (VK_KHR_ray_tracing
219v8) release and the internal provisional (VK_KHR_ray_tracing v9) release?
220--
221  * added pname:geometryFlags to
222    stext:VkAccelerationStructureCreateGeometryTypeInfoKHR (later reworked
223    to obsolete this)
224  * added pname:minAccelerationStructureScratchOffsetAlignment property to
225    VkPhysicalDeviceRayTracingPropertiesKHR
226  * fix naming and return enum from
227    flink:vkGetDeviceAccelerationStructureCompatibilityKHR
228  ** renamed stext:VkAccelerationStructureVersionKHR to
229     slink:VkAccelerationStructureVersionInfoKHR
230  ** renamed etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR to
231     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
232  ** removed etext:VK_ERROR_INCOMPATIBLE_VERSION_KHR
233  ** added elink:VkAccelerationStructureCompatibilityKHR enum
234  ** remove return value from
235     flink:vkGetDeviceAccelerationStructureCompatibilityKHR and added return
236     enum parameter
237  * Require Vulkan 1.1
238  * added creation time capture and replay flags
239  ** added elink:VkAccelerationStructureCreateFlagBitsKHR and
240     tlink:VkAccelerationStructureCreateFlagsKHR
241  ** renamed the pname:flags member of
242     slink:VkAccelerationStructureCreateInfoKHR to pname:buildFlags (later
243     removed) and added the pname:createFlags member
244  * change flink:vkCmdBuildAccelerationStructuresIndirectKHR to use buffer
245    device address for indirect parameter
246  * make `apiext:VK_KHR_deferred_host_operations` an interaction instead of
247    a required extension (later went back on this)
248  * renamed stext:VkAccelerationStructureBuildOffsetInfoKHR to
249    slink:VkAccelerationStructureBuildRangeInfoKHR
250  ** renamed the pname:ppOffsetInfos parameter of
251     flink:vkCmdBuildAccelerationStructuresKHR to pname:ppBuildRangeInfos
252  * Re-unify geometry description between build and create
253  ** remove stext:VkAccelerationStructureCreateGeometryTypeInfoKHR and
254     etext:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
255  ** added stext:VkAccelerationStructureCreateSizeInfoKHR structure (later
256     removed)
257  ** change type of the pname:pGeometryInfos member of
258     slink:VkAccelerationStructureCreateInfoKHR from
259     stext:VkAccelerationStructureCreateGeometryTypeInfoKHR to
260     slink:VkAccelerationStructureGeometryKHR (later removed)
261  ** added pname:pCreateSizeInfos member to
262     slink:VkAccelerationStructureCreateInfoKHR (later removed)
263  * Fix ppGeometries ambiguity, add pGeometries
264  ** remove pname:geometryArrayOfPointers member of
265     VkAccelerationStructureBuildGeometryInfoKHR
266  ** disambiguate two meanings of pname:ppGeometries by explicitly adding
267     pname:pGeometries to the
268     slink:VkAccelerationStructureBuildGeometryInfoKHR structure and require
269     one of them be `NULL`
270  * added <<features-nullDescriptor,nullDescriptor>> support for
271    acceleration structures
272  * changed the pname:update member of
273    slink:VkAccelerationStructureBuildGeometryInfoKHR from a bool to the
274    pname:mode elink:VkBuildAccelerationStructureModeKHR enum which allows
275    future extensibility in update types
276  * Clarify deferred host ops for pipeline creation
277  ** slink:VkDeferredOperationKHR is now a top-level parameter for
278     flink:vkBuildAccelerationStructuresKHR,
279     flink:vkCreateRayTracingPipelinesKHR,
280     flink:vkCopyAccelerationStructureToMemoryKHR,
281     flink:vkCopyAccelerationStructureKHR, and
282     flink:vkCopyMemoryToAccelerationStructureKHR
283  ** removed stext:VkDeferredOperationInfoKHR structure
284  ** change deferred host creation/return parameter behavior such that the
285     implementation can modify such parameters until the deferred host
286     operation completes
287  ** `apiext:VK_KHR_deferred_host_operations` is required again
288  * Change acceleration structure build to always be sized
289  ** de-alias ename:VkAccelerationStructureMemoryRequirementsTypeNV and
290     etext:VkAccelerationStructureMemoryRequirementsTypeKHR, and remove
291     etext:VkAccelerationStructureMemoryRequirementsTypeKHR
292  ** add flink:vkGetAccelerationStructureBuildSizesKHR command and
293     slink:VkAccelerationStructureBuildSizesInfoKHR structure and
294     ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
295     enum to query sizes for acceleration structures and scratch storage
296  ** move size queries for scratch space to
297     flink:vkGetAccelerationStructureBuildSizesKHR
298  ** remove pname:compactedSize, pname:buildFlags, pname:maxGeometryCount,
299     pname:pGeometryInfos, pname:pCreateSizeInfos members of
300     slink:VkAccelerationStructureCreateInfoKHR and add the pname:size
301     member
302  ** add pname:maxVertex member to
303     slink:VkAccelerationStructureGeometryTrianglesDataKHR structure
304  ** remove stext:VkAccelerationStructureCreateSizeInfoKHR structure
305--
306
307(4) What are the changes between the internal provisional
308(VK_KHR_ray_tracing v9) release and the final (VK_KHR_acceleration_structure
309v11) release?
310--
311  * refactor VK_KHR_ray_tracing into 3 extensions, enabling implementation
312    flexibility and decoupling ray query support from ray pipelines:
313  ** `apiext:VK_KHR_acceleration_structure` (for acceleration structure
314     operations)
315  ** `apiext:VK_KHR_ray_tracing_pipeline` (for ray tracing pipeline and
316     shader stages)
317  ** `apiext:VK_KHR_ray_query` (for ray queries in existing shader stages)
318  * clarify buffer usage flags for ray tracing
319  ** ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV is left alone in
320     `apiext:VK_NV_ray_tracing` (required on pname:scratch and
321     pname:instanceData)
322  ** ename:VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR is added as an alias
323     of ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV in
324     `apiext:VK_KHR_ray_tracing_pipeline` and is required on shader binding
325     table buffers
326  ** ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
327     is added in `apiext:VK_KHR_acceleration_structure` for all vertex,
328     index, transform, aabb, and instance buffer data referenced by device
329     build commands
330  ** ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT is used for pname:scratchData
331  * add max primitive counts (pname:ppMaxPrimitiveCounts) to
332    flink:vkCmdBuildAccelerationStructuresIndirectKHR
333  * Allocate acceleration structures from stext:VkBuffers and add a mode to
334    constrain the device address
335  ** de-alias sname:VkBindAccelerationStructureMemoryInfoNV and
336     fname:vkBindAccelerationStructureMemoryNV, and remove
337     stext:VkBindAccelerationStructureMemoryInfoKHR,
338     stext:VkAccelerationStructureMemoryRequirementsInfoKHR, and
339     ftext:vkGetAccelerationStructureMemoryRequirementsKHR
340  ** acceleration structures now take a slink:VkBuffer and offset at
341     creation time for memory placement
342  ** add a new ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
343     buffer usage for such buffers
344  ** add a new ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR acceleration
345     structure type for layering
346  * move ename:VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum instead of being
347    added via extension
348  * make build commands more consistent - all now build multiple
349    acceleration structures and are named plurally
350    (flink:vkCmdBuildAccelerationStructuresIndirectKHR,
351    flink:vkCmdBuildAccelerationStructuresKHR,
352    flink:vkBuildAccelerationStructuresKHR)
353  * add interactions with
354    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT for
355    acceleration structures, including a new feature
356    (pname:descriptorBindingAccelerationStructureUpdateAfterBind) and 3 new
357    properties (pname:maxPerStageDescriptorAccelerationStructures,
358    pname:maxPerStageDescriptorUpdateAfterBindAccelerationStructures,
359    pname:maxDescriptorSetUpdateAfterBindAccelerationStructures)
360  * extension is no longer provisional
361  * define synchronization requirements for builds, traces, and copies
362  * define synchronization requirements for AS build inputs and indirect
363    build buffer
364--
365
366(5) What is ename:VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR for?
367--
368*RESOLVED*: It is primarily intended for API layering.
369In DXR, the acceleration structure is basically just a buffer in a special
370layout, and you do not know at creation time whether it will be used as a
371top or bottom level acceleration structure.
372We thus added a generic acceleration structure type whose type is unknown at
373creation time, but is specified at build time instead.
374Applications which are written directly for Vulkan should not use it.
375--
376
377=== Version History
378  * Revision 1, 2019-12-05 (Members of the Vulkan Ray Tracing TSG)
379    - Internal revisions (forked from VK_NV_ray_tracing)
380  * Revision 2, 2019-12-20 (Daniel Koch, Eric Werness)
381    - Add const version of DeviceOrHostAddress (!3515)
382    - Add VU to clarify that only handles in the current pipeline are valid
383      (!3518)
384    - Restore some missing VUs and add in-place update language (#1902,
385      !3522)
386    - rename VkAccelerationStructureInstanceKHR member from
387      accelerationStructure to accelerationStructureReference to better
388      match its type (!3523)
389    - Allow VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS for pipeline creation if
390      shader group handles cannot be reused (!3523)
391    - update documentation for the VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS
392      error code and add missing documentation for new return codes from
393      VK_KHR_deferred_host_operations (!3523)
394    - list new query types for VK_KHR_ray_tracing (!3523)
395    - Fix VU statements for VkAccelerationStructureGeometryKHR referring to
396      correct union members and update to use more current wording (!3523)
397  * Revision 3, 2020-01-10 (Daniel Koch, Jon Leech, Christoph Kubisch)
398    - Fix 'instance of' and 'that/which contains/defines' markup issues
399      (!3528)
400    - factor out VK_KHR_pipeline_library as stand-alone extension (!3540)
401    - Resolve Vulkan-hpp issues (!3543)
402      - add missing require for VkGeometryInstanceFlagsKHR
403      - de-alias VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
404        since the KHR structure is no longer equivalent
405      - add len to pDataSize attribute for
406        vkWriteAccelerationStructuresPropertiesKHR
407  * Revision 4, 2020-01-23 (Daniel Koch, Eric Werness)
408    - Improve vkWriteAccelerationStructuresPropertiesKHR, add return value
409      and VUs (#1947)
410    - Clarify language to allow multiple raygen shaders (#1959)
411    - Various editorial feedback (!3556)
412    - Add language to help deal with looped self-intersecting fans (#1901)
413    - Change vkCmdTraceRays{Indirect}KHR args to pointers (!3559)
414    - Add scratch address validation language (#1941, !3551)
415    - Fix definition and add hierarchy information for shader call scope
416      (#1977, !3571)
417  * Revision 5, 2020-02-04 (Eric Werness, Jeff Bolz, Daniel Koch)
418    - remove vestigial accelerationStructureUUID (!3582)
419    - update definition of repack instructions and improve memory model
420      interactions (#1910, #1913, !3584)
421    - Fix wrong sType for VkPhysicalDeviceRayTracingFeaturesKHR (#1988)
422    - Use provisional SPIR-V capabilities (#1987)
423    - require rayTraversalPrimitiveCulling if rayQuery is supported (#1927)
424    - Miss shaders do not have object parameters (!3592)
425    - Fix missing required types in XML (!3592)
426    - clarify matching conditions for update (!3592)
427    - add goal that host and device builds be similar (!3592)
428    - clarify that pname:maxPrimitiveCount limit should apply to triangles
429      and AABBs (!3592)
430    - Require alignment for instance arrayOfPointers (!3592)
431    - Zero is a valid value for instance flags (!3592)
432    - Add some alignment VUs that got lost in refactoring (!3592)
433    - Recommend TMin epsilon rather than culling (!3592)
434    - Get angle from dot product not cross product (!3592)
435    - Clarify that AH can access the payload and attributes (!3592)
436    - Match DXR behavior for inactive primitive definition (!3592)
437    - Use a more generic term than degenerate for inactive to avoid
438      confusion (!3592)
439  * Revision 6, 2020-02-20 (Daniel Koch)
440    - fix some dangling NV references (#1996)
441    - rename VkCmdTraceRaysIndirectCommandKHR to
442      VkTraceRaysIndirectCommandKHR (!3607)
443    - update contributor list (!3611)
444    - use uint64_t instead of VkAccelerationStructureReferenceKHR in
445      VkAccelerationStructureInstanceKHR (#2004)
446  * Revision 7, 2020-02-28 (Tobias Hector)
447    - remove HitTKHR SPIR-V builtin (spirv/spirv-extensions#7)
448  * Revision 8, 2020-03-06 (Tobias Hector, Dae Kim, Daniel Koch, Jeff Bolz,
449    Eric Werness)
450    - explicitly state that Tmax is updated when new closest intersection is
451      accepted (#2020,!3536)
452    - Made references to min and max t values consistent (!3644)
453    - finish enumerating differences relative to VK_NV_ray_tracing in issues
454      (1) and (2) (#1974,!3642)
455    - fix formatting in some math equations (!3642)
456    - Restrict the Hit Kind operand of code:OpReportIntersectionKHR to
457      7-bits (spirv/spirv-extensions#8,!3646)
458    - Say ray tracing 'should:' be watertight (#2008,!3631)
459    - Clarify memory requirements for ray tracing buffers (#2005,!3649)
460    - Add callable size limits (#1997,!3652)
461  * Revision 9, 2020-04-15 (Eric Werness, Daniel Koch, Tobias Hector, Joshua
462    Barczak)
463    - Add geometry flags to acceleration structure creation (!3672)
464    - add build scratch memory alignment
465      (minAccelerationStructureScratchOffsetAlignment) (#2065,!3725)
466    - fix naming and return enum from
467      vkGetDeviceAccelerationStructureCompatibilityKHR (#2051,!3726)
468    - require SPIR-V 1.4 (#2096,!3777)
469    - added creation time capture/replay flags (#2104,!3774)
470    - require Vulkan 1.1 (#2133,!3806)
471    - use device addresses instead of VkBuffers for ray tracing commands
472      (#2074,!3815)
473    - add interactions with Vulkan 1.2 and VK_KHR_vulkan_memory_model
474      (#2133,!3830)
475    - make VK_KHR_pipeline_library an interaction instead of required
476      (#2045,#2108,!3830)
477    - make VK_KHR_deferred_host_operations an interaction instead of
478      required (#2045,!3830)
479    - removed maxCallableSize and added explicit stack size management for
480      ray pipelines (#1997,!3817,!3772,!3844)
481    - improved documentation for VkAccelerationStructureVersionInfoKHR
482      (#2135,3835)
483    - rename VkAccelerationStructureBuildOffsetInfoKHR to
484      VkAccelerationStructureBuildRangeInfoKHR (#2058,!3754)
485    - Re-unify geometry description between build and create (!3754)
486    - Fix ppGeometries ambiguity, add pGeometries (#2032,!3811)
487    - add interactions with VK_EXT_robustness2 and allow nullDescriptor
488      support for acceleration structures (#1920,!3848)
489    - added future extensibility for AS updates (#2114,!3849)
490    - Fix VU for dispatchrays and add a limit on the size of the full grid
491      (#2160,!3851)
492    - Add shaderGroupHandleAlignment property (#2180,!3875)
493    - Clarify deferred host ops for pipeline creation (#2067,!3813)
494    - Change acceleration structure build to always be sized
495      (#2131,#2197,#2198,!3854,!3883,!3880)
496  * Revision 10, 2020-07-03 (Mathieu Robart, Daniel Koch, Eric Werness,
497    Tobias Hector)
498    - Decomposition of the specification, from VK_KHR_ray_tracing to
499      VK_KHR_acceleration_structure (#1918,!3912)
500    - clarify buffer usage flags for ray tracing (#2181,!3939)
501    - add max primitive counts to build indirect command (#2233,!3944)
502    - Allocate acceleration structures from VkBuffers and add a mode to
503      constrain the device address (#2131,!3936)
504    - Move VK_GEOMETRY_TYPE_INSTANCES_KHR to main enum (#2243,!3952)
505    - make build commands more consistent (#2247,!3958)
506    - add interactions with UPDATE_AFTER_BIND (#2128,!3986)
507    - correct and expand build command VUs (!4020)
508    - fix copy command VUs (!4018)
509    - added various alignment requirements (#2229,!3943)
510    - fix valid usage for arrays of geometryCount items (#2198,!4010)
511    - define what is allowed to change on RTAS updates and relevant VUs
512      (#2177,!3961)
513  * Revision 11, 2020-11-12 (Eric Werness, Josh Barczak, Daniel Koch, Tobias
514    Hector)
515    - de-alias NV and KHR acceleration structure types and associated
516      commands (#2271,!4035)
517    - specify alignment for host copy commands (#2273,!4037)
518    - document
519      ename:VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
520    - specify that acceleration structures are non-linear (#2289,!4068)
521    - add several missing VUs for strides, vertexFormat, and indexType
522      (#2315,!4069)
523    - restore VUs for VkAccelerationStructureBuildGeometryInfoKHR
524      (#2337,!4098)
525    - ban multi-instance memory for host operations (#2324,!4102)
526    - allow dstAccelerationStructure to be null for
527      vkGetAccelerationStructureBuildSizesKHR (#2330,!4111)
528    - more build VU cleanup (#2138,#4130)
529    - specify host endianness for AS serialization (#2261,!4136)
530    - add invertible transform matrix VU (#1710,!4140)
531    - require geometryCount to be 1 for TLAS builds (!4145)
532    - improved validity conditions for build addresses (#4142)
533    - add single statement SPIR-V VUs, build limit VUs (!4158)
534    - document limits for vertex and aabb strides (#2390,!4184)
535    - specify that
536      ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR applies
537      to AS copies (#2382,#4173)
538    - define sync for AS build inputs and indirect buffer (#2407,!4208)
539  * Revision 12, 2021-08-06 (Samuel Bourasseau)
540    - rename VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR to
541      VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR (keep previous as
542      alias).
543    - Clarify description and add note.
544  * Revision 13, 2021-09-30 (Jon Leech)
545    - Add interaction with `apiext:VK_KHR_format_feature_flags2` to `vk.xml`
546