diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-12 20:01:07 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-12 20:01:07 -0500 |
| commit | 76a2d3cb16ea5550fb2f11f39a78b9eaa2804314 (patch) | |
| tree | eadcc7a3007aaad7ca8f6d061cea74dd3fdf2e57 /wiki/OpenGL.md | |
| parent | 725898e44666b4def396f7f3c5e50712fd37aa33 (diff) | |
| download | open-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.md | 37 |
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. |
