// Copyright 2017-2022 The Khronos Group Inc. // // SPDX-License-Identifier: CC-BY-4.0 include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.adoc[] === 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.adoc[] === 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 <> * added slink:VkPhysicalDeviceAccelerationStructureFeaturesKHR structure * added indirect and batched acceleration structure builds (flink:vkCmdBuildAccelerationStructuresIndirectKHR) * added <> 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 comparison of differences and similarities between VK_NV_ray_tracing and VK_KHR_acceleration_structure? -- *DISCUSSION*: The following is a more detailed comparison 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 <> 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`