summaryrefslogtreecommitdiffstats
path: root/wiki/OpenGL.md
diff options
context:
space:
mode:
Diffstat (limited to 'wiki/OpenGL.md')
-rw-r--r--wiki/OpenGL.md38
1 files changed, 24 insertions, 14 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md
index e9a1750..b647eef 100644
--- a/wiki/OpenGL.md
+++ b/wiki/OpenGL.md
@@ -12,7 +12,7 @@
> [`../docs/03-architecture/02-guest-stack-and-cudasw.md`](../docs/03-architecture/02-guest-stack-and-cudasw.md)
> (the guest stack). The docs tree wins on disagreement.
-Status: 2026-11-13, tree `master @ 436cbf9d`. Tags: `[live]` observed with the
+Status: 2026-11-14, tree `master @ 339da842`. Tags: `[live]` observed with the
stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]`
defined success state.
@@ -89,14 +89,19 @@ Rated honestly, against the milestone ladder in the plan:
| X DDX idle-DMA/ScreenInit, USERD-latch lifetime, re-probe thrash, Xorg kernel-mode spin (GET-past-PUT) and flip-event walls closed; X green >10 minutes (`13a0c5d6`, `acb51d53`, `6ebc7cd4`, `770d6b4a`, `b9213c57`, `29690635`) | `[live]` |
| Captured GL sections execute on the engine (`GR LAUNCH submitted` / `GUEST GR LAUNCH OK`); data window populated (`n_data` 0 -> 1024) | `[live]` |
| Client push bodies decode as real GR method streams above 10 GiB via the VAS walk (live-PA bound raised to the registered guest-RAM top, `436cbf9d`) | `[live]` |
+| Direct-GL submission fully decoded: nine NV906F entries tile one contiguous buffer; no method-grammar draw header; per-frame work is data-block blobs + real state pushes (324/476/728 B) invoking MME macros; QMD-carrier hypothesis refuted | `[live]` |
+| Recycled direct-GL pushes recovered (content-gated FB-shadow rescue `e1eac368`, LOW-band rescue `b7f09616`); the 324-B draw-state push opens a `C597` section, captures and is marked for the verbatim 3D lane | `[live]` |
+| Direct-GL state push reaches the engine with the golden MME overlay (`GR LAUNCH submitted` + OK; MME-PRELUDE pack 1701 IR words; MME-GOLDEN slot 0 accepted) | `[live]` |
+| `CODESRC` fault-park class prevented (program page relocated 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`) | `[live]` |
+| RT routing tested and refuted as the store cause: RT0 bind verified 16x with correct target/geometry, still 61/61 `wrote=0` | `[live]` (negative result) |
| GZDoom passes `V_Init: allocate screen` with GL 4.6.0 when shared nvClip `modeNum` is even | `[live]` |
| RM write-lock holder identified (Xorg in the DDX vidheap scrub wait) and fixed (`df6e71bb`) | `[live]` |
| Engine executes a launch built from the captured section (real `sm_75` SASS retired) | `[live]` |
| Verbatim 3D method-stream replay retired by the engine, no MMU fault | `[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 command-stream delivery (gl setup push at VA `0x4001004` and draws at `0x4250000`/`0x4250110`; the CE ring `0xbeef0101`) | `[wall]` — the payloads' user/UVM VAS is never registered; they resolve to zero/implausible PAs and no section opens for `0xbeef0100` |
+| Direct-GL MME macro completion (multi-part keep-window: 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 |
| Window/screen present produces non-black screen pixels | `[wall]` |
-| X screen-init first-generation lottery (`modeNum` parity; only an immediately-post-boot X passes DDX DMA init) | `[wip]` |
+| X screen-init first-generation lottery (`modeNum` parity; only an immediately-post-boot X passes DDX DMA init; dominant throughput limiter) | `[wip]` |
| 60 fps sustained, no forcing (M-GL4) | `[target]` |
## 4. How OpenGL runs are verified
@@ -121,14 +126,18 @@ X and the stock GLX path are fully green (`glxinfo -B` rc 0, ~520 FPS
`glxgears`, Xorg WAIT 0), the DDX/X-stability walls were closed (X green for
more than 10 minutes), the direct-GL ring/USERD machinery is hardened, and the
GPU-rendered pbuffer path produced non-black animated frames and captured
-videos (45.4 s and 50 s). Captured GL sections now execute on the engine and
-the client's push bodies decode as real GR method streams above 10 GiB. The
-remaining gates are **delivery of the direct-GL client's own command stream**
-(the setup push at `0x4001004` and the draws at `0x4250000`/`0x4250110` still
-resolve to zero/implausible PAs because their user/UVM VAS is never
-registered), the window/screen present path (glxgears' window is black and a
-window draw can wedge X), and the X first-generation screen-init lottery —
-then the first rendered screen frame.
+videos (45.4 s and 50 s). Captured GL sections now execute on the engine, and
+the direct-GL client's submission is fully decoded: it carries no classic
+draw header — the work is macro-driven (data-block blobs plus small state
+pushes invoking MME macros), the recycled pushes are recovered, and the
+client's draw-state push opens, captures and reaches the engine. The
+remaining gates are **MME macro completion** (the 2799-word packed program
+cannot complete inside its <=2048-word block with the 156-400-word draw
+window, so `live_gen` never promotes; the multi-part keep-window mechanism is
+committed default-off and enabled for the pending A/B), the window/screen
+present path (glxgears' window is black and a window draw can wedge X), and
+the X first-generation screen-init lottery — then the first rendered screen
+frame.
## 6. What is not claimed
@@ -136,9 +145,10 @@ then the first rendered screen frame.
vGPU yet; every screen capture so far is black. The non-black frames and the
videos (45.4 s and 50 s) come from the off-screen pbuffer path (pbuffer ->
sysmem -> kvmfr ivshmem -> host reader), not from a windowed X screen
- capture. The direct-GL payload VAS is not registered, its draws do not reach
- the engine, a synchronous window draw wedges X, and X screen-init retains a
- per-boot first-generation lottery. Those are the current walls.
+ capture. The client's draw-state push now reaches the engine, but the MME
+ macro program does not complete so the draw never stores, a synchronous
+ window draw wedges X, and X start retains a per-boot first-generation
+ lottery. Those are the current walls.
* GZDoom reaching `V_Init: allocate screen` is not a rendered-frame claim; it
proves the client's GL init and the direct-GL GR lane, not the game loop or
a presented frame.