Struct vulkano::buffer::device_local::DeviceLocalBuffer
source · [−]pub struct DeviceLocalBuffer<T, A = PotentialDedicatedAllocation<StdMemoryPoolAlloc>> where
T: BufferContents + ?Sized, { /* private fields */ }
Expand description
Buffer whose content is in device-local memory.
This buffer type is useful in order to store intermediary data. For example you execute a compute shader that writes to this buffer, then read the content of the buffer in a following compute or graphics pipeline.
The DeviceLocalBuffer
will be in device-local memory, unless the device doesn’t provide any
device-local memory.
Implementations
sourceimpl<T> DeviceLocalBuffer<T> where
T: BufferContents,
impl<T> DeviceLocalBuffer<T> where
T: BufferContents,
sourcepub fn new<'a, I>(
device: Arc<Device>,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
pub fn new<'a, I>(
device: Arc<Device>,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
sourceimpl<T> DeviceLocalBuffer<[T]> where
[T]: BufferContents,
impl<T> DeviceLocalBuffer<[T]> where
[T]: BufferContents,
sourcepub fn array<'a, I>(
device: Arc<Device>,
len: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<[T]>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
pub fn array<'a, I>(
device: Arc<Device>,
len: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<[T]>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
Builds a new buffer. Can be used for arrays.
Panics
- Panics if
T
has zero size. - Panics if
len
is zero.
sourceimpl<T> DeviceLocalBuffer<T> where
T: BufferContents + ?Sized,
impl<T> DeviceLocalBuffer<T> where
T: BufferContents + ?Sized,
sourcepub unsafe fn raw<'a, I>(
device: Arc<Device>,
size: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
pub unsafe fn raw<'a, I>(
device: Arc<Device>,
size: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
sourcepub unsafe fn raw_with_exportable_fd<'a, I>(
device: Arc<Device>,
size: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
pub unsafe fn raw_with_exportable_fd<'a, I>(
device: Arc<Device>,
size: DeviceSize,
usage: BufferUsage,
queue_families: I
) -> Result<Arc<DeviceLocalBuffer<T>>, DeviceMemoryAllocationError> where
I: IntoIterator<Item = QueueFamily<'a>>,
Same as raw
but with exportable fd option for the allocated memory on Linux/BSD
Panics
- Panics if
size
is zero.
sourcepub fn export_posix_fd(&self) -> Result<File, DeviceMemoryExportError>
pub fn export_posix_fd(&self) -> Result<File, DeviceMemoryExportError>
Exports posix file descriptor for the allocated memory
requires khr_external_memory_fd
and khr_external_memory
extensions to be loaded.
Only works on Linux/BSD.
sourceimpl<T, A> DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
impl<T, A> DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
sourcepub fn queue_families(&self) -> Vec<QueueFamily<'_>>
pub fn queue_families(&self) -> Vec<QueueFamily<'_>>
Returns the queue families this buffer can be used on.
Trait Implementations
sourceimpl<T, A> BufferAccess for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
impl<T, A> BufferAccess for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
sourcefn inner(&self) -> BufferInner<'_>
fn inner(&self) -> BufferInner<'_>
Returns the inner information about this buffer.
sourcefn size(&self) -> DeviceSize
fn size(&self) -> DeviceSize
Returns the size of the buffer in bytes.
sourcefn conflict_key(&self) -> (u64, u64)
fn conflict_key(&self) -> (u64, u64)
Returns a key that uniquely identifies the buffer. Two buffers or images that potentially overlap in memory must return the same key. Read more
sourcefn try_gpu_lock(&self, exclusive: bool, _: &Queue) -> Result<(), AccessError>
fn try_gpu_lock(&self, exclusive: bool, _: &Queue) -> Result<(), AccessError>
Locks the resource for usage on the GPU. Returns an error if the lock can’t be acquired. Read more
sourceunsafe fn increase_gpu_lock(&self)
unsafe fn increase_gpu_lock(&self)
Locks the resource for usage on the GPU. Supposes that the resource is already locked, and simply increases the lock by one. Read more
sourceunsafe fn unlock(&self)
unsafe fn unlock(&self)
Unlocks the resource previously acquired with try_gpu_lock
or increase_gpu_lock
. Read more
sourcefn into_buffer_slice(self: &Arc<Self>) -> Arc<BufferSlice<Self::Content, Self>> where
Self: Sized + TypedBufferAccess,
fn into_buffer_slice(self: &Arc<Self>) -> Arc<BufferSlice<Self::Content, Self>> where
Self: Sized + TypedBufferAccess,
Returns a BufferSlice
covering the whole buffer.
sourcefn slice<T>(
self: &Arc<Self>,
range: Range<DeviceSize>
) -> Option<Arc<BufferSlice<[T], Self>>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
fn slice<T>(
self: &Arc<Self>,
range: Range<DeviceSize>
) -> Option<Arc<BufferSlice<[T], Self>>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
Returns a BufferSlice
for a subrange of elements in the buffer. Returns None
if
out of range. Read more
sourcefn index<T>(
self: &Arc<Self>,
index: DeviceSize
) -> Option<Arc<BufferSlice<T, Self>>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
fn index<T>(
self: &Arc<Self>,
index: DeviceSize
) -> Option<Arc<BufferSlice<T, Self>>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
Returns a BufferSlice
for a single element in the buffer. Returns None
if out of range. Read more
sourcefn raw_device_address(&self) -> Result<NonZeroU64, BufferDeviceAddressError>
fn raw_device_address(&self) -> Result<NonZeroU64, BufferDeviceAddressError>
Gets the device address for this buffer. Read more
sourceimpl<T: Debug, A: Debug> Debug for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
impl<T: Debug, A: Debug> Debug for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
sourceimpl<T, A> DeviceOwned for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
impl<T, A> DeviceOwned for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
sourceimpl<T, A> Hash for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
impl<T, A> Hash for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
sourceimpl<T, A> PartialEq<DeviceLocalBuffer<T, A>> for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
impl<T, A> PartialEq<DeviceLocalBuffer<T, A>> for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
sourceimpl<T, A> TypedBufferAccess for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
impl<T, A> TypedBufferAccess for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
type Content = T
type Content = T
The type of the content.
sourcefn len(&self) -> DeviceSize
fn len(&self) -> DeviceSize
Returns the length of the buffer in number of elements. Read more
impl<T, A> Eq for DeviceLocalBuffer<T, A> where
T: BufferContents + ?Sized,
A: Send + Sync,
Auto Trait Implementations
impl<T: ?Sized, A> RefUnwindSafe for DeviceLocalBuffer<T, A> where
A: RefUnwindSafe,
T: RefUnwindSafe,
impl<T: ?Sized, A> Send for DeviceLocalBuffer<T, A> where
A: Send,
impl<T: ?Sized, A> Sync for DeviceLocalBuffer<T, A> where
A: Sync,
impl<T: ?Sized, A> Unpin for DeviceLocalBuffer<T, A> where
A: Unpin,
impl<T: ?Sized, A> UnwindSafe for DeviceLocalBuffer<T, A> where
A: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more