diff --git a/docs/re/structures/ui-render-tone-curve.md b/docs/re/structures/ui-render-tone-curve.md index ec41a6fd..ac1dd110 100644 --- a/docs/re/structures/ui-render-tone-curve.md +++ b/docs/re/structures/ui-render-tone-curve.md @@ -215,6 +215,50 @@ LOG_LEVEL=3` (both are needed — kernel calls log at Debug) and look for emulator only to **boot**, not to reach a menu: video init happens in the first seconds. This had been parked behind the title-screen blocker for no reason. +## 🔴 The direct observation: ATTEMPTED, BLOCKED by the build tree (2026-08-30) + +This page records the game's ramp write as *"inferred from a closed chain, not +directly observed"*, the chain being that the swap-path stage is a pure 256-entry +LUT and that an unwritten table is identity (`i * 0x3FF / 0xFF`). The direct +observation is a log in Canary's own write path, which `/canary` being read-write +makes available. Attempted; blocked, and the blocker is worth recording. + +**The patch** — `command_processor.cc`, inside `XE_GPU_REG_DC_LUT_SEQ_COLOR`, on +each completed 256-entry sweep: + +```cpp +if (gamma_ramp_rw_index.rw_index == 255 && gamma_ramp_rw_component_ == 2) { + auto id = [](uint32_t i) { return i * 0x3FFu / 0xFFu; }; + XELOGI("[RE-GAMMA] full 256-entry ramp written (sweep #{})", ++re_gamma_sweeps_); + for (uint32_t i : {0u, 64u, 128u, 192u, 255u}) { + const auto& e = gamma_ramp_256_entry_table_[i]; + XELOGI("[RE-GAMMA] [{:3}] r={:4} g={:4} b={:4} identity={:4}{}", + i, uint32_t(e.color_10_red), uint32_t(e.color_10_green), + uint32_t(e.color_10_blue), id(i), + uint32_t(e.color_10_red) == id(i) ? "" : " <- NOT identity"); + } +} +``` +plus `uint32_t re_gamma_sweeps_ = 0;` beside `gamma_ramp_rw_component_` in the +header. It prints each written ramp against the identity the source documents, so +a written ramp is distinguishable from an unwritten one **by reading the log**. + +🔴 **Blocked: the build tree cannot regenerate.** `/sylph-home/re/canary-build` was +configured with `-S/work/xenia-canary`, and **that path does not exist** — the tree +was configured against a source location this container no longer has. `ninja` +fails at the CMake regeneration step before compiling anything. Reconfiguring +against `/canary` would almost certainly trigger a near-full Xenia rebuild, which +is not a thing to start on the way to one log line. + +✅ **The patch was REVERTED and `/canary` verified byte-identical to its backup.** +Leaving instrumented source that the running binary does not contain is the +source-and-binary-disagree trap this corpus has hit repeatedly — a later reader +would find the logging in the tree and conclude it is live. + +⚠️ So the ramp write **remains inferred, not observed**, exactly as this page +already says. What is new is the reach: the experiment is *written*, and the +obstacle is a build-tree path rather than anything about the game. + ## What a port should do with this Treat it as **authored**, not transcribed. If the goal is to match the emulator —