docs(render): S3 chunk 4 fix round 1 — loop-shape weather pin, one weather gate, dead terrain-clip stack, sky drawn once
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
62c2231d0a
commit
386b1327b5
2 changed files with 59 additions and 2 deletions
|
|
@ -730,6 +730,63 @@ DELETE (no retail counterpart):
|
|||
- the register: no row is added (every deletion removes an acdream-only
|
||||
rule); any KEEP item still lacking a CPU/GPU equivalence pin gets one.
|
||||
|
||||
### 10.4 Chunk 4 fix round 1 (lead, 2026-09-03, after the three-lens review of `6ba4b0b87`; round 1 of the two the plan allows)
|
||||
|
||||
Retail lens PASS. Build and renderer lenses FAIL on one blocking item plus
|
||||
real leftovers. Every item lead-verified.
|
||||
|
||||
- **K1 — a once-per-frame weather pin that can fail (blocking).** The
|
||||
replacement pin (`Assert.Single` over `DrawWeatherOnce` call sites) passes
|
||||
with a `foreach` wrapped around the single call — the exact round-1
|
||||
regression. IL-offset ORDER pins have now failed three times to be
|
||||
discriminating; use a LOOP-SHAPE pin instead: with the existing
|
||||
`CompiledCallGraph`/`CompiledBranch` reader, assert that NO backward branch
|
||||
in `RetailPViewRenderer.DrawLandscapeDynamicsPhase` (a branch whose target
|
||||
offset is lower than its own offset) spans the `DrawWeatherOnce` call's
|
||||
offset. MUTATION: wrap the call in `foreach (var slice in
|
||||
clipAssembly.OutsideViewSlices)` → the pin fails (quote it); restore.
|
||||
- **K2 — one weather gate for the print and the draw (minor).** The Collect-
|
||||
time `OC` print fires on `ctx.WeatherGateOpen`; the Replay draw adds a
|
||||
second condition (`clipAssembly.OutsideViewSlices.Length > 0`). Derive BOTH
|
||||
from one predicate on the frame context (the walk's own "a landscape turn
|
||||
ran with the weather gate open") so the transcript can never report a
|
||||
weather turn the frame did not draw; pin: gate closed → neither; gate open
|
||||
→ both.
|
||||
- **K3 — delete the dead terrain-clip producer stack (minor).** No producer
|
||||
writes the terrain clip any more: delete `IWorldPassSurface.SetTerrainClip`,
|
||||
`RhiWorldPassSurface.SetTerrainClip`, `ClipFrame.SetTerrainClip` and their
|
||||
unit test, `PrepareClipFrame`'s terrain-clip publish half, and the
|
||||
TerrainClip UBO section binding if no shader reads it (verify: if the
|
||||
terrain/sky shaders declare the section, keep the section bound as an
|
||||
all-zero disabled block and say so).
|
||||
- **K4 — the sky is drawn ONCE, unclipped, like the terrain and the weather
|
||||
(major, same rule).** `DrawWalkSky` still draws the sky dome per active view
|
||||
under `BeginDoorwayScissor` + `BindTerrainClip` + `EnableClipDistances`.
|
||||
Retail draws the sky once (`GameSky::Draw(sky, 0)` @0x0050633c) before the
|
||||
blocks; aperture exactness for an interior root comes from the depth clear,
|
||||
the exit seals and the interior repaint (§9 R4 / FW4 slice 6's own
|
||||
argument). Draw it once at the Sky leaf, no scissor, no clip; then
|
||||
`BeginDoorwayScissor`, `BindTerrainClip`, `EnableClipDistances`/
|
||||
`DisableClipDistances` lose their last consumer — delete them with K3
|
||||
(the `EnableClipDistances`/`DisableClipDistances` pair around the exit-seal
|
||||
and punch draws is DIFFERENT: those are the kept translated clips — keep
|
||||
those calls). Gate: the four-pose self-gate + the cathedral-arrival pose
|
||||
show no sky through interior walls (the seals/repaint cover it).
|
||||
- **K5 — plan inventory (note).** The plan's S5 cleanup inventory still lists
|
||||
the six `ACDREAM_PROBE_CATHEDRAL_*` flags — the lead updates the plan.
|
||||
- **K6 — the punch-fan equivalence pin runs through production (minor).**
|
||||
Build the slice with `ClipFrameAssembler.Assemble` (the real
|
||||
`outsideSlicesList.Add(new ClipViewSlice(slot, AabbOf(poly), planes))`
|
||||
path) and read it back through `clipAssembly.OutsideViewSlices[i].Planes`,
|
||||
not a hand-built `ClipViewSlice`.
|
||||
- **K7 — restore the look-in slot assertion (note).** Put back the deleted
|
||||
`Assert.NotEqual(0u, clipSlot)` on a look-in slice (the exit-seal KEEP
|
||||
reads `_clipFrame.GetSlotPlanes(slice.ClipSlot)`).
|
||||
- **K8 — the rain emitters now submit after the weather mesh (note).** Retail
|
||||
imposes no order between acdream's two substitutes; state that in
|
||||
`DrawWeatherOnce`'s comment so the order change is on record.
|
||||
- Gates: §10.3 unchanged; InstalledDat exactly the four known failures.
|
||||
|
||||
## 11. Chunk 1 contract — transcript kinds, fixtures, and the print-only emitter (lead, 2026-09-03; runs AFTER chunk 3, because `LC`/`SC` only exist once terrain is per cell)
|
||||
|
||||
### 11.1 What exists (verified in the tree at `542b049b`)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue