summaryrefslogtreecommitdiffstats
path: root/wiki/OpenGL.md
diff options
context:
space:
mode:
Diffstat (limited to 'wiki/OpenGL.md')
-rw-r--r--wiki/OpenGL.md37
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.