Struct wgpu_core::track::texture::TextureTracker
source · pub(crate) struct TextureTracker {
start_set: TextureStateSet,
end_set: TextureStateSet,
metadata: ResourceMetadata<Arc<Texture>>,
temp: Vec<PendingTransition<TextureUses>>,
}
Expand description
Stores all texture state within a command buffer.
Fields§
§start_set: TextureStateSet
§end_set: TextureStateSet
§metadata: ResourceMetadata<Arc<Texture>>
§temp: Vec<PendingTransition<TextureUses>>
Implementations§
source§impl TextureTracker
impl TextureTracker
pub fn new() -> Self
fn tracker_assert_in_bounds(&self, index: usize)
sourcepub fn set_size(&mut self, size: usize)
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.
sourcefn allow_index(&mut self, index: usize)
fn allow_index(&mut self, index: usize)
Extend the vectors to let the given index be valid.
sourcepub fn contains(&self, texture: &Texture) -> bool
pub fn contains(&self, texture: &Texture) -> bool
Returns true if the tracker owns the given texture.
sourcepub fn used_resources(&self) -> impl Iterator<Item = &Arc<Texture>> + '_
pub fn used_resources(&self) -> impl Iterator<Item = &Arc<Texture>> + '_
Returns a list of all textures tracked.
sourcepub fn drain_transitions<'a>(
&'a mut self,
snatch_guard: &'a SnatchGuard<'a>,
) -> (Vec<PendingTransition<TextureUses>>, Vec<Option<&'a TextureInner>>)
pub fn drain_transitions<'a>( &'a mut self, snatch_guard: &'a SnatchGuard<'a>, ) -> (Vec<PendingTransition<TextureUses>>, Vec<Option<&'a TextureInner>>)
Drain all currently pending transitions.
sourcepub fn set_single(
&mut self,
texture: &Arc<Texture>,
selector: TextureSelector,
new_state: TextureUses,
) -> Drain<'_, PendingTransition<TextureUses>>
pub fn set_single( &mut self, texture: &Arc<Texture>, selector: TextureSelector, new_state: TextureUses, ) -> 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.
sourcepub fn set_from_tracker(&mut self, tracker: &Self)
pub fn set_from_tracker(&mut self, 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_transitions
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.
sourcepub fn set_from_usage_scope(&mut self, scope: &TextureUsageScope)
pub fn set_from_usage_scope(&mut self, scope: &TextureUsageScope)
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_transitions
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.
sourcepub unsafe fn set_and_remove_from_usage_scope_sparse(
&mut self,
scope: &mut TextureUsageScope,
bind_group_state: &TextureViewBindGroupState,
)
pub unsafe fn set_and_remove_from_usage_scope_sparse( &mut self, scope: &mut TextureUsageScope, bind_group_state: &TextureViewBindGroupState, )
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_transitions
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.