summaryrefslogtreecommitdiffstats
path: root/wiki/OpenGL.md
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-11 10:50:17 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-11 10:50:17 -0500
commit2f7635151e173e353d9105e4fef2aa343ea9a525 (patch)
tree01a05bb7b694c7aa1d3ac97dd95a062018630d98 /wiki/OpenGL.md
parent4acac093f514b007915cab903e49e084f85a4e18 (diff)
downloadopen-iov-2f7635151e173e353d9105e4fef2aa343ea9a525.tar.gz
open-iov-2f7635151e173e353d9105e4fef2aa343ea9a525.zip
wiki: 2026-11-11 status refresh - first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls (STATE-CURRENT too)
Diffstat (limited to 'wiki/OpenGL.md')
-rw-r--r--wiki/OpenGL.md40
1 files changed, 23 insertions, 17 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md
index 7445d12..d09b1e9 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-09, tree `master @ df6e71bb`. Tags: `[live]` observed with the
+Status: 2026-11-11, tree `master @ 4acac093`. Tags: `[live]` observed with the
stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]`
defined success state.
@@ -82,15 +82,16 @@ 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]` |
+| 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 channel `0xbfef0002` submits a captured draw (`ops_runs>0`) | `[wall]` |
-| Window/screen present completes without wedging X (ivshmem frame path) | `[wall]` |
-| X startup/RM stability (`0x51`, vmalloc 96 GB) | `[wall]` |
-| NVIDIA Vulkan ICD creates a device | `[wall]` |
-| Non-black screen rendered frames through the emulated vGPU | `[wall]` |
+| Direct-GL CE ring `0xbeef0101` resolves (GZDoom CE work executes) | `[wall]` |
+| Window/screen present produces non-black screen pixels | `[wall]` |
+| X startup/stability (`_nv052600rm` soft-lock, `0x51`, vmalloc) | `[wall]` |
| 60 fps sustained, no forcing (M-GL4) | `[target]` |
## 4. How OpenGL runs are verified
@@ -110,20 +111,25 @@ The graphics plan defines M-GL1 (client context-init decodes and executes; the
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**: the interface and execution work is done — the display/KMS stack
-registers, X settles, the client submits and retires its GR/CE channels, and
-the first real GPU readback is proven (pbuffer `pixel=ff0000ff`). The
-remaining gates are the direct-GL client's draw submission/capture on
-`0xbfef0002` and the window/screen present path (a window draw currently
-wedges X) before the first rendered screen frame.
+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.
## 6. What is not claimed
-* No OpenGL frame from the emulated vGPU has produced real rendered pixels
- yet; every screen capture so far is black. The pbuffer probe renders and
- reads back a red pixel, but the direct-GL client still emits only
- setup/notify kicks, and a synchronous window draw wedges X. Those are the
- current walls.
+* 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.
+* 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.
* No frame-rate or latency numbers.
* The published two-VM GZDoom demo videos used the labelled `virtio-gpu`/
`virgl` path, not the emulated vGPU.