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.7 KiB
Ch429 — native PSMT4 character recovery
Objective
Recover visible captured geometry that was still absent from the accepted Ch428 frame, while preserving authentic draw order and refusing additions that merely increase epoch count or worsen the presentation.
Deferred PSMT4 postprocess
zsrt139f34 appended the existing 18-epoch tiled PSMT4 overlay after the
Ch428 frame, in its authentic late-frame position. Its 295-epoch production
RTL replay passed every structural gate and produced framebuffer SHA-256
7b167db3927c6e765c464d0e8ddbfb37f23d5b980d87ebdfc9af97b20128e044.
The replay also established that the captured overlay is a real contrast
operation, not an opaque texture: its alpha equation is
(Cd-Cs)*0xdc/128 + Cs with COLCLAMP enabled and source RGB values of 0 or
24. Applied to the still-underlit reconstructed base, it crushes most of the
scene to black and worsens the mapped PCSX2 score to MAE 24.0034 / RMSE
32.9396. The overlay is therefore deferred until the missing illumination
and base-color population is present; f34 was not deployed.
Native 512x1024 PSMT4 support
A separate captured family of 19 opaque PSMT4 triangle strips covers the foreground character body at draw indices 165536 through 172233. The draws share TBP 9216, TBW 8, a logical 512x1024 texture, and several authentic CLUT banks.
The coverage planner now accepts explicit PSMT4 selection. The fixture generator reconstructs the canonical GS-swizzled 512x1024 PSMT4 local-memory image, packs its nibbles into the fixed 262,144-byte texture cache, preserves PSM/TBW/TW/TH in TEX0, and samples packed nibbles in the independent software reference. Fast-fit scaling now uses the logical texture dimensions.
Generation is fail-closed. An independent host check confirmed that all
262,144 emitted texture bytes exactly match the local-memory reconstruction;
the emitted TEX0 decodes to TBP 1024, TBW 8, PSM 0x14, TW 9, TH 10. The
texture CRC is 0x9ecc08f5.
Accepted f36 result
zsrt139f35 groups the 19 strips into 13 exact-state/asset epochs.
zsrt139f36 inserts those epochs at their authentic position before the
final opaque draws, CT32 darken, and complete alpha family. The resulting
frame has 290 epochs.
Production RTL replay passed with:
- 1,331,626 fragments fed and 1,311,991 passed;
- 290 markers and drains;
- zero fragment drops, color overflows, and AXI errors;
- Z mismatch 0/307,200 and color mismatch 0/245,437;
- framebuffer SHA-256
102bf7925b859bcacc91172ecdcd1755b4f01210f327ac918a1c8d7954905d2b.
Relative to Ch428, the recovered family changes 3,099 source pixels within
(319,242)..(361,479) and restores the visible foreground character-body
silhouette. On the mapped changed-pixel support its RMSE improves from 15.10
to 12.82. Whole-frame mapped RMSE improves from 27.6458 to 27.6303, while
MAE moves narrowly from 18.9378 to 18.9407. This is accepted as authentic
structural fidelity with a mixed scalar-score result, not described as a
broad color-fidelity win.
Silicon acceptance
No new compile or RBF was required; the timing-clean Ch423 image remained
loaded. The DE25 completed all 290 epochs with every texture CRC, palette
checksum, staged-record count, ordered drain, and zero-drop gate passing.
The scheduler returned rc=0, selected the HDMI line-buffer source, and
reported 212,673 nonzero pixels, bounds (0,0)..(511,479), sum32
0x00e0b761, and xor32 0x9622a8a3.
The board and production RTL framebuffer files are byte-identical at the
SHA-256 above. The mapped board score is MAE 18.9407 / RMSE 27.6303, and the
accepted board image is preserved as
captures/gs/silenthill3/extracted/sh3_zsrt139f36_ch429_board.png.
Ch429 is accepted on silicon and f36 is the current live HDMI baseline.