pub struct Acceleration<'a> { /* private fields */ }Expand description
Recording interface for acceleration structure commands.
This structure provides a strongly-typed set of methods which allow acceleration structures to
be built and updated. An instance of Acceleration is provided to the closure parameter of
PassRef::record_acceleration.
§Examples
Basic usage:
my_graph.begin_pass("my acceleration pass")
.record_acceleration(move |acceleration, bindings| {
// During this closure we have access to the acceleration methods!
});Implementations§
Source§impl Acceleration<'_>
impl Acceleration<'_>
Sourcepub fn build_structure(
&self,
info: &AccelerationStructureGeometryInfo<(AccelerationStructureGeometry, AccelerationStructureBuildRangeInfoKHR)>,
accel_struct: impl Into<AnyAccelerationStructureNode>,
scratch_addr: impl Into<DeviceOrHostAddress>,
) -> &Self
pub fn build_structure( &self, info: &AccelerationStructureGeometryInfo<(AccelerationStructureGeometry, AccelerationStructureBuildRangeInfoKHR)>, accel_struct: impl Into<AnyAccelerationStructureNode>, scratch_addr: impl Into<DeviceOrHostAddress>, ) -> &Self
Build an acceleration structure.
Requires a scratch buffer which was created with the following requirements:
- Flags must include
vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS - Size must be equal to or greater than the
build_sizevalue returned byAccelerationStructure::size_ofaligned tomin_accel_struct_scratch_offset_alignmentofPhysicalDevice::accel_struct_properties.
§Examples
Basic usage:
my_graph.begin_pass("my acceleration pass")
.read_node(index_node)
.read_node(vertex_node)
.write_node(blas_node)
.write_node(scratch_buf)
.record_acceleration(move |acceleration, bindings| {
let geom = AccelerationStructureGeometry {
max_primitive_count: 64,
flags: vk::GeometryFlagsKHR::OPAQUE,
geometry: AccelerationStructureGeometryData::Triangles {
index_addr: DeviceOrHostAddress::DeviceAddress(
Buffer::device_address(&bindings[index_node])
),
index_type: vk::IndexType::UINT32,
max_vertex: 42,
transform_addr: None,
vertex_addr: DeviceOrHostAddress::DeviceAddress(Buffer::device_address(
&bindings[vertex_node],
)),
vertex_format: vk::Format::R32G32B32_SFLOAT,
vertex_stride: 12,
},
};
let build_range = vk::AccelerationStructureBuildRangeInfoKHR {
first_vertex: 0,
primitive_count: 1,
primitive_offset: 0,
transform_offset: 0,
};
let info = AccelerationStructureGeometryInfo::blas([(geom, build_range)]);
acceleration.build_structure(&info, blas_node, Buffer::device_address(&bindings[scratch_buf]));
});Sourcepub fn build_structure_indirect(
&self,
info: &AccelerationStructureGeometryInfo<AccelerationStructureGeometry>,
accel_struct: impl Into<AnyAccelerationStructureNode>,
scratch_addr: impl Into<DeviceOrHostAddress>,
range_base: DeviceAddress,
range_stride: u32,
) -> &Self
pub fn build_structure_indirect( &self, info: &AccelerationStructureGeometryInfo<AccelerationStructureGeometry>, accel_struct: impl Into<AnyAccelerationStructureNode>, scratch_addr: impl Into<DeviceOrHostAddress>, range_base: DeviceAddress, range_stride: u32, ) -> &Self
Build an acceleration structure with some parameters provided on the device.
range is a buffer device address which points to info.geometry.len()
[vk::VkAccelerationStructureBuildRangeInfoKHR] structures defining dynamic offsets to the
addresses where geometry data is stored, as defined by info.
Sourcepub fn build_structures(
&self,
infos: &[AccelerationStructureBuildInfo],
) -> &Self
pub fn build_structures( &self, infos: &[AccelerationStructureBuildInfo], ) -> &Self
Build acceleration structures.
There is no ordering or synchronization implied between any of the individual acceleration structure builds.
Sourcepub fn build_structures_indirect(
&self,
infos: &[AccelerationStructureIndirectBuildInfo],
) -> &Self
pub fn build_structures_indirect( &self, infos: &[AccelerationStructureIndirectBuildInfo], ) -> &Self
Builds acceleration structures with some parameters provided on the device.
There is no ordering or synchronization implied between any of the individual acceleration structure builds.
Sourcepub fn update_structure(
&self,
info: &AccelerationStructureGeometryInfo<(AccelerationStructureGeometry, AccelerationStructureBuildRangeInfoKHR)>,
src_accel_struct: impl Into<AnyAccelerationStructureNode>,
dst_accel_struct: impl Into<AnyAccelerationStructureNode>,
scratch_addr: impl Into<DeviceOrHostAddress>,
) -> &Self
pub fn update_structure( &self, info: &AccelerationStructureGeometryInfo<(AccelerationStructureGeometry, AccelerationStructureBuildRangeInfoKHR)>, src_accel_struct: impl Into<AnyAccelerationStructureNode>, dst_accel_struct: impl Into<AnyAccelerationStructureNode>, scratch_addr: impl Into<DeviceOrHostAddress>, ) -> &Self
Update an acceleration structure.
Requires a scratch buffer which was created with the following requirements:
- Flags must include
vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS - Size must be equal to or greater than the
update_sizevalue returned byAccelerationStructure::size_ofaligned tomin_accel_struct_scratch_offset_alignmentofPhysicalDevice::accel_struct_properties.
Sourcepub fn update_structure_indirect(
&self,
info: &AccelerationStructureGeometryInfo<AccelerationStructureGeometry>,
src_accel_struct: impl Into<AnyAccelerationStructureNode>,
dst_accel_struct: impl Into<AnyAccelerationStructureNode>,
scratch_addr: impl Into<DeviceOrHostAddress>,
range_base: DeviceAddress,
range_stride: u32,
) -> &Self
pub fn update_structure_indirect( &self, info: &AccelerationStructureGeometryInfo<AccelerationStructureGeometry>, src_accel_struct: impl Into<AnyAccelerationStructureNode>, dst_accel_struct: impl Into<AnyAccelerationStructureNode>, scratch_addr: impl Into<DeviceOrHostAddress>, range_base: DeviceAddress, range_stride: u32, ) -> &Self
Update an acceleration structure with some parameters provided on the device.
range is a buffer device address which points to info.geometry.len()
[vk::VkAccelerationStructureBuildRangeInfoKHR] structures defining dynamic offsets to the
addresses where geometry data is stored, as defined by info.
Sourcepub fn update_structures(
&self,
infos: &[AccelerationStructureUpdateInfo],
) -> &Self
pub fn update_structures( &self, infos: &[AccelerationStructureUpdateInfo], ) -> &Self
Update acceleration structures.
There is no ordering or synchronization implied between any of the individual acceleration structure updates.
Sourcepub fn update_structures_indirect(
&self,
infos: &[AccelerationStructureIndirectUpdateInfo],
) -> &Self
pub fn update_structures_indirect( &self, infos: &[AccelerationStructureIndirectUpdateInfo], ) -> &Self
Updates acceleration structures with some parameters provided on the device.
There is no ordering or synchronization implied between any of the individual acceleration structure updates.