From ccea1dbe570ff9bb6366ce0f06e622295172be9d Mon Sep 17 00:00:00 2001 From: Matthew Stanley <1379tech@gmail.com> Date: Sat, 5 Sep 2026 12:41:00 -0700 Subject: [PATCH] Record manual acceptance and validate performance guards on current master --- docs/performance/EXPERIMENTS.md | 43 +++++++++++++++++++++ docs/performance/RUNTIME_AUDIT.md | 4 ++ runtime/tests/test_gpu_gp0_history_guard.py | 4 +- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/performance/EXPERIMENTS.md b/docs/performance/EXPERIMENTS.md index de1d473b..eef3d55a 100644 --- a/docs/performance/EXPERIMENTS.md +++ b/docs/performance/EXPERIMENTS.md @@ -585,3 +585,46 @@ supports retaining the candidates in the isolated burndown branch for further qualification. Normal-speed audio/pacing, constrained-host comparisons, multi-title correctness and actual low-end hardware remain open. Do not ship the local uncap hook as a gameplay default. + +## MANUAL-INTEGRATION-004: user sign-off and master integration + +Date: 2026-09-05. The user reviewed the Tomba 2 and Mega Man X6 manual builds, +reported that they "look good", and explicitly authorized committing and +merging the work to main/master. This is user acceptance of the supplied test +builds, not an instrumented audio comparison, full-title playthrough or a new +performance measurement. + +Both manual builds used the combined guards from `04371d60`, normal pacing, +OpenGL, recomp-ui, production debug-tools OFF, rewind ON, existing generated +game/BIOS code and isolated copied memory cards. Recomp-ui displayed verified +discs with BIOS paths supplied. Final executable SHA256 values: + +- Tomba 2: `6d978d8e2a736aa8b94cb076091117edbe76f6fa7c7f061df227233be8a648ad`. +- Mega Man X6: `4c99e7a6092122b6675daf83f52eddb76a71b0b5290b474c7f4d494df84135b2`. + +The initial Tomba build disabled rewind to bypass a dependency lookup; review +rejected that workaround and the final build restored rewind. Mega Man X6's +older recomp-ui headers were incompatible with the runtime, so its manual +build used the compatible Tomba 2 recomp-ui checkout. Neither original game +installation was edited. Local build logs/settings/screenshots remain under +the original burndown worktree's `.local/manual-validation` directory. + +Integration uses `origin/master` at `17f49ad3` as its base. Only the six campaign +commits `6488414a`, `d38f97e1`, `8ec6498d`, `28e9c844`, `0cf93d57`, and +`04371d60` were transplanted; the older review-branch ancestry was excluded. +All six applied without conflicts. The runtime delta remains only the three +production diagnostic guards; benchmark uncapping and local game artifacts +are not part of the merge. + +The first integration GPU test failed because its old polyline fixture supplied +only one vertex before the terminator. Upstream now correctly requires two +vertices. The fixture now supplies both; the upstream runtime fix is unchanged. +On the integrated sources, all three actual-source guard regressions and the +63 campaign/host/stall-report tests pass. The previously tested game executables +are not rebuilds of this newer upstream base; no such equivalence is claimed. +The CMake registration guard also passes with 133 test files registered. + +Disposition: user-approved integration of the scoped optimizations, tests and +measurement tools. The original WIP label records the historical state at +implementation time. The broader burndown, general speedup qualification and +actual low-end hardware coverage remain open after this merge. diff --git a/docs/performance/RUNTIME_AUDIT.md b/docs/performance/RUNTIME_AUDIT.md index d9c80c15..632c8742 100644 --- a/docs/performance/RUNTIME_AUDIT.md +++ b/docs/performance/RUNTIME_AUDIT.md @@ -16,6 +16,10 @@ threading or Vulkan behavior has changed. [PACER-COST-001](EXPERIMENTS.md#pacer-cost-001-attribute-idle-pacing-cpu-cost) provides idle-pacer CPU attribution, not a speedup claim. +[MANUAL-INTEGRATION-004](EXPERIMENTS.md#manual-integration-004-user-sign-off-and-master-integration) +records the user's Tomba 2/Mega Man X6 sign-off and approval to integrate the +scoped guards. This does not close the wider performance/correctness campaign. + ## Disposition Matrix | Area | Current disposition | Evidence | Candidate / next check | Correctness guardrails | diff --git a/runtime/tests/test_gpu_gp0_history_guard.py b/runtime/tests/test_gpu_gp0_history_guard.py index 9c8ecc56..9f4d5a7a 100644 --- a/runtime/tests/test_gpu_gp0_history_guard.py +++ b/runtime/tests/test_gpu_gp0_history_guard.py @@ -100,6 +100,8 @@ static void emit_copy(uint32_t src_xy, uint32_t dst_xy, uint32_t wh) { static void emit_polyline(void) { gpu_write_gp0(0x4800007Fu); gpu_write_gp0((20u << 16) | 10u); + /* The first two vertices are mandatory, before any terminator. */ + gpu_write_gp0((25u << 16) | 15u); gpu_write_gp0(0x55555555u); s_frame_count++; checkpoint(); @@ -466,7 +468,7 @@ def main() -> int: if prod_out["copydump"] != "0" or prod_out["polydump"] != "0": fail("production GP0 history frame dumps should be empty") if debug_out["total"] != "10" or int(debug_out["cap"]) == 0: - fail("debug GP0 history stopped recording") + fail(f"unexpected debug GP0 history: {debug_out}") if debug_out["src"] != "00123400" or debug_out["op"] != "e1": fail("debug GP0 history lost source/opcode tracking") if debug_out["cmd0"] != "e10003ff":