Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_KHR_acceleration_structure - device extension
VK_KHR_acceleration_structure
- Name String
VK_KHR_acceleration_structure
- Extension Type
- Device extension
- Registered Extension Number
- 151
- Revision
- 11
- Extension and Version Dependencies
- Requires Vulkan 1.1
- Requires
VK_EXT_descriptor_indexing
- Requires
VK_KHR_buffer_device_address
- Requires
VK_KHR_deferred_host_operations
- Contact
Other Extension Metadata
- Last Modified Date
- 2020-11-12
- Contributors
- 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
New Object Types
New Commands
cmdBuildAccelerationStructuresIndirectKHR
cmdBuildAccelerationStructuresKHR
cmdCopyAccelerationStructureKHR
cmdCopyAccelerationStructureToMemoryKHR
cmdCopyMemoryToAccelerationStructureKHR
cmdWriteAccelerationStructuresPropertiesKHR
copyAccelerationStructureKHR
copyAccelerationStructureToMemoryKHR
copyMemoryToAccelerationStructureKHR
createAccelerationStructureKHR
destroyAccelerationStructureKHR
getAccelerationStructureBuildSizesKHR
getAccelerationStructureDeviceAddressKHR
getDeviceAccelerationStructureCompatibilityKHR
writeAccelerationStructuresPropertiesKHR
New Structures
AccelerationStructureBuildGeometryInfoKHR
AccelerationStructureBuildRangeInfoKHR
AccelerationStructureBuildSizesInfoKHR
AccelerationStructureCreateInfoKHR
AccelerationStructureDeviceAddressInfoKHR
AccelerationStructureGeometryAabbsDataKHR
AccelerationStructureGeometryInstancesDataKHR
AccelerationStructureGeometryKHR
AccelerationStructureGeometryTrianglesDataKHR
AccelerationStructureInstanceKHR
AccelerationStructureVersionInfoKHR
CopyAccelerationStructureInfoKHR
CopyAccelerationStructureToMemoryInfoKHR
CopyMemoryToAccelerationStructureInfoKHR
TransformMatrixKHR
Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:Extending
WriteDescriptorSet
:
New Unions
New Enums
AccelerationStructureCompatibilityKHR
AccelerationStructureCreateFlagBitsKHR
AccelerationStructureTypeKHR
BuildAccelerationStructureFlagBitsKHR
BuildAccelerationStructureModeKHR
CopyAccelerationStructureModeKHR
GeometryFlagBitsKHR
GeometryInstanceFlagBitsKHR
GeometryTypeKHR
New Bitmasks
New Enum Constants
KHR_ACCELERATION_STRUCTURE_SPEC_VERSION
Extending
AccessFlagBits
:Extending
BufferUsageFlagBits
:Extending
DebugReportObjectTypeEXT
:Extending
DescriptorType
:Extending
FormatFeatureFlagBits
:Extending
IndexType
:Extending
ObjectType
:Extending
PipelineStageFlagBits
:Extending
QueryType
:Extending
StructureType
:STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR
STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR
STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR
STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR
STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR
Issues
- 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
(
COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
,COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
,cmdCopyAccelerationStructureToMemoryKHR
,cmdCopyMemoryToAccelerationStructureKHR
) - document inactive primitives and instances
- added
PhysicalDeviceAccelerationStructureFeaturesKHR
structure - added indirect and batched acceleration structure builds
(
cmdBuildAccelerationStructuresIndirectKHR
) - added host acceleration structure commands
- reworked geometry structures so they could be better shared between device, host, and indirect builds
- explicitly made
AccelerationStructureKHR
use device addresses - added acceleration structure compatibility check function
(
getDeviceAccelerationStructureCompatibilityKHR
) - add parameter for requesting memory requirements for host and/or device build
- added format feature for acceleration structure build vertex formats
(
FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
)
- 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:
GeometryTypeNV
↔GeometryTypeKHR
AccelerationStructureTypeNV
↔AccelerationStructureTypeKHR
CopyAccelerationStructureModeNV
↔CopyAccelerationStructureModeKHR
GeometryFlagsNV
↔GeometryFlagsKHR
GeometryFlagBitsNV
↔GeometryFlagBitsKHR
GeometryInstanceFlagsNV
↔GeometryInstanceFlagsKHR
GeometryInstanceFlagBitsNV
↔GeometryInstanceFlagBitsKHR
BuildAccelerationStructureFlagsNV
↔BuildAccelerationStructureFlagsKHR
BuildAccelerationStructureFlagBitsNV
↔BuildAccelerationStructureFlagBitsKHR
TransformMatrixNV
↔TransformMatrixKHR
(added to VK_NV_ray_tracing for descriptive purposes)AabbPositionsNV
↔AabbPositionsKHR
(added to VK_NV_ray_tracing for descriptive purposes)AccelerationStructureInstanceNV
↔AccelerationStructureInstanceKHR
(added to VK_NV_ray_tracing for descriptive purposes)
Changed enums, structures, and commands:
- renamed
GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV
→GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR
inGeometryInstanceFlagBitsKHR
GeometryTrianglesNV
→AccelerationStructureGeometryTrianglesDataKHR
(device or host address instead of buffer+offset)GeometryAABBNV
→AccelerationStructureGeometryAabbsDataKHR
(device or host address instead of buffer+offset)GeometryDataNV
→AccelerationStructureGeometryDataKHR
(union of triangle/aabbs/instances)GeometryNV
→AccelerationStructureGeometryKHR
(changed type of geometry)AccelerationStructureCreateInfoNV
→AccelerationStructureCreateInfoKHR
(reshuffle geometry layout/info)PhysicalDeviceRayTracingPropertiesNV
→PhysicalDeviceAccelerationStructurePropertiesKHR
(for acceleration structure properties, renamedmaxTriangleCount
tomaxPrimitiveCount
, added per stage and update after bind limits) andPhysicalDeviceRayTracingPipelinePropertiesKHR
(for ray tracing pipeline properties)AccelerationStructureMemoryRequirementsInfoNV
(deleted - replaced by allocating on top ofBuffer
)WriteDescriptorSetAccelerationStructureNV
→WriteDescriptorSetAccelerationStructureKHR
(different acceleration structure type)createAccelerationStructureNV
→createAccelerationStructureKHR
(device address, different geometry layout/info)getAccelerationStructureMemoryRequirementsNV
(deleted - replaced by allocating on top ofBuffer
)cmdBuildAccelerationStructureNV
→cmdBuildAccelerationStructuresKHR
(params moved to structs, layout differences)cmdCopyAccelerationStructureNV
→cmdCopyAccelerationStructureKHR
(params to struct, extendable)getAccelerationStructureHandleNV
→getAccelerationStructureDeviceAddressKHR
(device address instead of handle)AccelerationStructureMemoryRequirementsTypeNV
→ size queries for scratch space moved togetAccelerationStructureBuildSizesKHR
destroyAccelerationStructureNV
→destroyAccelerationStructureKHR
(different acceleration structure types)cmdWriteAccelerationStructuresPropertiesNV
→cmdWriteAccelerationStructuresPropertiesKHR
(different acceleration structure types)
- renamed
Added enums, structures and commands:
GEOMETRY_TYPE_INSTANCES_KHR
toGeometryTypeKHR
enumCOPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
,COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
toCopyAccelerationStructureModeKHR
enumPhysicalDeviceAccelerationStructureFeaturesKHR
structureAccelerationStructureBuildTypeKHR
enumBuildAccelerationStructureModeKHR
enumDeviceOrHostAddressKHR
andDeviceOrHostAddressConstKHR
unionsAccelerationStructureBuildRangeInfoKHR
structAccelerationStructureGeometryInstancesDataKHR
structAccelerationStructureDeviceAddressInfoKHR
structAccelerationStructureVersionInfoKHR
structStridedDeviceAddressRegionKHR
structCopyAccelerationStructureToMemoryInfoKHR
structCopyMemoryToAccelerationStructureInfoKHR
structCopyAccelerationStructureInfoKHR
structbuildAccelerationStructuresKHR
command (host build)copyAccelerationStructureKHR
command (host copy)copyAccelerationStructureToMemoryKHR
(host serialize)copyMemoryToAccelerationStructureKHR
(host deserialize)writeAccelerationStructuresPropertiesKHR
(host properties)cmdCopyAccelerationStructureToMemoryKHR
(device serialize)cmdCopyMemoryToAccelerationStructureKHR
(device deserialize)getDeviceAccelerationStructureCompatibilityKHR
(serialization)
- 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
geometryFlags
toVkAccelerationStructureCreateGeometryTypeInfoKHR
(later reworked to obsolete this) - added
minAccelerationStructureScratchOffsetAlignment
property to VkPhysicalDeviceRayTracingPropertiesKHR fix naming and return enum from
getDeviceAccelerationStructureCompatibilityKHR
- renamed
VkAccelerationStructureVersionKHR
toAccelerationStructureVersionInfoKHR
- renamed
VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR
toSTRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR
- removed
VK_ERROR_INCOMPATIBLE_VERSION_KHR
- added
AccelerationStructureCompatibilityKHR
enum - remove return value from
getDeviceAccelerationStructureCompatibilityKHR
and added return enum parameter
- renamed
- Require Vulkan 1.1
added creation time capture and replay flags
- added
AccelerationStructureCreateFlagBitsKHR
andAccelerationStructureCreateFlagsKHR
- renamed the
flags
member ofAccelerationStructureCreateInfoKHR
tobuildFlags
(later removed) and added thecreateFlags
member
- added
- change
cmdBuildAccelerationStructuresIndirectKHR
to use buffer device address for indirect parameter - make VK_KHR_deferred_host_operations an interaction instead of a required extension (later went back on this)
renamed
VkAccelerationStructureBuildOffsetInfoKHR
toAccelerationStructureBuildRangeInfoKHR
- renamed the
ppOffsetInfos
parameter ofcmdBuildAccelerationStructuresKHR
toppBuildRangeInfos
- renamed the
Re-unify geometry description between build and create
- remove
VkAccelerationStructureCreateGeometryTypeInfoKHR
andVK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR
- added
VkAccelerationStructureCreateSizeInfoKHR
structure (later removed) - change type of the
pGeometryInfos
member ofAccelerationStructureCreateInfoKHR
fromVkAccelerationStructureCreateGeometryTypeInfoKHR
toAccelerationStructureGeometryKHR
(later removed) - added
pCreateSizeInfos
member toAccelerationStructureCreateInfoKHR
(later removed)
- remove
Fix ppGeometries ambiguity, add pGeometries
- remove
geometryArrayOfPointers
member of VkAccelerationStructureBuildGeometryInfoKHR - disambiguate two meanings of
ppGeometries
by explicitly addingpGeometries
to theAccelerationStructureBuildGeometryInfoKHR
structure and require one of them beNULL
- remove
- added nullDescriptor support for acceleration structures
- changed the
update
member ofAccelerationStructureBuildGeometryInfoKHR
from a bool to themode
BuildAccelerationStructureModeKHR
enum which allows future extensibility in update types Clarify deferred host ops for pipeline creation
DeferredOperationKHR
is now a top-level parameter forbuildAccelerationStructuresKHR
,createRayTracingPipelinesKHR
,copyAccelerationStructureToMemoryKHR
,copyAccelerationStructureKHR
, andcopyMemoryToAccelerationStructureKHR
- removed
VkDeferredOperationInfoKHR
structure - change deferred host creation/return parameter behavior such that the implementation can modify such parameters until the deferred host operation completes
- VK_KHR_deferred_host_operations is required again
Change acceleration structure build to always be sized
- de-alias
AccelerationStructureMemoryRequirementsTypeNV
andVkAccelerationStructureMemoryRequirementsTypeKHR
and removeVkAccelerationStructureMemoryRequirementsTypeKHR
- add
getAccelerationStructureBuildSizesKHR
command andAccelerationStructureBuildSizesInfoKHR
structure andSTRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR
enum to query sizes for acceleration structures and scratch storage - move size queries for scratch space to
getAccelerationStructureBuildSizesKHR
- remove
compactedSize
,buildFlags
,maxGeometryCount
,pGeometryInfos
,pCreateSizeInfos
members ofAccelerationStructureCreateInfoKHR
and add thesize
member - add
maxVertex
member toAccelerationStructureGeometryTrianglesDataKHR
structure - remove
VkAccelerationStructureCreateSizeInfoKHR
structure
- de-alias
- 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:
- VK_KHR_acceleration_structure (for acceleration structure operations)
- VK_KHR_ray_tracing_pipeline (for ray tracing pipeline and shader stages)
- VK_KHR_ray_query (for ray queries in existing shader stages)
clarify buffer usage flags for ray tracing
BUFFER_USAGE_RAY_TRACING_BIT_NV
is left alone in VK_NV_ray_tracing (required onscratch
andinstanceData
)BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR
is added as an alias ofBUFFER_USAGE_RAY_TRACING_BIT_NV
in VK_KHR_ray_tracing_pipeline and is required on shader binding table buffersBUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
is added in VK_KHR_acceleration_structure for all vertex, index, transform, aabb, and instance buffer data referenced by device build commandsBUFFER_USAGE_STORAGE_BUFFER_BIT
is used forscratchData
- add max primitive counts (
ppMaxPrimitiveCounts
) tocmdBuildAccelerationStructuresIndirectKHR
Allocate acceleration structures from
VkBuffers
and add a mode to constrain the device address- de-alias
BindAccelerationStructureMemoryInfoNV
,bindAccelerationStructureMemoryNV
, and removeVkBindAccelerationStructureMemoryInfoKHR
,VkAccelerationStructureMemoryRequirementsInfoKHR
, andvkGetAccelerationStructureMemoryRequirementsKHR
- acceleration structures now take a
Buffer
and offset at creation time for memory placement - add a new
BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
buffer usage such buffers - add a new
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
acceleration structure type for layering
- de-alias
- move
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
(
cmdBuildAccelerationStructuresIndirectKHR
,cmdBuildAccelerationStructuresKHR
,buildAccelerationStructuresKHR
) - add interactions with
DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT
for acceleration structures, including a new feature (descriptorBindingAccelerationStructureUpdateAfterBind
) and 3 new properties (maxPerStageDescriptorAccelerationStructures
,maxPerStageDescriptorUpdateAfterBindAccelerationStructures
,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
- What is
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 don’t 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 type 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 re-used. (!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 (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
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
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 (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 (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
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 (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
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
applies to AS copies (4173) - define sync for AS build inputs and indirect buffer (#2407,!4208)
See Also
AabbPositionsKHR
, AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureBuildRangeInfoKHR
,
AccelerationStructureBuildSizesInfoKHR
,
AccelerationStructureBuildTypeKHR
,
AccelerationStructureCompatibilityKHR
,
AccelerationStructureCreateFlagBitsKHR
,
AccelerationStructureCreateFlagsKHR
,
AccelerationStructureCreateInfoKHR
,
AccelerationStructureDeviceAddressInfoKHR
,
AccelerationStructureGeometryAabbsDataKHR
,
AccelerationStructureGeometryDataKHR
,
AccelerationStructureGeometryInstancesDataKHR
,
AccelerationStructureGeometryKHR
,
AccelerationStructureGeometryTrianglesDataKHR
,
AccelerationStructureInstanceKHR
,
AccelerationStructureKHR
,
AccelerationStructureTypeKHR
, AccelerationStructureVersionInfoKHR
,
BuildAccelerationStructureFlagBitsKHR
,
BuildAccelerationStructureFlagsKHR
,
BuildAccelerationStructureModeKHR
, CopyAccelerationStructureInfoKHR
,
CopyAccelerationStructureModeKHR
,
CopyAccelerationStructureToMemoryInfoKHR
,
CopyMemoryToAccelerationStructureInfoKHR
,
DeviceOrHostAddressConstKHR
, DeviceOrHostAddressKHR
,
GeometryFlagBitsKHR
, GeometryFlagsKHR
,
GeometryInstanceFlagBitsKHR
, GeometryInstanceFlagsKHR
,
GeometryTypeKHR
, PhysicalDeviceAccelerationStructureFeaturesKHR
,
PhysicalDeviceAccelerationStructurePropertiesKHR
,
TransformMatrixKHR
, WriteDescriptorSetAccelerationStructureKHR
,
buildAccelerationStructuresKHR
,
cmdBuildAccelerationStructuresIndirectKHR
,
cmdBuildAccelerationStructuresKHR
, cmdCopyAccelerationStructureKHR
,
cmdCopyAccelerationStructureToMemoryKHR
,
cmdCopyMemoryToAccelerationStructureKHR
,
cmdWriteAccelerationStructuresPropertiesKHR
,
copyAccelerationStructureKHR
, copyAccelerationStructureToMemoryKHR
,
copyMemoryToAccelerationStructureKHR
,
createAccelerationStructureKHR
, destroyAccelerationStructureKHR
,
getAccelerationStructureBuildSizesKHR
,
getAccelerationStructureDeviceAddressKHR
,
getDeviceAccelerationStructureCompatibilityKHR
,
writeAccelerationStructuresPropertiesKHR
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- destroyAccelerationStructureKHR :: forall io. MonadIO io => Device -> AccelerationStructureKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- cmdCopyAccelerationStructureKHR :: forall io. MonadIO io => CommandBuffer -> CopyAccelerationStructureInfoKHR -> io ()
- copyAccelerationStructureKHR :: forall io. MonadIO io => Device -> DeferredOperationKHR -> CopyAccelerationStructureInfoKHR -> io Result
- cmdCopyAccelerationStructureToMemoryKHR :: forall io. MonadIO io => CommandBuffer -> CopyAccelerationStructureToMemoryInfoKHR -> io ()
- copyAccelerationStructureToMemoryKHR :: forall io. MonadIO io => Device -> DeferredOperationKHR -> CopyAccelerationStructureToMemoryInfoKHR -> io Result
- cmdCopyMemoryToAccelerationStructureKHR :: forall io. MonadIO io => CommandBuffer -> CopyMemoryToAccelerationStructureInfoKHR -> io ()
- copyMemoryToAccelerationStructureKHR :: forall io. MonadIO io => Device -> DeferredOperationKHR -> CopyMemoryToAccelerationStructureInfoKHR -> io Result
- cmdWriteAccelerationStructuresPropertiesKHR :: forall io. MonadIO io => CommandBuffer -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> QueryPool -> ("firstQuery" ::: Word32) -> io ()
- writeAccelerationStructuresPropertiesKHR :: forall io. MonadIO io => Device -> ("accelerationStructures" ::: Vector AccelerationStructureKHR) -> QueryType -> ("dataSize" ::: Word64) -> ("data" ::: Ptr ()) -> ("stride" ::: Word64) -> io ()
- getDeviceAccelerationStructureCompatibilityKHR :: forall io. MonadIO io => Device -> AccelerationStructureVersionInfoKHR -> io AccelerationStructureCompatibilityKHR
- createAccelerationStructureKHR :: forall io. MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> ("allocator" ::: Maybe AllocationCallbacks) -> io AccelerationStructureKHR
- withAccelerationStructureKHR :: forall io r. MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r
- cmdBuildAccelerationStructuresKHR :: forall io. MonadIO io => CommandBuffer -> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) -> ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)) -> io ()
- cmdBuildAccelerationStructuresIndirectKHR :: forall io. MonadIO io => CommandBuffer -> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) -> ("indirectDeviceAddresses" ::: Vector DeviceAddress) -> ("indirectStrides" ::: Vector Word32) -> ("maxPrimitiveCounts" ::: Vector (Vector Word32)) -> io ()
- buildAccelerationStructuresKHR :: forall io. MonadIO io => Device -> DeferredOperationKHR -> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) -> ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)) -> io Result
- getAccelerationStructureDeviceAddressKHR :: forall io. MonadIO io => Device -> AccelerationStructureDeviceAddressInfoKHR -> io DeviceAddress
- getAccelerationStructureBuildSizesKHR :: forall io. MonadIO io => Device -> AccelerationStructureBuildTypeKHR -> ("buildInfo" ::: AccelerationStructureBuildGeometryInfoKHR) -> ("maxPrimitiveCounts" ::: Vector Word32) -> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR)
- data WriteDescriptorSetAccelerationStructureKHR = WriteDescriptorSetAccelerationStructureKHR {}
- data PhysicalDeviceAccelerationStructureFeaturesKHR = PhysicalDeviceAccelerationStructureFeaturesKHR {}
- data PhysicalDeviceAccelerationStructurePropertiesKHR = PhysicalDeviceAccelerationStructurePropertiesKHR {
- maxGeometryCount :: Word64
- maxInstanceCount :: Word64
- maxPrimitiveCount :: Word64
- maxPerStageDescriptorAccelerationStructures :: Word32
- maxPerStageDescriptorUpdateAfterBindAccelerationStructures :: Word32
- maxDescriptorSetAccelerationStructures :: Word32
- maxDescriptorSetUpdateAfterBindAccelerationStructures :: Word32
- minAccelerationStructureScratchOffsetAlignment :: Word32
- data AccelerationStructureGeometryTrianglesDataKHR = AccelerationStructureGeometryTrianglesDataKHR {}
- data AccelerationStructureGeometryAabbsDataKHR = AccelerationStructureGeometryAabbsDataKHR {}
- data AccelerationStructureGeometryInstancesDataKHR = AccelerationStructureGeometryInstancesDataKHR {}
- data AccelerationStructureGeometryKHR = AccelerationStructureGeometryKHR {}
- data AccelerationStructureBuildGeometryInfoKHR = AccelerationStructureBuildGeometryInfoKHR {
- type' :: AccelerationStructureTypeKHR
- flags :: BuildAccelerationStructureFlagsKHR
- mode :: BuildAccelerationStructureModeKHR
- srcAccelerationStructure :: AccelerationStructureKHR
- dstAccelerationStructure :: AccelerationStructureKHR
- geometryCount :: Word32
- geometries :: Vector AccelerationStructureGeometryKHR
- scratchData :: DeviceOrHostAddressKHR
- data AccelerationStructureBuildRangeInfoKHR = AccelerationStructureBuildRangeInfoKHR {}
- data AccelerationStructureCreateInfoKHR = AccelerationStructureCreateInfoKHR {}
- data AabbPositionsKHR = AabbPositionsKHR {}
- data TransformMatrixKHR = TransformMatrixKHR {
- matrixRow0 :: (Float, Float, Float, Float)
- matrixRow1 :: (Float, Float, Float, Float)
- matrixRow2 :: (Float, Float, Float, Float)
- data AccelerationStructureInstanceKHR = AccelerationStructureInstanceKHR {}
- data AccelerationStructureDeviceAddressInfoKHR = AccelerationStructureDeviceAddressInfoKHR {}
- data AccelerationStructureVersionInfoKHR = AccelerationStructureVersionInfoKHR {}
- data CopyAccelerationStructureInfoKHR = CopyAccelerationStructureInfoKHR {}
- data CopyAccelerationStructureToMemoryInfoKHR = CopyAccelerationStructureToMemoryInfoKHR {}
- data CopyMemoryToAccelerationStructureInfoKHR = CopyMemoryToAccelerationStructureInfoKHR {}
- data AccelerationStructureBuildSizesInfoKHR = AccelerationStructureBuildSizesInfoKHR {}
- data DeviceOrHostAddressKHR
- = DeviceAddress DeviceAddress
- | HostAddress (Ptr ())
- data DeviceOrHostAddressConstKHR
- data AccelerationStructureGeometryDataKHR
- type GeometryInstanceFlagsKHR = GeometryInstanceFlagBitsKHR
- newtype GeometryInstanceFlagBitsKHR where
- GeometryInstanceFlagBitsKHR Flags
- pattern GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR :: GeometryInstanceFlagBitsKHR
- pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR :: GeometryInstanceFlagBitsKHR
- pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR
- pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR
- type GeometryFlagsKHR = GeometryFlagBitsKHR
- newtype GeometryFlagBitsKHR where
- type BuildAccelerationStructureFlagsKHR = BuildAccelerationStructureFlagBitsKHR
- newtype BuildAccelerationStructureFlagBitsKHR where
- BuildAccelerationStructureFlagBitsKHR Flags
- pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR :: BuildAccelerationStructureFlagBitsKHR
- pattern BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR :: BuildAccelerationStructureFlagBitsKHR
- pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR :: BuildAccelerationStructureFlagBitsKHR
- pattern BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR :: BuildAccelerationStructureFlagBitsKHR
- pattern BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR :: BuildAccelerationStructureFlagBitsKHR
- type AccelerationStructureCreateFlagsKHR = AccelerationStructureCreateFlagBitsKHR
- newtype AccelerationStructureCreateFlagBitsKHR where
- newtype CopyAccelerationStructureModeKHR where
- CopyAccelerationStructureModeKHR Int32
- pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR :: CopyAccelerationStructureModeKHR
- pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR :: CopyAccelerationStructureModeKHR
- pattern COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR :: CopyAccelerationStructureModeKHR
- pattern COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR
- newtype BuildAccelerationStructureModeKHR where
- newtype AccelerationStructureTypeKHR where
- newtype GeometryTypeKHR where
- GeometryTypeKHR Int32
- pattern GEOMETRY_TYPE_TRIANGLES_KHR :: GeometryTypeKHR
- pattern GEOMETRY_TYPE_AABBS_KHR :: GeometryTypeKHR
- pattern GEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR
- newtype AccelerationStructureBuildTypeKHR where
- AccelerationStructureBuildTypeKHR Int32
- pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR :: AccelerationStructureBuildTypeKHR
- pattern ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR :: AccelerationStructureBuildTypeKHR
- pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR
- newtype AccelerationStructureCompatibilityKHR where
- type KHR_ACCELERATION_STRUCTURE_SPEC_VERSION = 11
- pattern KHR_ACCELERATION_STRUCTURE_SPEC_VERSION :: forall a. Integral a => a
- type KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME = "VK_KHR_acceleration_structure"
- pattern KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
- newtype AccelerationStructureKHR = AccelerationStructureKHR Word64
- newtype DeferredOperationKHR = DeferredOperationKHR Word64
- newtype DebugReportObjectTypeEXT where
- DebugReportObjectTypeEXT Int32
- pattern DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT :: DebugReportObjectTypeEXT
- pattern DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT :: DebugReportObjectTypeEXT
Documentation
destroyAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> AccelerationStructureKHR |
|
-> ("allocator" ::: Maybe AllocationCallbacks) |
|
-> io () |
vkDestroyAccelerationStructureKHR - Destroy an acceleration structure object
Valid Usage
-
If
AllocationCallbacks
were provided whenaccelerationStructure
was created, a compatible set of callbacks must be provided here -
If no
AllocationCallbacks
were provided whenaccelerationStructure
was created,pAllocator
must beNULL
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
If
accelerationStructure
is notNULL_HANDLE
,accelerationStructure
must be a validAccelerationStructureKHR
handle - If
pAllocator
is notNULL
,pAllocator
must be a valid pointer to a validAllocationCallbacks
structure -
If
accelerationStructure
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
accelerationStructure
must be externally synchronized
See Also
cmdCopyAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> CopyAccelerationStructureInfoKHR |
|
-> io () |
vkCmdCopyAccelerationStructureKHR - Copy an acceleration structure
Description
Accesses to pInfo
->src
and pInfo
->dst
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
or
ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
as appropriate.
Valid Usage
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pInfo
must be a valid pointer to a validCopyAccelerationStructureInfoKHR
structure -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
copyAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> DeferredOperationKHR |
|
-> CopyAccelerationStructureInfoKHR |
|
-> io Result |
vkCopyAccelerationStructureKHR - Copy an acceleration structure on the host
Description
This command fulfills the same task as cmdCopyAccelerationStructureKHR
but is executed by the host.
Valid Usage
- If
deferredOperation
is notNULL_HANDLE
, it must be a validDeferredOperationKHR
object
- Any
previous deferred operation that was associated with
deferredOperation
must be complete - The
buffer
used to createpInfo
->src
must be bound to host-visible device memory - The
buffer
used to createpInfo
->dst
must be bound to host-visible device memory - The ::accelerationStructureHostCommands feature must be enabled
- The
buffer
used to createpInfo
->src
must be bound to memory that was not allocated with multiple instances - The
buffer
used to createpInfo
->dst
must be bound to memory that was not allocated with multiple instances
Valid Usage (Implicit)
-
device
must be a validDevice
handle
- If
deferredOperation
is notNULL_HANDLE
,deferredOperation
must be a validDeferredOperationKHR
handle -
pInfo
must be a valid pointer to a validCopyAccelerationStructureInfoKHR
structure - If
deferredOperation
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
CopyAccelerationStructureInfoKHR
,
DeferredOperationKHR
,
Device
cmdCopyAccelerationStructureToMemoryKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> CopyAccelerationStructureToMemoryInfoKHR |
|
-> io () |
vkCmdCopyAccelerationStructureToMemoryKHR - Copy an acceleration structure to device memory
Description
Accesses to pInfo
->src
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
.
Accesses to the buffer indicated by pInfo
->dst.deviceAddress
must
be synchronized with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage and an access type of
ACCESS_TRANSFER_WRITE_BIT
.
This command produces the same results as
copyAccelerationStructureToMemoryKHR
, but writes its result to a
device address, and is executed on the device rather than the host. The
output may not necessarily be bit-for-bit identical, but it can be
equally used by either cmdCopyMemoryToAccelerationStructureKHR
or
copyMemoryToAccelerationStructureKHR
.
The defined header structure for the serialized data consists of:
UUID_SIZE
bytes of data matchingPhysicalDeviceIDProperties
::driverUUID
UUID_SIZE
bytes of data identifying the compatibility for comparison usinggetDeviceAccelerationStructureCompatibilityKHR
- A 64-bit integer of the total size matching the value queried using
QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
- A 64-bit integer of the deserialized size to be passed in to
AccelerationStructureCreateInfoKHR
::size
- A 64-bit integer of the count of the number of acceleration structure handles following. This will be zero for a bottom-level acceleration structure.
The corresponding handles matching the values returned by
getAccelerationStructureDeviceAddressKHR
or
getAccelerationStructureHandleNV
are tightly packed in the buffer following the count. The application is
expected to store a mapping between those handles and the original
application-generated bottom-level acceleration structures to provide
when deserializing. The serialized data is written to the buffer (or
read from the buffer) according to the host endianness.
Valid Usage
-
pInfo
->dst.deviceAddress
must be aligned to256
bytes - If the
buffer pointed to by
pInfo
->dst.deviceAddress
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object - The
buffer
used to createpInfo
->src
must be bound to device memory
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pInfo
must be a valid pointer to a validCopyAccelerationStructureToMemoryInfoKHR
structure -
commandBuffer
must be in the recording state -
The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
copyAccelerationStructureToMemoryKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> DeferredOperationKHR |
|
-> CopyAccelerationStructureToMemoryInfoKHR |
|
-> io Result |
vkCopyAccelerationStructureToMemoryKHR - Serialize an acceleration structure on the host
Description
This command fulfills the same task as
cmdCopyAccelerationStructureToMemoryKHR
but is executed by the host.
This command produces the same results as
cmdCopyAccelerationStructureToMemoryKHR
, but writes its result
directly to a host pointer, and is executed on the host rather than the
device. The output may not necessarily be bit-for-bit identical, but
it can be equally used by either
cmdCopyMemoryToAccelerationStructureKHR
or
copyMemoryToAccelerationStructureKHR
.
Valid Usage
-
If
deferredOperation
is notNULL_HANDLE
, it must be a validDeferredOperationKHR
object
-
Any previous deferred operation that was associated with
deferredOperation
must be complete - The
buffer
used to createpInfo
->src
must be bound to host-visible device memory -
pInfo
->dst.hostAddress
must be a valid host pointer -
pInfo
->dst.hostAddress
must be aligned to 16 bytes - The ::accelerationStructureHostCommands feature must be enabled
- The
buffer
used to createpInfo
->src
must be bound to memory that was not allocated with multiple instances
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
If
deferredOperation
is notNULL_HANDLE
,deferredOperation
must be a validDeferredOperationKHR
handle -
pInfo
must be a valid pointer to a validCopyAccelerationStructureToMemoryInfoKHR
structure -
If
deferredOperation
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
CopyAccelerationStructureToMemoryInfoKHR
,
DeferredOperationKHR
,
Device
cmdCopyMemoryToAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> CopyMemoryToAccelerationStructureInfoKHR |
|
-> io () |
vkCmdCopyMemoryToAccelerationStructureKHR - Copy device memory to an acceleration structure
Description
Accesses to pInfo
->dst
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
.
Accesses to the buffer indicated by pInfo
->src.deviceAddress
must
be synchronized with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage and an access type of
ACCESS_TRANSFER_READ_BIT
.
This command can accept acceleration structures produced by either
cmdCopyAccelerationStructureToMemoryKHR
or
copyAccelerationStructureToMemoryKHR
.
The structure provided as input to deserialize is as described in
cmdCopyAccelerationStructureToMemoryKHR
, with any acceleration
structure handles filled in with the newly-queried handles to bottom
level acceleration structures created before deserialization. These do
not need to be built at deserialize time, but must be created.
Valid Usage
-
pInfo
->src.deviceAddress
must be aligned to256
bytes - If the
buffer pointed to by
pInfo
->src.deviceAddress
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object - The
buffer
used to createpInfo
->dst
must be bound to device memory
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pInfo
must be a valid pointer to a validCopyMemoryToAccelerationStructureInfoKHR
structure -
commandBuffer
must be in the recording state -
The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
copyMemoryToAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> DeferredOperationKHR |
|
-> CopyMemoryToAccelerationStructureInfoKHR |
|
-> io Result |
vkCopyMemoryToAccelerationStructureKHR - Deserialize an acceleration structure on the host
Description
This command fulfills the same task as
cmdCopyMemoryToAccelerationStructureKHR
but is executed by the host.
This command can accept acceleration structures produced by either
cmdCopyAccelerationStructureToMemoryKHR
or
copyAccelerationStructureToMemoryKHR
.
Valid Usage
-
If
deferredOperation
is notNULL_HANDLE
, it must be a validDeferredOperationKHR
object
-
Any previous deferred operation that was associated with
deferredOperation
must be complete -
pInfo
->src.hostAddress
must be a valid host pointer -
pInfo
->src.hostAddress
must be aligned to 16 bytes - The
buffer
used to createpInfo
->dst
must be bound to host-visible device memory - The ::accelerationStructureHostCommands feature must be enabled
- The
buffer
used to createpInfo
->dst
must be bound to memory that was not allocated with multiple instances
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
If
deferredOperation
is notNULL_HANDLE
,deferredOperation
must be a validDeferredOperationKHR
handle -
pInfo
must be a valid pointer to a validCopyMemoryToAccelerationStructureInfoKHR
structure -
If
deferredOperation
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
CopyMemoryToAccelerationStructureInfoKHR
,
DeferredOperationKHR
,
Device
cmdWriteAccelerationStructuresPropertiesKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR) |
|
-> QueryType |
|
-> QueryPool |
|
-> ("firstQuery" ::: Word32) |
|
-> io () |
vkCmdWriteAccelerationStructuresPropertiesKHR - Write acceleration structure result parameters to query results.
Description
Accesses to any of the acceleration structures listed in
pAccelerationStructures
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
.
Valid Usage
-
The queries identified by
queryPool
andfirstQuery
must be unavailable -
The
buffer
used to create each acceleration structure inpAccelerationStructures
must be bound to device memory -
All acceleration structures in
pAccelerationStructures
must have been built withBUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
ifqueryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
-
queryType
must beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
orQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pAccelerationStructures
must be a valid pointer to an array ofaccelerationStructureCount
validAccelerationStructureKHR
handles -
queryType
must be a validQueryType
value -
queryPool
must be a validQueryPool
handle -
commandBuffer
must be in the recording state -
The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
-
accelerationStructureCount
must be greater than0
-
Each of
commandBuffer
,queryPool
, and the elements ofpAccelerationStructures
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
AccelerationStructureKHR
,
CommandBuffer
,
QueryPool
,
QueryType
writeAccelerationStructuresPropertiesKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> ("accelerationStructures" ::: Vector AccelerationStructureKHR) |
|
-> QueryType |
|
-> ("dataSize" ::: Word64) |
|
-> ("data" ::: Ptr ()) |
|
-> ("stride" ::: Word64) |
|
-> io () |
vkWriteAccelerationStructuresPropertiesKHR - Query acceleration structure meta-data on the host
Description
This command fulfills the same task as
cmdWriteAccelerationStructuresPropertiesKHR
but is executed by the
host.
Valid Usage
-
All acceleration structures in
pAccelerationStructures
must have been built withBUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
ifqueryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
-
queryType
must beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
orQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
- If
queryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
, thenstride
must be a multiple of the size ofDeviceSize
- If
queryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
, thendata
must point to aDeviceSize
- If
queryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
, thenstride
must be a multiple of the size ofDeviceSize
- If
queryType
isQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
, thendata
must point to aDeviceSize
-
dataSize
must be greater than or equal toaccelerationStructureCount
*stride
- The
buffer
used to create each acceleration structure inpAccelerationStructures
must be bound to host-visible device memory - The ::accelerationStructureHostCommands feature must be enabled
- The
buffer
used to create each acceleration structure inpAccelerationStructures
must be bound to memory that was not allocated with multiple instances
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
pAccelerationStructures
must be a valid pointer to an array ofaccelerationStructureCount
validAccelerationStructureKHR
handles -
queryType
must be a validQueryType
value -
pData
must be a valid pointer to an array ofdataSize
bytes -
accelerationStructureCount
must be greater than0
-
dataSize
must be greater than0
-
Each element of
pAccelerationStructures
must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
getDeviceAccelerationStructureCompatibilityKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> AccelerationStructureVersionInfoKHR |
|
-> io AccelerationStructureCompatibilityKHR |
vkGetDeviceAccelerationStructureCompatibilityKHR - Check if a serialized acceleration structure is compatible with the current device
Valid Usage
- The rayTracingPipeline or rayQuery feature must be enabled
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
pVersionInfo
must be a valid pointer to a validAccelerationStructureVersionInfoKHR
structure -
pCompatibility
must be a valid pointer to aAccelerationStructureCompatibilityKHR
value
See Also
AccelerationStructureCompatibilityKHR
,
AccelerationStructureVersionInfoKHR
, Device
createAccelerationStructureKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> AccelerationStructureCreateInfoKHR |
|
-> ("allocator" ::: Maybe AllocationCallbacks) |
|
-> io AccelerationStructureKHR |
vkCreateAccelerationStructureKHR - Create a new acceleration structure object
Description
Similar to other objects in Vulkan, the acceleration structure creation
merely creates an object with a specific “shape”. The type and quantity
of geometry that can be built into an acceleration structure is
determined by the parameters of AccelerationStructureCreateInfoKHR
.
Populating the data in the object after allocating and binding memory is
done with commands such as cmdBuildAccelerationStructuresKHR
,
buildAccelerationStructuresKHR
, cmdCopyAccelerationStructureKHR
, and
copyAccelerationStructureKHR
.
The input buffers passed to acceleration structure build commands will be referenced by the implementation for the duration of the command. After the command completes, the acceleration structure may hold a reference to any acceleration structure specified by an active instance contained therein. Apart from this referencing, acceleration structures must be fully self-contained. The application may re-use or free any memory which was used by the command as an input or as scratch without affecting the results of ray traversal.
Valid Usage
- The accelerationStructure feature must be enabled
- If
AccelerationStructureCreateInfoKHR
::deviceAddress
is not zero, the accelerationStructureCaptureReplay feature must be enabled - If
device
was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
pCreateInfo
must be a valid pointer to a validAccelerationStructureCreateInfoKHR
structure - If
pAllocator
is notNULL
,pAllocator
must be a valid pointer to a validAllocationCallbacks
structure -
pAccelerationStructure
must be a valid pointer to aAccelerationStructureKHR
handle
Return Codes
See Also
AccelerationStructureCreateInfoKHR
,
AccelerationStructureKHR
,
AllocationCallbacks
,
Device
withAccelerationStructureKHR :: forall io r. MonadIO io => Device -> AccelerationStructureCreateInfoKHR -> Maybe AllocationCallbacks -> (io AccelerationStructureKHR -> (AccelerationStructureKHR -> io ()) -> r) -> r Source #
A convenience wrapper to make a compatible pair of calls to
createAccelerationStructureKHR
and destroyAccelerationStructureKHR
To ensure that destroyAccelerationStructureKHR
is always called: pass
bracket
(or the allocate function from your
favourite resource management library) as the last argument.
To just extract the pair pass (,)
as the last argument.
cmdBuildAccelerationStructuresKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) |
|
-> ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)) |
|
-> io () |
vkCmdBuildAccelerationStructuresKHR - Build an acceleration structure
Description
The cmdBuildAccelerationStructuresKHR
command provides the ability to
initiate multiple acceleration structures builds, however there is no
ordering or synchronization implied between any of the individual
acceleration structure builds.
Note
This means that an application cannot build a top-level acceleration
structure in the same cmdBuildAccelerationStructuresKHR
call as the
associated bottom-level or instance acceleration structures are being
built. There also cannot be any memory aliasing between any
acceleration structure memories or scratch memories being used by any of
the builds.
Accesses to the acceleration structure scratch buffers as identified by
the AccelerationStructureBuildGeometryInfoKHR
→scratchData
buffer
device addresses must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
or
ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR
.
Similarly for accesses to each
AccelerationStructureBuildGeometryInfoKHR
→srcAccelerationStructure
and
AccelerationStructureBuildGeometryInfoKHR
→dstAccelerationStructure
.
Accesses to other input buffers as identified by any used values of
AccelerationStructureGeometryTrianglesDataKHR
→vertexData
,
AccelerationStructureGeometryTrianglesDataKHR
→indexData
,
AccelerationStructureGeometryTrianglesDataKHR
→transformData
,
AccelerationStructureGeometryAabbsDataKHR
→data
, and
AccelerationStructureGeometryInstancesDataKHR
→data
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of ACCESS_SHADER_READ_BIT
.
Valid Usage
- The
srcAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must be a validAccelerationStructureKHR
handle - For each
element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For each
element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, inactive primitives in itssrcAccelerationStructure
member must not be made active - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, active primitives in itssrcAccelerationStructure
member must not be made inactive - The
dstAccelerationStructure
member of any element ofpInfos
must not be referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
-
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any other element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thedstAccelerationStructure
member of any other element ofpInfos
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any element ofpInfos
(including the same element), which is accessed by this command - The
range of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any other element ofpInfos
, which is accessed by this command - The
range of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
(including the same element), which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing any acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
, which is accessed by this command - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must not beNULL_HANDLE
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must have been built before withBUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
set inAccelerationStructureBuildGeometryInfoKHR
::flags
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
anddstAccelerationStructure
members must either be the sameAccelerationStructureKHR
, or not have any memory aliasing - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsgeometryCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itstype
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsgeometryType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.vertexFormat
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.maxVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.indexType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was NULL whensrcAccelerationStructure
was last built, then it must be NULL. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was not NULL whensrcAccelerationStructure
was last built, then it may not be NULL. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, andgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
, then the value of each index referenced index must be the same as the corresponding index value whensrcAccelerationStructure
was last built. - For
each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, itsprimitiveCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, if the corresponding geometry uses indices, itsfirstVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, the correspondingppBuildRangeInfos
[i][j].primitiveCount
must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxInstanceCount
- For each
element of
pInfos
, thebuffer
used to create itsdstAccelerationStructure
member must be bound to device memory - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
thebuffer
used to create itssrcAccelerationStructure
member must be bound to device memory - For each
element of
pInfos
, thebuffer
used to create each acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
must be bound to device memory - If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
, all addresses betweenpInfos
[i].scratchData.deviceAddress
andpInfos
[i].scratchData.deviceAddress
+ N - 1 must be in the buffer device address range of the same buffer, where N is given by thebuildScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count - If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, all addresses betweenpInfos
[i].scratchData.deviceAddress
andpInfos
[i].scratchData.deviceAddress
+ N - 1 must be in the buffer device address range of the same buffer, where N is given by theupdateScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count - The
buffers from which the buffer device addresses for all of the
geometry.triangles.vertexData
,geometry.triangles.indexData
,geometry.triangles.transformData
,geometry.aabbs.data
, andgeometry.instances.data
members of allpInfos
[i].pGeometries
andpInfos
[i].ppGeometries
must have been created with theBUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
usage flag - The buffer
from which the buffer device address
pInfos
[i].scratchData.deviceAddress
is queried must have been created withBUFFER_USAGE_STORAGE_BUFFER_BIT
usage flag - For each
element of
pInfos
, itsscratchData.deviceAddress
member must be a valid device address obtained fromgetBufferDeviceAddress
- For each
element of
pInfos
, ifscratchData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For each
element of
pInfos
, itsscratchData.deviceAddress
member must be a multiple ofPhysicalDeviceAccelerationStructurePropertiesKHR
::minAccelerationStructureScratchOffsetAlignment
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
,geometry.triangles.vertexData.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.vertexData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
,geometry.triangles.vertexData.deviceAddress
must be aligned to the size in bytes of the smallest component of the format invertexFormat
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
,geometry.triangles.indexData.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
, ifgeometry.triangles.indexData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, and withgeometry.triangles.indexType
not equal toINDEX_TYPE_NONE_KHR
,geometry.triangles.indexData.deviceAddress
must be aligned to the size in bytes of the type inindexType
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is not0
, it must be a valid device address obtained fromgetBufferDeviceAddress
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is not0
, it must be aligned to16
bytes - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
,geometry.aabbs.data.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
, ifgeometry.aabbs.data.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
,geometry.aabbs.data.deviceAddress
must be aligned to8
bytes - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isFALSE
,geometry.instances.data.deviceAddress
must be aligned to16
bytes - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isTRUE
,geometry.instances.data.deviceAddress
must be aligned to8
bytes - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isTRUE
, each element ofgeometry.instances.data.deviceAddress
in device memory must be aligned to16
bytes - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
,geometry.instances.data.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.instances.data.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For any
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, eachAccelerationStructureInstanceKHR
::accelerationStructureReference
value ingeometry.instances.data.deviceAddress
must be a valid device address containing a value obtained fromgetAccelerationStructureDeviceAddressKHR
- For each
pInfos
[i],dstAccelerationStructure
must have been created with a value ofAccelerationStructureCreateInfoKHR
::size
greater than or equal to the memory size required by the build operation, as returned bygetAccelerationStructureBuildSizesKHR
withpBuildInfo
=pInfos
[i] and with each element of thepMaxPrimitiveCounts
array greater than or equal to the equivalentppBuildRangeInfos
[i][j].primitiveCount
values forj
in [0,pInfos
[i].geometryCount
) -
Each element of
ppBuildRangeInfos
[i] must be a valid pointer to an array ofpInfos
[i].geometryCount
AccelerationStructureBuildRangeInfoKHR
structures
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pInfos
must be a valid pointer to an array ofinfoCount
validAccelerationStructureBuildGeometryInfoKHR
structures -
ppBuildRangeInfos
must be a valid pointer to an array ofinfoCount
AccelerationStructureBuildRangeInfoKHR
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
-
infoCount
must be greater than0
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureBuildRangeInfoKHR
,
CommandBuffer
cmdBuildAccelerationStructuresIndirectKHR Source #
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) |
|
-> ("indirectDeviceAddresses" ::: Vector DeviceAddress) |
|
-> ("indirectStrides" ::: Vector Word32) |
|
-> ("maxPrimitiveCounts" ::: Vector (Vector Word32)) |
|
-> io () |
vkCmdBuildAccelerationStructuresIndirectKHR - Build an acceleration structure with some parameters provided on the device
Description
Accesses to acceleration structures, scratch buffers, vertex buffers,
index buffers, and instance buffers must be synchronized as with
cmdBuildAccelerationStructuresKHR
.
Accesses to any element of pIndirectDeviceAddresses
must be
synchronized
with the
PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR
pipeline stage
and an
access type
of
ACCESS_INDIRECT_COMMAND_READ_BIT
.
Valid Usage
- The
srcAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must be a validAccelerationStructureKHR
handle - For
each element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For
each element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, inactive primitives in itssrcAccelerationStructure
member must not be made active - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, active primitives in itssrcAccelerationStructure
member must not be made inactive - The
dstAccelerationStructure
member of any element ofpInfos
must not be referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
-
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any other element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thedstAccelerationStructure
member of any other element ofpInfos
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any element ofpInfos
(including the same element), which is accessed by this command -
The range of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any other element ofpInfos
, which is accessed by this command -
The range of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
(including the same element), which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing any acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
, which is accessed by this command - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must not beNULL_HANDLE
- For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must have been built before withBUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
set inAccelerationStructureBuildGeometryInfoKHR
::flags
- For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
anddstAccelerationStructure
members must either be the sameAccelerationStructureKHR
, or not have any memory aliasing - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsgeometryCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itstype
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsgeometryType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.vertexFormat
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.maxVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.indexType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was NULL whensrcAccelerationStructure
was last built, then it must be NULL. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was not NULL whensrcAccelerationStructure
was last built, then it may not be NULL. - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, andgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
, then the value of each index referenced index must be the same as the corresponding index value whensrcAccelerationStructure
was last built. -
For each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, itsprimitiveCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. -
For each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, if the corresponding geometry uses indices, itsfirstVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For
each element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, the correspondingppMaxPrimitiveCounts
[i][j] must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxInstanceCount
- For
each element of
pInfos
, thebuffer
used to create itsdstAccelerationStructure
member must be bound to device memory - For
each element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
thebuffer
used to create itssrcAccelerationStructure
member must be bound to device memory - For
each element of
pInfos
, thebuffer
used to create each acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
must be bound to device memory - If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
, all addresses betweenpInfos
[i].scratchData.deviceAddress
andpInfos
[i].scratchData.deviceAddress
+ N - 1 must be in the buffer device address range of the same buffer, where N is given by thebuildScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count - If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, all addresses betweenpInfos
[i].scratchData.deviceAddress
andpInfos
[i].scratchData.deviceAddress
+ N - 1 must be in the buffer device address range of the same buffer, where N is given by theupdateScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count -
The buffers from which the buffer device addresses for all of the
geometry.triangles.vertexData
,geometry.triangles.indexData
,geometry.triangles.transformData
,geometry.aabbs.data
, andgeometry.instances.data
members of allpInfos
[i].pGeometries
andpInfos
[i].ppGeometries
must have been created with theBUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
usage flag - The
buffer from which the buffer device address
pInfos
[i].scratchData.deviceAddress
is queried must have been created withBUFFER_USAGE_STORAGE_BUFFER_BIT
usage flag - For
each element of
pInfos
, itsscratchData.deviceAddress
member must be a valid device address obtained fromgetBufferDeviceAddress
- For
each element of
pInfos
, ifscratchData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
each element of
pInfos
, itsscratchData.deviceAddress
member must be a multiple ofPhysicalDeviceAccelerationStructurePropertiesKHR
::minAccelerationStructureScratchOffsetAlignment
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
,geometry.triangles.vertexData.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.vertexData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
,geometry.triangles.vertexData.deviceAddress
must be aligned to the size in bytes of the smallest component of the format invertexFormat
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
,geometry.triangles.indexData.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
, ifgeometry.triangles.indexData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, and withgeometry.triangles.indexType
not equal toINDEX_TYPE_NONE_KHR
,geometry.triangles.indexData.deviceAddress
must be aligned to the size in bytes of the type inindexType
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is not0
, it must be a valid device address obtained fromgetBufferDeviceAddress
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.deviceAddress
is not0
, it must be aligned to16
bytes - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
,geometry.aabbs.data.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
, ifgeometry.aabbs.data.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
,geometry.aabbs.data.deviceAddress
must be aligned to8
bytes - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isFALSE
,geometry.instances.data.deviceAddress
must be aligned to16
bytes - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isTRUE
,geometry.instances.data.deviceAddress
must be aligned to8
bytes - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.arrayOfPointers
isTRUE
, each element ofgeometry.instances.data.deviceAddress
in device memory must be aligned to16
bytes - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
,geometry.instances.data.deviceAddress
must be a valid device address obtained fromgetBufferDeviceAddress
- For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, ifgeometry.instances.data.deviceAddress
is the address of a non-sparse buffer then it must be bound completely and contiguously to a singleDeviceMemory
object - For
any element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, eachAccelerationStructureInstanceKHR
::accelerationStructureReference
value ingeometry.instances.data.deviceAddress
must be a valid device address containing a value obtained fromgetAccelerationStructureDeviceAddressKHR
-
For any element of
pIndirectDeviceAddresses
, if the buffer from which it was queried is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
For any element of
pIndirectDeviceAddresses
[i], all device addresses betweenpIndirectDeviceAddresses
[i] andpIndirectDeviceAddresses
[i] + (pInfos
[i]→geometryCount ×pIndirectStrides
[i]) - 1 must be in the buffer device address range of the same buffer -
For any element of
pIndirectDeviceAddresses
, the buffer from which it was queried must have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set -
Each element of
pIndirectDeviceAddresses
must be a multiple of4
-
Each element of
pIndirectStrides
must be a multiple of4
-
commandBuffer
must not be a protected command buffer - The ::accelerationStructureIndirectBuild feature must be enabled
-
Each
AccelerationStructureBuildRangeInfoKHR
structure referenced by any element ofpIndirectDeviceAddresses
must be a validAccelerationStructureBuildRangeInfoKHR
structure -
pInfos
[i].dstAccelerationStructure
must have been created with a value ofAccelerationStructureCreateInfoKHR
::size
greater than or equal to the memory size required by the build operation, as returned bygetAccelerationStructureBuildSizesKHR
withpBuildInfo
=pInfos
[i] andpMaxPrimitiveCounts
=ppMaxPrimitiveCounts
[i] -
Each
ppMaxPrimitiveCounts
[i][j] must be greater than or equal to the theprimitiveCount
value specified by theAccelerationStructureBuildRangeInfoKHR
structure located atpIndirectDeviceAddresses
[i] + (j
×pIndirectStrides
[i])
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pInfos
must be a valid pointer to an array ofinfoCount
validAccelerationStructureBuildGeometryInfoKHR
structures -
pIndirectDeviceAddresses
must be a valid pointer to an array ofinfoCount
DeviceAddress
values -
pIndirectStrides
must be a valid pointer to an array ofinfoCount
uint32_t
values -
ppMaxPrimitiveCounts
must be a valid pointer to an array ofinfoCount
uint32_t
values -
commandBuffer
must be in the recording state -
The
CommandPool
thatcommandBuffer
was allocated from must support compute operations - This command must only be called outside of a render pass instance
-
infoCount
must be greater than0
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Outside | Compute |
See Also
AccelerationStructureBuildGeometryInfoKHR
,
CommandBuffer
,
DeviceAddress
buildAccelerationStructuresKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> DeferredOperationKHR |
|
-> ("infos" ::: Vector AccelerationStructureBuildGeometryInfoKHR) |
|
-> ("buildRangeInfos" ::: Vector (Vector AccelerationStructureBuildRangeInfoKHR)) |
|
-> io Result |
vkBuildAccelerationStructuresKHR - Build an acceleration structure on the host
Description
This command fulfills the same task as
cmdBuildAccelerationStructuresKHR
but is executed by the host.
The buildAccelerationStructuresKHR
command provides the ability to
initiate multiple acceleration structures builds, however there is no
ordering or synchronization implied between any of the individual
acceleration structure builds.
Note
This means that an application cannot build a top-level acceleration
structure in the same buildAccelerationStructuresKHR
call as the
associated bottom-level or instance acceleration structures are being
built. There also cannot be any memory aliasing between any
acceleration structure memories or scratch memories being used by any of
the builds.
Valid Usage
- The
srcAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must not be the same acceleration structure as thedstAccelerationStructure
member of any other element ofpInfos
-
The
dstAccelerationStructure
member of any element ofpInfos
must be a validAccelerationStructureKHR
handle - For each
element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For each
element of
pInfos
, if itstype
member isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
, itsdstAccelerationStructure
member must have been created with a value ofAccelerationStructureCreateInfoKHR
::type
equal to eitherACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, inactive primitives in itssrcAccelerationStructure
member must not be made active - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, active primitives in itssrcAccelerationStructure
member must not be made inactive - The
dstAccelerationStructure
member of any element ofpInfos
must not be referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
-
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any other element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thedstAccelerationStructure
member of any other element ofpInfos
, which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any element ofpInfos
(including the same element), which is accessed by this command - The range
of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thescratchData
member of any other element ofpInfos
, which is accessed by this command - The range
of memory backing the
scratchData
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing thesrcAccelerationStructure
member of any element ofpInfos
with amode
equal toBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
(including the same element), which is accessed by this command -
The range of memory backing the
dstAccelerationStructure
member of any element ofpInfos
that is accessed by this command must not overlap the memory backing any acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
in any other element ofpInfos
, which is accessed by this command - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must not beNULL_HANDLE
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
member must have been built before withBUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
set inAccelerationStructureBuildGeometryInfoKHR
::flags
- For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itssrcAccelerationStructure
anddstAccelerationStructure
members must either be the sameAccelerationStructureKHR
, or not have any memory aliasing - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsgeometryCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, itstype
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsgeometryType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, itsflags
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.vertexFormat
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.maxVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, itsgeometry.triangles.indexType
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was NULL whensrcAccelerationStructure
was last built, then it must be NULL. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, if itsgeometry.triangles.transformData
member was not NULL whensrcAccelerationStructure
was last built, then it may not be NULL. - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, then for eachAccelerationStructureGeometryKHR
structure referred to by itspGeometries
orppGeometries
members, ifgeometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, andgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
, then the value of each index referenced index must be the same as the corresponding index value whensrcAccelerationStructure
was last built. - For
each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, itsprimitiveCount
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
AccelerationStructureBuildRangeInfoKHR
referenced by this command, if the corresponding geometry uses indices, itsfirstVertex
member must have the same value which was specified whensrcAccelerationStructure
was last built. - For each
element of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, the correspondingppBuildRangeInfos
[i][j].primitiveCount
must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxInstanceCount
- For each
pInfos
[i],dstAccelerationStructure
must have been created with a value ofAccelerationStructureCreateInfoKHR
::size
greater than or equal to the memory size required by the build operation, as returned bygetAccelerationStructureBuildSizesKHR
withpBuildInfo
=pInfos
[i] and with each element of thepMaxPrimitiveCounts
array greater than or equal to the equivalentppBuildRangeInfos
[i][j].primitiveCount
values forj
in [0,pInfos
[i].geometryCount
) - Each
element of
ppBuildRangeInfos
[i] must be a valid pointer to an array ofpInfos
[i].geometryCount
AccelerationStructureBuildRangeInfoKHR
structures - If
deferredOperation
is notNULL_HANDLE
, it must be a validDeferredOperationKHR
object - Any
previous deferred operation that was associated with
deferredOperation
must be complete - For each
element of
pInfos
, thebuffer
used to create itsdstAccelerationStructure
member must be bound to host-visible device memory - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
thebuffer
used to create itssrcAccelerationStructure
member must be bound to host-visible device memory - For each
element of
pInfos
, thebuffer
used to create each acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
must be bound to host-visible device memory - The ::accelerationStructureHostCommands feature must be enabled
- If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
, all addresses betweenpInfos
[i].scratchData.hostAddress
andpInfos
[i].scratchData.hostAddress
+ N - 1 must be valid host memory, where N is given by thebuildScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count - If
pInfos
[i].mode
isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
, all addresses betweenpInfos
[i].scratchData.hostAddress
andpInfos
[i].scratchData.hostAddress
+ N - 1 must be valid host memory, where N is given by theupdateScratchSize
member of theAccelerationStructureBuildSizesInfoKHR
structure returned from a call togetAccelerationStructureBuildSizesKHR
with an identicalAccelerationStructureBuildGeometryInfoKHR
structure and primitive count - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
,geometry.triangles.vertexData.hostAddress
must be a valid host address - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.indexType
is notINDEX_TYPE_NONE_KHR
,geometry.triangles.indexData.hostAddress
must be a valid host address - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_TRIANGLES_KHR
, ifgeometry.triangles.transformData.hostAddress
is not0
, it must be a valid host address - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_AABBS_KHR
,geometry.aabbs.data.hostAddress
must be a valid host address - For each
element of
pInfos
, thebuffer
used to create itsdstAccelerationStructure
member must be bound to memory that was not allocated with multiple instances - For each
element of
pInfos
, if itsmode
member isBUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
thebuffer
used to create itssrcAccelerationStructure
member must be bound to memory that was not allocated with multiple instances - For each
element of
pInfos
, thebuffer
used to create each acceleration structure referenced by thegeometry.instances.data
member of any element ofpGeometries
orppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
must be bound to memory that was not allocated with multiple instances - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
,geometry.instances.data.hostAddress
must be a valid host address - For any element
of
pInfos
[i].pGeometries
orpInfos
[i].ppGeometries
with ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, eachAccelerationStructureInstanceKHR
::accelerationStructureReference
value ingeometry.instances.data.hostAddress
must be a validAccelerationStructureKHR
object
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
If
deferredOperation
is notNULL_HANDLE
,deferredOperation
must be a validDeferredOperationKHR
handle -
pInfos
must be a valid pointer to an array ofinfoCount
validAccelerationStructureBuildGeometryInfoKHR
structures -
ppBuildRangeInfos
must be a valid pointer to an array ofinfoCount
AccelerationStructureBuildRangeInfoKHR
structures -
infoCount
must be greater than0
- If
deferredOperation
is a valid handle, it must have been created, allocated, or retrieved fromdevice
Return Codes
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureBuildRangeInfoKHR
,
DeferredOperationKHR
,
Device
getAccelerationStructureDeviceAddressKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> AccelerationStructureDeviceAddressInfoKHR |
|
-> io DeviceAddress |
vkGetAccelerationStructureDeviceAddressKHR - Query an address of a acceleration structure
Description
The 64-bit return value is an address of the acceleration structure, which can be used for device and shader operations that involve acceleration structures, such as ray traversal and acceleration structure building.
If the acceleration structure was created with a non-zero value of
AccelerationStructureCreateInfoKHR
::deviceAddress
the return value
will be the same address.
If the acceleration structure was created with a type
of
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
the returned address must be
consistent with the relative offset to other acceleration structures of
type
of ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
allocated with the
same Buffer
. That is, the difference in returned
addresses between the two must be the same as the difference in
offsets provided at acceleration structure creation.
Note
The acceleration structure device address may be different from the
buffer device address corresponding to the acceleration structure’s
start offset in its storage buffer for acceleration structure types
other than ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
.
Valid Usage
- If
device
was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
pInfo
must be a valid pointer to a validAccelerationStructureDeviceAddressInfoKHR
structure
See Also
getAccelerationStructureBuildSizesKHR Source #
:: forall io. MonadIO io | |
=> Device |
|
-> AccelerationStructureBuildTypeKHR |
|
-> ("buildInfo" ::: AccelerationStructureBuildGeometryInfoKHR) |
|
-> ("maxPrimitiveCounts" ::: Vector Word32) |
|
-> io ("sizeInfo" ::: AccelerationStructureBuildSizesInfoKHR) |
vkGetAccelerationStructureBuildSizesKHR - Retrieve the required size for an acceleration structure
Description
The srcAccelerationStructure
, dstAccelerationStructure
, and mode
members of pBuildInfo
are ignored. Any DeviceOrHostAddressKHR
members of pBuildInfo
are ignored by this command, except that the
hostAddress
member of
AccelerationStructureGeometryTrianglesDataKHR
::transformData
will be
examined to check if it is NULL
.
An acceleration structure created with the accelerationStructureSize
returned by this command supports any build or update with a
AccelerationStructureBuildGeometryInfoKHR
structure and array of
AccelerationStructureBuildRangeInfoKHR
structures subject to the
following properties:
- The build command is a host build command, and
buildType
isACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR
orACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
- The build command is a device build command, and
buildType
isACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR
orACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR
For
AccelerationStructureBuildGeometryInfoKHR
:- Its
type
, andflags
members are equal to those specified inpBuildInfo
. geometryCount
is less than or equal to that specified inpBuildInfo
.- For each element of either
pGeometries
orppGeometries
at a given index, itsgeometryType
member is equal to that specified inpBuildInfo
. - For each element of either
pGeometries
orppGeometries
at a given index, with ageometryType
member equal toGEOMETRY_TYPE_TRIANGLES_KHR
, thevertexFormat
andindexType
members ofgeometry.triangles
are equal to those specified in the same element inpBuildInfo
. - For each element of either
pGeometries
orppGeometries
at a given index, with ageometryType
member equal toGEOMETRY_TYPE_TRIANGLES_KHR
, themaxVertex
member ofgeometry.triangles
is less than or equal to that specified in the same element inpBuildInfo
. - For each element of either
pGeometries
orppGeometries
at a given index, with ageometryType
member equal toGEOMETRY_TYPE_TRIANGLES_KHR
, if the applicable address in thetransformData
member ofgeometry.triangles
is notNULL
, the correspondingtransformData.pname
:hostAddress parameter inpBuildInfo
is notNULL
.
- Its
For each
AccelerationStructureBuildRangeInfoKHR
corresponding to theAccelerationStructureBuildGeometryInfoKHR
:- Its
primitiveCount
member is less than or equal to the corresponding element ofpMaxPrimitiveCounts
.
- Its
Similarly, the updateScratchSize
value will support any build command
specifying the BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR
mode
under the above conditions, and the buildScratchSize
value will
support any build command specifying the
BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
mode
under the above
conditions.
Valid Usage
- The rayTracingPipeline or rayQuery feature must be enabled
- If
device
was created with multiple physical devices, then the bufferDeviceAddressMultiDevice feature must be enabled - If
pBuildInfo->geometryCount
is not0
,pMaxPrimitiveCounts
must be a valid pointer to an array ofpBuildInfo->geometryCount
uint32_t
values - If
pBuildInfo->pGeometries
orpBuildInfo->ppGeometries
has ageometryType
ofGEOMETRY_TYPE_INSTANCES_KHR
, eachpMaxPrimitiveCounts
[i] must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxInstanceCount
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
buildType
must be a validAccelerationStructureBuildTypeKHR
value -
pBuildInfo
must be a valid pointer to a validAccelerationStructureBuildGeometryInfoKHR
structure -
pMaxPrimitiveCounts
must be a valid pointer to an array ofpBuildInfo->geometryCount
uint32_t
values -
pSizeInfo
must be a valid pointer to aAccelerationStructureBuildSizesInfoKHR
structure
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureBuildSizesInfoKHR
,
AccelerationStructureBuildTypeKHR
, Device
data WriteDescriptorSetAccelerationStructureKHR Source #
VkWriteDescriptorSetAccelerationStructureKHR - Structure specifying acceleration structure descriptor info
Valid Usage
-
Each acceleration structure in
pAccelerationStructures
must have been created withACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
orACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
and built withACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
-
If the
nullDescriptor
feature is not enabled, each member of
pAccelerationStructures
must not beNULL_HANDLE
Valid Usage (Implicit)
-
pAccelerationStructures
must be a valid pointer to an array ofaccelerationStructureCount
valid orNULL_HANDLE
AccelerationStructureKHR
handles -
accelerationStructureCount
must be greater than0
See Also
WriteDescriptorSetAccelerationStructureKHR | |
|
Instances
data PhysicalDeviceAccelerationStructureFeaturesKHR Source #
VkPhysicalDeviceAccelerationStructureFeaturesKHR - Structure describing the acceleration structure features that can be supported by an implementation
Members
The members of the PhysicalDeviceAccelerationStructureFeaturesKHR
structure describe the following features:
Description
If the PhysicalDeviceAccelerationStructureFeaturesKHR
structure is
included in the pNext
chain of
PhysicalDeviceFeatures2
,
it is filled with values indicating whether the feature is supported.
PhysicalDeviceAccelerationStructureFeaturesKHR
can also be used in
the pNext
chain of DeviceCreateInfo
to enable
the features.
Valid Usage (Implicit)
See Also
PhysicalDeviceAccelerationStructureFeaturesKHR | |
|
Instances
data PhysicalDeviceAccelerationStructurePropertiesKHR Source #
VkPhysicalDeviceAccelerationStructurePropertiesKHR - Properties of the physical device for acceleration structure
Description
If the PhysicalDeviceAccelerationStructurePropertiesKHR
structure is
included in the pNext
chain of
PhysicalDeviceProperties2
,
it is filled with the implementation-dependent limits.
Limits specified by this structure must match those specified with the
same name in
PhysicalDeviceRayTracingPropertiesNV
.
Valid Usage (Implicit)
See Also
PhysicalDeviceAccelerationStructurePropertiesKHR | |
|
Instances
data AccelerationStructureGeometryTrianglesDataKHR Source #
VkAccelerationStructureGeometryTrianglesDataKHR - Structure specifying a triangle geometry in a bottom-level acceleration structure
Description
Note
Unlike the stride for vertex buffers in
VertexInputBindingDescription
for graphics
pipelines which must not exceed maxVertexInputBindingStride
,
vertexStride
for acceleration structure geometry is instead restricted
to being a 32-bit value.
Valid Usage
-
vertexStride
must be a multiple of the size in bytes of the smallest component ofvertexFormat
-
vertexStride
must be less than or equal to 232-1 -
vertexFormat
must support theFORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR
inFormatProperties
::bufferFeatures
as returned bygetPhysicalDeviceFormatProperties2
-
indexType
must beINDEX_TYPE_UINT16
,INDEX_TYPE_UINT32
, orINDEX_TYPE_NONE_KHR
Valid Usage (Implicit)
-
pNext
must beNULL
-
vertexFormat
must be a validFormat
value -
vertexData
must be a validDeviceOrHostAddressConstKHR
union -
indexType
must be a validIndexType
value -
If
indexData
is not0
,indexData
must be a validDeviceOrHostAddressConstKHR
union -
If
transformData
is not0
,transformData
must be a validDeviceOrHostAddressConstKHR
union
See Also
AccelerationStructureGeometryDataKHR
, DeviceOrHostAddressConstKHR
,
DeviceSize
,
Format
,
IndexType
,
StructureType
AccelerationStructureGeometryTrianglesDataKHR | |
|
Instances
data AccelerationStructureGeometryAabbsDataKHR Source #
VkAccelerationStructureGeometryAabbsDataKHR - Structure specifying axis-aligned bounding box geometry in a bottom-level acceleration structure
Valid Usage (Implicit)
See Also
AccelerationStructureGeometryDataKHR
, DeviceOrHostAddressConstKHR
,
DeviceSize
,
StructureType
AccelerationStructureGeometryAabbsDataKHR | |
|
Instances
data AccelerationStructureGeometryInstancesDataKHR Source #
VkAccelerationStructureGeometryInstancesDataKHR - Structure specifying a geometry consisting of instances of other acceleration structures
Valid Usage (Implicit)
See Also
AccelerationStructureGeometryDataKHR
,
Bool32
, DeviceOrHostAddressConstKHR
,
StructureType
AccelerationStructureGeometryInstancesDataKHR | |
|
Instances
data AccelerationStructureGeometryKHR Source #
VkAccelerationStructureGeometryKHR - Structure specifying geometries to be built into an acceleration structure
Valid Usage
- If
geometryType
isGEOMETRY_TYPE_AABBS_KHR
, theaabbs
member ofgeometry
must be a validAccelerationStructureGeometryAabbsDataKHR
structure
- If
geometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, thetriangles
member ofgeometry
must be a validAccelerationStructureGeometryTrianglesDataKHR
structure - If
geometryType
isGEOMETRY_TYPE_INSTANCES_KHR
, theinstances
member ofgeometry
must be a validAccelerationStructureGeometryInstancesDataKHR
structure
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR
-
pNext
must beNULL
-
geometryType
must be a validGeometryTypeKHR
value - If
geometryType
isGEOMETRY_TYPE_TRIANGLES_KHR
, thetriangles
member ofgeometry
must be a validAccelerationStructureGeometryTrianglesDataKHR
structure - If
geometryType
isGEOMETRY_TYPE_AABBS_KHR
, theaabbs
member ofgeometry
must be a validAccelerationStructureGeometryAabbsDataKHR
structure - If
geometryType
isGEOMETRY_TYPE_INSTANCES_KHR
, theinstances
member ofgeometry
must be a validAccelerationStructureGeometryInstancesDataKHR
structure -
flags
must be a valid combination ofGeometryFlagBitsKHR
values
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureGeometryDataKHR
, GeometryFlagsKHR
,
GeometryTypeKHR
, StructureType
AccelerationStructureGeometryKHR | |
|
Instances
data AccelerationStructureBuildGeometryInfoKHR Source #
VkAccelerationStructureBuildGeometryInfoKHR - Structure specifying the geometry data used to build an acceleration structure
Description
Only one of pGeometries
or ppGeometries
can be a valid pointer,
the other must be NULL
. Each element of the non-NULL
array
describes the data used to build each acceleration structure geometry.
The index of each element of the pGeometries
or ppGeometries
members
of AccelerationStructureBuildGeometryInfoKHR
is used as the /geometry
index/ during ray traversal. The geometry index is available in ray
shaders via the
RayGeometryIndexKHR built-in,
and is
used to determine hit and intersection shaders executed during traversal.
The geometry index is available to ray queries via the
OpRayQueryGetIntersectionGeometryIndexKHR
instruction.
Valid Usage
-
type
must not beACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
-
Only one of
pGeometries
orppGeometries
can be a valid pointer, the other must beNULL
- If
type
isACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
, thegeometryType
member of elements of eitherpGeometries
orppGeometries
must beGEOMETRY_TYPE_INSTANCES_KHR
- If
type
isACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR
,geometryCount
must be1
- If
type
isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
thegeometryType
member of elements of eitherpGeometries
orppGeometries
must not beGEOMETRY_TYPE_INSTANCES_KHR
- If
type
isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
then thegeometryType
member of each geometry in eitherpGeometries
orppGeometries
must be the same - If
type
isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
thengeometryCount
must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxGeometryCount
- If
type
isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
and thegeometryType
member of eitherpGeometries
orppGeometries
isGEOMETRY_TYPE_AABBS_KHR
, the total number of AABBs in all geometries must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxPrimitiveCount
- If
type
isACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR
and thegeometryType
member of eitherpGeometries
orppGeometries
isGEOMETRY_TYPE_TRIANGLES_KHR
, the total number of triangles in all geometries must be less than or equal toPhysicalDeviceAccelerationStructurePropertiesKHR
::maxPrimitiveCount
- If
flags
has theBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR
bit set, then it must not have theBUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR
bit set
Valid Usage (Implicit)
-
pNext
must beNULL
-
type
must be a validAccelerationStructureTypeKHR
value -
flags
must be a valid combination ofBuildAccelerationStructureFlagBitsKHR
values -
mode
must be a validBuildAccelerationStructureModeKHR
value -
If
srcAccelerationStructure
is notNULL_HANDLE
,srcAccelerationStructure
must be a validAccelerationStructureKHR
handle -
If
dstAccelerationStructure
is notNULL_HANDLE
,dstAccelerationStructure
must be a validAccelerationStructureKHR
handle -
If
geometryCount
is not0
, andpGeometries
is notNULL
,pGeometries
must be a valid pointer to an array ofgeometryCount
validAccelerationStructureGeometryKHR
structures -
If
geometryCount
is not0
, andppGeometries
is notNULL
,ppGeometries
must be a valid pointer to an array ofgeometryCount
valid pointers to validAccelerationStructureGeometryKHR
structures -
scratchData
must be a validDeviceOrHostAddressKHR
union - Both
of
dstAccelerationStructure
, andsrcAccelerationStructure
that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
AccelerationStructureGeometryKHR
,
AccelerationStructureKHR
,
AccelerationStructureTypeKHR
, BuildAccelerationStructureFlagsKHR
,
BuildAccelerationStructureModeKHR
, DeviceOrHostAddressKHR
,
StructureType
,
buildAccelerationStructuresKHR
,
cmdBuildAccelerationStructuresIndirectKHR
,
cmdBuildAccelerationStructuresKHR
,
getAccelerationStructureBuildSizesKHR
AccelerationStructureBuildGeometryInfoKHR | |
|
Instances
data AccelerationStructureBuildRangeInfoKHR Source #
VkAccelerationStructureBuildRangeInfoKHR - Structure specifying build offsets and counts for acceleration structure builds
Description
The primitive count and primitive offset are interpreted differently
depending on the GeometryTypeKHR
used:
For geometries of type
GEOMETRY_TYPE_TRIANGLES_KHR
,primitiveCount
is the number of triangles to be built, where each triangle is treated as 3 vertices.- If the geometry uses indices,
primitiveCount
× 3 indices are consumed fromAccelerationStructureGeometryTrianglesDataKHR
::indexData
, starting at an offset ofprimitiveOffset
. The value offirstVertex
is added to the index values before fetching vertices. - If the geometry does not use indices,
primitiveCount
× 3 vertices are consumed fromAccelerationStructureGeometryTrianglesDataKHR
::vertexData
, starting at an offset ofprimitiveOffset
+AccelerationStructureGeometryTrianglesDataKHR
::vertexStride
×firstVertex
. - A single
TransformMatrixKHR
structure is consumed fromAccelerationStructureGeometryTrianglesDataKHR
::transformData
, at an offset oftransformOffset
. This transformation matrix is used by all triangles.
- If the geometry uses indices,
- For geometries of type
GEOMETRY_TYPE_AABBS_KHR
,primitiveCount
is the number of axis-aligned bounding boxes.primitiveCount
AabbPositionsKHR
structures are consumed fromAccelerationStructureGeometryAabbsDataKHR
::data
, starting at an offset ofprimitiveOffset
. - For geometries of type
GEOMETRY_TYPE_INSTANCES_KHR
,primitiveCount
is the number of acceleration structures.primitiveCount
AccelerationStructureInstanceKHR
structures are consumed fromAccelerationStructureGeometryInstancesDataKHR
::data
, starting at an offset ofprimitiveOffset
.
Valid Usage
-
For geometries of type
GEOMETRY_TYPE_TRIANGLES_KHR
, if the geometry uses indices, the offsetprimitiveOffset
fromAccelerationStructureGeometryTrianglesDataKHR
::indexData
must be a multiple of the element size ofAccelerationStructureGeometryTrianglesDataKHR
::indexType
-
For geometries of type
GEOMETRY_TYPE_TRIANGLES_KHR
, if the geometry doesn’t use indices, the offsetprimitiveOffset
fromAccelerationStructureGeometryTrianglesDataKHR
::vertexData
must be a multiple of the component size ofAccelerationStructureGeometryTrianglesDataKHR
::vertexFormat
-
For geometries of type
GEOMETRY_TYPE_TRIANGLES_KHR
, the offsettransformOffset
fromAccelerationStructureGeometryTrianglesDataKHR
::transformData
must be a multiple of 16 -
For geometries of type
GEOMETRY_TYPE_AABBS_KHR
, the offsetprimitiveOffset
fromAccelerationStructureGeometryAabbsDataKHR
::data
must be a multiple of 8 -
For geometries of type
GEOMETRY_TYPE_INSTANCES_KHR
, the offsetprimitiveOffset
fromAccelerationStructureGeometryInstancesDataKHR
::data
must be a multiple of 16
See Also
buildAccelerationStructuresKHR
, cmdBuildAccelerationStructuresKHR
AccelerationStructureBuildRangeInfoKHR | |
|
Instances
data AccelerationStructureCreateInfoKHR Source #
VkAccelerationStructureCreateInfoKHR - Structure specifying the parameters of a newly created acceleration structure object
Description
If deviceAddress
is zero, no specific address is requested.
If deviceAddress
is not zero, deviceAddress
must be an address
retrieved from an identically created acceleration structure on the same
implementation. The acceleration structure must also be placed on an
identically created buffer
and at the same offset
.
Applications should avoid creating acceleration structures with
application-provided addresses and implementation-provided addresses in
the same process, to reduce the likelihood of
ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR
errors.
Note
The expected usage for this is that a trace capture/replay tool will
add the
BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
flag to all buffers that use
BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
,
and
BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
to all buffers used as storage for an acceleration structure where
deviceAddress
is not zero. During capture the tool will save the
queried opaque device addresses in the trace. During replay, the buffers
will be created specifying the original address so any address values
stored in the trace data will remain valid.
Implementations are expected to separate such buffers in the GPU address
space so normal allocations will avoid using these addresses.
Apps/tools should avoid mixing app-provided and implementation-provided
addresses for buffers created with
BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT
,
to avoid address space allocation conflicts.
Applications should create an acceleration structure with a specific
AccelerationStructureTypeKHR
other than
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
.
If the acceleration structure will be the target of a build operation,
the required size for an acceleration structure can be queried with
getAccelerationStructureBuildSizesKHR
. If the acceleration structure
is going to be the target of a compacting copy,
cmdWriteAccelerationStructuresPropertiesKHR
or
writeAccelerationStructuresPropertiesKHR
can be used to obtain the
compacted size required.
Valid Usage
- If
deviceAddress
is not zero,createFlags
must includeACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
- If
createFlags
includesACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR
,PhysicalDeviceAccelerationStructureFeaturesKHR
::accelerationStructureCaptureReplay
must beTRUE
-
buffer
must have been created with ausage
value containingBUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
-
buffer
must not have been created withBUFFER_CREATE_SPARSE_RESIDENCY_BIT
- The sum of
offset
andsize
must be less than the size ofbuffer
-
offset
must be a multiple of256
bytes
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR
-
pNext
must beNULL
-
createFlags
must be a valid combination ofAccelerationStructureCreateFlagBitsKHR
values -
buffer
must be a validBuffer
handle -
type
must be a validAccelerationStructureTypeKHR
value
See Also
AccelerationStructureCreateFlagsKHR
, AccelerationStructureTypeKHR
,
Buffer
,
DeviceAddress
,
DeviceSize
,
StructureType
,
createAccelerationStructureKHR
AccelerationStructureCreateInfoKHR | |
|
Instances
data AabbPositionsKHR Source #
VkAabbPositionsKHR - Structure specifying two opposing corners of an axis-aligned bounding box
Valid Usage
See Also
No cross-references are available
Instances
data TransformMatrixKHR Source #
VkTransformMatrixKHR - Structure specifying a 3x4 affine transformation matrix
Valid Usage
See Also
TransformMatrixKHR | |
|
Instances
data AccelerationStructureInstanceKHR Source #
VkAccelerationStructureInstanceKHR - Structure specifying a single acceleration structure instance for building into an acceleration structure geometry
Description
The C language spec does not define the ordering of bit-fields, but in practice, this struct produces the correct layout with existing compilers. The intended bit pattern is for the following:
If a compiler produces code that diverges from that pattern, applications must employ another method to set values according to the correct bit pattern.
Valid Usage (Implicit)
See Also
AccelerationStructureInstanceKHR | |
|
Instances
data AccelerationStructureDeviceAddressInfoKHR Source #
VkAccelerationStructureDeviceAddressInfoKHR - Structure specifying the acceleration structure to query an address for
Valid Usage (Implicit)
See Also
AccelerationStructureKHR
,
StructureType
,
getAccelerationStructureDeviceAddressKHR
AccelerationStructureDeviceAddressInfoKHR | |
|
Instances
data AccelerationStructureVersionInfoKHR Source #
VkAccelerationStructureVersionInfoKHR - Acceleration structure version information
Description
Note
pVersionData
is a pointer to an array of
2*UUID_SIZE
uint8_t
values instead of two
UUID_SIZE
arrays as the expected use case
for this member is to be pointed at the header of an previously
serialized acceleration structure (via
cmdCopyAccelerationStructureToMemoryKHR
or
copyAccelerationStructureToMemoryKHR
) that is loaded in memory. Using
arrays would necessitate extra memory copies of the UUIDs.
Valid Usage (Implicit)
See Also
StructureType
,
getDeviceAccelerationStructureCompatibilityKHR
AccelerationStructureVersionInfoKHR | |
|
Instances
data CopyAccelerationStructureInfoKHR Source #
VkCopyAccelerationStructureInfoKHR - Parameters for copying an acceleration structure
Valid Usage
-
mode
must beCOPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
orCOPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR
- If
mode
isCOPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR
,src
must have been built withBUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
- The
buffer
used to createsrc
must be bound to device memory - The
buffer
used to createdst
must be bound to device memory
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR
-
pNext
must beNULL
-
src
must be a validAccelerationStructureKHR
handle -
dst
must be a validAccelerationStructureKHR
handle -
mode
must be a validCopyAccelerationStructureModeKHR
value - Both of
dst
, andsrc
must have been created, allocated, or retrieved from the sameDevice
See Also
AccelerationStructureKHR
,
CopyAccelerationStructureModeKHR
,
StructureType
,
cmdCopyAccelerationStructureKHR
, copyAccelerationStructureKHR
CopyAccelerationStructureInfoKHR | |
|
Instances
data CopyAccelerationStructureToMemoryInfoKHR Source #
VkCopyAccelerationStructureToMemoryInfoKHR - Parameters for serializing an acceleration structure
Valid Usage
- The
memory pointed to by
dst
must be at least as large as the serialization size ofsrc
, as reported bywriteAccelerationStructuresPropertiesKHR
orcmdWriteAccelerationStructuresPropertiesKHR
with a query type ofQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
-
mode
must beCOPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR
Valid Usage (Implicit)
-
pNext
must beNULL
-
src
must be a validAccelerationStructureKHR
handle -
dst
must be a validDeviceOrHostAddressKHR
union -
mode
must be a validCopyAccelerationStructureModeKHR
value
See Also
AccelerationStructureKHR
,
CopyAccelerationStructureModeKHR
, DeviceOrHostAddressKHR
,
StructureType
,
cmdCopyAccelerationStructureToMemoryKHR
,
copyAccelerationStructureToMemoryKHR
CopyAccelerationStructureToMemoryInfoKHR | |
|
Instances
data CopyMemoryToAccelerationStructureInfoKHR Source #
VkCopyMemoryToAccelerationStructureInfoKHR - Parameters for deserializing an acceleration structure
Valid Usage
-
mode
must beCOPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR
- The
data in
src
must have a format compatible with the destination physical device as returned bygetDeviceAccelerationStructureCompatibilityKHR
-
dst
must have been created with asize
greater than or equal to that used to serialize the data insrc
Valid Usage (Implicit)
-
pNext
must beNULL
-
src
must be a validDeviceOrHostAddressConstKHR
union -
dst
must be a validAccelerationStructureKHR
handle -
mode
must be a validCopyAccelerationStructureModeKHR
value
See Also
AccelerationStructureKHR
,
CopyAccelerationStructureModeKHR
, DeviceOrHostAddressConstKHR
,
StructureType
,
cmdCopyMemoryToAccelerationStructureKHR
,
copyMemoryToAccelerationStructureKHR
CopyMemoryToAccelerationStructureInfoKHR | |
|
Instances
data AccelerationStructureBuildSizesInfoKHR Source #
VkAccelerationStructureBuildSizesInfoKHR - Structure specifying build sizes for an acceleration structure
Valid Usage (Implicit)
See Also
DeviceSize
,
StructureType
,
getAccelerationStructureBuildSizesKHR
AccelerationStructureBuildSizesInfoKHR | |
|
Instances
data DeviceOrHostAddressKHR Source #
Instances
Show DeviceOrHostAddressKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_acceleration_structure showsPrec :: Int -> DeviceOrHostAddressKHR -> ShowS # show :: DeviceOrHostAddressKHR -> String # showList :: [DeviceOrHostAddressKHR] -> ShowS # | |
ToCStruct DeviceOrHostAddressKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_acceleration_structure withCStruct :: DeviceOrHostAddressKHR -> (Ptr DeviceOrHostAddressKHR -> IO b) -> IO b Source # pokeCStruct :: Ptr DeviceOrHostAddressKHR -> DeviceOrHostAddressKHR -> IO b -> IO b Source # withZeroCStruct :: (Ptr DeviceOrHostAddressKHR -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr DeviceOrHostAddressKHR -> IO b -> IO b Source # cStructSize :: Int Source # | |
Zero DeviceOrHostAddressKHR Source # | |
data DeviceOrHostAddressConstKHR Source #
Instances
Show DeviceOrHostAddressConstKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_acceleration_structure showsPrec :: Int -> DeviceOrHostAddressConstKHR -> ShowS # show :: DeviceOrHostAddressConstKHR -> String # showList :: [DeviceOrHostAddressConstKHR] -> ShowS # | |
ToCStruct DeviceOrHostAddressConstKHR Source # | |
Defined in Vulkan.Extensions.VK_KHR_acceleration_structure withCStruct :: DeviceOrHostAddressConstKHR -> (Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b Source # pokeCStruct :: Ptr DeviceOrHostAddressConstKHR -> DeviceOrHostAddressConstKHR -> IO b -> IO b Source # withZeroCStruct :: (Ptr DeviceOrHostAddressConstKHR -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr DeviceOrHostAddressConstKHR -> IO b -> IO b Source # cStructSize :: Int Source # | |
Zero DeviceOrHostAddressConstKHR Source # | |
data AccelerationStructureGeometryDataKHR Source #
Triangles AccelerationStructureGeometryTrianglesDataKHR | |
Aabbs AccelerationStructureGeometryAabbsDataKHR | |
Instances AccelerationStructureGeometryInstancesDataKHR |
Instances
newtype GeometryInstanceFlagBitsKHR Source #
VkGeometryInstanceFlagBitsKHR - Instance flag bits
Description
GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR
and
GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR
must not be used in the same
flag.
See Also
pattern GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR :: GeometryInstanceFlagBitsKHR |
|
pattern GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR :: GeometryInstanceFlagBitsKHR |
|
pattern GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR |
|
pattern GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR :: GeometryInstanceFlagBitsKHR |
|
Instances
newtype GeometryFlagBitsKHR Source #
VkGeometryFlagBitsKHR - Bitmask specifying additional parameters for a geometry
See Also
pattern GEOMETRY_OPAQUE_BIT_KHR :: GeometryFlagBitsKHR |
|
pattern GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR :: GeometryFlagBitsKHR |
|
Instances
newtype BuildAccelerationStructureFlagBitsKHR Source #
VkBuildAccelerationStructureFlagBitsKHR - Bitmask specifying additional parameters for acceleration structure builds
Description
Note
BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
and
BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR
may take more
time and memory than a normal build, and so should only be used when
those features are needed.
See Also
Instances
newtype AccelerationStructureCreateFlagBitsKHR Source #
VkAccelerationStructureCreateFlagBitsKHR - Bitmask specifying additional creation parameters for acceleration structure
See Also
pattern ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR :: AccelerationStructureCreateFlagBitsKHR |
|
Instances
newtype CopyAccelerationStructureModeKHR Source #
VkCopyAccelerationStructureModeKHR - Acceleration structure copy mode
See Also
CopyAccelerationStructureInfoKHR
,
CopyAccelerationStructureToMemoryInfoKHR
,
CopyMemoryToAccelerationStructureInfoKHR
,
cmdCopyAccelerationStructureNV
pattern COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR :: CopyAccelerationStructureModeKHR |
|
pattern COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR :: CopyAccelerationStructureModeKHR |
|
pattern COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR :: CopyAccelerationStructureModeKHR |
|
pattern COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR :: CopyAccelerationStructureModeKHR |
|
Instances
newtype BuildAccelerationStructureModeKHR Source #
VkBuildAccelerationStructureModeKHR - Enum specifying the type of build operation to perform
See Also
pattern BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR :: BuildAccelerationStructureModeKHR |
|
pattern BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR :: BuildAccelerationStructureModeKHR |
|
Instances
newtype AccelerationStructureTypeKHR Source #
VkAccelerationStructureTypeKHR - Type of acceleration structure
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureCreateInfoKHR
pattern ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR :: AccelerationStructureTypeKHR |
|
pattern ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR :: AccelerationStructureTypeKHR |
|
pattern ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR :: AccelerationStructureTypeKHR |
|
Instances
newtype GeometryTypeKHR Source #
VkGeometryTypeKHR - Enum specifying which type of geometry is provided
See Also
pattern GEOMETRY_TYPE_TRIANGLES_KHR :: GeometryTypeKHR |
|
pattern GEOMETRY_TYPE_AABBS_KHR :: GeometryTypeKHR |
|
pattern GEOMETRY_TYPE_INSTANCES_KHR :: GeometryTypeKHR |
|
Instances
newtype AccelerationStructureBuildTypeKHR Source #
VkAccelerationStructureBuildTypeKHR - Acceleration structure build type
See Also
pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR :: AccelerationStructureBuildTypeKHR |
|
pattern ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR :: AccelerationStructureBuildTypeKHR |
|
pattern ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR :: AccelerationStructureBuildTypeKHR |
|
Instances
newtype AccelerationStructureCompatibilityKHR Source #
VkAccelerationStructureCompatibilityKHR - Acceleration structure compatibility
See Also
pattern ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR :: AccelerationStructureCompatibilityKHR |
|
pattern ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR :: AccelerationStructureCompatibilityKHR |
|
Instances
type KHR_ACCELERATION_STRUCTURE_SPEC_VERSION = 11 Source #
pattern KHR_ACCELERATION_STRUCTURE_SPEC_VERSION :: forall a. Integral a => a Source #
type KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME = "VK_KHR_acceleration_structure" Source #
pattern KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #
newtype AccelerationStructureKHR Source #
VkAccelerationStructureKHR - Opaque handle to an acceleration structure object
See Also
AccelerationStructureBuildGeometryInfoKHR
,
AccelerationStructureDeviceAddressInfoKHR
,
CopyAccelerationStructureInfoKHR
,
CopyAccelerationStructureToMemoryInfoKHR
,
CopyMemoryToAccelerationStructureInfoKHR
,
WriteDescriptorSetAccelerationStructureKHR
,
cmdWriteAccelerationStructuresPropertiesKHR
,
createAccelerationStructureKHR
,
destroyAccelerationStructureKHR
,
writeAccelerationStructuresPropertiesKHR
Instances
newtype DeferredOperationKHR Source #
VkDeferredOperationKHR - A deferred operation
Description
This handle refers to a tracking structure which manages the execution state for a deferred command.
See Also
buildAccelerationStructuresKHR
,
copyAccelerationStructureKHR
,
copyAccelerationStructureToMemoryKHR
,
copyMemoryToAccelerationStructureKHR
,
createDeferredOperationKHR
,
createRayTracingPipelinesKHR
,
deferredOperationJoinKHR
,
destroyDeferredOperationKHR
,
getDeferredOperationMaxConcurrencyKHR
,
getDeferredOperationResultKHR
Instances
newtype DebugReportObjectTypeEXT Source #
VkDebugReportObjectTypeEXT - Specify the type of an object handle
Description
'
DebugReportObjectTypeEXT
and Vulkan Handle Relationship
Note
The primary expected use of
ERROR_VALIDATION_FAILED_EXT
is for
validation layer testing. It is not expected that an application would
see this error code during normal use of the validation layers.
See Also
DebugMarkerObjectNameInfoEXT
,
DebugMarkerObjectTagInfoEXT
,
debugReportMessageEXT