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
sourceimpl<'a> Acceleration<'a>
impl<'a> Acceleration<'a>
sourcepub fn build_structure(
&self,
accel_struct_node: impl Into<AnyAccelerationStructureNode>,
scratch_buf_node: impl Into<AnyBufferNode>,
build_info: &AccelerationStructureGeometryInfo,
build_ranges: &[AccelerationStructureBuildRangeInfoKHR]
)
pub fn build_structure(
&self,
accel_struct_node: impl Into<AnyAccelerationStructureNode>,
scratch_buf_node: impl Into<AnyBufferNode>,
build_info: &AccelerationStructureGeometryInfo,
build_ranges: &[AccelerationStructureBuildRangeInfoKHR]
)
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_of.
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 info = AccelerationStructureGeometryInfo {
ty: vk::AccelerationStructureTypeKHR::BOTTOM_LEVEL,
flags: vk::BuildAccelerationStructureFlagsKHR::empty(),
geometries: vec![AccelerationStructureGeometry {
max_primitive_count: 64,
flags: vk::GeometryFlagsKHR::OPAQUE,
geometry: AccelerationStructureGeometryData::Triangles {
index_data: DeviceOrHostAddress::DeviceAddress(
Buffer::device_address(&bindings[index_node])
),
index_type: vk::IndexType::UINT32,
max_vertex: 42,
transform_data: None,
vertex_data: DeviceOrHostAddress::DeviceAddress(Buffer::device_address(
&bindings[vertex_node],
)),
vertex_format: vk::Format::R32G32B32_SFLOAT,
vertex_stride: 12,
},
}],
};
let ranges = vk::AccelerationStructureBuildRangeInfoKHR {
first_vertex: 0,
primitive_count: 1,
primitive_offset: 0,
transform_offset: 0,
};
acceleration.build_structure(blas_node, scratch_buf, &info, &[ranges]);
});sourcepub fn update_structure(
&self,
src_accel_node: impl Into<AnyAccelerationStructureNode>,
dst_accel_node: impl Into<AnyAccelerationStructureNode>,
scratch_buf_node: impl Into<AnyBufferNode>,
build_info: &AccelerationStructureGeometryInfo,
build_ranges: &[AccelerationStructureBuildRangeInfoKHR]
)
pub fn update_structure(
&self,
src_accel_node: impl Into<AnyAccelerationStructureNode>,
dst_accel_node: impl Into<AnyAccelerationStructureNode>,
scratch_buf_node: impl Into<AnyBufferNode>,
build_info: &AccelerationStructureGeometryInfo,
build_ranges: &[AccelerationStructureBuildRangeInfoKHR]
)
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_of.
Auto Trait Implementations
impl<'a> !RefUnwindSafe for Acceleration<'a>
impl<'a> !Send for Acceleration<'a>
impl<'a> !Sync for Acceleration<'a>
impl<'a> Unpin for Acceleration<'a>
impl<'a> !UnwindSafe for Acceleration<'a>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more