Files
retroDE_ps2/tools/patch_runtime_sched_zstate.py
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

57 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""Backfill authentic TEST_1/ZBUF_1 words into an existing scheduler fixture.
Ch357-Ch404 fixtures used placeholder words because the board wrapper supplied
ZTE/ZMSK constants to the external LPDDR ROP. Ch405 carries that state from
the feeder list, so accepted fixture geometry can be retained byte-for-byte
while only header words 3 and 4 are restored from the capture.
"""
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.normpath(os.path.join(HERE, ".."))
DATA = os.path.join(ROOT, "sim", "data", "top_psmct32_raster_demo")
sys.path.insert(0, HERE)
import gs_make_sh3_multidraw_fixture as MD
def rows(path):
with open(path, encoding="utf-8") as f:
for line in f:
s = line.strip()
if s and not s.startswith("#") and not s.startswith("META"):
fields = s.split()
if fields[0].isdigit():
yield int(fields[1]), fields[8]
def main(argv):
if len(argv) < 3:
raise SystemExit("usage: patch_runtime_sched_zstate.py dump.gs.zst epochs.txt [epochs.txt ...]")
dump = argv[1]
tables = argv[2:]
entries = [(idx, name) for table in tables for idx, name in rows(table)]
got, _ = MD.load_draws(dump, [idx for idx, _ in entries])
for idx, name in entries:
if idx not in got:
raise SystemExit(f"missing captured draw idx{idx}")
path = os.path.join(DATA, name)
with open(path, encoding="utf-8") as f:
lines = f.readlines()
slots = [i for i, line in enumerate(lines)
if line.strip() and not line.lstrip().startswith("//")]
if len(slots) < 5:
raise SystemExit(f"{name}: truncated staging image")
state = got[idx]["state"]
lines[slots[3]] = f"{state['test'] & 0xffffffffffffffff:016x}\n"
lines[slots[4]] = f"{state['zbuf'] & 0xffffffffffffffff:016x}\n"
with open(path, "w", encoding="utf-8") as f:
f.writelines(lines)
print(f"[zstate] {name}: idx{idx} TEST={state['test']:016x} ZBUF={state['zbuf']:016x}")
return 0
if __name__ == "__main__":
raise SystemExit(main(sys.argv))