Docs (P15): fbm row (first FB-state memo within noise, per-target entry misses on A/B/A) and handoff; BSL gpuhunt shows no GPU regression from 1c (53.8 -> 55.7 fps).

This commit is contained in:
2026-10-09 06:41:45 -04:00
parent 9eed5a27d7
commit afcc313d9f
2 changed files with 34 additions and 1 deletions
+28 -1
View File
@@ -8,7 +8,34 @@ The plan and its measurements are in [PLAN-P15.md](PLAN-P15.md); the audit is in
ms/frame), dev measured in the same session, ~5 % noise.
- GPU scene (Iris + BSL): fps within ~5 % of MobileGlues on both backends.
## Latest (2026-10-08 late): harness H2, dev reference, scoreboard
## Latest (2026-10-09): cuts 1b + 1c, cut 4, pipe-record pieces
- **Landed locally (pushed after the BSL gpuhunt check):**
- 66e3b2c1 (rebased as 65d4b808): Espryt surface-size memo, GL CPU 3.18 -> 3.05.
- 533a2564: Magma deferred clears (1c) plus coalesced pass-begin barriers (1b).
- Per frame: passes 11.5 -> 4.3 (dev 4.1), barriers 15.5 -> 9.0 (dev 3.4).
- Inproc +5.0 % fps, apply thread -0.17 ms; monolith GL CPU -0.09 ms.
- **In the worktree, not committed yet:**
- BuildFramebufferState memo (MOBILEGL_PIPE_FRAMEBUFFER_STATE_MEMO). A/B queued as session `fbm`.
- EmitVertexBuffers per-buffer handle reuse.
- **Order (coordinator, 2026-10-09):** FB-state memo, then handle cache on objects, vertex input,
program, samplers, accessor/TLS hoist, the ValidateForVerb dirty walk, Tracker.
- No record-bypass design change until the user decides.
- **Parked: the Espryt attrib-format split** (MONOLITH-DIFF.md).
- **Remaining Magma barriers:** CPU ceiling ≤0.02 ms. Revisit only if BSL shows a Magma GPU gap.
- **Harness gotchas found today:**
- `tpl` in the freq sampler is kgsl `thermal_pwrlevel`. Under gpuhunt it is 6 by construction
(the 578 MHz pin); freqcheck already maps it. Stop a session on INVALID or `thr > 0`, never on
`tpl > 0`.
- Never run `binary_cache_builder` (adb pulls) while a session is measuring. Build binary caches
after the session ends.
- FCL sometimes dies at bootstrap with signal 34 (seen on every build including MobileGlues);
fclab2 retries, and a run that never reaches the world is lost.
- **Monolith floor estimate (MONOLITH-DIFF.md, structural):**
- Pipe record: 0.35 -> about 0.10-0.13 if every local piece lands.
- Whole Magma GL thread: about 2.35-2.40 ms (native TLS: about 2.30), against dev 2.00.
## Earlier (2026-10-08 late): harness H2, dev reference, scoreboard
- **Every FCL vanilla number now goes in [SCOREBOARD.md](SCOREBOARD.md).** It has one row per
session, as fps ratio to MobileGlues plus CPU ms/frame. It also holds the fixed dev reference, so
@@ -80,6 +80,7 @@ H2 sessions:
| c1b ~02:10 (10-09) | t = p15t; v = p15t + 1b (coalesced pass barriers, local) | 320.9 (1.69) | - | t 0.783 / 0.82 dev (2.85); v 0.789 / 0.83 dev (2.85) | - | v 1.048 (1.34 / 1.345) |
| c4 ~02:55 (10-09) | v (as c1b); w = v + cut 4 (Espryt surface-size memo, 66e3b2c1) | 321.6 (1.70) | v 0.757 / 0.85 dev (3.18); w 0.762 / 0.86 dev (3.05) | - | - | - |
| c1c2 ~03:30 (10-09) | t = p15t; y = p15t + 1b + 1c (deferred clears) + cut 4 | 321.3 (1.70) | - | t 0.795 / 0.83 dev (2.83); y 0.785 / 0.82 dev (2.74)⁴ | - | t 1.025 (1.35 / 1.41)⁵; y 1.076 (1.33 / 1.24) |
| fbm ~05:20 (10-09) | y (as c1c2); z = y + FB-state build memo, one entry per target | 321.7 (1.70) | y 0.770 / 0.87 dev (3.04); z 0.775 / 0.87 dev (3.04) | y 0.818 / 0.86 dev (2.65); z 0.831 / 0.87 dev (2.65) | - | - |
- **pt:** the blit view cache gives Magma inproc +1.2 % fps, with apply −0.03 ms/frame.
- **c1:** cut 1 is within noise (−1.7 % fps, +0.06 ms). It engaged (the mid-frame submit is gone) but saves ≤0.04 ms; see MONOLITH-DIFF.md.
@@ -97,6 +98,11 @@ H2 sessions:
⁴ y has 2 valid reps: r2 never reached the world after 3 startup deaths (signal 34 during bootstrap, a harness flake also seen on MobileGlues and other builds).
⁵ t inproc r2 is discarded: a host-side `binary_cache_builder` pulled libraries over adb inside its measurement window.
- **fbm:** the first memo is within noise on both backends (CPU 2.65 / 2.65 Magma, 3.04 / 3.04 Espryt).
- It engaged only partly: Magma BuildFramebufferState 0.058 -> 0.032 ms/frame, and Espryt kept missing.
- The build only runs on a binding switch, so one entry per target misses on every A/B/A switch.
Batch h makes it per framebuffer.
- Session noise: y Magma r3 read 2.54 against 2.70-2.72 in r1/r2, with nothing in its state to explain it.
- **c4:** Espryt GL-thread CPU fell 0.13 ms/frame (3.18 -> 3.05 in all three reps); fps moved by less than the noise.
The profile confirms it: QueryCurrentSurfaceSize 0.070 -> 0.012 and SyncRenderState 0.092 -> 0.028 ms/frame.