Skip to main content

GpuGridState

Struct GpuGridState 

Source
pub struct GpuGridState<M: GpuGridModel> { /* private fields */ }
Expand description

GPU-resident state for a GpuGridModel, with every buffer, pipeline and bind group its model declares.

Implementations§

Source§

impl<M: GpuGridModel> GpuGridState<M>

Source

pub fn new(ctx: &GpuContext, params: &[ParamValue]) -> Self

Builds the state on ctx, seeded with the model’s default seed.

§Panics

Panics as Self::new_seeded does.

Source

pub fn demand(params: &[ParamValue], limits: &Limits) -> Demand

Resources that would be allocated for this model based on params.

Source

pub fn max_storage_bindings() -> u32

Returns the most storage buffers any declared pass binds. It does not depend on params, so a host can query it before it has a device.

Source

pub fn new_seeded( ctx: &GpuContext, params: &[ParamValue], seed: Option<u64>, ) -> Self

Builds the state on ctx, seeded with seed, or with the model’s fixed default seed when it is None.

§Panics

Panics if the device cannot hold the model. A host calls Self::demand first, and this assert is the backstop. Also panics if a shader declares a workgroup size other than GpuGridModel::WORKGROUP_SIZE, or a buffer label is reserved or ends in _in or _out.

Trait Implementations§

Source§

impl<M: GpuGridModel> Debug for GpuGridState<M>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<M: GpuGridModel> GpuSimState for GpuGridState<M>

Source§

fn encode_steps( &mut self, encoder: &mut CommandEncoder, count: u32, timestamps: Option<&QuerySet>, )

Records count step dispatches into encoder, one compute pass per step.

Each step is a read-after-write hazard on the ping-ponged state buffers, and wgpu inserts barriers only between passes. Dispatches looped inside one pass would read stale data. Batching happens at the submission level instead, with one encoder for all count passes.

If timestamps is Some, the first pass’s beginning and the last pass’s end are stamped into query indices 0 and 1 so the caller can measure GPU time for the whole batch.

Source§

fn view(&self) -> GpuSnapshot

Returns the display layer alone. A GpuGridModel has no agent layer.

Source§

fn encode_action(&mut self, encoder: &mut CommandEncoder, index: usize) -> bool

Records the model’s declared action at index, and returns whether the model declares one. Read more
Source§

fn encode_snapshot_passes(&mut self, encoder: &mut CommandEncoder)

Records the display pass (state -> display texture) and the stats-reduction pass (state -> a handful of numbers), at the snapshot cadence rather than every step.
Source§

fn encode_stats_passes(&mut self, encoder: &mut CommandEncoder)

Records the stats-reduction passes of Self::encode_snapshot_passes, without its display pass. Read more
Source§

fn begin_stats_readback(&mut self)

Starts the async stats readback. Read more
Source§

fn poll_stats_readback(&mut self, device: &Device, block: bool) -> StatsPoll

Completes an in-flight stats readback, updating what SimState::stats() returns. Read more
Source§

fn stats_readback_pending(&self) -> bool

Returns whether a readback started by Self::begin_stats_readback has not completed yet. Read more
Source§

impl<M: GpuGridModel> SimState for GpuGridState<M>

Source§

fn step(&mut self)

Steps once in its own submission, for a caller that holds only a SimState. The GPU runner calls encode_steps directly and batches the steps.

Source§

fn act(&mut self, index: usize) -> bool

Encodes the action into its own submission.

The GPU runner calls GpuSimState::encode_action instead, and submits the action before its snapshot.

Source§

fn set_param(&mut self, _index: usize, _value: &ParamValue) -> bool

Rejects every live edit. Its entry declares every parameter reload-only.

Source§

fn tick(&self) -> u64

Number of ticks stepped so far.
Source§

fn stats(&self) -> Vec<StatEntry>

Returns the current statistics, one entry per declared series.
Source§

fn population(&self) -> u64

Size of the population: its cells, its agents or its live nodes.
Source§

fn heap_bytes(&self) -> usize

Approximate size in bytes of the memory this state owns, on the host for a CPU state and on the device for a GPU state.
Source§

fn grid_view(&self) -> Option<GridView<'_>>

Returns the grid layer to draw, if the state has one. Read more
Source§

fn point_view(&self) -> Option<PointView<'_>>

Returns the agents to draw, if the state has any.
Source§

fn edge_view(&self) -> Option<EdgeView<'_>>

Returns the edges to draw between the positions from SimState::point_view.
Source§

fn prepare_view(&mut self)

Prepares the views before a snapshot is built. Read more
Source§

fn set_layout(&mut self, _on: bool, _budget_ms: f32) -> bool

Turns the layout on or off, with a time budget per publish in milliseconds. Read more
Source§

fn relax_layout(&mut self)

Runs the layout for one time budget, if it is on. Read more
Source§

fn parallel_jobs(&self) -> Option<usize>

Number of jobs that one step splits into. None if a backend has no such split.

Auto Trait Implementations§

§

impl<M> !RefUnwindSafe for GpuGridState<M>

§

impl<M> !UnwindSafe for GpuGridState<M>

§

impl<M> Freeze for GpuGridState<M>
where PhantomData<M>: Freeze,

§

impl<M> Send for GpuGridState<M>
where PhantomData<M>: Send,

§

impl<M> Sync for GpuGridState<M>
where PhantomData<M>: Sync,

§

impl<M> Unpin for GpuGridState<M>
where PhantomData<M>: Unpin,

§

impl<M> UnsafeUnpin for GpuGridState<M>

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

impl<T> Downcast<T> for T

Source§

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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

impl<T> Upcast<T> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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

Source§

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