summaryrefslogtreecommitdiffstats
path: root/wiki/OpenGL.md
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 20:01:07 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-12 20:01:07 -0500
commit76a2d3cb16ea5550fb2f11f39a78b9eaa2804314 (patch)
treeeadcc7a3007aaad7ca8f6d061cea74dd3fdf2e57 /wiki/OpenGL.md
parent725898e44666b4def396f7f3c5e50712fd37aa33 (diff)
downloadopen-iov-76a2d3cb16ea5550fb2f11f39a78b9eaa2804314.tar.gz
open-iov-76a2d3cb16ea5550fb2f11f39a78b9eaa2804314.zip
docs: 2026-11-12 status refresh - green X/GLX, non-black GPU captures, direct-GL stream frontier
Refresh STATE-CURRENT.md and the open-iov.org wiki pages with the 2026-11-12 state: stock-driver X + GLX green (glxinfo 4.6.0 direct rendering, glxgears ~520 FPS), the pbuffer frame path captured 500/500 non-black frames (50 s 640x480 h264) plus the earlier 45.4 s capture, and the named frontier (direct-GL client command-stream delivery: setup push unreadable, CE ring 0xbeef0101 intermittent) alongside the guest-init/sizing fixes (RMInstLoc modprobe single-source, FB info in KB, 256 MiB GART).
Diffstat (limited to 'wiki/OpenGL.md')
-rw-r--r--wiki/OpenGL.md37
1 files changed, 21 insertions, 16 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md
index 9540720..0bcaae7 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-11, tree `master @ 4acac093`. Tags: `[live]` observed with the
+Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` observed with the
stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]`
defined success state.
@@ -74,6 +74,7 @@ Rated honestly, against the milestone ladder in the plan:
| X server initialises on the emulated vGPU (driver push-DMA sanity test, ScreenInit) | `[live]` |
| nvidia-modeset/NvKms registers (`/dev/dri/card0`, `renderD128`, `fb0`); `nvidia-smi -L` enumerates | `[live]` (campaign configuration) |
| `glxinfo -B` reports the NVIDIA renderer (OpenGL 4.6.0, driver 570.144, direct rendering) | `[live]` |
+| The stock GLX path is fully green: `glxinfo -B` returns 0, `glxgears` renders ~520 FPS, Xorg WAIT count 0 | `[live]` |
| The X driver's RC-watchdog channel registers and its notifier is authored | `[live]` |
| X green on attempt 1 in three consecutive cycles (`ebf3130f`) | `[live]` |
| GSP event-IRQ fix wakes the guest poll; glxgears completes swaps | `[live]` |
@@ -82,16 +83,17 @@ Rated honestly, against the milestone ladder in the plan:
| GR backend timeouts fixed (`backend_timeout=0`; draws retire in 3-2400 ms) | `[live]` |
| DDX 3D replay executes (`section captured` + `GR LAUNCH` on `0x1000014`, 12 launches/cycle) | `[live]` |
| First real GPU readback: pbuffer `glClear(red)+glReadPixels` -> `pixel=ff0000ff` | `[live]` |
-| First non-black GPU-rendered frames: 500/500 off-screen 640x480 frames, 45.4 s video captured (`r1769`) | `[live]` |
-| Direct-GL GR ring `0xbeef0100` resolves; releases advance frame by frame (`4acac093`) | `[live]` |
+| First non-black GPU-rendered frames: 500/500 off-screen 640x480 frames per run; 45.4 s video (`r1769`) and a 50 s capture (2026-11-12) | `[live]` |
+| Direct-GL GR ring `0xbeef0100` resolves; releases advance; ring/VAS anchor hardened (verified page-directory discovery, eager push pins, per-rank scans) | `[live]` |
+| Client-allocated USERD resolved from the channel's memory objects (`hUserdMemory`/`userdOffset`); foreign-USERD adoption skipped; aperture-aware wire fallback | `[live]` |
| 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]` |
-| X server survives the run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` |
-| Direct-GL CE ring `0xbeef0101` resolves (GZDoom CE work executes) | `[wall]` |
+| 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 (the 59,556-byte setup push at VA `0x4024004`; the CE ring `0xbeef0101`) | `[wall]` |
| Window/screen present produces non-black screen pixels | `[wall]` |
-| X startup/stability (`_nv052600rm` soft-lock, `0x51`, vmalloc) | `[wall]` |
+| X screen-init/stability (idle-DMA ScreenInit lottery, modeNum parity) | `[wall]` |
| 60 fps sustained, no forcing (M-GL4) | `[target]` |
## 4. How OpenGL runs are verified
@@ -112,21 +114,24 @@ client leaves its retry loop), M-GL2 (`glxgears` non-black), M-GL3 (GZDoom GL
non-black through the mdev), M-GL4 (60 fps, no forcing), M-GL5 (two VMs, two
mdevs), M-GL6 (split-screen video). The project sits **between M-GL1 and
M-GL2, with M-GL2's off-screen half proven**: the display/KMS stack registers,
-X settles, the client submits and retires its GR/CE channels, the direct-GL GR
-ring resolves and its releases advance, and the GPU-rendered pbuffer path
-produced non-black animated frames and a captured 45.4 s video. The remaining
-gates are the direct-GL CE ring `0xbeef0101`, the window/screen present path
-(a window draw currently wedges X and glxgears' window is black), and X
-stability across boots — then the first rendered screen frame.
+X and the stock GLX path are fully green (`glxinfo -B` rc 0, ~520 FPS
+`glxgears`, Xorg WAIT 0), 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). The remaining gates are **delivery of the direct-GL
+client's own command stream** (its 59,556-byte setup push is not yet
+resolvable/readable host-side under the client's page-directory churn), the
+window/screen present path (glxgears' window is black and a window draw can
+wedge X), and X screen-init stability — then the first rendered screen frame.
## 6. What is not claimed
* No **window/screen** frame has rendered real pixels through the emulated
vGPU yet; every screen capture so far is black. The non-black frames and the
- video come from the off-screen pbuffer path (pbuffer -> sysmem -> kvmfr
- ivshmem -> host reader), not from a windowed X screen capture. The direct-GL
- CE ring `0xbeef0101` does not resolve, a synchronous window draw wedges X,
- and X window creation wedges on some boots. Those are the current walls.
+ 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 client's setup push does not yet decode, its draws do
+ not reach the engine, a synchronous window draw wedges X, and X screen-init
+ is a per-boot 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.