diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-11 10:50:17 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-11 10:50:17 -0500 |
| commit | 2f7635151e173e353d9105e4fef2aa343ea9a525 (patch) | |
| tree | 01a05bb7b694c7aa1d3ac97dd95a062018630d98 /wiki/OpenGL.md | |
| parent | 4acac093f514b007915cab903e49e084f85a4e18 (diff) | |
| download | open-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.md | 40 |
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. |
