1// Copyright 2017-2022 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5include::{generated}/meta/{refprefix}VK_KHR_acceleration_structure.adoc[] 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.adoc[] 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 comparison of differences and similarities 107between VK_NV_ray_tracing and VK_KHR_acceleration_structure? 108-- 109*DISCUSSION*: 110 111The following is a more detailed comparison 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, pname: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 match 388 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 since 404 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 confusion 438 (!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 7-bits 457 (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 required 478 (#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 to 537 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