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.1 KiB
Ch433 — UV-optimized STQ packing
Root cause
The repaired Ch432 sampler restored the missing perspective-bilinear samples, but the f19 base scene still showed granular spatial misregistration against its independent floating-point reference. Post-repair isolation rejected a 13-bit reciprocal table and rejected nearest filtering: both worsened the software-reference and PCSX2 scores.
The remaining fixture path used --fast-fit-scale. That shortcut selected
the largest representable common S/T/Q scale, normally 6144, even though the
scheduler generator already had a per-triangle search that scores packed RTL
UVs against authentic floating-point UVs. A common scale cancels only at
infinite precision; vertex quantization, integer gradients, and reciprocal
quantization make the choice observable.
One-variable repair
zsrt139f43 retains f19's exact 766-draw population, 254 chronological state
groups, 125 capacity epochs, native 12.4 geometry, textures, palettes, fog,
bilinear reference, Z state, and alpha state. Only --fast-fit-scale was
removed. The optimizer selected scales from 0.375 through 6144 rather than
forcing almost every triangle to 6144.
The coverage planner no longer emits the shortcut by default. It remains
available through an explicit planner --fast-fit-scale option for quick
diagnostic fixture generation.
Production result
The full registered-gradient f43 replay passed all 125 epochs:
- 282,363 fragments fed and 232,326 passed Z;
- zero drops, color overflows, and AXI errors;
- 125 complete markers and drains;
- final Z mismatch 0/307,200 and color mismatch 0/176,888.
Against its independent software reference, f43 improves from f19's MAE/RMSE 8.7494/18.7008 to 4.1633/11.9970. Its mapped PCSX2 score improves from 18.3393/25.8374 to 17.7172/24.8787.
zsrt139f44 substitutes the optimized f43 base slices into the complete f42
composition while preserving the chronology-correct PSMT4 character,
direct-color highlights, and alpha/postprocess population. The production
replay passed all 292 epochs with 2,339,405 fragments fed, 2,285,783 passed,
zero drops/errors, and exact final Z and color scoreboards. Relative to f42,
87,282 pixels change. The mapped PCSX2 score improves from
15.0765/21.9717 to 14.8127/21.5567.
Silicon acceptance
No compile was required. The timing-clean Ch432 RBF ran both asset-only
fixtures. f43 passed all 125 runtime gates and matched simulation byte for
byte at SHA-256
f4ae82153791a66ae8ed7c4b3dd01f609b9706e826e971311c602181f8a08bc7.
The complete f44 board run passed all 292 texture, palette, staging, drain,
and zero-drop gates. It reported 240,492 nonzero words, bounds
(0,0)..(511,479), sum32 0x96f07662, xor32 0x0a031310, and selected the
HDMI line-buffer source. Its 307,200-word framebuffer is byte-identical to
production simulation at SHA-256
3f492ab65c12415f4d0cd1aeafc64072870fd43bed237be4a923efbce30d2081.
The accepted board image is
captures/gs/silenthill3/extracted/sh3_zsrt139f44_ch433_board.png; the mapped
comparison is
captures/gs/silenthill3/extracted/recon/sh3_zsrt139f44_ch433_board_mapped.png.
Ch433 is accepted, and f44 is the current live HDMI baseline.