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>
impl<M: GpuGridModel> GpuGridState<M>
Sourcepub fn new(ctx: &GpuContext, params: &[ParamValue]) -> Self
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.
Sourcepub fn demand(params: &[ParamValue], limits: &Limits) -> Demand
pub fn demand(params: &[ParamValue], limits: &Limits) -> Demand
Resources that would be allocated for this model based on params.
Sourcepub fn max_storage_bindings() -> u32
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.
Sourcepub fn new_seeded(
ctx: &GpuContext,
params: &[ParamValue],
seed: Option<u64>,
) -> Self
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>
impl<M: GpuGridModel> Debug for GpuGridState<M>
Source§impl<M: GpuGridModel> GpuSimState for GpuGridState<M>
impl<M: GpuGridModel> GpuSimState for GpuGridState<M>
Source§fn encode_steps(
&mut self,
encoder: &mut CommandEncoder,
count: u32,
timestamps: Option<&QuerySet>,
)
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
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
fn encode_action(&mut self, encoder: &mut CommandEncoder, index: usize) -> bool
index, and returns whether the model declares one. Read moreSource§fn encode_snapshot_passes(&mut self, encoder: &mut CommandEncoder)
fn encode_snapshot_passes(&mut self, encoder: &mut CommandEncoder)
Source§fn encode_stats_passes(&mut self, encoder: &mut CommandEncoder)
fn encode_stats_passes(&mut self, encoder: &mut CommandEncoder)
Self::encode_snapshot_passes, without its display pass. Read moreSource§fn begin_stats_readback(&mut self)
fn begin_stats_readback(&mut self)
Source§fn poll_stats_readback(&mut self, device: &Device, block: bool) -> StatsPoll
fn poll_stats_readback(&mut self, device: &Device, block: bool) -> StatsPoll
SimState::stats() returns. Read moreSource§fn stats_readback_pending(&self) -> bool
fn stats_readback_pending(&self) -> bool
Self::begin_stats_readback has not completed yet. Read moreSource§impl<M: GpuGridModel> SimState for GpuGridState<M>
impl<M: GpuGridModel> SimState for GpuGridState<M>
Source§fn step(&mut self)
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
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
fn set_param(&mut self, _index: usize, _value: &ParamValue) -> bool
Rejects every live edit. Its entry declares every parameter reload-only.
Source§fn stats(&self) -> Vec<StatEntry>
fn stats(&self) -> Vec<StatEntry>
Source§fn population(&self) -> u64
fn population(&self) -> u64
Source§fn heap_bytes(&self) -> usize
fn heap_bytes(&self) -> usize
Source§fn grid_view(&self) -> Option<GridView<'_>>
fn grid_view(&self) -> Option<GridView<'_>>
Source§fn point_view(&self) -> Option<PointView<'_>>
fn point_view(&self) -> Option<PointView<'_>>
Source§fn edge_view(&self) -> Option<EdgeView<'_>>
fn edge_view(&self) -> Option<EdgeView<'_>>
SimState::point_view.Source§fn prepare_view(&mut self)
fn prepare_view(&mut self)
Source§fn set_layout(&mut self, _on: bool, _budget_ms: f32) -> bool
fn set_layout(&mut self, _on: bool, _budget_ms: f32) -> bool
Source§fn relax_layout(&mut self)
fn relax_layout(&mut self)
Source§fn parallel_jobs(&self) -> Option<usize>
fn parallel_jobs(&self) -> Option<usize>
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>where
PhantomData<M>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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