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>
2.8 KiB
Ch427 — complete authentic alpha family
Objective
Replace Ch426's hand-selected 53-draw alpha subset with every captured PSMT8 alpha-fan draw in the chronological post-process range, while retaining strict RTL and silicon equality and admitting the result only on measured PCSX2 fidelity improvement.
Precision control
Before expanding the family, a controlled replay increased the shared reciprocal table from 11 to 13 bits. It changed 32,173 output pixels, but the mapped PCSX2 score was effectively flat: MAE 20.0716 / RMSE 28.9629 versus 20.0713 / 28.9639 at 11 bits. The extra table cost therefore had no useful fidelity return and was rejected.
Complete family and epoch packing
The captured interval contains 93 authentic PSMT8 alpha-fan draws, not the 53
draws selected by the older Ch405 fixture. The omitted 40 include captured
anchor alpha as high as 0x11; they are real atmospheric contributions, not
transparent no-ops.
An initial one-triangle expansion produced 408 alpha epochs. It also exposed
a valid marker corner: a fully Z-rejected epoch emits no color write, leaving
the host's stale frame_drained observation high and preventing a new drain
edge. The acceptance gate was not weakened. Instead, the same ordered draws
were safely capacity-packed into 129 productive alpha epochs, with maximum
coverage 14,497 fragments. zsrt139f28 is Ch424's 125 scene epochs, the 20
captured CT32 darken epochs, and those 129 alpha epochs: 274 total.
Production RTL acceptance
The complete replay passed:
- 1,325,665 fragments fed; 1,306,030 passed;
- 274 markers and drains;
- zero fragment drops, color overflows, and AXI errors;
- Z mismatch 0/307,200 and color mismatch 0/245,423;
- framebuffer SHA-256
2aaaabfbe4054b6445458eb43dffb5bcb9d7989c3121875c64fcf0839478d976.
Against the PCSX2 reference using the accepted display mapping, the result is MAE 18.9384 / RMSE 27.6464. That is a material improvement over Ch426's 20.0713 / 28.9639. The complete family changes 142,182 pixels relative to the 53-draw subset and restores broad captured atmosphere without the former white-frame failure.
Silicon acceptance
No new Quartus compile was required. The timing-clean Ch423 RBF
(17d1c1b49aac4d893ed56285cf0703bf375db2ee9f472ea36862cca376ae63fe)
ran all 274 epochs on the DE25. Every texture CRC, palette checksum, staged
record count, ordered drain, and zero-drop gate passed; the host returned
rc=0 and enabled the HDMI line-buffer source.
The board dumped all 307,200 words with 212,213 nonzero pixels, bounds
(0,0)..(511,479), sum32 0x9c2fcd95, and xor32 0x6e7390f3. Board and RTL
framebuffer dumps are byte-identical and share the SHA-256 above. The accepted
board image is preserved as
captures/gs/silenthill3/extracted/sh3_zsrt139f28_ch427_board.png.
Ch427 is accepted on silicon and is the current live HDMI baseline.