blob: a911305167e998a09231cbe53099bc903c8f5366 [file] [log] [blame]
// 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`