Struct State

Source
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: Tracker

Implementations§

Source§

impl<'scope, 'snatch_guard, 'cmd_enc> State<'scope, 'snatch_guard, 'cmd_enc>

Source

fn is_ready(&self) -> Result<(), DispatchError>

Source

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.

Auto Trait Implementations§

§

impl<'scope, 'snatch_guard, 'cmd_enc> Freeze for State<'scope, 'snatch_guard, 'cmd_enc>

§

impl<'scope, 'snatch_guard, 'cmd_enc> !RefUnwindSafe for State<'scope, 'snatch_guard, 'cmd_enc>

§

impl<'scope, 'snatch_guard, 'cmd_enc> Send for State<'scope, 'snatch_guard, 'cmd_enc>

§

impl<'scope, 'snatch_guard, 'cmd_enc> Sync for State<'scope, 'snatch_guard, 'cmd_enc>

§

impl<'scope, 'snatch_guard, 'cmd_enc> Unpin for State<'scope, 'snatch_guard, 'cmd_enc>

§

impl<'scope, 'snatch_guard, 'cmd_enc> !UnwindSafe for State<'scope, 'snatch_guard, 'cmd_enc>

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

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

Source§

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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,