summaryrefslogtreecommitdiffstats
path: root/wiki/Project-Status.md
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-13 11:30:46 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-13 11:30:46 -0500
commitfdceaecee7a098f28366b71d0c21fd0134a90118 (patch)
tree154d0f8ff118b83265a0f6c9ce7f9aaee1d27e65 /wiki/Project-Status.md
parente1eac3685d6c4208ce7e47bd621e31b76e194811 (diff)
downloadopen-iov-fdceaecee7a098f28366b71d0c21fd0134a90118.tar.gz
open-iov-fdceaecee7a098f28366b71d0c21fd0134a90118.zip
docs(wiki): refresh status to 436cbf9d - DDX/X-stability walls closed, sections execute, push bodies decode above 10 GiB; remaining wall = direct-GL payload delivery (setup push recycled; draws 0x4250000)
Diffstat (limited to 'wiki/Project-Status.md')
-rw-r--r--wiki/Project-Status.md12
1 files changed, 6 insertions, 6 deletions
diff --git a/wiki/Project-Status.md b/wiki/Project-Status.md
index 8d34d70..3e7c54f 100644
--- a/wiki/Project-Status.md
+++ b/wiki/Project-Status.md
@@ -10,7 +10,7 @@
> (the execution frontier). When this page and the docs disagree, the docs tree
> wins.
-Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` proven with the
+Status: 2026-11-13, tree `master @ 436cbf9d`. Tags: `[live]` proven with the
stock guest driver; `[gated]` implemented, default-off or behind supervised
gates; `[wip]` partially implemented; `[wall]` current blocker; `[target]`
named success state; `[planned]` designed, not built.
@@ -26,9 +26,9 @@ named success state; `[planned]` designed, not built.
| CUDA userspace init and the driver-API smoke (`cuInit`, device enumeration, `cuCtxCreate`, allocation, copies, free, destroy) | `[live]` working — the smoke prints `ALL OK` and the 64-byte payload round-trips exactly |
| Guest CUDA kernel execution on real hardware | `[live]` working — verified green on fresh boots: the vector-add (`VADD n=32768 bad=0`), matrix-multiply (`MATMUL n=256 bad=0`) and transformer (`dh=256 seq=64 bad=0`, `FFN4 layers=4 bad=0`) clients print `STATUS OK`, engine-authored completions relay to the guest and its synchronisation waits resolve. A ring-block ownership defect that could stall the first client after a reboot was root-caused and fixed. Remaining: the staged-transfer class (some large multi-chunk clients still mis-verify; the failure modes are proven and under repair) and per-guest execution isolation for simultaneous CUDA guests |
| Physical backend on real hardware (module-owned GPU running its real GSP-RM) | `[live]` boot, RPC session, object creation, copy-engine work and GR execution proven — the verified guest CUDA kernel clients execute through this backend, and graphics method streams execute on the engine ([`Graphics-Execution.md`](Graphics-Execution.md)) |
-| Display and KMS on the emulated vGPU (nvidia-modeset/NvKms, `/dev/dri`, X) | `[live]` in the campaign configuration — the emulated display engine serves the guest's display push-buffer channels (notifier plus `UPDATE -> FINISHED`), nvidia-modeset/NvKms registers (`/dev/dri/card0`, `renderD128`, `fb0`), `nvidia-smi -L` enumerates and X settles; the display-capability seam is parameterised ([`Graphics-Execution.md`](Graphics-Execution.md)) |
+| Display and KMS on the emulated vGPU (nvidia-modeset/NvKms, `/dev/dri`, X) | `[live]` in the campaign configuration — the emulated display engine serves the guest's display push-buffer channels (notifier plus `UPDATE -> FINISHED`), nvidia-modeset/NvKms registers (`/dev/dri/card0`, `renderD128`, `fb0`), `nvidia-smi -L` enumerates and X settles. The X DDX idle-DMA/ScreenInit, USERD-latch lifetime, re-probe-thrash, Xorg kernel-mode-spin and flip-event walls were closed in the 11-12/11-13 wave (X green for >10 minutes in a validated window), leaving a per-boot first-generation X lottery (an X started immediately after boot passes DDX DMA init; 3/7 windows); the display-capability seam is parameterised ([`Graphics-Execution.md`](Graphics-Execution.md)) |
| Multi-tenant isolation (mdev per VM, per-context page directories) | `[wip]` device-level coexistence works — multiple mediated devices with different emulated VRAM sizes and multiple guests coexist (two guests demonstrated); per-guest execution isolation for simultaneous CUDA guests is in progress |
-| OpenGL (3D graphics) | `[wip]` — the display/KMS stack registers, X and the stock NVIDIA GLX path are fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 and direct rendering; `glxgears` renders ~520 FPS with the emulated GPU's NVIDIA renderer), and the **first non-black GPU-rendered output** is proven: the pbuffer frame path produced 500/500 non-black 640x480 frames per run and captured videos (45.4 s on 2026-11-11; a 50 s 640x480 h264 capture on 2026-11-12). GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context whenever the shared nvClip `modeNum` is even. **The frontier is delivery of the direct-GL client's own command stream:** its 59,556-byte setup push is not yet resolvable/readable host-side while the client's page-directory incarnation churns, so its draw sections never reach the engine and the window stays black; the window/screen present path and the X DDX screen-init idle-DMA lottery are the other named blockers ([`OpenGL.md`](OpenGL.md)) |
+| OpenGL (3D graphics) | `[wip]` — the display/KMS stack registers, X and the stock NVIDIA GLX path are fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 and direct rendering; `glxgears` renders ~520 FPS with the emulated GPU's NVIDIA renderer), and the **first non-black GPU-rendered output** is proven: the pbuffer frame path produced 500/500 non-black 640x480 frames per run and captured videos (45.4 s on 2026-11-11; a 50 s 640x480 h264 capture on 2026-11-12). GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context whenever the shared nvClip `modeNum` is even. **The frontier is delivery of the direct-GL client's own command stream:** the lookalike gate and the live-PA-bound fix (10 GiB raised to the registered guest-RAM top, 14 GiB) now let the client's 13+ GiB page directories walk and decode real GR method streams, and its GR ring resolves through its own VAS; but the GL setup push (59,556 bytes at VA `0x4001004`) and the draw pushes (`0x4250000`/`0x4250110`) still resolve to zero/implausible PAs because their user/UVM VAS is never registered, so no draw section opens for `0xbeef0100` and the window stays black. The engine-zero-write campaign showed the store wall is upstream of the draw (the replayed 221-word window is draw-free); the window/screen present path is unproven, and the X screen-init first-generation lottery remains ([`OpenGL.md`](OpenGL.md)) |
| Vulkan (3D/compute) | `[wip]` — the guest Vulkan pipeline runs end to end on the emulated vGPU (device, allocation, pipeline, command buffer, fence, queue submit, readback) and the engine executes translated launches; frames are still black — program delivery and program-VA mapping are the frontier ([`Vulkan.md`](Vulkan.md)) |
| DirectX / Windows guests | `[planned]` (target) — no Windows guest booted yet; the architecture is the same emulation target ([`DirectX.md`](DirectX.md)) |
| Video (NVENC/NVDEC) | `[planned]` |
@@ -80,9 +80,9 @@ with direct rendering, `glxgears` renders ~520 FPS); the first non-black
GPU-rendered frames are proven off-screen (the pbuffer path produced a
500-frame 45.4 s video on 2026-11-11 and a 50 s capture on 2026-11-12), and
GZDoom reaches its screen-allocation stage with GL 4.6.0 on an even modeNum,
-but windowed/screen pixels remain the frontier (the direct-GL client's
-command stream does not yet reach the engine and X screen-init is a per-boot
-lottery) — see
+but windowed/screen pixels remain the frontier (the direct-GL payload VAs
+still resolve to zero/implausible PAs because their user/UVM VAS is never
+registered, and X screen-init keeps a first-generation lottery) — see
[`OpenGL.md`](OpenGL.md). The
risc-v-gsp-rm-debugger workbench
([`Riscv-GSP-RM-Debugger.md`](Riscv-GSP-RM-Debugger.md)) is the host-side