pub struct ShaderBuffer { /* private fields */ }Methods from Deref<Target = Buffer>§
pub fn as_entire_binding(&self) -> BindingResource<'_>
pub fn as_entire_binding(&self) -> BindingResource<'_>
Return the binding view of the entire buffer.
pub fn as_entire_buffer_binding(&self) -> BufferBinding<'_>
pub fn as_entire_buffer_binding(&self) -> BufferBinding<'_>
Return the binding view of the entire buffer.
pub unsafe fn as_hal<A>(
&self,
) -> Option<impl Deref<Target = <A as Api>::Buffer> + WasmNotSendSync>where
A: Api,
Available on wgpu_core only.
pub unsafe fn as_hal<A>(
&self,
) -> Option<impl Deref<Target = <A as Api>::Buffer> + WasmNotSendSync>where
A: Api,
wgpu_core only.Get the [wgpu_hal] buffer from this Buffer.
Find the Api struct corresponding to the active backend in [wgpu_hal::api],
and pass that struct to the to the A type parameter.
Returns a guard that dereferences to the type of the hal backend
which implements A::Buffer.
§Types
The returned type depends on the backend:
- [
hal::api::Vulkan] uses [hal::vulkan::Buffer] hal::api::Metaluseshal::metal::Bufferhal::api::Dx12useshal::dx12::Buffer- [
hal::api::Gles] uses [hal::gles::Buffer]
§Deadlocks
- The returned guard holds a read-lock on a device-local “destruction”
lock, which will cause all calls to
destroyto block until the guard is released.
§Errors
This method will return None if:
- The buffer is not from the backend specified by
A. - The buffer is from the
webgpuorcustombackend. - The buffer has had [
Self::destroy()] called on it.
§Safety
- The returned resource must not be destroyed unless the guard is the last reference to it and it is not in use by the GPU. The guard and handle may be dropped at any time however.
- All the safety requirements of wgpu-hal must be upheld.
pub fn slice<S>(&self, bounds: S) -> BufferSlice<'_>where
S: RangeBounds<u64>,
pub fn slice<S>(&self, bounds: S) -> BufferSlice<'_>where
S: RangeBounds<u64>,
Returns a [BufferSlice] referring to the portion of self’s contents
indicated by bounds. Regardless of what sort of data self stores,
bounds start and end are given in bytes.
A [BufferSlice] can be used to supply vertex and index data, or to map
buffer contents for access from the CPU. See the [BufferSlice]
documentation for details.
The range argument can be half or fully unbounded: for example,
buffer.slice(..) refers to the entire buffer, and buffer.slice(n..)
refers to the portion starting at the nth byte and extending to the
end of the buffer.
§Panics
- If
boundsis outside of the bounds ofself. - If
boundshas a length less than 1.
pub fn unmap(&self)
pub fn unmap(&self)
Unmaps the buffer from host memory.
This terminates the effect of all previous map_async() operations and
makes the buffer available for use by the GPU again.
pub fn destroy(&self)
pub fn destroy(&self)
Destroy the associated native resources as soon as possible.
pub fn size(&self) -> u64
pub fn size(&self) -> u64
Returns the length of the buffer allocation in bytes.
This is always equal to the size that was specified when creating the buffer.
pub fn usage(&self) -> BufferUsages
pub fn usage(&self) -> BufferUsages
Returns the allowed usages for this Buffer.
This is always equal to the usage that was specified when creating the buffer.
pub fn map_async<S>(
&self,
mode: MapMode,
bounds: S,
callback: impl FnOnce(Result<(), BufferAsyncError>) + WasmNotSend + 'static,
)where
S: RangeBounds<u64>,
pub fn map_async<S>(
&self,
mode: MapMode,
bounds: S,
callback: impl FnOnce(Result<(), BufferAsyncError>) + WasmNotSend + 'static,
)where
S: RangeBounds<u64>,
Map the buffer to host (CPU) memory, making it available for reading or writing via
get_mapped_range(). The buffer becomes accessible once the
callback is invoked with Ok.
Use this when you want to map the buffer immediately. If you need to submit GPU work that
uses the buffer before mapping it, use map_buffer_on_submit on
CommandEncoder, CommandBuffer, RenderPass, or
ComputePass to schedule the mapping after submission. This avoids extra calls to
[Buffer::map_async()] or [BufferSlice::map_async()] and lets you initiate mapping from a
more convenient place.
For the callback to run, either queue.submit(..), instance.poll_all(..),
or device.poll(..) must be called elsewhere in the runtime, possibly integrated into
an event loop or run on a separate thread.
The callback runs on the thread that first calls one of the above functions after the GPU work completes. There are no restrictions on the code you can run in the callback; however, on native the polling call will not return until the callback finishes, so keep callbacks short (set flags, send messages, etc.).
While a buffer is mapped, it cannot be used by other commands; at any time, either the GPU or the CPU has exclusive access to the buffer’s contents.
This can also be performed using [BufferSlice::map_async()].
§Panics
- If the buffer is already mapped.
- If the buffer’s [
BufferUsages] do not allow the requested [MapMode]. - If
boundsis outside of the bounds ofself. - If
boundsdoes not start at a multiple of [MAP_ALIGNMENT]. - If
boundshas a length that is not a multiple of 4 greater than 0.
pub fn get_mapped_range<S>(&self, bounds: S) -> BufferViewwhere
S: RangeBounds<u64>,
pub fn get_mapped_range<S>(&self, bounds: S) -> BufferViewwhere
S: RangeBounds<u64>,
Gain read-only access to the bytes of a mapped [Buffer].
Returns a [BufferView] referring to the buffer range represented by
self. See the documentation for [BufferView] for details.
bounds may be less than the bounds passed to [Self::map_async()],
and multiple views may be obtained and used simultaneously as long as they do not overlap.
This can also be performed using [BufferSlice::get_mapped_range()].
§Panics
- If
boundsis outside of the bounds ofself. - If
boundsdoes not start at a multiple of [MAP_ALIGNMENT]. - If
boundshas a length that is not a multiple of 4 greater than 0. - If the buffer to which
selfrefers is not currently mapped. - If you try to create a view which overlaps an existing [
BufferViewMut].
pub fn get_mapped_range_mut<S>(&self, bounds: S) -> BufferViewMutwhere
S: RangeBounds<u64>,
pub fn get_mapped_range_mut<S>(&self, bounds: S) -> BufferViewMutwhere
S: RangeBounds<u64>,
Gain write access to the bytes of a mapped [Buffer].
Returns a [BufferViewMut] referring to the buffer range represented by
self. See the documentation for [BufferViewMut] for more details.
bounds may be less than the bounds passed to [Self::map_async()],
and multiple views may be obtained and used simultaneously as long as they do not overlap.
This can also be performed using [BufferSlice::get_mapped_range_mut()].
§Panics
- If
boundsis outside of the bounds ofself. - If
boundsdoes not start at a multiple of [MAP_ALIGNMENT]. - If
boundshas a length that is not a multiple of 4 greater than 0. - If the buffer to which
selfrefers is not currently mapped. - If you try to create a view which overlaps an existing [
BufferView] or [BufferViewMut].
Trait Implementations§
Source§impl Clone for ShaderBuffer
impl Clone for ShaderBuffer
Source§fn clone(&self) -> ShaderBuffer
fn clone(&self) -> ShaderBuffer
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ShaderBuffer
impl Debug for ShaderBuffer
Source§impl Deref for ShaderBuffer
impl Deref for ShaderBuffer
Source§impl Hash for ShaderBuffer
impl Hash for ShaderBuffer
Source§impl MewBuffer for ShaderBuffer
impl MewBuffer for ShaderBuffer
Source§type Inner = ExampleShaderStruct
type Inner = ExampleShaderStruct
Source§fn new(buffer: Buffer) -> Self
fn new(buffer: Buffer) -> Self
wgpu::Buffer.Source§fn buffer_desc(inner_size: u64) -> BufferDescriptor<'static>
fn buffer_desc(inner_size: u64) -> BufferDescriptor<'static>
wgpu::BufferDescriptor
to build this type of buffer, with the capacity to fit some number of Self::Inners.Source§impl MewBufferBinding for ShaderBuffer
impl MewBufferBinding for ShaderBuffer
Source§fn binding_type() -> BindingType
fn binding_type() -> BindingType
wgpu::BindingType
to use for this type of buffer.Source§fn as_binding<'a>(&'a self) -> BindingResource<'a>
fn as_binding<'a>(&'a self) -> BindingResource<'a>
wgpu::BindingResource
to bind it in a bind group.Source§impl Ord for ShaderBuffer
impl Ord for ShaderBuffer
Source§fn cmp(&self, other: &ShaderBuffer) -> Ordering
fn cmp(&self, other: &ShaderBuffer) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for ShaderBuffer
impl PartialEq for ShaderBuffer
Source§impl PartialOrd for ShaderBuffer
impl PartialOrd for ShaderBuffer
impl Eq for ShaderBuffer
impl StructuralPartialEq for ShaderBuffer
Auto Trait Implementations§
impl Freeze for ShaderBuffer
impl !RefUnwindSafe for ShaderBuffer
impl Send for ShaderBuffer
impl Sync for ShaderBuffer
impl Unpin for ShaderBuffer
impl UnsafeUnpin for ShaderBuffer
impl !UnwindSafe for ShaderBuffer
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.