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: HalApi,
pub unsafe fn as_hal<A>(
&self,
) -> Option<impl Deref<Target = <A as Api>::Buffer> + WasmNotSendSync>where
A: HalApi,
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.
§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().
It is available once the callback is called with an Ok response.
For the callback to complete, 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 will be called on the thread that first calls the above functions after the GPU work has completed. There are no restrictions on the code you can run in the callback, however on native the call to the function will not complete until the callback returns, so prefer keeping callbacks short and used to set flags, send messages, etc.
As long as a buffer is mapped, it is not available for use by any other commands; at all times, either the GPU or the CPU has exclusive access to the contents of the buffer.
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
boundshas a length less than 1. - If the start and end of
boundsare not be aligned to [MAP_ALIGNMENT].
pub fn get_mapped_range<S>(&self, bounds: S) -> BufferView<'_>where
S: RangeBounds<u64>,
pub fn get_mapped_range<S>(&self, bounds: S) -> BufferView<'_>where
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
boundshas a length less than 1. - If the start and end of
boundsare not aligned to [MAP_ALIGNMENT]. - If the buffer to which
selfrefers is not currently mapped. - If you try to create overlapping views of a buffer, mutable or otherwise.
pub fn get_mapped_range_mut<S>(&self, bounds: S) -> BufferViewMut<'_>where
S: RangeBounds<u64>,
pub fn get_mapped_range_mut<S>(&self, bounds: S) -> BufferViewMut<'_>where
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
boundshas a length less than 1. - If the start and end of
boundsare not aligned to [MAP_ALIGNMENT]. - If the buffer to which
selfrefers is not currently mapped. - If you try to create overlapping views of a buffer, mutable or otherwise.
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
type Inner = ExampleShaderStruct
Source§fn binding_type() -> BindingType
fn binding_type() -> BindingType
Source§fn buffer_desc(inner_size: u64) -> BufferDescriptor<'static>
fn buffer_desc(inner_size: u64) -> BufferDescriptor<'static>
Self::Inners.Source§fn as_binding<'a>(&'a self) -> BindingResource<'a>
fn as_binding<'a>(&'a self) -> BindingResource<'a>
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 !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
§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.