summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--STATE-CURRENT.md51
-rw-r--r--tools/site/pages/Main-Page.wiki2
-rw-r--r--wiki/.publish-manifest.json120
-rw-r--r--wiki/Execution-Frontier.md28
-rw-r--r--wiki/Execution-Plane.md13
-rw-r--r--wiki/FAQ.md15
-rw-r--r--wiki/Graphics-Execution.md75
-rw-r--r--wiki/Host-Module.md13
-rw-r--r--wiki/OpenGL.md17
-rw-r--r--wiki/Physical-GPU-Backend.md13
-rw-r--r--wiki/Project-Goals.md4
-rw-r--r--wiki/Project-Plan.md21
-rw-r--r--wiki/Project-Status.md11
-rw-r--r--wiki/System-Overview.md16
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