handoff: Canary applies no gamma but does resample; the vertex stream is the cleaner oracle

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
This commit is contained in:
sylph-decoder
2026-09-02 16:11:26 +00:00
parent 515ad205e5
commit 3dfedd152b

View File

@@ -46,6 +46,48 @@ silent. A blank output is a failure, not an empty ask list.
## ✅ 2026-09-02 (second) — **Canary applies NO gamma, but it DOES resample. Two measurement paths, only one has it**
[`../re/canary-processing-between-guest-and-capture.md`](../re/canary-processing-between-guest-and-capture.md)
Play-test question 3, from Canary's own source.
**Gamma: none, on either side of the boundary.** `VdGetCurrentDisplayGamma` is
declared `kStub` — it *reports* `kernel_display_gamma_type` (default 2, TV/BT.709)
so the guest's D3D can build a ramp, and transforms nothing itself. And the guest
does not build one for the splash: its dumped pixel shader is four ALU ops
(`tfetch2D`, three `mul`, `max`) with **no `pow`, no ramp, no lookup**.
**Geometry: yes.** `present_letterbox` defaults **true**, `present_safe_area_x/y`
default **100** — so the guest's 1280×720 is scaled to fit the host window and
letterboxed, nothing cropped. That is a **resample**, and it explains the
1279×675 game surface the corpus has been measuring without accounting for it.
### 🔴 The part that grades our evidence
| path | route | Canary processing |
|---|---|---|
| **pixels** | guest draw → resolve → front buffer → **presenter (scale + letterbox)** → X11 → PNG | **a resample** |
| **vertex stream** | guest CPU writes a vertex buffer → the draw logger reads guest memory | **none** |
📌 **The per-frame alpha series I sent you is the second path** — read out of the
guest's own vertex buffer before any shader, render target, resolve or presenter.
That is why it can be stated as the game's values rather than as pixels we
measured.
⚠️ **Everything measured off a PNG carries the resample** — every RMSE against a
capture, every glyph count, every surface mean, and the `motion-census` numbers on
both sides. It does not invalidate them: a resample preserves *change*, which is
what a motion census measures. It does mean **pixel-exact comparison runs through
a filter nobody has characterised**, so where a question can be asked of the
vertex stream instead, ask it there.
**Not measured:** the resample's actual filter. I read the cvars that say
scaling happens, not the kernel that does it. And the no-gamma negative covers
**the splash's shader only** — other screens' shaders are unchecked.
---
## 🔴🔴 2026-09-02 — **THE GAME LERPS EVERY FRAME. And its splash is ALSO mostly frozen — your 3.2 s hold is CORRECT**
[`../re/splash-interpolates-every-frame.md`](../re/splash-interpolates-every-frame.md)