Struct vulkano::buffer::cpu_access::CpuAccessibleBuffer
source · pub struct CpuAccessibleBuffer<T: ?Sized, A = PotentialDedicatedAllocation<StdMemoryPoolAlloc>> { /* private fields */ }
Expand description
Buffer whose content is accessible by the CPU.
Implementations
sourceimpl<T> CpuAccessibleBuffer<T>
impl<T> CpuAccessibleBuffer<T>
sourcepub fn from_data(
device: Arc<Device>,
usage: BufferUsage,
data: T
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>where
T: Content + 'static,
pub fn from_data(
device: Arc<Device>,
usage: BufferUsage,
data: T
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>where
T: Content + 'static,
Builds a new buffer with some data in it. Only allowed for sized data.
sourcepub unsafe fn uninitialized(
device: Arc<Device>,
usage: BufferUsage
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>
pub unsafe fn uninitialized(
device: Arc<Device>,
usage: BufferUsage
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>
Builds a new uninitialized buffer. Only allowed for sized data.
sourceimpl<T> CpuAccessibleBuffer<[T]>
impl<T> CpuAccessibleBuffer<[T]>
sourcepub fn from_iter<I>(
device: Arc<Device>,
usage: BufferUsage,
data: I
) -> Result<Arc<CpuAccessibleBuffer<[T]>>, DeviceMemoryAllocError>where
I: ExactSizeIterator<Item = T>,
T: Content + 'static,
pub fn from_iter<I>(
device: Arc<Device>,
usage: BufferUsage,
data: I
) -> Result<Arc<CpuAccessibleBuffer<[T]>>, DeviceMemoryAllocError>where
I: ExactSizeIterator<Item = T>,
T: Content + 'static,
Builds a new buffer that contains an array T
. The initial data comes from an iterator
that produces that list of Ts.
sourcepub unsafe fn uninitialized_array(
device: Arc<Device>,
len: usize,
usage: BufferUsage
) -> Result<Arc<CpuAccessibleBuffer<[T]>>, DeviceMemoryAllocError>
pub unsafe fn uninitialized_array(
device: Arc<Device>,
len: usize,
usage: BufferUsage
) -> Result<Arc<CpuAccessibleBuffer<[T]>>, DeviceMemoryAllocError>
Builds a new buffer. Can be used for arrays.
sourceimpl<T: ?Sized> CpuAccessibleBuffer<T>
impl<T: ?Sized> CpuAccessibleBuffer<T>
sourcepub unsafe fn raw<'a, I>(
device: Arc<Device>,
size: usize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>where
I: IntoIterator<Item = QueueFamily<'a>>,
pub unsafe fn raw<'a, I>(
device: Arc<Device>,
size: usize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<CpuAccessibleBuffer<T>>, DeviceMemoryAllocError>where
I: IntoIterator<Item = QueueFamily<'a>>,
Builds a new buffer without checking the size.
Safety
You must ensure that the size that you pass is correct for T
.
sourceimpl<T: ?Sized, A> CpuAccessibleBuffer<T, A>
impl<T: ?Sized, A> CpuAccessibleBuffer<T, A>
sourcepub fn queue_families(&self) -> Vec<QueueFamily<'_>>
pub fn queue_families(&self) -> Vec<QueueFamily<'_>>
Returns the queue families this buffer can be used on.
sourceimpl<T: ?Sized, A> CpuAccessibleBuffer<T, A>where
T: Content + 'static,
A: MemoryPoolAlloc,
impl<T: ?Sized, A> CpuAccessibleBuffer<T, A>where
T: Content + 'static,
A: MemoryPoolAlloc,
sourcepub fn read(&self) -> Result<ReadLock<'_, T>, ReadLockError>
pub fn read(&self) -> Result<ReadLock<'_, T>, ReadLockError>
Locks the buffer in order to read its content from the CPU.
If the buffer is currently used in exclusive mode by the GPU, this function will return
an error. Similarly if you called write()
on the buffer and haven’t dropped the lock,
this function will return an error as well.
After this function successfully locks the buffer, any attempt to submit a command buffer that uses it in exclusive mode will fail. You can still submit this buffer for non-exclusive accesses (ie. reads).
sourcepub fn write(&self) -> Result<WriteLock<'_, T>, WriteLockError>
pub fn write(&self) -> Result<WriteLock<'_, T>, WriteLockError>
Locks the buffer in order to write its content from the CPU.
If the buffer is currently in use by the GPU, this function will return an error. Similarly
if you called read()
on the buffer and haven’t dropped the lock, this function will
return an error as well.
After this function successfully locks the buffer, any attempt to submit a command buffer
that uses it and any attempt to call read()
will return an error.
Trait Implementations
sourceimpl<T: ?Sized, A> BufferAccess for CpuAccessibleBuffer<T, A>where
T: 'static + Send + Sync,
impl<T: ?Sized, A> BufferAccess for CpuAccessibleBuffer<T, A>where
T: 'static + Send + Sync,
sourcefn inner(&self) -> BufferInner<'_>
fn inner(&self) -> BufferInner<'_>
sourcefn conflicts_buffer(&self, other: &dyn BufferAccess) -> bool
fn conflicts_buffer(&self, other: &dyn BufferAccess) -> bool
self
potentially overlaps the same memory as an access to
other
. Read moresourcefn conflicts_image(&self, other: &dyn ImageAccess) -> bool
fn conflicts_image(&self, other: &dyn ImageAccess) -> bool
self
potentially overlaps the same memory as an access to
other
. Read moresourcefn conflict_key(&self) -> (u64, usize)
fn conflict_key(&self) -> (u64, usize)
sourcefn try_gpu_lock(
&self,
exclusive_access: bool,
_: &Queue
) -> Result<(), AccessError>
fn try_gpu_lock(
&self,
exclusive_access: bool,
_: &Queue
) -> Result<(), AccessError>
sourceunsafe fn increase_gpu_lock(&self)
unsafe fn increase_gpu_lock(&self)
sourcefn as_buffer_slice(&self) -> BufferSlice<Self::Content, &Self>where
Self: Sized + TypedBufferAccess,
fn as_buffer_slice(&self) -> BufferSlice<Self::Content, &Self>where
Self: Sized + TypedBufferAccess,
BufferSlice
object holding the buffer by reference.sourcefn slice<T>(&self, range: Range<usize>) -> Option<BufferSlice<[T], &Self>>where
Self: Sized + TypedBufferAccess<Content = [T]>,
fn slice<T>(&self, range: Range<usize>) -> Option<BufferSlice<[T], &Self>>where
Self: Sized + TypedBufferAccess<Content = [T]>,
BufferSlice
object holding part of the buffer by reference. Read moresourcefn into_buffer_slice(self) -> BufferSlice<Self::Content, Self>where
Self: Sized + TypedBufferAccess,
fn into_buffer_slice(self) -> BufferSlice<Self::Content, Self>where
Self: Sized + TypedBufferAccess,
BufferSlice
object holding the buffer by value.