Struct screen_13::graph::pass_ref::Acceleration
source · 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<'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_size
value returned byAccelerationStructure::size_of
plusmin_accel_struct_scratch_offset_alignment
ofPhysicalDevice::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 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_size
value returned byAccelerationStructure::size_of
plusmin_accel_struct_scratch_offset_alignment
ofPhysicalDevice::accel_struct_properties
.
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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.