diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-10 05:25:15 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-10 05:25:15 -0500 |
| commit | 90ab9baa309ae3c54d371546872c918c4c801920 (patch) | |
| tree | 5382d56dc1df7407804a755d0028b99bb266d209 /wiki/OpenGL.md | |
| parent | cb8e822bbadd036cc6e94e945ff0f835402724fd (diff) | |
| download | open-iov-90ab9baa309ae3c54d371546872c918c4c801920.tar.gz open-iov-90ab9baa309ae3c54d371546872c918c4c801920.zip | |
wiki: 2026-11-10 status refresh - guest GL draws execute on the physical GPU
Refresh STATE-CURRENT, the Main Page and the status/frontier pages: the GSP
event-IRQ fix completes swaps; the 2D path is green end-to-end; the guest's
real GL draws now forward and execute on the physical GPU (work_gr
backend_ok=9); the draw writes 0 pages because its constant-buffer (MVP)
page is unresolved and forced to the seed page; the MME front-end defer, GR
stale-wedge and the X DDX get-word/notifier completion remain. Published to
open-iov.org.
Diffstat (limited to 'wiki/OpenGL.md')
| -rw-r--r-- | wiki/OpenGL.md | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md index 45af4c8..1219b84 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 @ 21e0d611`. Tags: `[live]` observed with the +Status: 2026-11-09, tree `master @ cb8e822b`. Tags: `[live]` observed with the stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]` defined success state. @@ -75,20 +75,19 @@ Rated honestly, against the milestone ladder in the plan: | 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 X driver's RC-watchdog channel registers and its notifier is authored | `[live]` | -| GZDoom obtains a real GL context; windowed GZDoom reaches renderer startup | `[live]` (menu/frames black) | -| GZDoom reaches `MAP01` on Mesa llvmpipe (not the emulated vGPU path) | `[wip]` | -| Forced GLX (`SDL_VIDEO_X11_FORCE_EGL=0`) selects `libnvidia-glcore` | `[live]` | -| Windowed GL present/kick completion (minimal `glxgears`) | `[wall]` | -| X server survives the GZDoom run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` | -| X server's `0xC597` graphics section captured and decoded | `[live]` | +| X server green with `sema_vas_cand_ms=1`; `glxinfo -B` NVIDIA 4.6.0 direct | `[live]` | +| GSP event-IRQ fix wakes the guest poll; glxgears completes swaps | `[live]` | +| 2D path end-to-end: accelerated X fills read back via `xwd` | `[live]` | +| Guest's real GL draws forward and execute on the physical GPU (`work_gr backend_ok=9`) | `[live]` | +| Beef GR channel `0xbeef0100` captures real GL draw sections | `[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]` | -| Direct GL client: device-init gate handled; client channels allocate; readback path returns with no GL error | `[live]` | | Direct GL client submits and retires its per-frame draws (GR `0xbeef0100`, CE `0xbeef0101`/`0xbeef0102`); DDX kick channel decoded | `[live]` | -| Guest kernel observes the kick completion and signals the modeset event | `[wall]` | -| NVIDIA Vulkan ICD creates a device | `[wall]` | +| X server survives the run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` | +| Constant-buffer (MVP) page resolves and the draw writes render-target pixels | `[wall]` | +| MME front-end defer / GR stale-wedge stability | `[wall]` | | DDX push-buffer get-word publish and notifier recycle | `[wall]` | -| Physical dispatch of the direct-GL draws (`forwarded=0`) | `[wall]` | +| NVIDIA Vulkan ICD creates a device | `[wall]` | | Non-black rendered frames through the emulated vGPU | `[wall]` | | 60 fps sustained, no forcing (M-GL4) | `[target]` | @@ -111,17 +110,17 @@ 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 engine authors stores — and the remaining gates are the kernel-visible GL -present/kick completion, the X DDX get-word/notifier completion, and physical -dispatch of the client's draws before the first rendered frame. +the guest's GL draws forward and execute on the physical GPU. The remaining +gates are the constant-buffer (MVP) page, the MME front-end/stale-wedge +stability, and the X DDX get-word/notifier completion before the first +rendered frame. ## 6. What is not claimed * No OpenGL frame from the emulated vGPU has produced real rendered pixels - yet; every capture so far is black. GZDoom reaching `MAP01` on Mesa - llvmpipe is not a rendered frame from the emulated vGPU, and the forced-GLX - run selects `libnvidia-glcore` but hangs in the present/kick wait - (`glxgears` reproduces it). + yet; every capture so far is black. glxgears completes swaps and its GL + draws execute on the physical GPU, but the constant-buffer (MVP) page does + not resolve, so the engine writes 0 pages. * No frame-rate or latency numbers. * The published two-VM GZDoom demo videos used the labelled `virtio-gpu`/ `virgl` path, not the emulated vGPU. |
