You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Body:
Follow-up to #453, which shipped the declarative SystemScheduler end-state for this
slice: derived order from Reads/Writes/After/Before channel declarations, the
physics kick/fence split with a game-thread shadow band (Dialogue + Quest run
during the Jolt/Box2D world step), worker dispatch for the audited set
(Abilities ∥ Audio) with solved edges as task prerequisites, and the
ENTT_USE_ATOMIC + Scene-constructor pool pre-warm guards.
Remaining expansion opportunities, each with its enabling work:
Inventory — two options, needs a deliberate choice:
(a) physics shadow: simplest, BUT it currently reads post-physics transforms
for pickup proximity — the shadow would feed it pre-physics transforms (one
frame stale), an observable change the Reads(kLocalTransforms) edge currently
forbids; (b) worker dispatch: needs a deferred-publish GameplayEventBus (queue
drained at a game-thread barrier) + scene-level deferred entity destruction
(it already self-defers past its own loop; lift to the executor barrier).
The bus work also unlocks any future bus-publishing system for workers.
Particles — split ParticlesCPU (worker-marked) / ParticlesGPU (main thread
or render-command-queue routed; per-component UseGPU flag decides membership),
and per-ParticleSystem member RNG seeded from global-seed × entity UUID
(independently closes the Architecture: deterministic fixed-timestep simulation loop + seeded RNG (unlocks the existing rollback netcode) #452 sub-emitter determinism gap). Note particles
already fan out internally via nested Tasks::Launch.
SnowDeformers / MorphEval — gather CPU-side in the sim step, submit GL
work (compute dispatch / SSBO / VBO upload) through the stateless render
command queue; the cloth pipeline's deferred-VBO-upload pattern is the model.
MorphEval additionally needs per-entity output buffers (instanced MeshSource
sharing makes in-place vertex writes collide).
Navigation / Animation — intra-system ParallelFor (per-agent path queries;
per-entity pose sampling — UE does the same via hand-rolled parallel anim
eval tasks). System-level marking is off the table (nav writes transforms;
anim touches AssetManager lazy loads).
Free-running tick DAG (UE Mass dispatch end-state) — dispatch game-thread-
pinned systems as named-thread tasks so the whole tick becomes one
prerequisite-driven DAG with the game thread pumping its named queue.
Blocked on validating the ported named-thread wait support
(GTaskGraphAlwaysWaitWithNamedThreadSupport is off-by-default/unvalidated).
Physics shadow growth — any new transform/physics-independent system
should register between PhysicsKick and PhysicsFence by default; also
consider hoisting the N>=2 hitch catch-up path (currently fully synchronous)
to interleave char/world phases across kick/fence pairs if profiling shows
hitch frames matter.
Acceptance per slice: audit note at the schedule builder, seam/shadow-legality
DependsOn tests extended, parallel==sequential determinism test covers the new
member, kill-switch still bisects.
Follow-up issue draft (post-#453: extend gameplay-tick parallelism)
Title: Gameplay scheduler: extend parallel coverage (worker set growth, particle split, render-queue routing, free-running tick DAG, enforced typed access)
Body:
Follow-up to #453, which shipped the declarative SystemScheduler end-state for this
slice: derived order from Reads/Writes/After/Before channel declarations, the
physics kick/fence split with a game-thread shadow band (Dialogue + Quest run
during the Jolt/Box2D world step), worker dispatch for the audited set
(Abilities ∥ Audio) with solved edges as task prerequisites, and the
ENTT_USE_ATOMIC + Scene-constructor pool pre-warm guards.
Remaining expansion opportunities, each with its enabling work:
(a) physics shadow: simplest, BUT it currently reads post-physics transforms
for pickup proximity — the shadow would feed it pre-physics transforms (one
frame stale), an observable change the Reads(kLocalTransforms) edge currently
forbids; (b) worker dispatch: needs a deferred-publish GameplayEventBus (queue
drained at a game-thread barrier) + scene-level deferred entity destruction
(it already self-defers past its own loop; lift to the executor barrier).
The bus work also unlocks any future bus-publishing system for workers.
or render-command-queue routed; per-component UseGPU flag decides membership),
and per-ParticleSystem member RNG seeded from global-seed × entity UUID
(independently closes the Architecture: deterministic fixed-timestep simulation loop + seeded RNG (unlocks the existing rollback netcode) #452 sub-emitter determinism gap). Note particles
already fan out internally via nested Tasks::Launch.
work (compute dispatch / SSBO / VBO upload) through the stateless render
command queue; the cloth pipeline's deferred-VBO-upload pattern is the model.
MorphEval additionally needs per-entity output buffers (instanced MeshSource
sharing makes in-place vertex writes collide).
per-entity pose sampling — UE does the same via hand-rolled parallel anim
eval tasks). System-level marking is off the table (nav writes transforms;
anim touches AssetManager lazy loads).
pinned systems as named-thread tasks so the whole tick becomes one
prerequisite-driven DAG with the game thread pumping its named queue.
Blocked on validating the ported named-thread wait support
(GTaskGraphAlwaysWaitWithNamedThreadSupport is off-by-default/unvalidated).
channel declarations (Mass-style FMassEntityQuery enforcement), turning the
audit table from prose into a compile/debug-time contract. Requires routing
the 18 system bodies through accessor handles; the channel constants shipped
in Architecture: replace the hard-coded OnUpdateRuntime sequence with a system scheduler (dependency graph + parallelism) #453 are the naming layer it builds on.
should register between PhysicsKick and PhysicsFence by default; also
consider hoisting the N>=2 hitch catch-up path (currently fully synchronous)
to interleave char/world phases across kick/fence pairs if profiling shows
hitch frames matter.
Acceptance per slice: audit note at the schedule builder, seam/shadow-legality
DependsOn tests extended, parallel==sequential determinism test covers the new
member, kill-switch still bisects.
Score
Rated per issue-scoring · score = confidence × (capability + craft + stability + decay) / effort, derived by the picker.