Files
retroDE_ps2/docs/ch432_perspective_bilinear_handshake_closeout.md
T
thejayman77 ba74bbd5aa 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>
2026-07-20 19:56:46 -04:00

3.2 KiB

Ch432 — perspective palette-bilinear handshake repair

Result

Ch432 removes the alternate-sample loss in the serialized perspective palette-bilinear raster path. It restores a broad missing surface population in the unchanged 292-epoch f42 composition and is accepted on silicon.

The mapped PCSX2 score improves from Ch431's MAE 18.9405 / RMSE 27.6301 to MAE 15.0765 / RMSE 21.9717. This is a fidelity improvement from corrected RTL coverage, not an increase in draw count or a fixture substitution.

Root and repair

Dense perspective epochs emitted almost exactly half of the independently rasterized coverage. Isolated f19 epoch 74 produced 7,301 fragments against 14,371 reference pixels. The sampler advanced once when launching the held S1 pixel and again on PB_RELEASE, skipping the next S1 sample.

Launch is now the single normal advance, PB_WAIT holds while the four-tap sample returns, and PB_RELEASE contributes a final hold cycle. Perspective valid is qualified by the existing Z and texture-alpha advance enables so a frozen beat cannot resubmit the same pixel. The expensive triangle-inside result remains off the global pipeline-enable path.

An ALWAYS-Z diagnostic had previously added only 571 lit pixels and worsened the reference score, independently ruling out Z as the large coverage root.

Simulation acceptance

The focused perspective PSMT8 regression emits all 31/31 independently covered samples, with no missing pixels, valid colors, correct alpha metadata, and correct MODULATE behavior. The isolated production epoch-74 regression passes its explicit 14,341-fragment count, up from 7,301, with zero drops and exact scoreboards. The affine palette-bilinear regression remains clean.

The complete unchanged f42 replay passes:

  • 2,339,405 fragments fed and 2,285,783 passed;
  • 292 markers and drains;
  • zero fragment drops, color overflows, and AXI errors;
  • Z mismatch 0/307,200 and color mismatch 0/245,760;
  • framebuffer SHA-256 31d21fb5c38816ef99ace1d7b55186dc749720e874ecb055a68b21584ec27037.

The repaired f19 scene improves against its independent software reference from MAE 11.7491 / RMSE 24.6649 to MAE 8.7494 / RMSE 18.7008. Its mapped PCSX2 score improves from 20.9469 / 29.7626 to 18.3393 / 25.8374.

Fit and silicon acceptance

The owner GUI fit is timing-clean. Runtime-fabric audit reports 38,367 ALMs, 336 RAM blocks, required feeder/texture/Z hierarchy present, and 310 MHz setup met at +0.069 ns. Hold is nonnegative. The deployed RBF SHA-256 is 69b1f91b26d0d78ba654b3d0ccc48f747fa3249f08e2a23535007ff3df40d63e.

After explicit loader confirmation, the DE25 completed all 292 epochs with every texture checksum, palette checksum, staged-record count, ordered drain, and zero-drop gate passing. The host returned rc=0, selected the HDMI line-buffer source, and dumped 307,200 words with sum32 0x8304eb9b, xor32 0x89a68e4f, 240,414 nonzero 32-bit words, and bounds (0,0)..(511,479).

The board dump is byte-identical to the production-gradient simulation at the framebuffer SHA above. The accepted board image is captures/gs/silenthill3/extracted/sh3_zsrt139f42_ch432_board.png; its PNG SHA-256 is 45d7f3eed485ab4650bcf61e849598423c46302c42465dbd2a2579ae4518fab3.

Ch432 is accepted and is the current live HDMI baseline.