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:
@@ -0,0 +1,35 @@
|
||||
# Ch363 Audit Log - Five-Texture Persistent-Z Scheduler
|
||||
|
||||
## Scope
|
||||
|
||||
- Native 640x480 persistent-Z scene with five ordered authentic SH3 draws:
|
||||
`5328,11671,77112,89164,119471`.
|
||||
- Five distinct texture/CLUT bindings, relocated at CBP `480,484,488,492,496`.
|
||||
- The cache is intentionally refilled for every epoch; this chapter proves rebinds rather than shared-texture residency.
|
||||
|
||||
## Root Cause And Fix
|
||||
|
||||
- The generated five-CLUT bootlet is 350 qwords. The shared simulation harness had inherited the 256-qword EE RAM default, so `$readmemh` truncated the payload. Epoch 3 consequently read partial CLUT data and produced 195 palette-invalid pixels.
|
||||
- The production `GS_SH3_LPDDR_FB` board profile already allocates 32 KiB of EE RAM. Both shared 640 harnesses now explicitly use that same `RAM_SIZE_BYTES(32 * 1024)` capacity.
|
||||
- The earlier CLAMP investigation was rejected by trace evidence: all sampled epoch-2/3/4 coordinates were within the 512x512 texture bounds. No feeder or sampler RTL change is retained.
|
||||
|
||||
## Simulation Gates
|
||||
|
||||
- `tb_top_psmct32_sh3_zs640mt5_cap`: PASS.
|
||||
- Five texture CRC fills: `55070afa`, `26a88b77`, `a727234d`, `fbdeaa32`, `cf4cae27`.
|
||||
- Five fresh drains, records `54,68,68,68,68`, no writer overflow or scanout underflow.
|
||||
- Scanout: exactly 38,400 beats/frame.
|
||||
- Oracle: ALL `61595/63749` (96.6%), MULTI `7701/7877` (97.8%), `clut_bad=0`.
|
||||
- `tb_top_psmct32_sh3_zint640mt5`: PASS.
|
||||
- Z preclear: 19,200 beats.
|
||||
- 129,752 fragments fed, 118,355 Z passes, zero fragment drops.
|
||||
- Exact final scoreboards: Z `0/307200` mismatch; COLOR `0/63617` mismatch.
|
||||
- Request FIFO depth 1024 high-water by epoch: `415,401,64,222,47`.
|
||||
|
||||
## GUI Fit And Board Closure
|
||||
|
||||
- The authoritative QSF points to `bios_sh3_zs640mt5.mem` and `payload_sh3_zs640mt5.mem`; the Quartus 26.1 flow report and synthesis report both resolve those exact images.
|
||||
- The July 11 GUI compile is signoff-clean: setup `+0.095 ns`, hold `0.000 ns`, recovery `+1.042 ns`, removal `+0.185 ns`, and minimum pulse width `+0.200 ns`. The generated `retroDE_ps2.core.rbf` was written after the QSF update.
|
||||
- The RBF loaded successfully on the DE25 (`fpga0: operating`). The five-epoch host run passed all transfer, CRC, preclear, drain, and zero-drop gates. Its final framebuffer summary was `nonzero=63617`, bounds `(36,10)..(562,360)`.
|
||||
- The board framebuffer and a fresh `tb_top_psmct32_sh3_zint640mt5` dump have identical SHA-256: `9e87678c0c88e3e2e90a187e69991069d58e88187d360d560df59f25219b99c5`.
|
||||
- Independent replay-color verification is exact: `307200/307200` pixels, zero mismatches. Ch363 is closed: five authentic SH3 draws, five texture/CLUT rebinds, native 640x480 scanout, and persistent-Z are proven on silicon for this fixture.
|
||||
Reference in New Issue
Block a user