diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-15 11:18:58 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-15 11:18:58 -0500 |
| commit | 45b03a89e6d836cb8a7a5d83e9d78c7a50de2994 (patch) | |
| tree | 41cb5740cc2c7c653a6231822de45dea7f5584b6 /wiki/Graphics-Execution.md | |
| parent | b9e7e84249a28a5e296a0f97e00a3bdf2e5ce6df (diff) | |
| download | open-iov-45b03a89e6d836cb8a7a5d83e9d78c7a50de2994.tar.gz open-iov-45b03a89e6d836cb8a7a5d83e9d78c7a50de2994.zip | |
wiki: refresh the graphics frontier to the DS stage-image gate (eng51 landed; draw macro executes, store pending)
Diffstat (limited to 'wiki/Graphics-Execution.md')
| -rw-r--r-- | wiki/Graphics-Execution.md | 104 |
1 files changed, 57 insertions, 47 deletions
diff --git a/wiki/Graphics-Execution.md b/wiki/Graphics-Execution.md index 7879505..b221180 100644 --- a/wiki/Graphics-Execution.md +++ b/wiki/Graphics-Execution.md @@ -12,7 +12,8 @@ > [`../docs/04-implementation/04-real-render-walls.md`](../docs/04-implementation/04-real-render-walls.md) > (the measured walls); the docs tree wins on disagreement. -Status: 2026-11-14, tree `master @ 339da842`. Tags: `[live]` observed end to +Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in +the working tree. Tags: `[live]` observed end to end; `[wip]` partially built; `[wall]` current blocker; `[target]` defined success state; `[planned]` designed, not built. @@ -109,17 +110,28 @@ fidelity: verbatim 3D lane (the first direct-GL stream3d marks), and with the golden MME overlay satisfying the prelude gate it **reaches the engine** (`GR LAUNCH submitted` + OK, MME-PRELUDE pack 1701 IR words, MME-GOLDEN - slot 0 accepted). The current wall is **MME macro completion**: the beef - lane's 2799-word packed program cannot complete inside its <=2048-word - block together with the 156-400-word draw window, so the load-only carrier - gate drops every beef window and `live_gen` never promotes; a multi-part - keep-window mechanism is committed default-off (`b44694b5`) and enabled in - the campaign parameters (`339da842`), with the A/B pending. RT routing was - tested and refuted as the store cause (RT0 bind verified 16x, still - `wrote=0`), and the `CODESRC` fault-park class is prevented (a suspect - program page is relocated to the engine-mapped window-0 shadow; - `17c7ed7c`). The window stays black; the window/screen present is still the - frontier (§6). + slot 0 accepted). The MME chain then advanced from the multi-part gate to + **draw-macro execution**: the multi-part keep-window mechanism won + multi-frame windows, the part-launch poison was eliminated (the real fault + was the client's own `SET_REPORT_SEMAPHORE`/`SET_NOTIFY` writes to client + VAs remapped by the host scratch page-table pool — redirected to a mapped + scratch slot; 49 cycles with zero poison and zero MMU faults), the + 2799-word pack completes (2799/2799), engine-global completion plus + keep-done-across-recycle produced the first `MME-PACK-REARM`, the fixed-CB + region is aliased, and the released calls run macros through to + **`DRAW_IAB` (`mac=0x22`)**. Two synthesized-prelude defects were then + fixed: the SPH-BIND prelude self-destructed because an auto-dropped run + broke its kept/final count (`444ae2c1`), and the stage block was silently + skipped by a double-counted budget; with both fixed the prelude emits 84 + words and the DS stage VAs populate (one validated boot carried the full + post-REARM chain, `mac=0x22` and `DS 86040624`). The remaining gap is the + **DS stage-0/1 image**: the synthesized binds read `family+0x900` (zero in + the live family page) while the client's VTG SPH image is at + `family+0x600`, so binding `+0x600` is the in-flight change. Stores still + miss (`wrote=0`, `px0=0`), the window/screen present is still the frontier + (§6), and the per-boot binding lottery (the GL client usually rides the X + channel in indirect mode, and X start keeps a first-generation lottery) is + the throughput limiter. ## 4. The channel and object picture @@ -189,30 +201,29 @@ requires it switched off, along with any external poke. ## 6. Where the frontier is (ranked walls) -1. **Direct-GL MME macro completion** `[wall]`. Delivery to the lane is no - longer the gap: the submission is fully decoded (nine NV906F entries tile - one contiguous buffer; no method-grammar draw header exists; the per-frame - work is data-block blobs plus real state pushes that invoke MME macros), - the recycled pushes are recovered by the content-gated FB-shadow and - LOW-band rescues, the client's 324-B draw-state push opens a `C597` - section, is captured and marked for the verbatim 3D lane, and reaches the - engine with the golden MME overlay (`GR LAUNCH submitted` + OK, - MME-PRELUDE pack 1701 IR words, MME-GOLDEN slot 0 accepted). The wall is - the multi-part program gate: the beef lane's 2799-word packed MME program - cannot complete inside a <=2048-word block together with its 156-400-word - draw window, so the load-only carrier gate drops each beef window - (`MME-LOAD-ONLY carrier ... window=156 ... dropped`) and `live_gen` never - promotes. A multi-part keep-window mechanism is committed default-off - (`b44694b5`) and enabled in the campaign parameters (`339da842`); the A/B - is pending. Two hypotheses were closed on the way: the QMD-carrier theory - (refuted: the entry format has no QMD bit, the blob is not a QMD, no QMD - magic in 256 MiB BAR1) and RT routing (the clear targets RT0 while the - window binds RT1; binding RT0 is verified 16x with correct target/geometry - but the store still misses, 61/61 `wrote=0`) — the store wall is macro/ - front-end execution, not reachability. Related reliability result: the +1. **Direct-GL MME draw-macro execution and stores** `[wall]`. Delivery to + the lane and the multi-part program gate are closed: the submission is + fully decoded (nine NV906F entries tile one contiguous buffer; no + method-grammar draw header exists; the per-frame work is data-block blobs + plus real state pushes that invoke MME macros), the recycled pushes are + recovered by the content-gated FB-shadow and LOW-band rescues, the + client's 324-B draw-state push opens a `C597` section, is captured and + marked for the verbatim 3D lane, and reaches the engine with the golden + MME overlay (`GR LAUNCH submitted` + OK). The 2799-word pack completes + (2799/2799), the first `MME-PACK-REARM` fires (engine-global completion + plus keep-done-across-recycle), the fixed-CB region is aliased, the + released calls run macros, and `DRAW_IAB` (`mac=0x22`) executes. The + prelude now emits 84 words and the DS stage VAs populate; the last named + gate is the **DS stage-0/1 image**: the synthesized binds read + `family+0x900` (zero in the live family page) while the client's VTG SPH + image is at `family+0x600`, so the `+0x600` bind is in flight. Stores + still miss (`wrote=0`, `px0=0`). Closed on the way: the QMD-carrier theory + (refuted: no QMD bit in the entry format, no QMD magic in 256 MiB BAR1) + and RT routing (the clear targets RT0 while the window binds RT1; RT0 bind + verified 16x with correct target/geometry, still 61/61 `wrote=0`). The `CODESRC` fault-park class is prevented by relocating a suspect program - page to the engine-mapped window-0 shadow (`17c7ed7c`; one validated boot: - 31 relocations, 51 GR launches, 79 GP_GET advances, 0 `FAULT_PDE`, 0 + page to the engine-mapped window-0 shadow (`17c7ed7c`; validated boot: 31 + relocations, 51 GR launches, 79 GP_GET advances, 0 `FAULT_PDE`, 0 `WEDGE-REARM`, `backend_ok=35`). 2. **Window/screen present** `[wall]`. The pbuffer and off-screen frame paths are proven (`pixel=ff0000ff`, 500/500 non-black frames, captured videos), @@ -236,14 +247,9 @@ requires it switched off, along with any external poke. recovered by an offline filesystem check. 4. **Non-black window frames and sustained rate** `[wall]`/`[target]`. Once - the command-stream delivery, the window/screen present and X screen-init - land, the capture must show motion in a window, then 60 fps in one VM with - no forcing, then two VMs on two mediated devices with non-black frames in - both. -4. **Non-black window frames and sustained rate** `[wall]`/`[target]`. Once - the command-stream delivery, the window/screen present and X screen-init - land, the capture must show motion in a window, then 60 fps in one VM with - no forcing, then two VMs on two mediated devices with non-black frames in + the draw stores, the window/screen present and X screen-init land, the + capture must show motion in a window, then 60 fps in one VM with no + forcing, then two VMs on two mediated devices with non-black frames in both. ## 7. What is proven today @@ -279,7 +285,11 @@ requires it switched off, along with any external poke. | Verbatim 3D method-stream replay retired by the engine (no MMU fault) | `[live]` | | Synthesized launch executes real `sm_75` SASS; Turing `V3` program header accepted | `[live]` | | Emulated FB/GART sizing traps fixed (FB info replies in KB; GART default 256 MiB), removing the 4 GiB guest-allocation class | `[live]` | -| Direct-GL MME macro completion (multi-part keep-window: the 2799-word packed program + 156-400-word draw window cannot fit the <=2048-word block; `live_gen` never promotes) | `[wall]` — mechanism committed `b44694b5` (default off) and enabled in params (`339da842`); A/B pending | +| Multi-part MME keep-window: multi-frame windows admitted; the 2799-word pack completes (2799/2799) | `[live]` | +| Part-launch poison eliminated: client `SET_REPORT_SEMAPHORE`/`SET_NOTIFY` targets redirected to a mapped scratch slot (49 cycles, 0 poison, 0 MMU faults) | `[live]` | +| First `MME-PACK-REARM` captured (engine-global completion plus keep-done-across-recycle); fixed-CB region aliased; released calls run macros | `[live]` | +| `DRAW_IAB` (`mac=0x22`) executes; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` (single validated boot) | +| DS stage-0/1 image (synthesized binds read `family+0x900` = zero; the client's VTG SPH image is at `family+0x600`) | `[wall]` — `+0x600` bind in flight | | Window/screen present produces non-black window pixels | `[wall]` | | X screen-init first-generation lottery (`modeNum` parity; only an immediately-post-boot X passes DDX DMA init; dominant throughput limiter) | `[wip]` | | Non-black screen pixels from the emulated vGPU's 3D pipeline | `[wall]` | @@ -295,9 +305,9 @@ requires it switched off, along with any external poke. * Display/KMS bring-up (NvKms, `/dev/dri`, X, a real GL context) is not a rendered-frame claim. GZDoom reaching `V_Init: allocate screen` proves the client's GL init and the direct-GL GR lane, not the game loop or a - presented frame; the client's draw-state push reaches the engine, but the - MME macro program does not complete, so its draws do not store and the - window stays black. + presented frame; the client's draw-state push reaches the engine, the MME + program completes and the draw macro executes, but the DS stage image is + not yet right, so its draws do not store and the window stays black. * The engine-zero-write (NOWRITE) campaign is not a rendering result: it and the draw census together proved the submission is macro-driven (no method-grammar draw header exists), that RT routing is not the cause, and |
