pub(crate) struct BufferUsageScope<A: HalApi> {
    state: Vec<BufferUses>,
    metadata: ResourceMetadata<A>,
}
Expand description

Stores all buffer state within a single usage scope.

Fields§

§state: Vec<BufferUses>§metadata: ResourceMetadata<A>

Implementations§

source§

impl<A: HalApi> BufferUsageScope<A>

source

pub fn new() -> Self

source

fn tracker_assert_in_bounds(&self, index: usize)

source

pub fn set_size(&mut self, size: usize)

Sets the size of all the vectors inside the tracker.

Must be called with the highest possible Buffer ID before all unsafe functions are called.

source

fn allow_index(&mut self, index: usize)

Extend the vectors to let the given index be valid.

source

pub fn used(&self) -> impl Iterator<Item = Valid<BufferId>> + '_

Returns a list of all buffers tracked.

source

pub unsafe fn merge_bind_group( &mut self, bind_group: &BufferBindGroupState<A> ) -> Result<(), UsageConflict>

Merge the list of buffer states in the given bind group into this usage scope.

If any of the resulting states is invalid, stops the merge and returns a usage conflict with the details of the invalid state.

Because bind groups do not check if the union of all their states is valid, this method is allowed to return Err on the first bind group bound.

Safety

Self::set_size must be called with the maximum possible Buffer ID before this method is called.

source

pub fn merge_usage_scope(&mut self, scope: &Self) -> Result<(), UsageConflict>

Merge the list of buffer states in the given usage scope into this UsageScope.

If any of the resulting states is invalid, stops the merge and returns a usage conflict with the details of the invalid state.

If the given tracker uses IDs higher than the length of internal vectors, the vectors will be extended. A call to set_size is not needed.

source

pub fn merge_single<'a>( &mut self, storage: &'a Storage<Buffer<A>, BufferId>, id: BufferId, new_state: BufferUses ) -> Result<&'a Buffer<A>, UsageConflict>

Merge a single state into the UsageScope.

If the resulting state is invalid, returns a usage conflict with the details of the invalid state.

If the ID is higher than the length of internal vectors, the vectors will be extended. A call to set_size is not needed.

Trait Implementations§

source§

impl<A: Debug + HalApi> Debug for BufferUsageScope<A>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<A> RefUnwindSafe for BufferUsageScope<A>where A: RefUnwindSafe,

§

impl<A> Send for BufferUsageScope<A>where A: Send,

§

impl<A> Sync for BufferUsageScope<A>where A: Sync,

§

impl<A> Unpin for BufferUsageScope<A>where A: Unpin,

§

impl<A> UnwindSafe for BufferUsageScope<A>where A: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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> WasmNotSend for Twhere T: Send,

source§

impl<T> WasmNotSync for Twhere T: Sync,