struct State<'scope, 'snatch_guard, 'cmd_enc> {
pipeline: Option<Arc<ComputePipeline>>,
pass: PassState<'scope, 'snatch_guard, 'cmd_enc>,
active_query: Option<(Arc<QuerySet>, u32)>,
push_constants: Vec<u32>,
intermediate_trackers: Tracker,
}Fields§
§pipeline: Option<Arc<ComputePipeline>>§pass: PassState<'scope, 'snatch_guard, 'cmd_enc>§active_query: Option<(Arc<QuerySet>, u32)>§push_constants: Vec<u32>§intermediate_trackers: TrackerImplementations§
Source§impl<'scope, 'snatch_guard, 'cmd_enc> State<'scope, 'snatch_guard, 'cmd_enc>
impl<'scope, 'snatch_guard, 'cmd_enc> State<'scope, 'snatch_guard, 'cmd_enc>
fn is_ready(&self) -> Result<(), DispatchError>
Sourcefn flush_bindings(
&mut self,
indirect_buffer: Option<&Arc<Buffer>>,
indirect_buffer_index_if_not_validating: Option<TrackerIndex>,
) -> Result<(), ComputePassErrorInner>
fn flush_bindings( &mut self, indirect_buffer: Option<&Arc<Buffer>>, indirect_buffer_index_if_not_validating: Option<TrackerIndex>, ) -> Result<(), ComputePassErrorInner>
Flush binding state in preparation for a dispatch.
§Differences between render and compute passes
There are differences between the flush_bindings implementations for
render and compute passes, because render passes have a single usage
scope for the entire pass, and compute passes have a separate usage
scope for each dispatch.
For compute passes, bind groups are merged into a fresh usage scope
here, not into the pass usage scope within calls to set_bind_group. As
specified by WebGPU, for compute passes, we merge only the bind groups
that are actually used by the pipeline, unlike render passes, which
merge every bind group that is ever set, even if it is not ultimately
used by the pipeline.
For compute passes, we call drain_barriers here, because barriers may
be needed before each dispatch if a previous dispatch had a conflicting
usage. For render passes, barriers are emitted once at the start of the
render pass.
§Indirect buffer handling
For indirect dispatches without validation, pass both indirect_buffer
and indirect_buffer_index_if_not_validating. The indirect buffer will
be added to the usage scope and the tracker.
For indirect dispatches with validation, pass only indirect_buffer.
The indirect buffer will be added to the usage scope to detect usage
conflicts. The indirect buffer does not need to be added to the tracker;
the indirect validation code handles transitions manually.