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>>, track_indirect_buffer: bool, ) -> 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

The indirect_buffer argument should be passed for any indirect dispatch (with or without validation). It will be checked for conflicting usages according to WebGPU rules. For the purpose of these rules, the fact that we have actually processed the buffer in the validation pass is an implementation detail.

The track_indirect_buffer argument should be set when doing indirect dispatch without validation. In this case, the indirect buffer will be added to the tracker in order to generate any necessary transitions for that usage.

When doing indirect dispatch with validation, the indirect buffer is processed by the validation pass and is not used by the actual dispatch. The indirect validation code handles transitions for the validation pass.

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,