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>
3.8 KiB
Ch434 — current-frame light-buffer reconstruction
Fidelity gap
Ch433's accepted zsrt139f44 frame used the captured contents of TBP 11264
for the two late full-screen darkening sprites. That texture was stale GS
local memory rather than the intermediate produced by the current frame.
The result retained recognizable scene structure, but its lighting was not
chronologically connected to the scene being rendered.
The omitted current-frame chain is:
- a PSMCT16S light target at FBP 256/TBP 8192, built by a clear, 2,053 untextured Z-tested additive/subtractive volume draws, and a final bias sprite;
- conversion to the CT32 target at FBP 320/TBP 10240;
- three CT32 ping-pong sprites through FBP 352/TBP 11264 and FBP 320;
- the authentic draws 196167 and 196177, which sample the final TBP 11264 image and blend it across the display.
Ch434 reconstructs this chain as ordered static fixtures. The PSMCT16S target is rendered with the accepted scene Z, decoded to linear CT32, and then passed through the captured CT32 sprite states before the two display composites. This is a static fidelity bridge; animated render-to-texture still requires native target residency and ping-pong ownership in RTL.
Triangle-record topology repair
The first integrated attempt exposed a fixture-contract bug. The scheduler generator expanded captured TRI_STRIP, TRI_FAN, and SPRITE topology into independent three-vertex records, while preserving the captured PRIM type in the feeder header. Because the feeder reissues PRIM for every record, a SPRITE record was assembled as a two-vertex sprite plus a dangling vertex, and strip/fan records restarted with the wrong topology.
tools/gs_make_sh3_scheduler_fixture.py now advertises TRIANGLE for every
expanded three-vertex record while preserving authentic TME, ABE, FST, and
CTXT state. This changed the broken all-white ping-pong result into a stable
binary light mask that retains the booth and character geometry through all
three copies.
Rejected diagnostics
zsrt139f46painted the untextured volume family directly into the display. It was useful for isolation but architecturally wrong because the family targets PSMCT16S off-screen storage. It was never deployed.zsrt139f48used the reconstructed chain before the triangle-record repair. It passed the internal RTL scoreboard but collapsed the intermediate to white and over-darkened the display. Its mapped PCSX2 score was MAE/RMSE 19.4763/29.3660, so it was rejected and never deployed.
Accepted result
zsrt139f49 combines the accepted Ch433 scene, the topology-correct
current-frame light composite, and the existing textured-alpha tail. The
production registered-gradient simulation passed all 311 epochs:
- 2,339,914 fragments fed and 2,286,292 passed;
- zero fragment drops, color overflows, and AXI errors;
- 311 complete markers and drains;
- zero final Z and color scoreboard mismatches.
Against the PCSX2 frame through the accepted display map, f49 scores MAE/RMSE 14.1067/21.3468. This improves both metrics from f44's 14.8127/21.5567, with a 0.7060 MAE reduction.
No compile was required. The timing-clean Ch432 RBF ran the new assets on
the Terasic board. All 311 runtime texture, palette, staging, drain, and
zero-drop gates passed. The host reported 244,981 nonzero words, bounds
(0,0)..(511,479), sum32 0x385dc4f6, xor32 0x6330653c, and selected HDMI
line-buffer source 1.
The 307,200-word board framebuffer is byte-identical to production
simulation at SHA-256
adb21828465758b0601956abef39b649f1f441a0a51831f90826ae76936f6606.
The accepted board image is
captures/gs/silenthill3/extracted/sh3_zsrt139f49_ch434_board.png; its mapped
comparison is
captures/gs/silenthill3/extracted/recon/sh3_zsrt139f49_ch434_board_mapped.png.
Ch434 is accepted, and f49 is the current live HDMI baseline.