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/OpenGL.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/OpenGL.md')
| -rw-r--r-- | wiki/OpenGL.md | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md index b647eef..3d04e8e 100644 --- a/wiki/OpenGL.md +++ b/wiki/OpenGL.md @@ -12,7 +12,8 @@ > [`../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-14, tree `master @ 339da842`. Tags: `[live]` observed with the +Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in +the working tree. Tags: `[live]` observed with the stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]` defined success state. @@ -99,7 +100,11 @@ Rated honestly, against the milestone ladder in the plan: | 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 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 | +| 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 screen pixels | `[wall]` | | 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]` | @@ -130,14 +135,17 @@ 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. +client's draw-state push opens, captures and reaches the engine. The MME chain +now completes and executes the draw macro: multi-frame keep-windows land, the +2799-word pack completes (2799/2799), the first `MME-PACK-REARM` fires, the +fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND +prelude intact (84 words) and the DS stage VAs populated. The remaining gates +are the **DS stage-0/1 image** (the synthesized binds read `family+0x900`, +which is zero in the live family page, while the client's VTG SPH image is at +`family+0x600`; the `+0x600` bind is in flight) so the draw stores, the +window/screen present path (glxgears' window is black and a window draw can +wedge X), and the per-boot binding/X first-generation start lottery — then the +first rendered screen frame. ## 6. What is not claimed @@ -145,10 +153,11 @@ 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 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. + capture. 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 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. |
