summaryrefslogtreecommitdiffstats
path: root/wiki/OpenGL.md
diff options
context:
space:
mode:
Diffstat (limited to 'wiki/OpenGL.md')
-rw-r--r--wiki/OpenGL.md33
1 files changed, 18 insertions, 15 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md
index 3d04e8e..f07765f 100644
--- a/wiki/OpenGL.md
+++ b/wiki/OpenGL.md
@@ -12,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in
-the working tree. Tags: `[live]` observed with the
+Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` observed with the
stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]`
defined success state.
@@ -103,8 +102,9 @@ Rated honestly, against the milestone ladder in the plan:
| 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 |
+| `DRAW_IAB` (`mac=0x22`) executes on the 324-B window class after a cross-lane `MME-PACK-REARM`; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` |
+| DS stage-0/1 image: a VTG SPH is authored at `family+0x900` and the window's own slot-1 bind rewritten to it; the DS latch reads `st0=st1=020a0481` (`0x86040626 -> 0x84000420`, two boots) | `[live]` |
+| Remaining DS bits (stage type/context: SPH5/SPH10/SPH18); the 728-B draw window's released macros (`0x33/0x39/0x1/0x0`) do not include `DRAW_IAB` (`mac=0x22`); stores `wrote=0` | `[wall]` |
| 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]` |
@@ -139,13 +139,16 @@ 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.
+prelude intact (84 words) and the DS stage VAs populated. The **DS stage-0/1
+image is now authored and live** (a VTG SPH at `family+0x900`, first word
+`020a0481`, with the window's own slot-1 bind rewritten to it): the DS latch
+reads `st0=st1=020a0481 code=ff007321` and the DS value falls
+`0x86040626 -> 0x84000420`, reproduced on two boots. The remaining gates are
+the stage type/context bits (SPH5/SPH10/SPH18), the draw-issue call (the
+728-B window's released macros are `0x33/0x39/0x1/0x0`, not `DRAW_IAB`), so
+the draw still does not store, 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
@@ -154,10 +157,10 @@ first rendered screen frame.
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 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.
+ completes and the draw macro executes, and the authored DS stage image is
+ fetched by both vertex slots; but the 728-B window's draw-issue call and the
+ stores are still missing, a synchronous window draw can wedge 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.