docs(render): S3 chunk 3 fix round 2 — the soak shows ~500 terrain submissions/frame; opaque stream marks stop splitting terrain batches
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
4ec59d727a
commit
38b5adc523
2 changed files with 51 additions and 1 deletions
File diff suppressed because one or more lines are too long
|
|
@ -601,6 +601,56 @@ same worktree on top of `671eb3ad`; this is round 1 of the two the plan allows.
|
||||||
count for the terrace-edge cell sequence if it can be driven cheaply, else
|
count for the terrace-edge cell sequence if it can be driven cheaply, else
|
||||||
the reasoning.
|
the reasoning.
|
||||||
|
|
||||||
|
### 9.7 Chunk 3 fix round 2 (lead, 2026-09-03 — the perf gate of §9.5 FAILED at `e10765aa`; round 2 of the two the plan allows)
|
||||||
|
|
||||||
|
**Measured.** Connected R6 soak `logs/connected-r6-soak-20260903-100400` at
|
||||||
|
`e10765aa` versus the S2-final baseline `…-010403` (same runner, both
|
||||||
|
`Uncapped=false`, both graceful with zero failures): CPU p50 = 31.2 ms at EVERY
|
||||||
|
outdoor destination (baseline 2.0–15.5 ms), FPS 32 flat (baseline 51–452),
|
||||||
|
GPU p50 2–4× (Holtburg 1.8→4.6 ms, Caul return 2.9→12.2, Aerlinthe 1.4→3.0,
|
||||||
|
Rynthid 0.7→2.2, Sawato 0.2→0.8). The cost is flat because the admitted land
|
||||||
|
cell count (~500–600) is the same at every outdoor stop; nearly every cell
|
||||||
|
carries scenery statics, so a `StreamMark` follows almost every `LandCell` and
|
||||||
|
splits the pending batch → ~500 terrain submissions per frame, each running
|
||||||
|
`TerrainModernRenderer.DrawRhi`'s full bind sequence (pipeline, push
|
||||||
|
constants, vertex/index buffers, tiling table, scene-lighting and terrain-clip
|
||||||
|
sections, the shadow uniform) plus one ring allocation and one MDI.
|
||||||
|
|
||||||
|
- **F10 — an opaque ordered-stream flush is NOT a terrain flush point.** The
|
||||||
|
ordered stream holds ONLY `IsOpaque` batches (`WalkStaticStreamPopulator`
|
||||||
|
routes translucent batches to the alpha list; `WbDrawDispatcher.DrawOrderedRange`
|
||||||
|
draws them with the `Opaque` / `OpaqueAlphaToCoverage` pipeline, depth test
|
||||||
|
AND write on, no blending). Opaque terrain and opaque statics are therefore
|
||||||
|
depth-resolved in either order — pixel-identical except exact z-ties — so a
|
||||||
|
`StreamMark` no longer flushes the pending terrain batch. The flush points
|
||||||
|
that REMAIN are exactly the events whose GPU order against terrain is
|
||||||
|
observable: `PunchFan` (depth ALWAYS + write — the ordering chunk 3 exists
|
||||||
|
for), `AlphaBarrier` and `LandscapeFlush` (translucent drains),
|
||||||
|
`ClearInteriorDepth`, `ExitSeals`, `Sky`, `CellShell`, a particle turn whose
|
||||||
|
cell has a renderable emitter, and the end of Replay. Consequence: batches
|
||||||
|
split only at buildings and punches (terrace-edge: 14 buildings → tens of
|
||||||
|
batches per frame), and the punch ordering is preserved because every punch
|
||||||
|
flushes the terrain drawn before it and the terrain after it starts a new
|
||||||
|
batch. The implementer CITES the ordered stream's pipeline state (file:line
|
||||||
|
of the pipeline selection and the depth/blend state) in the Replay comment;
|
||||||
|
if any ordered-stream stage blends or disables depth write, that stage's
|
||||||
|
mark stays a flush point and the contract is amended, not bent.
|
||||||
|
- **F11 — no per-batch bind latch.** With tens of batches per frame the full
|
||||||
|
bind sequence per batch is acceptable; do not add state tracking.
|
||||||
|
- **F12 — tests.** F4(c) updated: a `StreamMark` between two land cells no
|
||||||
|
longer splits (one batch); a `PunchFan`, an `AlphaBarrier`, and a
|
||||||
|
has-emitter particle turn each split. New punch-order pin: `LandCell(far)`,
|
||||||
|
building turn with a `PunchFan`, `LandCell(near)` → the leaf log reads
|
||||||
|
`LANDCELL(far)`, `PUNCH`, `LANDCELL(near)` — the far terrain is flushed
|
||||||
|
BEFORE the punch and the near terrain drawn AFTER it. Every other pin
|
||||||
|
unchanged.
|
||||||
|
- **Gate.** Re-run the SAME soak at the fix commit: CPU p50 per destination
|
||||||
|
≤ 1.3× the baseline and GPU p50 ≤ 1.3× the baseline (Sawato's sub-ms
|
||||||
|
values compare by absolute ≤ +0.5 ms); the four-pose self-gate: the
|
||||||
|
Holtburg fragments still gone, Facility/cathedral/house structurally
|
||||||
|
unchanged. Both recorded in the ledger. If this round does not meet the
|
||||||
|
gate, chunk 3 STOPS and is written up (plan rule §5).
|
||||||
|
|
||||||
## 10. Chunk 4 contract — deletions (lead draft, 2026-09-03; re-locate every owner at chunk time, after chunks 2 and 3 land)
|
## 10. Chunk 4 contract — deletions (lead draft, 2026-09-03; re-locate every owner at chunk time, after chunks 2 and 3 land)
|
||||||
|
|
||||||
### 10.1 What retail clips, and what it does not (verified)
|
### 10.1 What retail clips, and what it does not (verified)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue