diff options
Diffstat (limited to 'wiki/OpenGL.md')
| -rw-r--r-- | wiki/OpenGL.md | 38 |
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. |
