Struct vulkano::buffer::immutable::ImmutableBuffer
[−]
[src]
pub struct ImmutableBuffer<T: ?Sized, A = StdMemoryPoolAlloc> { /* fields omitted */ }
Buffer that is written once then read for as long as it is alive.
Methods
impl<T: ?Sized> ImmutableBuffer<T>
[src]
fn from_data<'a, I>(
data: T,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<T>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
T: 'static + Send + Sync + Sized,
data: T,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<T>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
T: 'static + Send + Sync + Sized,
Builds an ImmutableBuffer
from some data.
This function builds a memory-mapped intermediate buffer, writes the data to it, builds a command buffer that copies from this intermediate buffer to the final buffer, and finally submits the command buffer as a future.
This function returns two objects: the newly-created buffer, and a future representing
the initial upload operation. In order to be allowed to use the ImmutableBuffer
, you must
either submit your operation after this future, or execute this future and wait for it to
be finished before submitting your own operation.
fn from_buffer<'a, B, I>(
source: B,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<T>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
B: BufferAccess + TypedBufferAccess<Content = T> + 'static + Clone + Send + Sync,
I: IntoIterator<Item = QueueFamily<'a>>,
T: 'static + Send + Sync,
source: B,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<T>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
B: BufferAccess + TypedBufferAccess<Content = T> + 'static + Clone + Send + Sync,
I: IntoIterator<Item = QueueFamily<'a>>,
T: 'static + Send + Sync,
Builds an ImmutableBuffer
that copies its data from another buffer.
This function returns two objects: the newly-created buffer, and a future representing
the initial upload operation. In order to be allowed to use the ImmutableBuffer
, you must
either submit your operation after this future, or execute this future and wait for it to
be finished before submitting your own operation.
impl<T> ImmutableBuffer<T>
[src]
unsafe fn uninitialized<'a, I>(
device: Arc<Device>,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<T>>, ImmutableBufferInitialization<T>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
device: Arc<Device>,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<T>>, ImmutableBufferInitialization<T>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
Builds a new buffer with uninitialized data. Only allowed for sized data.
Returns two things: the buffer, and a special access that should be used for the initial upload to the buffer.
You will get an error if you try to use the buffer before using the initial upload access. However this function doesn't check whether you actually used this initial upload to fill the buffer like you're supposed to do.
You will also get an error if you try to get exclusive access to the final buffer.
Safety
- The
ImmutableBufferInitialization
should be used to fill the buffer with some initial data, otherwise the content is undefined.
impl<T> ImmutableBuffer<[T]>
[src]
fn from_iter<'a, D, I>(
data: D,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<[T]>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
D: ExactSizeIterator<Item = T>,
T: 'static + Send + Sync + Sized,
data: D,
usage: BufferUsage,
queue_families: I,
queue: Arc<Queue>
) -> Result<(Arc<ImmutableBuffer<[T]>>, CommandBufferExecFuture<NowFuture, AutoCommandBuffer>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
D: ExactSizeIterator<Item = T>,
T: 'static + Send + Sync + Sized,
unsafe fn uninitialized_array<'a, I>(
device: Arc<Device>,
len: usize,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<[T]>>, ImmutableBufferInitialization<[T]>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
device: Arc<Device>,
len: usize,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<[T]>>, ImmutableBufferInitialization<[T]>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
Builds a new buffer with uninitialized data. Can be used for arrays.
Returns two things: the buffer, and a special access that should be used for the initial upload to the buffer.
You will get an error if you try to use the buffer before using the initial upload access. However this function doesn't check whether you actually used this initial upload to fill the buffer like you're supposed to do.
You will also get an error if you try to get exclusive access to the final buffer.
Safety
- The
ImmutableBufferInitialization
should be used to fill the buffer with some initial data, otherwise the content is undefined.
impl<T: ?Sized> ImmutableBuffer<T>
[src]
unsafe fn raw<'a, I>(
device: Arc<Device>,
size: usize,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<T>>, ImmutableBufferInitialization<T>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
device: Arc<Device>,
size: usize,
usage: BufferUsage,
queue_families: I
) -> Result<(Arc<ImmutableBuffer<T>>, ImmutableBufferInitialization<T>), OomError> where
I: IntoIterator<Item = QueueFamily<'a>>,
Builds a new buffer without checking the size and granting free access for the initial upload.
Returns two things: the buffer, and a special access that should be used for the initial upload to the buffer. You will get an error if you try to use the buffer before using the initial upload access. However this function doesn't check whether you used this initial upload to fill the buffer. You will also get an error if you try to get exclusive access to the final buffer.
Safety
- You must ensure that the size that you pass is correct for
T
. - The
ImmutableBufferInitialization
should be used to fill the buffer with some initial data.
impl<T: ?Sized, A> ImmutableBuffer<T, A>
[src]
fn device(&self) -> &Arc<Device>
Returns the device used to create this buffer.
fn queue_families(&self) -> Vec<QueueFamily>
Returns the queue families this buffer can be used on.
Trait Implementations
impl<T: ?Sized, A> BufferAccess for ImmutableBuffer<T, A>
[src]
fn inner(&self) -> BufferInner
Returns the inner information about this buffer.
fn size(&self) -> usize
Returns the size of the buffer in bytes.
fn conflict_key(&self, self_offset: usize, self_size: usize) -> u64
Returns a key that uniquely identifies the range given by offset/size. Read more
fn try_gpu_lock(
&self,
exclusive_access: bool,
queue: &Queue
) -> Result<(), AccessError>
&self,
exclusive_access: bool,
queue: &Queue
) -> Result<(), AccessError>
Locks the resource for usage on the GPU. Returns an error if the lock can't be acquired. Read more
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
unsafe fn unlock(&self)
Unlocks the resource previously acquired with try_gpu_lock
or increase_gpu_lock
. Read more
fn len(&self) -> usize where
Self: TypedBufferAccess,
Self::Content: Content,
Self: TypedBufferAccess,
Self::Content: Content,
Returns the length of the buffer in number of elements. Read more
fn as_buffer_slice(&self) -> BufferSlice<Self::Content, &Self> where
Self: Sized + TypedBufferAccess,
Self: Sized + TypedBufferAccess,
Builds a BufferSlice
object holding the buffer by reference.
fn slice<T>(&self, range: Range<usize>) -> Option<BufferSlice<[T], &Self>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
Self: Sized + TypedBufferAccess<Content = [T]>,
Builds a BufferSlice
object holding part of the buffer by reference. Read more
fn into_buffer_slice(self) -> BufferSlice<Self::Content, Self> where
Self: Sized + TypedBufferAccess,
Self: Sized + TypedBufferAccess,
Builds a BufferSlice
object holding the buffer by value.
fn index<T>(&self, index: usize) -> Option<BufferSlice<[T], &Self>> where
Self: Sized + TypedBufferAccess<Content = [T]>,
Self: Sized + TypedBufferAccess<Content = [T]>,
Builds a BufferSlice
object holding part of the buffer by reference. Read more
fn conflicts_buffer(
&self,
self_offset: usize,
self_size: usize,
other: &BufferAccess,
other_offset: usize,
other_size: usize
) -> bool
&self,
self_offset: usize,
self_size: usize,
other: &BufferAccess,
other_offset: usize,
other_size: usize
) -> bool
Returns true if an access to self
(as defined by self_offset
and self_size
) potentially overlaps the same memory as an access to other
(as defined by other_offset
and other_size
). Read more
fn conflicts_image(
&self,
self_offset: usize,
self_size: usize,
other: &ImageAccess,
other_first_layer: u32,
other_num_layers: u32,
other_first_mipmap: u32,
other_num_mipmaps: u32
) -> bool
&self,
self_offset: usize,
self_size: usize,
other: &ImageAccess,
other_first_layer: u32,
other_num_layers: u32,
other_first_mipmap: u32,
other_num_mipmaps: u32
) -> bool
Returns true if an access to self
(as defined by self_offset
and self_size
) potentially overlaps the same memory as an access to other
(as defined by other_first_layer
, other_num_layers
, other_first_mipmap
and other_num_mipmaps
). Read more
fn conflicts_buffer_all(&self, other: &BufferAccess) -> bool
Shortcut for conflicts_buffer
that compares the whole buffer to another.
fn conflicts_image_all(&self, other: &ImageAccess) -> bool
Shortcut for conflicts_image
that compares the whole buffer to a whole image.
fn conflict_key_all(&self) -> u64
Shortcut for conflict_key
that grabs the key of the whole buffer.
impl<T: ?Sized, A> TypedBufferAccess for ImmutableBuffer<T, A>
[src]
type Content = T
The type of the content.