Struct screen_13::driver::buffer::Buffer

source ·
pub struct Buffer {
    pub info: BufferInfo,
    pub name: Option<String>,
    /* private fields */
}
Expand description

Smart pointer handle to a buffer object.

Also contains information about the object.

§Deref behavior

Buffer automatically dereferences to vk::Buffer (via the Deref trait), so you can call vk::Buffer’s methods on a value of type Buffer. To avoid name clashes with vk::Buffer’s methods, the methods of Buffer itself are associated functions, called using fully qualified syntax:

let addr = Buffer::device_address(&my_buf);

Fields§

§info: BufferInfo

Information used to create this object.

§name: Option<String>

A name for debugging purposes.

Implementations§

source§

impl Buffer

source

pub fn create( device: &Arc<Device>, info: impl Into<BufferInfo> ) -> Result<Self, DriverError>

Creates a new buffer on the given device.

§Examples

Basic usage:

const SIZE: vk::DeviceSize = 1024;
let info = BufferInfo::host_mem(SIZE, vk::BufferUsageFlags::UNIFORM_BUFFER);
let buf = Buffer::create(&device, info)?;

assert_ne!(*buf, vk::Buffer::null());
assert_eq!(buf.info.size, SIZE);
source

pub fn create_from_slice( device: &Arc<Device>, usage: BufferUsageFlags, slice: impl AsRef<[u8]> ) -> Result<Self, DriverError>

Creates a new mappable buffer on the given device and fills it with the data in slice.

§Examples

Basic usage:

const DATA: [u8; 4] = [0xfe, 0xed, 0xbe, 0xef];
let buf = Buffer::create_from_slice(&device, vk::BufferUsageFlags::UNIFORM_BUFFER, &DATA)?;

assert_ne!(*buf, vk::Buffer::null());
assert_eq!(buf.info.size, 4);
assert_eq!(Buffer::mapped_slice(&buf), &DATA);
source

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::Buffer handle to external code such as Ash or Erupt bindings.

§Examples

Basic usage:

// Initially we want to "Read Other"
let next = AccessType::ComputeShaderReadOther;
let prev = Buffer::access(&my_buf, next);
assert_eq!(prev, AccessType::Nothing);

// External code may now "Read Other"; no barrier required

// Subsequently we want to "Write"
let next = AccessType::ComputeShaderWrite;
let prev = Buffer::access(&my_buf, next);
assert_eq!(prev, AccessType::ComputeShaderReadOther);

// A barrier on "Read Other" before "Write" is required!
source

pub fn copy_from_slice( this: &mut Self, offset: DeviceSize, slice: impl AsRef<[u8]> )

Updates a mappable buffer starting at offset with the data in slice.

§Panics

Panics if the buffer was not created with the mappable flag set to true.

§Examples

Basic usage:

const DATA: [u8; 4] = [0xde, 0xad, 0xc0, 0xde];
Buffer::copy_from_slice(&mut my_buf, 0, &DATA);

assert_eq!(Buffer::mapped_slice(&my_buf), &DATA);
source

pub fn device_address(this: &Self) -> DeviceAddress

Returns the device address of this object.

§Panics

Panics if the buffer was not created with the SHADER_DEVICE_ADDRESS usage flag.

§Examples

Basic usage:

let addr = Buffer::device_address(&my_buf);

assert_ne!(addr, 0);
source

pub fn mapped_slice(this: &Self) -> &[u8]

Returns a mapped slice.

§Panics

Panics if the buffer was not created with the mappable flag set to true.

§Examples

Basic usage:

// my_buf is mappable and filled with four zeroes
let data = Buffer::mapped_slice(&my_buf);

assert_eq!(data.len(), 4);
assert_eq!(data[0], 0x00);
source

pub fn mapped_slice_mut(this: &mut Self) -> &mut [u8]

Returns a mapped mutable slice.

§Panics

Panics if the buffer was not created with the mappable flag set to true.

§Examples

Basic usage:

let mut data = Buffer::mapped_slice_mut(&mut my_buf);
data.copy_from_slice(&42f32.to_be_bytes());

assert_eq!(data.len(), 4);
assert_eq!(data[0], 0x42);

Trait Implementations§

source§

impl<T> Alias<BufferInfo, Buffer> for AliasPool<T>
where T: Pool<BufferInfo, Buffer>,

source§

fn alias(&mut self, info: BufferInfo) -> Result<Arc<Lease<Buffer>>, DriverError>

Aliases a resource.
source§

impl Bind<&mut RenderGraph, BufferNode> for Buffer

source§

fn bind(self, graph: &mut RenderGraph) -> BufferNode

Binds the resource to a graph-like object. Read more
source§

impl Debug for Buffer

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Deref for Buffer

§

type Target = Buffer

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Drop for Buffer

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T> Pool<BufferInfo, Buffer> for AliasPool<T>
where T: Pool<BufferInfo, Buffer>,

source§

fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl Pool<BufferInfo, Buffer> for FifoPool

source§

fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl Pool<BufferInfo, Buffer> for HashPool

source§

fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl Pool<BufferInfo, Buffer> for LazyPool

source§

fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>

Lease a resource.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Alias<BufferInfoBuilder, Buffer> for T
where T: Alias<BufferInfo, Buffer>,

source§

fn alias( &mut self, builder: BufferInfoBuilder ) -> Result<Arc<Lease<Buffer>>, DriverError>

Aliases a resource.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: 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>

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)

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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pool<BufferInfoBuilder, Buffer> for T
where T: Pool<BufferInfo, Buffer>,

source§

fn lease( &mut self, builder: BufferInfoBuilder ) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more