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
impl Buffer
sourcepub fn create(
device: &Arc<Device>,
info: impl Into<BufferInfo>
) -> Result<Self, DriverError>
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);
sourcepub fn create_from_slice(
device: &Arc<Device>,
usage: BufferUsageFlags,
slice: impl AsRef<[u8]>
) -> Result<Self, DriverError>
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);
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::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!
sourcepub fn copy_from_slice(
this: &mut Self,
offset: DeviceSize,
slice: impl AsRef<[u8]>
)
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);
sourcepub fn device_address(this: &Self) -> DeviceAddress
pub fn device_address(this: &Self) -> DeviceAddress
sourcepub fn mapped_slice(this: &Self) -> &[u8] ⓘ
pub fn mapped_slice(this: &Self) -> &[u8] ⓘ
sourcepub fn mapped_slice_mut(this: &mut Self) -> &mut [u8] ⓘ
pub fn mapped_slice_mut(this: &mut Self) -> &mut [u8] ⓘ
Trait Implementations§
source§impl<T> Alias<BufferInfo, Buffer> for AliasPool<T>
impl<T> Alias<BufferInfo, Buffer> for AliasPool<T>
source§fn alias(&mut self, info: BufferInfo) -> Result<Arc<Lease<Buffer>>, DriverError>
fn alias(&mut self, info: BufferInfo) -> Result<Arc<Lease<Buffer>>, DriverError>
source§impl Bind<&mut RenderGraph, BufferNode> for Buffer
impl Bind<&mut RenderGraph, BufferNode> for Buffer
source§fn bind(self, graph: &mut RenderGraph) -> BufferNode
fn bind(self, graph: &mut RenderGraph) -> BufferNode
source§impl<T> Pool<BufferInfo, Buffer> for AliasPool<T>
impl<T> Pool<BufferInfo, Buffer> for AliasPool<T>
source§fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
source§impl Pool<BufferInfo, Buffer> for FifoPool
impl Pool<BufferInfo, Buffer> for FifoPool
source§fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
source§impl Pool<BufferInfo, Buffer> for HashPool
impl Pool<BufferInfo, Buffer> for HashPool
source§fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
source§impl Pool<BufferInfo, Buffer> for LazyPool
impl Pool<BufferInfo, Buffer> for LazyPool
source§fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>
Auto Trait Implementations§
impl RefUnwindSafe for Buffer
impl Send for Buffer
impl Sync for Buffer
impl Unpin for Buffer
impl UnwindSafe for Buffer
Blanket Implementations§
source§impl<T> Alias<BufferInfoBuilder, Buffer> for T
impl<T> Alias<BufferInfoBuilder, Buffer> for T
source§fn alias(
&mut self,
builder: BufferInfoBuilder
) -> Result<Arc<Lease<Buffer>>, DriverError>
fn alias( &mut self, builder: BufferInfoBuilder ) -> Result<Arc<Lease<Buffer>>, 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.