pub struct AccelerationStructure {
pub buffer: Buffer,
pub handle: AccelerationStructureKHR,
pub info: AccelerationStructureInfo,
/* private fields */
}Expand description
Smart pointer handle to an [acceleration structure] object.
Also contains the backing buffer and information about the object.
let info = AccelerationStructureInfo::blas(0);
let accel_struct = AccelerationStructure::create(&device, info)?;
let addr = accel_struct.device_address();
assert_eq!(accel_struct.info, info);
assert_ne!(accel_struct.handle, vk::AccelerationStructureKHR::null());Fields§
§buffer: BufferThe native Vulkan resource handle of the buffer which supports this acceleration structure.
Note: This field is read-only.
handle: AccelerationStructureKHRThe native Vulkan resource handle of this acceleration structure.
Note: This field is read-only.
info: AccelerationStructureInfoInformation used to create this object.
Note: This field is read-only.
Implementations§
Source§impl AccelerationStructure
impl AccelerationStructure
Sourcepub fn create(
device: &Device,
info: impl Into<AccelerationStructureInfo>,
) -> Result<Self, DriverError>
pub fn create( device: &Device, info: impl Into<AccelerationStructureInfo>, ) -> Result<Self, DriverError>
Creates a new acceleration structure on the given device.
§Examples
Basic usage:
const SIZE: vk::DeviceSize = 1024;
let info = AccelerationStructureInfo::blas(SIZE);
let accel_struct = AccelerationStructure::create(&device, info)?;
assert_ne!(accel_struct.handle, vk::AccelerationStructureKHR::null());
assert_eq!(accel_struct.info.size, SIZE);Sourcepub fn device_address(&self) -> DeviceAddress
pub fn device_address(&self) -> DeviceAddress
Returns the device address of this object.
§Examples
Basic usage:
let addr = AccelerationStructure::device_address(&my_accel_struct);
assert_ne!(addr, 0);Sourcepub fn instance_slice(instances: &[AccelerationStructureInstanceKHR]) -> &[u8] ⓘ
pub fn instance_slice(instances: &[AccelerationStructureInstanceKHR]) -> &[u8] ⓘ
Helper function which is used to prepare instance buffers.
Sourcepub fn set_debug_name(&self, name: impl AsRef<str>)
pub fn set_debug_name(&self, name: impl AsRef<str>)
Sets the debugging name assigned to this acceleration structure.
Sourcepub fn size_of(
device: &Device,
info: &AccelerationStructureGeometryInfo<impl AsRef<AccelerationStructureGeometry>>,
) -> AccelerationStructureSize
pub fn size_of( device: &Device, info: &AccelerationStructureGeometryInfo<impl AsRef<AccelerationStructureGeometry>>, ) -> AccelerationStructureSize
Returns the size of some geometry info which is then used to create a new AccelerationStructure instance or update an existing instance.
§Examples
Basic usage:
let my_geom = AccelerationStructureGeometry {
max_primitive_count: 1,
flags: vk::GeometryFlagsKHR::OPAQUE,
geometry: my_geom_triangles,
};
let build_range = vk::AccelerationStructureBuildRangeInfoKHR {
primitive_count: 1,
primitive_offset: 0,
first_vertex: 0,
transform_offset: 0,
};
let my_info = AccelerationStructureGeometryInfo::blas([(my_geom, build_range)]);
let res = AccelerationStructure::size_of(&device, &my_info);
assert_eq!(res.create_size, 2432);
assert_eq!(res.build_size, 640);
assert_eq!(res.update_size, 0);Sourcepub fn sync_info(&self) -> AccelerationStructureSyncInfo
pub fn sync_info(&self) -> AccelerationStructureSyncInfo
Returns synchronization information for the acceleration structure’s current accesses.
Sourcepub fn with_debug_name(self, name: impl AsRef<str>) -> Self
pub fn with_debug_name(self, name: impl AsRef<str>) -> Self
Sets the debugging name assigned to this acceleration structure.