diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-09 19:05:16 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-09 19:05:16 -0500 |
| commit | 21e0d611b5efbdcf6a14520c3294d6a78bb32220 (patch) | |
| tree | 84f36e306b7b1a7b551075f578245765949b42e2 | |
| parent | e342bd0f6d813d246c698d19a5828e7f8d817183 (diff) | |
| download | open-iov-21e0d611b5efbdcf6a14520c3294d6a78bb32220.tar.gz open-iov-21e0d611b5efbdcf6a14520c3294d6a78bb32220.zip | |
wiki: 2026-11-09 evening refresh - X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe
Refresh Project Status, Graphics Execution, OpenGL, Execution Frontier,
Execution Plane, Physical GPU Backend, Host Module, System Overview,
Project Goals, Project Plan and the FAQ, plus STATE-CURRENT and the Main
Page: the X DDX waits (class-aware display arm, 0x8000->0 notification
completion, decoded GL release) are fixed; GZDoom reaches MAP01 on Mesa
llvmpipe; the NVIDIA renderer path, the DDX get-word/notifier completion,
the DDX 4 GB sysmem footprint and physical dispatch of the GL draws are
the pixel walls. Published to open-iov.org.
| -rw-r--r-- | STATE-CURRENT.md | 51 | ||||
| -rw-r--r-- | tools/site/pages/Main-Page.wiki | 2 | ||||
| -rw-r--r-- | wiki/.publish-manifest.json | 120 | ||||
| -rw-r--r-- | wiki/Execution-Frontier.md | 28 | ||||
| -rw-r--r-- | wiki/Execution-Plane.md | 13 | ||||
| -rw-r--r-- | wiki/FAQ.md | 15 | ||||
| -rw-r--r-- | wiki/Graphics-Execution.md | 75 | ||||
| -rw-r--r-- | wiki/Host-Module.md | 13 | ||||
| -rw-r--r-- | wiki/OpenGL.md | 17 | ||||
| -rw-r--r-- | wiki/Physical-GPU-Backend.md | 13 | ||||
| -rw-r--r-- | wiki/Project-Goals.md | 4 | ||||
| -rw-r--r-- | wiki/Project-Plan.md | 21 | ||||
| -rw-r--r-- | wiki/Project-Status.md | 11 | ||||
| -rw-r--r-- | wiki/System-Overview.md | 16 |
14 files changed, 253 insertions, 146 deletions
diff --git a/STATE-CURRENT.md b/STATE-CURRENT.md index 7ff44bb..19661e1 100644 --- a/STATE-CURRENT.md +++ b/STATE-CURRENT.md @@ -1,5 +1,56 @@ # Open-IOV Current State +> **Snapshot: 2026-11-09 ~19:05 (SESSION 156 continued; HEAD `e342bd0f`, +> tree clean, `vgpu/master` in sync; supersedes the 12:45 entry below).** +> Since the 12:45 entry the campaign closed the X-side execution machinery +> and moved the pixel gate to concrete blockers. The X server's deaths were +> separated from driver bugs: the DDX waits are fixed by `408d67d3` +> (class-aware display arm - the 0xc57e window class has no NOTIFY bit, so a +> bound notifier is the arm; bfef `0x8000 -> 0` NvNotification completion; +> the decoded GL release is applied via `sema_gl_hold_apply`, default off; +> the 0x8000 sweep is extended to the X DDX's own RM channels), on top of the +> PMA-scrub deadlock fixes (`3701f985`, `ad93b227`) and the channel-VAS push +> read (`c3887218`). The residual death is an OOM: the X DDX allocates 4 GB +> of system pages at startup (kprobe and gdbstub: `nv_alloc_pages` count +> 1048576 from Xorg), which an 8 GB guest cannot absorb once GZDoom adds its +> own footprint; the current run uses a 12 GB guest. +> +> With the DDX unblocked, GZDoom reached `MAP01` for the first time, but on +> **Mesa llvmpipe**: the NVIDIA Vulkan ICD fails `vkCreateDevice` and the +> default OpenGL/EGL path falls back to Mesa (`libEGL ... failed to create +> dri2 screen`). The emulated-vGPU render path is therefore not the one that +> rendered; the campaign is forcing GLX (`SDL_VIDEO_X11_FORCE_EGL=0`) on the +> 12 GB run and has fully decoded the DDX push-buffer wait: the 2D reserve +> exits only when the GPU-written engine get word advances (`get <= put`) and +> the kick requires the notifier to be recycled to `0xffff` after completion. +> A diagnostic host write of the get word released the loop and let GZDoom +> reach `MAP01`; the kernel levers (publish/advance the get word; recycle the +> notifier) are the next implementation. +> +> Honest state: still no rendered frame through the emulated vGPU and no +> video; GZDoom's `MAP01` is a llvmpipe datapoint, not the target. Milestone +> position: between M-GL1 and M-GL2. Current walls, ranked: (1) renderer +> selection - the NVIDIA Vulkan ICD must create a device or the forced-GLX +> path must reach glcore; (2) the DDX push-buffer get-word/notifier +> completion; (3) the 4 GB X DDX sysmem allocation (suspected emulation gap) +> that forces the 12 GB guest; (4) the direct-GL draws still report +> `forwarded=0` - decoded and host-completed, not dispatched to the physical +> GR engine. Estimate (subjective): a first NVIDIA-path frame hours-to-days +> if these behave like their predecessors; the two-VM GPU-accelerated video +> after that. +> +> CUDA front unchanged (backgrounded while graphics holds the device; its +> 10-30 status stands): `41343c63` green (`victory_mail` `VADD bad=0` + +> `STATUS OK`; `vecadd_loop` 100 launches PASS); the fresh-boot battery's +> red class is D2H-stage with release-discipline fixes staged; the SESSION +> 143 Vulkan fence regression is not re-measured. +> +> Live at check (read-only): host up 20 h (fresh boot 2026-11-08 22:29); +> `vgsp` loaded (refcount 0) + mdev +> `d3a9e554-f948-45df-b81b-b5e987b0bee8` + QEMU r1678 live (12 GB guest); +> `nvidia-smi` reports no supported GPU (the vgsp claim is held); pstore +> empty; no reboot during the check. +> > **Snapshot: 2026-11-09 ~12:45 (SESSION 156; HEAD `4acc81e8`, tree clean, > `vgpu/master` in sync; supersedes the 2026-11-06 ~19:00 entry below).** > The graphics front moved from the DS SPH validation gate to a working diff --git a/tools/site/pages/Main-Page.wiki b/tools/site/pages/Main-Page.wiki index baa0d8e..ff677fd 100644 --- a/tools/site/pages/Main-Page.wiki +++ b/tools/site/pages/Main-Page.wiki @@ -36,7 +36,7 @@ The only new component is one host kernel module (<code>vgsp.ko</code>), which i |- | Display and KMS (nvidia-modeset/NvKms, /dev/dri, X) || Working — the emulated display engine serves the modeset push buffers and notifier completion; NvKms registers, X settles and glxinfo reports OpenGL 4.6.0 with direct rendering |- -| 3D graphics: Xorg + OpenGL, Vulkan || In progress — the display/KMS and GL stacks run, GZDoom obtains a real GL context, and the direct GL client's GR/CE channels submit and retire; the X GLX context-creation completion and the first rendered (non-black) frame are the current frontier — see [[Graphics Execution]], [[OpenGL]], [[Vulkan]] +| 3D graphics: Xorg + OpenGL, Vulkan || In progress — the display/KMS and GL stacks run and the direct GL client's GR/CE channels submit and retire; GZDoom reaches renderer startup and MAP01 but currently on Mesa llvmpipe. The NVIDIA renderer path (Vulkan ICD or forced GLX), the X DDX push-buffer get-word/notifier completion and physical dispatch of the GL draws are the current frontier — see [[Graphics Execution]], [[OpenGL]], [[Vulkan]] |- | Windows guests, multi-tenancy, migration, performance || Not yet — multiple mediated devices (different emulated VRAM sizes) and multiple guests already coexist; per-guest execution isolation is in progress |} diff --git a/wiki/.publish-manifest.json b/wiki/.publish-manifest.json index a62c613..60f24dc 100644 --- a/wiki/.publish-manifest.json +++ b/wiki/.publish-manifest.json @@ -64,11 +64,11 @@ }, "FAQ": { "file": "FAQ.wiki", - "new_revid": 24035, - "old_revid": 24017, - "source_sha": "74cf2eadde0ef110", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:41Z", + "new_revid": 24049, + "old_revid": 24035, + "source_sha": "7cc1ea9e3ec9494f", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:21Z", "title": "FAQ" }, "GMMU Multi-Tenant Protection": { @@ -127,11 +127,11 @@ }, "Graphics Execution": { "file": "Graphics-Execution.wiki", - "new_revid": 24036, - "old_revid": 24004, - "source_sha": "ec7b481243e5a975", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:41Z", + "new_revid": 24050, + "old_revid": 24036, + "source_sha": "aa8f827e5273e941", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:21Z", "title": "Graphics Execution" }, "Guest Driver Lifecycle: A Field Guide": { @@ -190,11 +190,11 @@ }, "Main Page": { "file": "Main-Page.wiki", - "new_revid": 24043, - "old_revid": 24030, - "source_sha": "629ce3a5aac9608e", - "summary": "2026-11-09 status refresh: display/KMS working; GL stack live, first rendered frame is the frontier", - "timestamp": "2026-11-09T17:57:47Z", + "new_revid": 24058, + "old_revid": 24043, + "source_sha": "9383c4a57251d7bd", + "summary": "2026-11-09 evening status refresh: GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the graphics frontier", + "timestamp": "2026-11-10T00:03:29Z", "title": "Main Page" }, "MediaWiki:Sidebar": { @@ -226,11 +226,11 @@ }, "OpenGL": { "file": "OpenGL.wiki", - "new_revid": 24038, - "old_revid": 24005, - "source_sha": "dc2983b55ae26367", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:42Z", + "new_revid": 24052, + "old_revid": 24038, + "source_sha": "28cb3bf34fda32b9", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:23Z", "title": "OpenGL" }, "Performance": { @@ -244,38 +244,38 @@ }, "Physical GPU Backend and Guest Wiring": { "file": "Physical-GPU-Backend.wiki", - "new_revid": 24046, - "old_revid": 24015, - "source_sha": "976895b03fd0c7f5", - "summary": "2026-11-09 wiki refresh: display/KMS live, direct-GL submissions, X/GLX completion wall", - "timestamp": "2026-11-09T17:59:28Z", + "new_revid": 24053, + "old_revid": 24046, + "source_sha": "55491ec835b14c78", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:23Z", "title": "Physical GPU Backend and Guest Wiring" }, "Project Goals": { "file": "Project-Goals.wiki", - "new_revid": 24039, - "old_revid": 24003, - "source_sha": "0a87371b6fc44cb4", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:43Z", + "new_revid": 24054, + "old_revid": 24039, + "source_sha": "593731fbdc44a7a3", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:24Z", "title": "Project Goals" }, "Project Plan": { "file": "Project-Plan.wiki", - "new_revid": 24040, - "old_revid": 24029, - "source_sha": "aa338c0be00b8706", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:44Z", + "new_revid": 24055, + "old_revid": 24040, + "source_sha": "5841dc6b6f506c43", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:24Z", "title": "Project Plan" }, "Project Status": { "file": "Project-Status.wiki", - "new_revid": 24041, - "old_revid": 24011, - "source_sha": "171dd044bf49b267", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:44Z", + "new_revid": 24056, + "old_revid": 24041, + "source_sha": "8dcde28c41c033d1", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:25Z", "title": "Project Status" }, "RPC Message Format": { @@ -289,11 +289,11 @@ }, "System Overview": { "file": "System-Overview.wiki", - "new_revid": 24042, - "old_revid": 24016, - "source_sha": "87ae4585a875643b", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:45Z", + "new_revid": 24057, + "old_revid": 24042, + "source_sha": "9ac0f7844680d16d", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:25Z", "title": "System Overview" }, "Template:About message": { @@ -325,11 +325,11 @@ }, "The Execution Frontier": { "file": "Execution-Frontier.wiki", - "new_revid": 24044, - "old_revid": 24033, - "source_sha": "f1b71722ae3acdbd", - "summary": "2026-11-09 wiki refresh: display/KMS live, direct-GL submissions, X/GLX completion wall", - "timestamp": "2026-11-09T17:59:26Z", + "new_revid": 24047, + "old_revid": 24044, + "source_sha": "bf2a9ec21fe7befd", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:20Z", "title": "The Execution Frontier" }, "The Guest Stack and CUDASW": { @@ -343,20 +343,20 @@ }, "The Host Module (vgsp.ko)": { "file": "Host-Module.wiki", - "new_revid": 24037, - "old_revid": 24021, - "source_sha": "3c51bf95d79d3055", - "summary": "2026-11-09 wiki refresh: display/KMS bring-up (NvKms, /dev/dri, GL 4.6), direct-GL channel submissions, current X/GLX completion wall", - "timestamp": "2026-11-09T17:57:42Z", + "new_revid": 24051, + "old_revid": 24037, + "source_sha": "38f4ef91cc0cdc1b", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:22Z", "title": "The Host Module (vgsp.ko)" }, "The vGSP Execution Plane (vEP)": { "file": "Execution-Plane.wiki", - "new_revid": 24045, - "old_revid": 24034, - "source_sha": "9442e74fb7126236", - "summary": "2026-11-09 wiki refresh: display/KMS live, direct-GL submissions, X/GLX completion wall", - "timestamp": "2026-11-09T17:59:27Z", + "new_revid": 24048, + "old_revid": 24045, + "source_sha": "86fd3830f44d7903", + "summary": "2026-11-09 evening refresh: X DDX waits fixed; GZDoom reaches MAP01 on llvmpipe; NVIDIA renderer, DDX completion and GL dispatch are the pixel walls", + "timestamp": "2026-11-10T00:03:20Z", "title": "The vGSP Execution Plane (vEP)" }, "UVM in the Guest": { diff --git a/wiki/Execution-Frontier.md b/wiki/Execution-Frontier.md index e8efcc3..57ede35 100644 --- a/wiki/Execution-Frontier.md +++ b/wiki/Execution-Frontier.md @@ -14,7 +14,7 @@ > [`../docs/04-implementation/03-execution-frontier.md`](../docs/04-implementation/03-execution-frontier.md); > the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` observed; `[wip]` partial; `[wall]` current blocker; theories are labelled as such. @@ -98,13 +98,16 @@ Graphics execution shares this page's submission and completion machinery but runs a different engine workload. The display and GL stacks now run end to end in the guest: the emulated display engine serves the modeset push buffers, nvidia-modeset/NvKms registers (`/dev/dri`), X settles, `glxinfo` reports -OpenGL 4.6.0 with direct rendering, and GZDoom obtains a real GL context; the -direct GL client's GR and CE channels submit and retire, and the X server's -DDX kick channel is decoded. What is missing is **rendered pixels**: the -remaining wall is the X GLX context-creation completion (with the client's -kick-slot word), and every frame is still black. The guest Vulkan pipeline -runs end to end but its inline-to-memory upload arm remains the named gap. -The full picture lives on [`Graphics-Execution.md`](Graphics-Execution.md). +OpenGL 4.6.0 with direct rendering, and the X DDX waits are fixed +(class-aware display arm, `0x8000 -> 0` notification completion, decoded GL +release applied); the direct GL client's GR and CE channels submit and retire, +and the X DDX kick channel is decoded. GZDoom reached `MAP01` once the DDX +push-buffer loop was unblocked, but on Mesa llvmpipe — not the emulated vGPU. +What is missing is **rendered pixels through the NVIDIA path**: the renderer +backend (Vulkan ICD device creation or forced GLX), the DDX get-word/notifier +completion and physical dispatch of the GL draws are the named walls, and the +guest Vulkan pipeline's inline-to-memory upload arm remains its gap. The full +picture lives on [`Graphics-Execution.md`](Graphics-Execution.md). No breadth beyond these is claimed: Windows guests, migration and performance numbers remain planned. @@ -162,9 +165,12 @@ CUDA guests is in progress. **Issue D — the graphics pixel frontier.** The display/KMS stack and the GL client now run end to end (NvKms registers, X settles, GL 4.6, direct-GL -channels submit and retire), but no rendered (non-black) frame has been -produced yet; the X GLX context-creation completion and the client kick-slot -word are the named blockers ([`Graphics-Execution.md`](Graphics-Execution.md)). +channels submit and retire, the X DDX waits are fixed), but no rendered +(non-black) frame has been produced yet through the NVIDIA path; GZDoom's +`MAP01` is a Mesa llvmpipe datapoint. The renderer backend (Vulkan ICD or +forced GLX), the DDX get-word/notifier completion and physical dispatch of +the GL draws (`forwarded=0`) are the named blockers +([`Graphics-Execution.md`](Graphics-Execution.md)). ## 6. Lines of investigation (live) diff --git a/wiki/Execution-Plane.md b/wiki/Execution-Plane.md index 03a7bc9..f2b7bbf 100644 --- a/wiki/Execution-Plane.md +++ b/wiki/Execution-Plane.md @@ -8,7 +8,7 @@ > when the two disagree, the docs tree wins. Front door: > [`../docs/README.md`](../docs/README.md). -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` proven with the +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` proven with the stock guest driver; `[gated]` implemented, default-off or parameter-gated; `[wip]` partial; `[wall]` current blocker; `[target]` named success latch; `[planned]` designed, not built. @@ -146,10 +146,13 @@ guest: push + QMD + GPFIFO entry + doorbell (BAR0 0x88704) shapes (verbatim 3D method-stream replay, synthesized launches, and the direct GL client's own GR/CE channels, which now submit and retire). The display/KMS path is served by the emulated display engine (modeset push - buffers plus the notifier/`UPDATE` completion), so NvKms registers, X - settles and GL 4.6 is live. No rendered (non-black) frame has been produced - yet: the X GLX context-creation completion and the client kick-slot word are - the named blockers; the lanes and the ladder are on + buffers plus the notifier/`UPDATE` completion, class-aware arm), so NvKms + registers, X settles and GL 4.6 is live, and the X DDX waits are fixed. No + rendered (non-black) frame has been produced through the NVIDIA path yet: + the renderer backend (Vulkan ICD or forced GLX), the DDX push-buffer + get-word/notifier completion and physical dispatch of the GL draws + (`forwarded=0`) are the named blockers; GZDoom's `MAP01` is a Mesa llvmpipe + datapoint. The lanes and the ladder are on [`Graphics-Execution.md`](Graphics-Execution.md). ## 6. Portability diff --git a/wiki/FAQ.md b/wiki/FAQ.md index 4fa79aa..57f8218 100644 --- a/wiki/FAQ.md +++ b/wiki/FAQ.md @@ -5,7 +5,7 @@ > [`../docs/09-reference/glossary-and-faq.md`](../docs/09-reference/glossary-and-faq.md); > the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. +Status: 2026-11-09, tree `master @ e342bd0f`. ## Project and positioning @@ -40,11 +40,14 @@ progress). This is the project's known status, not a misconfiguration — see Partially, and it is an active frontier. The display/KMS stack and the X server now run on the emulated vGPU with the stock driver: nvidia-modeset/NvKms registers (`/dev/dri`), `glxinfo` reports OpenGL 4.6.0 with direct rendering, -GZDoom obtains a real GL context, and the direct GL client's GR and CE channels -submit and retire; the guest Vulkan pipeline runs end to end (device → command -buffer → fence → readback). Rendered (non-black) frames are the remaining wall -— the X GLX context-creation completion and the client kick-slot word are the -current gates — see [`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md) and +the direct GL client's GR and CE channels submit and retire, and GZDoom +reaches renderer startup and `MAP01` — but currently on Mesa llvmpipe. The +guest Vulkan pipeline runs end to end (device → command buffer → fence → +readback, frames black). Rendered (non-black) frames through the NVIDIA path +are the remaining wall: the NVIDIA Vulkan ICD/forced-GLX renderer path, the X +DDX get-word/notifier completion, the DDX's 4 GB sysmem allocation (12 GB +guest workaround) and physical dispatch of the GL draws are the current gates +— see [`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md) and [`Graphics-Execution.md`](Graphics-Execution.md). **How fast is it?** diff --git a/wiki/Graphics-Execution.md b/wiki/Graphics-Execution.md index 59196d5..cba9732 100644 --- a/wiki/Graphics-Execution.md +++ b/wiki/Graphics-Execution.md @@ -12,7 +12,7 @@ > [`../docs/04-implementation/04-real-render-walls.md`](../docs/04-implementation/04-real-render-walls.md) > (the measured walls); the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` observed end to +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` observed end to end; `[wip]` partially built; `[wall]` current blocker; `[target]` defined success state; `[planned]` designed, not built. @@ -87,9 +87,12 @@ fidelity: (`0xbeef0100`) and its CE siblings (`0xbeef0101`/`0xbeef0102`) are discovered, their rings and releases are decoded, and the X server's DDX kick channel (`0xbfef0002`) is decoded from its ring head with its - class-2D notification authored. What remains is completing the GLX - context-creation handshake and the client's kick-slot wait (§6), not - making the pushes readable. + class-2D notification authored. The X DDX waits are fixed (class-aware + display arm, `0x8000 -> 0` notification completion, decoded GL release + applied), and GZDoom reached `MAP01` once the DDX push-buffer loop was + unblocked. What remains is the renderer backend path (NVIDIA Vulkan ICD or + forced GLX), the DDX get-word/notifier completion, and physical dispatch + of the client's draws (§6). ## 4. The channel and object picture @@ -105,10 +108,12 @@ fidelity: * **Display and modeset** `[live]`. The guest's modeset path is served by an emulated display engine: the display push-buffer channels (core `0xc57d`, window `0xc57e`, immediate/window `0xc57b`) are registered, their push - buffers parsed, and the notifier/`UPDATE` completion authored. This is what - lets nvidia-modeset/NvKms register (`/dev/dri`), X settle and GLX clients - obtain a real GL context. The display-capability seam is parameterised in - the campaign configuration. + buffers parsed, and the notifier/`UPDATE` completion authored. The arm is + class-aware (the window class has no NOTIFY bit; a bound notifier is the + arm), and the X DDX's `0x8000 -> 0` notification completion is authored. + This is what lets nvidia-modeset/NvKms register (`/dev/dri`), X settle and + GLX clients obtain a real GL context. The display-capability seam is + parameterised in the campaign configuration. * **Cells of state**: 3D streams are long—hundreds of method words per draw — and mix state binds (viewport, render target, ZS, blend/ROP), program and constant binds, vertex/index streams and draw-issuing methods. The capture @@ -130,7 +135,11 @@ there. For the display path, completion is the notifier write and `UPDATE -> FINISHED`; a completion event deferred by the reply path is force-retried -until it posts, so the X server's mode set finishes. +until it posts, so the X server's mode set finishes. For the X DDX's own 2D +push buffers, completion also requires the GPU-written engine get word to +advance and the notifier to be recycled to `0xffff` after a kick; both are +host-side levers now, and a diagnostic write of the get word released the +DDX's reserve loop. During bring-up the module also carries a **diagnostics-only mirror** for apps that spin on a shared progress word; it exists so a run can proceed while the @@ -139,21 +148,29 @@ requires it switched off, along with any external poke. ## 6. Where the frontier is (ranked walls) -1. **The X GLX context-creation completion** `[wall]`. With the UVM - channel-pool and direct-GL submission walls closed, the X server spins in - its RM ioctl path (`_nv018351rm`) while a GL client's GLX context request - waits on the X reply. The X DDX's own channels and the GLX reply are the - current named objects. (Fullscreen GZDoom's client-triggered mode set can - still wedge X; the campaign path is a settled X plus windowed GZDoom.) -2. **The client kick-slot word** `[wall]`. The GL client polls a kick-slot GPU - address for its completion; the RM notifier page is a different object, so - the completion must be authored at the client's kick-slot address. -3. **Non-black frames** `[wall]`. Once the GLX context completes and the - client's kick wait resolves, the capture must show motion; every frame - captured so far is black. -4. **Sustained frame rate, and two VMs** `[target]`. The defined end state: - 60 fps in one VM with no forcing, then two VMs on two mediated devices - with non-black frames in both. +1. **The renderer backend path** `[wall]`. GZDoom's default Vulkan backend + fails at `vkCreateDevice` in the NVIDIA Vulkan ICD, and the default + OpenGL/EGL path falls back to Mesa (`llvmpipe`). The campaign is forcing + GLX (`SDL_VIDEO_X11_FORCE_EGL=0`) so the client uses the NVIDIA GL stack; + the first NVIDIA-path frame is gated here. +2. **The X DDX push-buffer completion** `[wall]`. The DDX's 2D reserve loop + exits only when the GPU-written engine get word advances (`get <= put`) and + the kick requires the notifier to be recycled to `0xffff` after + completion. A diagnostic host write released the loop; the kernel levers + to publish/advance the get word and recycle the notifier are next. +3. **The X DDX footprint** `[wall]`. The DDX allocates 4 GB of system pages at + startup; an 8 GB guest has no headroom once GZDoom's own footprint lands + and both are OOM-killed. Current runs use a 12 GB guest; the allocation is + a suspected emulation gap (a 512 MiB emulated VRAM falling back to a 4 GB + sysmem allocation) to fix. +4. **Physical dispatch of the GL draws** `[wall]`. The direct-GL channels + submit and get host-completed releases, but the forwarding path reports no + dispatch to the physical GR engine (`forwarded=0`); the draws are decoded + and host-completed, not executed on hardware. +5. **Non-black frames and sustained rate** `[wall]`/`[target]`. Once the + NVIDIA renderer path and the DDX get-word/notifier completion land, the + capture must show motion, then 60 fps in one VM with no forcing, then two + VMs on two mediated devices with non-black frames in both. ## 7. What is proven today @@ -164,13 +181,17 @@ requires it switched off, along with any external poke. | nvidia-modeset/NvKms registers (`/dev/dri/card0`, `renderD128`, `fb0`); `nvidia-smi -L` enumerates | `[live]` | | `glxinfo` reports the emulated GPU with the NVIDIA renderer (OpenGL 4.6.0, direct rendering) | `[live]` | | GZDoom obtains a real GL context; windowed reaches renderer startup | `[live]` (pixels frontier) | +| GZDoom reaches `MAP01` on Mesa llvmpipe (not the emulated vGPU path) | `[wip]` | +| X server survives the GZDoom run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` | | GL section capture: the X server's `0xC597` stream decoded | `[live]` | | Verbatim 3D method-stream replay retired by the engine (no MMU fault) | `[live]` | | Synthesized launch executes real `sm_75` SASS; Turing `V3` program header accepted | `[live]` | | 2D screen fills and copy-engine present ops execute | `[live]` | | Direct GL client: device-init gate handled, channels allocate, readback path returns clean | `[live]` | | Direct GL client channels submit and retire (GR `0xbeef0100`, CE `0xbeef0101`/`0xbeef0102`); DDX kick channel decoded | `[live]` | -| X GLX context-creation completion and the client kick-slot word | `[wall]` | +| NVIDIA Vulkan ICD creates a device, or forced GLX reaches glcore | `[wall]` | +| DDX push-buffer get-word publish and notifier recycle | `[wall]` | +| Physical dispatch of the direct-GL draws (`forwarded=0`) | `[wall]` | | Non-black pixels from the emulated vGPU's 3D pipeline | `[wall]` | | Windows/DirectX guests | `[planned]` | @@ -178,7 +199,9 @@ requires it switched off, along with any external poke. * No non-black pixel has been produced by the emulated vGPU's 3D pipeline yet. * Display/KMS bring-up (NvKms, `/dev/dri`, X, a real GL context) is not a - rendered-frame claim; the GLX context-creation and kick-slot completions are + rendered-frame claim; GZDoom reaching `MAP01` on Mesa llvmpipe is not the + emulated-vGPU path either. The NVIDIA renderer path, the DDX + get-word/notifier completion and the physical dispatch of the GL draws are the current walls. * No frame-rate or latency numbers: the scheduled measurement is defined (60 fps over 60 s, no forcing) but not yet met. diff --git a/wiki/Host-Module.md b/wiki/Host-Module.md index 3f2276a..e6b7ee9 100644 --- a/wiki/Host-Module.md +++ b/wiki/Host-Module.md @@ -6,7 +6,7 @@ > source: [`../docs/03-architecture/06-host-module-and-hybrid-model.md`](../docs/03-architecture/06-host-module-and-hybrid-model.md); > the docs tree wins on disagreement with this page. > -> Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` observed with +> Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` observed with > the stock guest driver; `[wip]` demonstrated live, being productized; > `[gated]` implemented default-off behind supervised gates; `[wall]` known > blocking limit; `[target]` designed, not built; `[planned]` roadmap. @@ -115,9 +115,14 @@ channels ([`Execution-Frontier.md`](Execution-Frontier.md), The same plane carries the display/modeset path [live in the campaign configuration]: the module serves the guest display engine's push-buffer channels (core `0xc57d`, window `0xc57e`, immediate/window `0xc57b`), authors -the notifier/`UPDATE` completion (with a force-retry for a deferred event), -and lets nvidia-modeset/NvKms register (`/dev/dri`), X settle and GL clients -obtain a real GL context. The display-capability seam is parameterised. +the notifier/`UPDATE` completion with a class-aware arm (the window class has +no NOTIFY bit; a bound notifier is the arm) and a force-retry for a deferred +event, completes the X DDX's `0x8000 -> 0` notifications, and lets +nvidia-modeset/NvKms register (`/dev/dri`), X settle and GLX clients obtain a +real GL context. The display-capability seam is parameterised. For the DDX's +own 2D push buffers the remaining host levers are publishing/advancing the +GPU-written engine get word and recycling the notifier to `0xffff` after +completion. ## 6. Debug parameters diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md index cc35fe6..08f26fa 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 @ 4acc81e8`. Tags: `[live]` observed with the +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` observed with the stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]` defined success state. @@ -76,12 +76,16 @@ Rated honestly, against the milestone ladder in the plan: | `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]` | +| 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]` | | 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]` | -| X GLX context-creation completion and the client kick-slot word | `[wall]` | +| NVIDIA Vulkan ICD creates a device, or forced GLX (`SDL_VIDEO_X11_FORCE_EGL=0`) reaches glcore | `[wall]` | +| DDX push-buffer get-word publish and notifier recycle | `[wall]` | +| Physical dispatch of the direct-GL draws (`forwarded=0`) | `[wall]` | | Non-black rendered frames through the emulated vGPU | `[wall]` | | 60 fps sustained, no forcing (M-GL4) | `[target]` | @@ -104,14 +108,15 @@ 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 gate is the X GLX -context-creation completion plus the client kick-slot word before the first -rendered frame. +the engine authors stores — and the remaining gates are the NVIDIA renderer +path (Vulkan ICD or forced GLX), the X DDX get-word/notifier completion, and +physical dispatch of the client's draws 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. + yet; every capture so far is black. GZDoom reaching `MAP01` on Mesa + llvmpipe is not a rendered frame from the emulated vGPU. * No frame-rate or latency numbers. * The published two-VM GZDoom demo videos used the labelled `virtio-gpu`/ `virgl` path, not the emulated vGPU. diff --git a/wiki/Physical-GPU-Backend.md b/wiki/Physical-GPU-Backend.md index 8f1a02b..4c86dc4 100644 --- a/wiki/Physical-GPU-Backend.md +++ b/wiki/Physical-GPU-Backend.md @@ -5,7 +5,7 @@ > guest-facing emulation. Canonical sources: [`../docs/03-architecture/08-physical-gpu-integration.md`](../docs/03-architecture/08-physical-gpu-integration.md) > and [`../docs/03-architecture/11-physical-backend-guest-wiring.md`](../docs/03-architecture/11-physical-backend-guest-wiring.md); the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` proven with the +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` proven with the stock guest driver; `[gated]` implemented default-off; `[wip]` partially built; `[wall]` current blocker; `[target]` planned end state. @@ -120,10 +120,13 @@ dispatches, the engine authors the completion, the host relays it, and the guest's synchronisation wait resolves — verified on fresh boots with the vector-add, matrix-multiply and transformer clients. Graphics work rides the same machinery in three shapes (a verbatim 3D method-stream replay, -synthesized launches, and the direct GL client's own GR/CE channels) and -executes on the engine; the display/KMS stack registers and X settles, so the -remaining graphics gate is the X GLX context-creation completion before -rendered pixels. The remaining compute work is the staged-transfer +synthesized launches, and the direct GL client's own GR/CE channels); the +captured and synthesized streams execute on the engine, and the direct GL +client's channels submit. The display/KMS stack registers, the X DDX waits are +fixed and X settles, so the remaining graphics gates are the NVIDIA renderer +path (Vulkan ICD or forced GLX), the DDX push-buffer get-word/notifier +completion, and physical dispatch of the client's draws (`forwarded=0`) +before rendered pixels. The remaining compute work is the staged-transfer class (under repair), the every-boot acceptance campaign, and per-guest execution isolation — see [`Execution-Frontier.md`](Execution-Frontier.md) and diff --git a/wiki/Project-Goals.md b/wiki/Project-Goals.md index 2ba2e40..ba557da 100644 --- a/wiki/Project-Goals.md +++ b/wiki/Project-Goals.md @@ -10,7 +10,7 @@ > [`Execution-Frontier.md`](Execution-Frontier.md) and > [`Graphics-Execution.md`](Graphics-Execution.md). -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` working with the +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` working with the stock guest driver; `[wip]` in progress; `[planned]` designed, not built; `[target]` bring-up ahead; `[non-goal]` explicitly out of scope. @@ -51,7 +51,7 @@ drivers, no license.** | Stock guest driver initialisation | The unmodified driver probes, initialises and enumerates as on bare metal (`nvidia-smi`) | `[live]` — TU104 reference platform | | Full CUDA driver-API surface | Context creation, allocation, copies, free, destroy complete with correct results | `[live]` — the driver-API smoke prints `ALL OK`; the 64-byte payload round-trips | | CUDA kernel execution on real hardware | Verified guest kernels execute on the physical GPU, with engine-authored completions waking the guest | `[live]` — vector-add, matrix-multiply and transformer clients green on fresh boots; the staged-transfer class, the every-boot acceptance campaign and per-guest isolation are in progress ([`Execution-Frontier.md`](Execution-Frontier.md)) | -| OpenGL (3D graphics) | Stock guest GL applications render real pixels through the emulated vGPU | `[wip]` — the display/KMS stack and X run (NvKms registers, `glxinfo` OpenGL 4.6.0 direct, GZDoom obtains a real GL context), and the direct GL client's GR/CE channels submit and retire; the X GLX context-creation completion and the first rendered frame are the frontier ([`OpenGL.md`](OpenGL.md)) | +| OpenGL (3D graphics) | Stock guest GL applications render real pixels through the emulated vGPU | `[wip]` — the display/KMS stack and X run (NvKms registers, `glxinfo` OpenGL 4.6.0 direct), and the direct GL client's GR/CE channels submit and retire; GZDoom reaches `MAP01` but on Mesa llvmpipe. The NVIDIA renderer path, the DDX get-word/notifier completion and physical dispatch of the GL draws are the frontier ([`OpenGL.md`](OpenGL.md)) | | Vulkan | Stock guest Vulkan applications render real pixels | `[wip]` — the pipeline runs end to end (device → command buffer → fence → readback); frames are black — program delivery and program-VA mapping are the frontier ([`Vulkan.md`](Vulkan.md)) | | Windows guests (DirectX, CUDA) | A stock WDDM driver and stock D3D/CUDA applications run in Windows guests | `[target]` — not started; same emulation target ([`DirectX.md`](DirectX.md)) | | Video (NVENC/NVDEC) | Encode/decode through the emulated device | `[planned]` | diff --git a/wiki/Project-Plan.md b/wiki/Project-Plan.md index 1a10eec..583264a 100644 --- a/wiki/Project-Plan.md +++ b/wiki/Project-Plan.md @@ -15,7 +15,7 @@ > [`../docs/06-portability/03-device-validation-and-porting-sequence.md`](../docs/06-portability/03-device-validation-and-porting-sequence.md); > the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[done]`, `[active]`, +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[done]`, `[active]`, `[ahead]` — the plan's own state vocabulary, distinct from the goal tags. ## 1. How the plan works @@ -44,7 +44,7 @@ itself: |---|---|---|---| | **P0 — Platform** | Emulated vGPU device, GSP boot and GSP-RM emulation, stock guest driver initialisation | Driver-API smoke green (`ALL OK`) = evaluation rung 2 | `[done]` | | **P1 — First execution (compute)** | Guest CUDA kernels executing on the physical GPU, with engine-authored completions; then hardening | Verified clients + engine-authored completion = rung 3 core; hardening: staged-transfer class, every-boot acceptance, per-guest isolation | `[active]` — execution green; hardening in progress | -| **P2 — Graphics execution** | OpenGL/Vulkan draw commands executed by the physical 3D pipeline and delivered as readable pixels | The graphics ladder: M-GL1 client context-init executes; M-GL2 `glxgears` non-black; M-GL3 GZDoom GL non-black through the mdev | `[active]` — between M-GL1 and M-GL2; the display/KMS and direct-GL channel work is live; the X GLX completion and first rendered frame are the walls | +| **P2 — Graphics execution** | OpenGL/Vulkan draw commands executed by the physical 3D pipeline and delivered as readable pixels | The graphics ladder: M-GL1 client context-init executes; M-GL2 `glxgears` non-black; M-GL3 GZDoom GL non-black through the mdev | `[active]` — between M-GL1 and M-GL2; the display/KMS and direct-GL channel work is live; the NVIDIA renderer path, the DDX get-word/notifier completion and physical dispatch of the GL draws are the walls | | **P3 — Sustained and multi-tenant** | Frame rates without assistance; multiple VMs sharing the GPU with measured fairness; soak-stable operation | Graphics M-GL4 (60 fps, no forcing) and M-GL5 (two VMs, two mdevs); CUDA battery + soak; per-guest execution isolation = rungs 4/5 | `[ahead]` | | **P4 — Breadth** | Video (NVENC/NVDEC), Windows/DirectX guests, live migration, non-KVM hypervisor transports | Per-case bring-up gates plus the matrix's evidence expectations | `[ahead]` | | **P5 — Scale and portability** | New GPU generations and driver families carried forward; published performance programme | A profile + measured delta per version, validated on hardware; A/B numbers published per the measurement contract | `[ahead]` | @@ -58,9 +58,11 @@ available (P5 runs across the whole plan). Ranked, in dependency order: 1. **Graphics pixels (P2).** The client and display stacks execute; the - named walls are the X GLX context-creation completion (`_nv018351rm` plus - the X DDX/GLX reply), the client kick-slot word, then non-black frames. - Full detail: [`Graphics-Execution.md`](Graphics-Execution.md) §6. + named walls are the NVIDIA renderer path (Vulkan ICD device creation or + forced GLX), the X DDX push-buffer get-word/notifier completion, the DDX's + 4 GB sysmem allocation (12 GB guest workaround), physical dispatch of the + GL draws (`forwarded=0`), then non-black frames. Full detail: + [`Graphics-Execution.md`](Graphics-Execution.md) §6. 2. **Compute hardening (P1).** The staged-transfer class (failure modes proven, fixes in flight); the every-boot acceptance campaign; per-guest execution isolation. Detail: @@ -73,9 +75,12 @@ Ranked, in dependency order: Recently closed, as evidence the gates work: the boot-poisoning defect and the post-reboot client-stall defect (compute reproducibility); the display/KMS -bring-up (NvKms registers, X settles, GL 4.6 and a real GZDoom GL context); -the UVM channel-pool tracker; the direct-GL GR release and CE ring discovery; -the X DDX kick-channel decode; and the guest Vulkan pipeline running end to +bring-up (NvKms registers, X settles, GL 4.6); the UVM channel-pool tracker; +the direct-GL GR release and CE ring discovery; the X DDX kick-channel decode +and its three wait fixes (class-aware display arm, `0x8000 -> 0` notification +completion, decoded GL release applied); GZDoom reaching renderer startup and +`MAP01` once the DDX push-buffer loop was unblocked (currently on Mesa +llvmpipe, not the emulated vGPU); and the guest Vulkan pipeline running end to end. ## 4. The gates diff --git a/wiki/Project-Status.md b/wiki/Project-Status.md index 96e55db..4ee4b50 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-09, tree `master @ 4acc81e8`. Tags: `[live]` proven with the +Status: 2026-11-09, tree `master @ e342bd0f`. 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. @@ -28,7 +28,7 @@ named success state; `[planned]` designed, not built. | 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)) | | 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 and X settles; `glxinfo` reports OpenGL 4.6.0 with direct rendering; GZDoom obtains a real GL context; the direct GL client's GR and CE channels submit and their releases land. **No rendered pixels yet:** the remaining gate is the X GLX context-creation completion (the X server spins in its RM ioctl path) plus the client kick-slot word; fullscreen GZDoom's mode set still wedges X, so the campaign uses a settled X + windowed GZDoom ([`OpenGL.md`](OpenGL.md)) | +| OpenGL (3D graphics) | `[wip]` — the display/KMS stack registers and X settles; `glxinfo` reports OpenGL 4.6.0 with direct rendering; the direct GL client's GR and CE channels submit and their releases land; GZDoom reaches renderer startup and `MAP01`, currently on Mesa llvmpipe. **No rendered pixels through the emulated vGPU yet:** the walls are the NVIDIA Vulkan ICD/forced-GLX renderer path, the X DDX push-buffer get-word/notifier completion, the DDX's 4 GB sysmem allocation (12 GB guest workaround), and the direct-GL draws' physical dispatch (`forwarded=0`) ([`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]` | @@ -66,7 +66,7 @@ The project's definition of done for CUDA requires all of the following Until every gate holds, the honest formulation is: **initialization, the driver-API path and kernel execution on the physical GPU work and verify; the staged-transfer class, per-guest isolation and the graphics -GLX-completion/first-frame frontier remain.** +renderer/DDX-completion/first-frame frontier remain.** ## 3. How to see it yourself @@ -76,8 +76,9 @@ outcome is exactly the ladder above — driver probe, `nvidia-smi`, the full driver-API smoke, and guest CUDA kernels executing and verifying on the physical GPU. On the graphics side the same setup brings up the display/KMS stack and the X server on the emulated vGPU (`glxinfo` reports OpenGL 4.6.0 -with direct rendering); rendered pixels remain the frontier -([`OpenGL.md`](OpenGL.md)). The +with direct rendering); GZDoom reaches renderer startup but currently falls +back to Mesa llvmpipe, so the NVIDIA renderer path and the DDX completion are +the frontier ([`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 tooling used to study the firmware side of that frontier. diff --git a/wiki/System-Overview.md b/wiki/System-Overview.md index 5f5b8dc..333d8c3 100644 --- a/wiki/System-Overview.md +++ b/wiki/System-Overview.md @@ -7,7 +7,7 @@ > and [`../docs/03-architecture/10-interaction-and-scheduling.md`](../docs/03-architecture/10-interaction-and-scheduling.md) > for the full picture); the docs tree wins on disagreement. -Status: 2026-11-09, tree `master @ 4acc81e8`. Tags: `[live]` proven with the +Status: 2026-11-09, tree `master @ e342bd0f`. Tags: `[live]` proven with the stock guest driver; `[gated]` implemented default-off; `[wip]` partial; `[wall]` current blocker; `[target]` designed end state. @@ -139,12 +139,14 @@ RPC from the guest to "firmware": rendered 3D pixels are the graphics frontier ([`Execution-Frontier.md`](Execution-Frontier.md)). 6. On the graphics side, the emulated display engine serves the modeset push - buffers and the display notifier/completion, so nvidia-modeset/NvKms - registers (`/dev/dri`), X settles and `glxinfo` reports OpenGL 4.6.0 with - direct rendering; GZDoom obtains a real GL context, the direct GL client's - channels submit, and the guest Vulkan pipeline runs end to end. The - remaining gate is the X GLX context-creation completion and the first - rendered (non-black) frame ([`OpenGL.md`](OpenGL.md), + buffers and the display notifier/completion (class-aware arm), so + nvidia-modeset/NvKms registers (`/dev/dri`), X settles and `glxinfo` + reports OpenGL 4.6.0 with direct rendering; the direct GL client's + channels submit, the X DDX waits are fixed, and the guest Vulkan pipeline + runs end to end. GZDoom reaches renderer startup and `MAP01`, currently on + Mesa llvmpipe. The remaining gate is the NVIDIA renderer path, the DDX + get-word/notifier completion and physical dispatch of the GL draws before + the first rendered (non-black) frame ([`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md)). ## 6. Where the detail lives |
