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,64 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user