pub(crate) struct TextureTracker<A: HalApi> {
    start_set: TextureStateSet,
    end_set: TextureStateSet,
    metadata: ResourceMetadata<A>,
    temp: Vec<PendingTransition<TextureUses>>,
    _phantom: PhantomData<A>,
}
Expand description

Stores all texture state within a command buffer or device.

Fields§

§start_set: TextureStateSet§end_set: TextureStateSet§metadata: ResourceMetadata<A>§temp: Vec<PendingTransition<TextureUses>>§_phantom: PhantomData<A>

Implementations§

source§

impl<A: HalApi> TextureTracker<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 Texture 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<TextureId>> + '_

Returns a list of all textures tracked.

source

pub fn drain(&mut self) -> Drain<'_, PendingTransition<TextureUses>>

Drains all currently pending transitions.

source

pub unsafe fn get_ref_count(&self, id: Valid<TextureId>) -> &RefCount

Get the refcount of the given resource.

Safety

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

The resource must be tracked by this tracker.

source

pub fn insert_single( &mut self, id: TextureId, ref_count: RefCount, usage: TextureUses )

Inserts a single texture and a state into the resource tracker.

If the resource already exists in the tracker, this will panic.

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

source

pub fn set_single( &mut self, texture: &Texture<A>, id: TextureId, selector: TextureSelector, new_state: TextureUses ) -> Option<Drain<'_, PendingTransition<TextureUses>>>

Sets the state of a single texture.

If a transition is needed to get the texture into the given state, that transition is returned.

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

source

pub fn set_from_tracker( &mut self, storage: &Storage<Texture<A>, TextureId>, tracker: &Self )

Sets the given state for all texture in the given tracker.

If a transition is needed to get the texture into the needed state, those transitions are stored within the tracker. A subsequent call to Self::drain is needed to get those transitions.

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

source

pub fn set_from_usage_scope( &mut self, storage: &Storage<Texture<A>, TextureId>, scope: &TextureUsageScope<A> )

Sets the given state for all textures in the given UsageScope.

If a transition is needed to get the textures into the needed state, those transitions are stored within the tracker. A subsequent call to Self::drain is needed to get those transitions.

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

source

pub unsafe fn set_and_remove_from_usage_scope_sparse( &mut self, storage: &Storage<Texture<A>, TextureId>, scope: &mut TextureUsageScope<A>, bind_group_state: &TextureBindGroupState<A> )

Iterates through all textures in the given bind group and adopts the state given for those textures in the UsageScope. It also removes all touched textures from the usage scope.

If a transition is needed to get the textures into the needed state, those transitions are stored within the tracker. A subsequent call to Self::drain is needed to get those transitions.

This is a really funky method used by Compute Passes to generate barriers after a call to dispatch without needing to iterate over all elements in the usage scope. We use each the bind group as a source of which IDs to look at. The bind groups must have first been added to the usage scope.

Safety

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

source

pub fn remove(&mut self, id: Valid<TextureId>) -> bool

Unconditionally removes the given resource from the tracker.

Returns true if the resource was removed.

If the ID is higher than the length of internal vectors, false will be returned.

source

pub fn remove_abandoned(&mut self, id: Valid<TextureId>) -> bool

Removes the given resource from the tracker iff we have the last reference to the resource and the epoch matches.

Returns true if the resource was removed.

If the ID is higher than the length of internal vectors, false will be returned.

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

impl<A> UnwindSafe for TextureTracker<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,