Struct wgpu_core::resource::StagingBuffer

source ·
pub struct StagingBuffer {
    raw: Box<dyn DynBuffer>,
    device: Arc<Device>,
    pub(crate) size: BufferSize,
    is_coherent: bool,
    ptr: NonNull<u8>,
}
Expand description

A temporary buffer, consumed by the command that uses it.

A StagingBuffer is designed for one-shot uploads of data to the GPU. It is always created mapped, and the command that uses it destroys the buffer when it is done.

StagingBuffers can be created with queue_create_staging_buffer and used with queue_write_staging_buffer. They are also used internally by operations like queue_write_texture that need to upload data to the GPU, but that don’t belong to any particular wgpu command buffer.

Used StagingBuffers are accumulated in Device::pending_writes, to be freed once their associated operation’s queue submission has finished execution.

Fields§

§raw: Box<dyn DynBuffer>§device: Arc<Device>§size: BufferSize§is_coherent: bool§ptr: NonNull<u8>

Implementations§

source§

impl StagingBuffer

source

pub(crate) fn new( device: &Arc<Device>, size: BufferSize, ) -> Result<Self, DeviceError>

source

pub(crate) unsafe fn ptr(&self) -> NonNull<u8>

SAFETY: You must not call any functions of self until you stopped using the returned pointer.

source

pub(crate) fn write_zeros(&mut self)

source

pub(crate) fn write(&mut self, data: &[u8])

source

pub(crate) unsafe fn write_with_offset( &mut self, data: &[u8], src_offset: isize, dst_offset: isize, size: usize, )

SAFETY: The offsets and size must be in-bounds.

source

pub(crate) fn flush(self) -> FlushedStagingBuffer

Trait Implementations§

source§

impl Debug for StagingBuffer

source§

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

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

impl ResourceType for StagingBuffer

source§

const TYPE: &'static str = "StagingBuffer"

source§

impl StorageItem for StagingBuffer

source§

impl Send for StagingBuffer

source§

impl Sync for StagingBuffer

Auto Trait Implementations§

Blanket Implementations§

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
source§

impl<T> Downcast<T> for T

source§

fn downcast(&self) -> &T

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> TryFrom<U> for T
where U: Into<T>,

source§

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>,

source§

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.
source§

impl<T> Upcast<T> for T

source§

fn upcast(&self) -> Option<&T>

source§

impl<T> WasmNotSend for T
where T: Send,

source§

impl<T> WasmNotSendSync for T

source§

impl<T> WasmNotSync for T
where T: Sync,