pub struct GpuAgentState<M: GpuAgentModel> { /* private fields */ }Expand description
GPU-resident state for a GpuAgentModel, with every buffer, pass and bind group its model declares.
Implementations§
Source§impl<M: GpuAgentModel> GpuAgentState<M>
impl<M: GpuAgentModel> GpuAgentState<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 geometry_for(params: &[ParamValue], limits: &Limits) -> Geometry
pub fn geometry_for(params: &[ParamValue], limits: &Limits) -> Geometry
Returns the geometry for params, without touching a device. limits sets only the display cap.
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 own 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 the one its pass dispatches, or a
buffer label is reserved or ends in _in or _out.
Sourcepub fn run_batched(&mut self, steps: u32)
pub fn run_batched(&mut self, steps: u32)
Submits steps steps, at most MAX_STEPS_PER_SUBMISSION per command buffer, as the runner does. Nothing
waits on the GPU.
Sourcepub fn refresh_stats(&mut self)
pub fn refresh_stats(&mut self)
Runs the snapshot passes and waits for the readback, so stats() reports the current tick.
Trait Implementations§
Source§impl<M: GpuAgentModel> Debug for GpuAgentState<M>
impl<M: GpuAgentModel> Debug for GpuAgentState<M>
Source§impl<M: GpuAgentModel> GpuSimState for GpuAgentState<M>
impl<M: GpuAgentModel> GpuSimState for GpuAgentState<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 one compute pass per declared pass per step, all into one encoder.
A pass is the synchronization boundary wgpu inserts barriers at, so a step’s passes cannot be collapsed into dispatches inside one pass. The later ones would read stale data.
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§fn view(&self) -> GpuSnapshot
fn view(&self) -> GpuSnapshot
Source§impl<M: GpuAgentModel> SimState for GpuAgentState<M>
impl<M: GpuAgentModel> SimState for GpuAgentState<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 batches
instead.
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 GpuAgentState<M>
impl<M> !UnwindSafe for GpuAgentState<M>
impl<M> Freeze for GpuAgentState<M>where
PhantomData<M>: Freeze,
impl<M> Send for GpuAgentState<M>where
PhantomData<M>: Send,
impl<M> Sync for GpuAgentState<M>where
PhantomData<M>: Sync,
impl<M> Unpin for GpuAgentState<M>where
PhantomData<M>: Unpin,
impl<M> UnsafeUnpin for GpuAgentState<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