re(ui): the game does query the display gamma -- measured, with its control

Last iteration's corrected experiment, run. Boot with --log_mask=12
--log_level=3 (Kernel logging on, Cpu/Gpu off), which changes nothing
about the output and so cannot perturb the capture harness the way the
gamma-cvar experiment would have.

VdGetCurrentDisplayGamma is called once, at video init:

  d> VdGetSystemCommandBuffer(701CF830, 701CF804)
  d> VdGetCurrentDisplayGamma(701CE1F8(00000000), 701CE1F0(0))
  d> VdSetDisplayMode(40000000)
  d> VdGetCurrentDisplayInformation(701CF110)

The control is in the same log: 359 VdRetrainEDRAM and 358
VdGetSystemCommandBuffer lines, so an absent call would have been
visible. Per the export's own comment the returned type is "used in D3D
SetGammaRamp/SetPWLGamma" -- the game asks the question a ramp-builder
asks, at the moment one would ask it.

Still open, and stated: whether it then WRITES the ramp, and whether the
measured gamma 1.34-1.49 is that ramp. The write is a GPU register
operation (DC_LUT), invisible to kernel logging; a GPU trace records
gamma ramps as a command type (TraceWriter::WriteGammaRamp), which is
where to look next.

Worth its own METHOD line: this had been parked behind "needs the
emulator to reach a menu" for several iterations, and it needed the
emulator only to BOOT -- video init happens in the first seconds. A
blocker that stops one experiment does not stop every experiment in the
same area.
This commit is contained in:
Sylpheed RE agent
2026-08-29 02:51:32 +00:00
parent 93b0a6b20f
commit c6ce000002
4 changed files with 52 additions and 8 deletions

View File

@@ -624,3 +624,10 @@ agent's loop prompt, i.e. nowhere durable. See [`README.md`](README.md) for the
this harness masks Kernel logging entirely (`log_mask = 13`), so their absence
is guaranteed regardless of what the game did. Check the logging configuration
before reading silence as a result.
* **Check what an experiment actually needs before filing it behind a blocker.**
The gamma question sat parked behind "needs the emulator to reach a menu" for
several iterations. It needed the emulator only to **boot** — video init, and
the `VdGetCurrentDisplayGamma` call, happen in the first seconds, long before
any title screen. A blocker that stops one experiment does not stop every
experiment in the same area, and it is worth re-reading the parked list against
what each item really requires rather than against the area it belongs to.