Snapshot: fog implementation + fidelity tooling baseline (pre bilinear-clamp fix)

Per-vertex GS fog end-to-end (gs_stub emit incl. persp_emit5, gs_prim_list_feeder
XYZ2->XYZF2 on PRIM.FGE, gs_make_sh3_scheduler_fixture.py F/FGE packing), new fog
TBs, fidelity attribution tooling. Functional baseline before removing the dead
bilinear lerp8 clamps (Codex: 161-node comb loop -> -0.042ns setup fail).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-20 19:56:46 -04:00
parent ec82764bef
commit ba74bbd5aa
476 changed files with 696247 additions and 130119 deletions
@@ -0,0 +1,39 @@
# Ch404 — chronological character-detail tail
Ch404 appends the next 36 authentic opaque draws after the accepted Ch403
frame. Thirty-five staging-safe epochs preserve dump order and cover the
character/lower-body region without changing RTL or requiring another fit.
## Fixture and infrastructure
- `zsrt139b1`: generated 35-epoch detail tail.
- `zsrt139b2`: merged Ch403 base plus the tail, 75 epochs total.
- `tools/merge_runtime_sched.py`: concatenates accepted runtime-CLUT fixtures
without regenerating or changing their staged records.
- Host and shared-testbench epoch ceilings increase from 64 to 128; staging RAM
remains 2,048 words and the FPGA image is unchanged.
## RTL verification
- 667,279 fragments fed; 351,074 passed persistent Z.
- 75 ordered markers and drains.
- Zero request drops, color FIFO overflows, or AXI response errors.
- Z mismatch `0/307200`; color mismatch `0/132783` written pixels.
- RTL framebuffer SHA-256:
`8715381278c2b0a6e527329fb02aaaaf53edbaefd637f115723a3425bbd1b209`.
The tail adds 1,003 nonblack pixels over Ch403. Against the resized PCSX2
frame, RGB MAE improves from 23.8474 to 23.7846 and RMSE from 34.8791 to
34.6956. This is a bounded character-detail gain, not the missing environment
or fog solution.
## Silicon acceptance
The timing-clean Ch403 RBF was retained. The board completed all 75 epochs
with every texture CRC, runtime palette checksum, staging count, record count,
fresh drain, zero-drop, and bus-error gate clean; the host returned `0`.
The 307,200-word board framebuffer is byte-for-byte identical to RTL and has
the same SHA-256
`8715381278c2b0a6e527329fb02aaaaf53edbaefd637f115723a3425bbd1b209`.
The 75-epoch composite is live on HDMI.