Struct screen_13::driver::accel_struct::AccelerationStructure
source · pub struct AccelerationStructure {
pub buffer: Buffer,
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.
§Deref
behavior
AccelerationStructure
automatically dereferences to vk::AccelerationStructureKHR
(via the
Deref
trait), so you can call vk::AccelerationStructureKHR
’s methods on a value of
type AccelerationStructure
. To avoid name clashes with vk::AccelerationStructureKHR
’s
methods, the methods of AccelerationStructure
itself are associated functions, called using
fully qualified syntax:
let addr = AccelerationStructure::device_address(&my_accel_struct);
Fields§
§buffer: Buffer
Backing storage buffer for this object.
info: AccelerationStructureInfo
Information used to create this object.
Implementations§
source§impl AccelerationStructure
impl AccelerationStructure
sourcepub fn create(
device: &Arc<Device>,
info: impl Into<AccelerationStructureInfo>
) -> Result<Self, DriverError>
pub fn create( device: &Arc<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, vk::AccelerationStructureKHR::null());
assert_eq!(accel_struct.info.size, SIZE);
sourcepub fn access(this: &Self, next_access: AccessType) -> AccessType
pub fn access(this: &Self, next_access: AccessType) -> AccessType
Keeps track of some next_access
which affects this object.
Returns the previous access for which a pipeline barrier should be used to prevent data corruption.
§Note
Used to maintain object state when passing a Screen 13-created
vk::AccelerationStructureKHR
handle to external code such as Ash or Erupt
bindings.
§Examples
Basic usage:
// Initially we want to "Build Write"
let next = AccessType::AccelerationStructureBuildWrite;
let prev = AccelerationStructure::access(&my_accel_struct, next);
assert_eq!(prev, AccessType::Nothing);
// External code may now "Build Write"; no barrier required
// Subsequently we want to "Build Read"
let next = AccessType::AccelerationStructureBuildRead;
let prev = AccelerationStructure::access(&my_accel_struct, next);
assert_eq!(prev, AccessType::AccelerationStructureBuildWrite);
// A barrier on "Build Write" before "Build Read" is required!
sourcepub fn device_address(this: &Self) -> DeviceAddress
pub fn device_address(this: &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 size_of(
device: &Arc<Device>,
info: &AccelerationStructureGeometryInfo
) -> AccelerationStructureSize
pub fn size_of( device: &Arc<Device>, info: &AccelerationStructureGeometryInfo ) -> 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_info = AccelerationStructureGeometryInfo {
ty: vk::AccelerationStructureTypeKHR::BOTTOM_LEVEL,
flags: vk::BuildAccelerationStructureFlagsKHR::empty(),
geometries: vec![AccelerationStructureGeometry {
max_primitive_count: 1,
flags: vk::GeometryFlagsKHR::OPAQUE,
geometry: my_geom,
}],
};
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);
Trait Implementations§
source§impl<T> Alias<AccelerationStructureInfo, AccelerationStructure> for AliasPool<T>
impl<T> Alias<AccelerationStructureInfo, AccelerationStructure> for AliasPool<T>
source§fn alias(
&mut self,
info: AccelerationStructureInfo
) -> Result<Arc<Lease<AccelerationStructure>>, DriverError>
fn alias( &mut self, info: AccelerationStructureInfo ) -> Result<Arc<Lease<AccelerationStructure>>, DriverError>
source§impl Bind<&mut RenderGraph, AccelerationStructureNode> for AccelerationStructure
impl Bind<&mut RenderGraph, AccelerationStructureNode> for AccelerationStructure
source§fn bind(self, graph: &mut RenderGraph) -> AccelerationStructureNode
fn bind(self, graph: &mut RenderGraph) -> AccelerationStructureNode
source§impl Debug for AccelerationStructure
impl Debug for AccelerationStructure
source§impl Deref for AccelerationStructure
impl Deref for AccelerationStructure
source§impl Drop for AccelerationStructure
impl Drop for AccelerationStructure
source§impl<T> Pool<AccelerationStructureInfo, AccelerationStructure> for AliasPool<T>
impl<T> Pool<AccelerationStructureInfo, AccelerationStructure> for AliasPool<T>
source§fn lease(
&mut self,
info: AccelerationStructureInfo
) -> Result<Lease<AccelerationStructure>, DriverError>
fn lease( &mut self, info: AccelerationStructureInfo ) -> Result<Lease<AccelerationStructure>, DriverError>
source§impl Pool<AccelerationStructureInfo, AccelerationStructure> for FifoPool
impl Pool<AccelerationStructureInfo, AccelerationStructure> for FifoPool
source§fn lease(
&mut self,
info: AccelerationStructureInfo
) -> Result<Lease<AccelerationStructure>, DriverError>
fn lease( &mut self, info: AccelerationStructureInfo ) -> Result<Lease<AccelerationStructure>, DriverError>
source§impl Pool<AccelerationStructureInfo, AccelerationStructure> for HashPool
impl Pool<AccelerationStructureInfo, AccelerationStructure> for HashPool
source§fn lease(
&mut self,
info: AccelerationStructureInfo
) -> Result<Lease<AccelerationStructure>, DriverError>
fn lease( &mut self, info: AccelerationStructureInfo ) -> Result<Lease<AccelerationStructure>, DriverError>
source§impl Pool<AccelerationStructureInfo, AccelerationStructure> for LazyPool
impl Pool<AccelerationStructureInfo, AccelerationStructure> for LazyPool
source§fn lease(
&mut self,
info: AccelerationStructureInfo
) -> Result<Lease<AccelerationStructure>, DriverError>
fn lease( &mut self, info: AccelerationStructureInfo ) -> Result<Lease<AccelerationStructure>, DriverError>
Auto Trait Implementations§
impl RefUnwindSafe for AccelerationStructure
impl Send for AccelerationStructure
impl Sync for AccelerationStructure
impl Unpin for AccelerationStructure
impl UnwindSafe for AccelerationStructure
Blanket Implementations§
source§impl<T> Alias<AccelerationStructureInfoBuilder, AccelerationStructure> for T
impl<T> Alias<AccelerationStructureInfoBuilder, AccelerationStructure> for T
source§fn alias(
&mut self,
builder: AccelerationStructureInfoBuilder
) -> Result<Arc<Lease<AccelerationStructure>>, DriverError>
fn alias( &mut self, builder: AccelerationStructureInfoBuilder ) -> Result<Arc<Lease<AccelerationStructure>>, DriverError>
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
§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>
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>
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)
&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)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.