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,80 @@
|
||||
# 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:
|
||||
|
||||
1. 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;
|
||||
2. conversion to the CT32 target at FBP 320/TBP 10240;
|
||||
3. three CT32 ping-pong sprites through FBP 352/TBP 11264 and FBP 320;
|
||||
4. 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
|
||||
|
||||
- `zsrt139f46` painted 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.
|
||||
- `zsrt139f48` used 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.
|
||||
Reference in New Issue
Block a user