summaryrefslogtreecommitdiffstats
path: root/wiki
diff options
context:
space:
mode:
Diffstat (limited to 'wiki')
-rw-r--r--wiki/.publish-manifest.json200
-rw-r--r--wiki/Execution-Frontier.md55
-rw-r--r--wiki/Execution-Plane.md26
-rw-r--r--wiki/FAQ.md26
-rw-r--r--wiki/Graphics-Execution.md123
-rw-r--r--wiki/Host-Module.md22
-rw-r--r--wiki/OpenGL.md37
-rw-r--r--wiki/Physical-GPU-Backend.md17
-rw-r--r--wiki/Project-Goals.md6
-rw-r--r--wiki/Project-Plan.md38
-rw-r--r--wiki/Project-Status.md16
-rw-r--r--wiki/System-Overview.md27
12 files changed, 316 insertions, 277 deletions
diff --git a/wiki/.publish-manifest.json b/wiki/.publish-manifest.json
index 8083321..45c012c 100644
--- a/wiki/.publish-manifest.json
+++ b/wiki/.publish-manifest.json
@@ -4,7 +4,7 @@
"new_revid": 23961,
"old_revid": 23961,
"source_sha": "5e69ded1385ca255",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:04Z",
"title": "Address Reference"
},
@@ -13,16 +13,16 @@
"new_revid": 23962,
"old_revid": 23962,
"source_sha": "65241d37150980a6",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:05Z",
"title": "BAR Emulation Specification"
},
"CUDA Userspace Driver": {
"file": "CUDA-Userspace-Driver.wiki",
"new_revid": 24014,
- "old_revid": 23998,
+ "old_revid": 24014,
"source_sha": "8703a12fa11674f0",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:25Z",
"title": "CUDA Userspace Driver"
},
@@ -38,9 +38,9 @@
"DirectX": {
"file": "DirectX.wiki",
"new_revid": 24118,
- "old_revid": 24007,
+ "old_revid": 24118,
"source_sha": "8701ac31d99d4619",
- "summary": "Remove virtio-gpu/virgl references; they are not part of this project's path",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-11-11T16:22:39Z",
"title": "DirectX"
},
@@ -58,17 +58,17 @@
"new_revid": 23965,
"old_revid": 23965,
"source_sha": "94b199863a6089f3",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:07Z",
"title": "Error Codes"
},
"FAQ": {
"file": "FAQ.wiki",
- "new_revid": 24109,
- "old_revid": 24097,
- "source_sha": "cf9501f4109622b6",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:54Z",
+ "new_revid": 24124,
+ "old_revid": 24109,
+ "source_sha": "64db259975af254e",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:29Z",
"title": "FAQ"
},
"GMMU Multi-Tenant Protection": {
@@ -76,7 +76,7 @@
"new_revid": 23969,
"old_revid": 23969,
"source_sha": "1a99439a0cc82bc0",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:09Z",
"title": "GMMU Multi-Tenant Protection"
},
@@ -94,7 +94,7 @@
"new_revid": 23970,
"old_revid": 23970,
"source_sha": "5de067865f0b551a",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:09Z",
"title": "GSP 570.144W Firmware Analysis"
},
@@ -103,88 +103,88 @@
"new_revid": 23971,
"old_revid": 23971,
"source_sha": "887b48da293ebad7",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:10Z",
"title": "GSP RPC Emulation"
},
"GSP and GSP-RM": {
"file": "GSP-and-GSP-RM.wiki",
"new_revid": 24010,
- "old_revid": 23977,
+ "old_revid": 24010,
"source_sha": "0019a098ff128830",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:19Z",
"title": "GSP and GSP-RM"
},
"Glossary": {
"file": "Reference-Glossary.wiki",
"new_revid": 23988,
- "old_revid": 23954,
+ "old_revid": 23988,
"source_sha": "ca707bbf257afffe",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:41:01Z",
"title": "Glossary"
},
"Graphics Execution": {
"file": "Graphics-Execution.wiki",
- "new_revid": 24119,
- "old_revid": 24110,
- "source_sha": "284779126afc0832",
- "summary": "Remove virtio-gpu/virgl references; they are not part of this project's path",
- "timestamp": "2026-11-11T16:22:40Z",
+ "new_revid": 24125,
+ "old_revid": 24119,
+ "source_sha": "ca2568313ad7585d",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:31Z",
"title": "Graphics Execution"
},
"Guest Driver Lifecycle: A Field Guide": {
"file": "Driver-Lifecycle-Field-Guide.wiki",
"new_revid": 24019,
- "old_revid": 23964,
+ "old_revid": 24019,
"source_sha": "f24d66bd99dce76f",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:32Z",
"title": "Guest Driver Lifecycle: A Field Guide"
},
"HAAEEP and Collaboration": {
"file": "HAAEEP-and-Collaboration.wiki",
"new_revid": 24023,
- "old_revid": 23979,
+ "old_revid": 24023,
"source_sha": "20990217e179badc",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:38Z",
"title": "HAAEEP and Collaboration"
},
"Hardware and Software Matrix": {
"file": "Hardware-Software-Matrix.wiki",
"new_revid": 24022,
- "old_revid": 23980,
+ "old_revid": 24022,
"source_sha": "fc7ff074320feafb",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:37Z",
"title": "Hardware and Software Matrix"
},
"Install and First Run": {
"file": "Install-and-First-Run.wiki",
"new_revid": 23982,
- "old_revid": 23948,
+ "old_revid": 23982,
"source_sha": "3c9da68bf0bd62d7",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:58Z",
"title": "Install and First Run"
},
"Interfaces and Stability": {
"file": "Interfaces-and-Stability.wiki",
"new_revid": 24009,
- "old_revid": null,
+ "old_revid": 24009,
"source_sha": "5e16ac6f098129ce",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:17Z",
"title": "Interfaces and Stability"
},
"Introduction to GMMU": {
"file": "Introduction-to-GMMU.wiki",
"new_revid": 23983,
- "old_revid": 23949,
- "source_sha": "5c96b7803ef1eda9",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "old_revid": 23983,
+ "source_sha": "151c82a26a1246a9",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:58Z",
"title": "Introduction to GMMU"
},
@@ -209,9 +209,9 @@
"Migration Protocol": {
"file": "Migration-Protocol.wiki",
"new_revid": 23984,
- "old_revid": 23950,
+ "old_revid": 23984,
"source_sha": "e9d1a646f1f97eb9",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:40:59Z",
"title": "Migration Protocol"
},
@@ -226,74 +226,74 @@
},
"OpenGL": {
"file": "OpenGL.wiki",
- "new_revid": 24120,
- "old_revid": 24112,
- "source_sha": "d3c63c152bd202ce",
- "summary": "Remove virtio-gpu/virgl references; they are not part of this project's path",
- "timestamp": "2026-11-11T16:22:40Z",
+ "new_revid": 24127,
+ "old_revid": 24120,
+ "source_sha": "c828d16906f241c5",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:35Z",
"title": "OpenGL"
},
"Performance": {
"file": "Performance.wiki",
"new_revid": 24008,
- "old_revid": null,
+ "old_revid": 24008,
"source_sha": "f2b44ad5e7ccaeb0",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:16Z",
"title": "Performance"
},
"Physical GPU Backend and Guest Wiring": {
"file": "Physical-GPU-Backend.wiki",
- "new_revid": 24113,
- "old_revid": 24101,
- "source_sha": "045d4371c63d7f57",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:56Z",
+ "new_revid": 24128,
+ "old_revid": 24113,
+ "source_sha": "9ec1fb4ad252fb43",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:36Z",
"title": "Physical GPU Backend and Guest Wiring"
},
"Project Goals": {
"file": "Project-Goals.wiki",
- "new_revid": 24121,
- "old_revid": 24114,
- "source_sha": "4bc1d42ce7317922",
- "summary": "Remove virtio-gpu/virgl references; they are not part of this project's path",
- "timestamp": "2026-11-11T16:22:41Z",
+ "new_revid": 24129,
+ "old_revid": 24121,
+ "source_sha": "172124308519a378",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:37Z",
"title": "Project Goals"
},
"Project Plan": {
"file": "Project-Plan.wiki",
- "new_revid": 24115,
- "old_revid": 24103,
- "source_sha": "5413cd31633f0781",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:57Z",
+ "new_revid": 24130,
+ "old_revid": 24115,
+ "source_sha": "d1eb43a3ff142501",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:37Z",
"title": "Project Plan"
},
"Project Status": {
"file": "Project-Status.wiki",
- "new_revid": 24116,
- "old_revid": 24104,
- "source_sha": "cdbe587f95371ca5",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:58Z",
+ "new_revid": 24131,
+ "old_revid": 24116,
+ "source_sha": "836675c834215a40",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:38Z",
"title": "Project Status"
},
"RPC Message Format": {
"file": "RPC-Message-Format.wiki",
"new_revid": 23987,
- "old_revid": 23953,
+ "old_revid": 23987,
"source_sha": "6e8ca920fdcbdbf3",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:41:00Z",
"title": "RPC Message Format"
},
"System Overview": {
"file": "System-Overview.wiki",
- "new_revid": 24117,
- "old_revid": 24105,
- "source_sha": "6d4d08fffb5ff6c0",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:58Z",
+ "new_revid": 24132,
+ "old_revid": 24117,
+ "source_sha": "ca0eeca2caf2429f",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:40Z",
"title": "System Overview"
},
"Template:About message": {
@@ -325,82 +325,82 @@
},
"The Execution Frontier": {
"file": "Execution-Frontier.wiki",
- "new_revid": 24107,
- "old_revid": 24095,
- "source_sha": "0a952f3fe56873b1",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:53Z",
+ "new_revid": 24122,
+ "old_revid": 24107,
+ "source_sha": "330aaccbf09e44fb",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:28Z",
"title": "The Execution Frontier"
},
"The Guest Stack and CUDASW": {
"file": "Guest-Stack-and-CUDASW.wiki",
"new_revid": 24018,
- "old_revid": 23978,
+ "old_revid": 24018,
"source_sha": "2683360ca15b4995",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:31Z",
"title": "The Guest Stack and CUDASW"
},
"The Host Module (vgsp.ko)": {
"file": "Host-Module.wiki",
- "new_revid": 24111,
- "old_revid": 24099,
- "source_sha": "a92d0397166fb875",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:55Z",
+ "new_revid": 24126,
+ "old_revid": 24111,
+ "source_sha": "9a0cd0079d648c1f",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:33Z",
"title": "The Host Module (vgsp.ko)"
},
"The vGSP Execution Plane (vEP)": {
"file": "Execution-Plane.wiki",
- "new_revid": 24108,
- "old_revid": 24096,
- "source_sha": "758b224f3c94f02a",
- "summary": "2026-11-11 refresh: first non-black GPU frames + 45.4 s video; direct-GL GR ring resolves; CE-ring/window walls",
- "timestamp": "2026-11-11T15:48:54Z",
+ "new_revid": 24123,
+ "old_revid": 24108,
+ "source_sha": "efae696755438733",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
+ "timestamp": "2026-11-13T00:10:28Z",
"title": "The vGSP Execution Plane (vEP)"
},
"UVM in the Guest": {
"file": "UVM-in-the-Guest.wiki",
"new_revid": 24020,
- "old_revid": 23991,
+ "old_revid": 24020,
"source_sha": "70774393afbe8e1f",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:34Z",
"title": "UVM in the Guest"
},
"VGPU-IO Integration Guide": {
"file": "vGPU-IO-Integration-Guide.wiki",
"new_revid": 23993,
- "old_revid": 23959,
+ "old_revid": 23993,
"source_sha": "fd64bda2a5e70353",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:41:03Z",
"title": "VGPU-IO Integration Guide"
},
"Vulkan": {
"file": "Vulkan.wiki",
"new_revid": 24006,
- "old_revid": null,
+ "old_revid": 24006,
"source_sha": "d94fa2d2b85e4057",
- "summary": "New page (2026-10-30 wiki refresh): Vulkan",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:05:01Z",
"title": "Vulkan"
},
"WPR Management": {
"file": "WPR-Management.wiki",
"new_revid": 23992,
- "old_revid": 23958,
+ "old_revid": 23992,
"source_sha": "592a9853d4ac1eae",
- "summary": "Fix repository links: point to the cgit tree URLs",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-12T04:41:02Z",
"title": "WPR Management"
},
"risc-v-gsp-rm-debugger": {
"file": "Riscv-GSP-RM-Debugger.wiki",
"new_revid": 24024,
- "old_revid": 23989,
+ "old_revid": 24024,
"source_sha": "fcd6dc67e49c8d1f",
- "summary": "2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces",
+ "summary": "2026-11-12 status refresh: X/GLX fully green, GPU-rendered captures, direct-GL command-stream delivery wall",
"timestamp": "2026-10-30T17:06:40Z",
"title": "risc-v-gsp-rm-debugger"
}
diff --git a/wiki/Execution-Frontier.md b/wiki/Execution-Frontier.md
index fc076f1..f5bfa9d 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-11, tree `master @ 4acac093`.
+Status: 2026-11-12, tree `master @ 800c108f`.
Tags: `[live]` observed; `[wip]` partial; `[wall]` current blocker; theories
are labelled as such.
@@ -97,20 +97,20 @@ breadth and hardening around it:
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 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. The **first non-black GPU-rendered
-output** landed: a pbuffer probe returns `pixel=ff0000ff`, the off-screen
-path produced 500/500 animated 640x480 frames, and a 45.4 s video was
-captured. The direct-GL **GR ring `0xbeef0100` now resolves** and its releases
-advance; GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context
-whenever the shared nvClip `modeNum` is even. What is missing is **window/
-screen pixels through the NVIDIA path**: glxgears' window is black, the
-direct-GL **CE ring `0xbeef0101` never resolves** (the guest wedges ~90 s
-after `V_Init`), and X window creation wedges on some boots. The guest Vulkan
-pipeline's inline-to-memory upload arm is its gap. The full picture lives on
+nvidia-modeset/NvKms registers (`/dev/dri`), X settles, and the stock NVIDIA
+GLX path is fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 and direct
+rendering; `glxgears` renders ~520 FPS). The X DDX waits are fixed and its 3D
+replay executes; the **first non-black GPU-rendered output** landed: a
+pbuffer probe returns `pixel=ff0000ff`, the off-screen path produced 500/500
+non-black 640x480 frames per run and captured videos (45.4 s on 2026-11-11, a
+50 s capture on 2026-11-12), and GZDoom reaches `V_Init: allocate screen`
+with its GL 4.6.0 context when the shared nvClip `modeNum` is even. What is
+missing is **window/screen pixels through the NVIDIA path**: the direct-GL
+client's own 59,556-byte setup push is not yet resolvable/readable host-side
+under the client's page-directory churn, so its draw sections never reach the
+engine, glxgears' window is black, and a synchronous window draw wedges X on
+some boots. The guest Vulkan pipeline's inline-to-memory upload arm is its
+gap. The full picture lives on
[`Graphics-Execution.md`](Graphics-Execution.md).
No breadth beyond these is claimed: Windows guests, migration and performance
@@ -168,13 +168,15 @@ different emulated VRAM sizes and multiple guests coexist at the device level
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, the DDX 3D
-replay executes, the first non-black GPU-rendered frames and a 45.4 s video
-are captured off-screen, and the direct-GL GR ring resolves with advancing
-releases); but the direct-GL CE ring `0xbeef0101` does not resolve, a
-window draw wedges X and glxgears' window is black, and no non-black window/
-screen frame has been produced. The CE ring, the window/screen present and X
-stability are the named blockers
+client now run end to end (NvKms registers, X settles, the stock GLX path is
+fully green with glxinfo 4.6.0 and ~520 FPS glxgears, the DDX 3D replay
+executes, the first non-black GPU-rendered frames and videos are captured
+off-screen, and the direct-GL ring/USERD machinery is substantially hardened);
+but the direct-GL client's 59,556-byte setup push is not yet readable/
+resolvable host-side under its page-directory churn, so its draw sections
+never open on the engine, glxgears' window is black, and a window draw wedges
+X on some boots. Command-stream delivery, the window/screen present and X
+screen-init stability are the named blockers
([`Graphics-Execution.md`](Graphics-Execution.md)).
## 6. Lines of investigation (live)
@@ -189,10 +191,11 @@ stability are the named blockers
4. **Hold the acceptance battery** — vector-add, matrix-multiply and the
transformer kernel; each entry is accepted only on its own verification
output (`bad=0` + `STATUS OK`).
-5. **The graphics pixel frontier** — resolve the direct-GL CE ring
- `0xbeef0101`, make the window/screen present land, and stabilise X across
- boots so the proven off-screen frames become window pixels; the lanes, the
- walls and the milestone ladder are on
+5. **The graphics pixel frontier** — make the direct-GL client's command
+ stream (the 59,556-byte setup push and its ring/CE siblings) resolve and
+ execute host-side, make the window/screen present land, and stabilise X
+ screen-init across boots so the proven off-screen frames become window
+ pixels; the lanes, the walls and the milestone ladder are on
[`Graphics-Execution.md`](Graphics-Execution.md).
## 7. Theories, resolved
diff --git a/wiki/Execution-Plane.md b/wiki/Execution-Plane.md
index d88a1f3..88fbc9a 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-11, tree `master @ 4acac093`. Tags: `[live]` proven with the
+Status: 2026-11-12, tree `master @ 800c108f`. 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.
@@ -144,19 +144,21 @@ guest: push + QMD + GPFIFO entry + doorbell (BAR0 0x88704)
isolation for simultaneous CUDA guests is in progress.
* **The graphics pixel frontier.** Graphics work rides this plane in three
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, class-aware arm), so NvKms
- registers, X settles and GL 4.6 is live, the X DDX waits are fixed, and
+ direct GL client's own GR/CE channels). The display/KMS path is served by
+ the emulated display engine (modeset push buffers plus the
+ notifier/`UPDATE` completion, class-aware arm), so NvKms registers, X
+ settles and the stock NVIDIA GLX path is fully green (`glxinfo -B` rc 0,
+ OpenGL 4.6.0 direct, `glxgears` ~520 FPS); the X DDX waits are fixed, and
the guest's real GL draws now forward and execute on the physical GPU
(`backend_ok=5-7`, `backend_timeout=0`); the DDX 3D replay executes, the 2D
- path is green, the first non-black GPU-rendered frames are proven (500/500
- off-screen frames plus a 45.4 s video), and the direct-GL **GR ring
- `0xbeef0100` resolves with advancing releases**. No non-black **window/
- screen** frame has been produced through the NVIDIA path yet: the direct-GL
- **CE ring `0xbeef0101` never resolves** (the guest wedges ~90 s after
- `V_Init`), glxgears' window is black, and X window creation wedges on some
- boots, so those are the named blockers. The lanes and the ladder are on
+ path is green, the direct-GL ring/VAS and USERD machinery is hardened, and
+ the first non-black GPU-rendered frames are proven (500/500 off-screen
+ frames per run plus captured 45.4 s and 50 s videos). No non-black
+ **window/screen** frame has been produced through the NVIDIA path yet: the
+ direct-GL client's own 59,556-byte setup push does not yet resolve/read
+ host-side under its page-directory churn (so its draw sections never open),
+ glxgears' window is black, and X screen-init is a per-boot lottery, so
+ those are the named blockers. 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 d3e42db..5aa4fa3 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-11, tree `master @ 4acac093`.
+Status: 2026-11-12, tree `master @ 800c108f`.
## Project and positioning
@@ -39,17 +39,19 @@ progress). This is the project's known status, not a misconfiguration — see
**Can I run OpenGL or Vulkan applications in the guest?**
Partially, and it is an active frontier. The display/KMS stack and the X
server run on the emulated vGPU with the stock driver: nvidia-modeset/NvKms
-registers (`/dev/dri`), `glxinfo` reports OpenGL 4.6.0 with direct rendering,
-the 2D path is green and the DDX 3D replay executes. The **first non-black
-GPU-rendered output** is proven: a pbuffer probe returns `pixel=ff0000ff`, the
-off-screen path produced 500/500 non-black animated frames, and a 45.4 s video
-was captured. The direct-GL GR channel now submits and its releases advance;
-GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context. Window and
-screen pixels are still the wall: glxgears' window is black, the direct-GL CE
-channel does not yet resolve (GZDoom wedges ~90 s after `V_Init`), X window
-creation wedges on some boots, and the DDX's 4 GB sysmem allocation forces a
-12 GB guest. The guest Vulkan pipeline runs end to end (device → command
-buffer → fence → readback) but frames are black. See
+registers (`/dev/dri`), the stock NVIDIA GLX path is fully green
+(`glxinfo -B` returns 0 with OpenGL 4.6.0 direct rendering; `glxgears`
+renders ~520 FPS), the 2D path is green and the DDX 3D replay executes. The
+**first non-black GPU-rendered output** is proven: a pbuffer probe returns
+`pixel=ff0000ff`, the off-screen path produced 500/500 non-black animated
+frames per run, and videos were captured (45.4 s on 2026-11-11, 50 s on
+2026-11-12). GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0
+context on an even modeNum. Window and screen pixels are still the wall: the
+direct-GL client's 59,556-byte setup push does not yet resolve/read host-side
+under its page-directory churn (so its draws never reach the engine),
+glxgears' window is black, and X screen-init is a per-boot lottery. The guest
+Vulkan pipeline runs end to end (device → command buffer → fence → readback)
+but frames are black. See
[`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md) and
[`Graphics-Execution.md`](Graphics-Execution.md).
diff --git a/wiki/Graphics-Execution.md b/wiki/Graphics-Execution.md
index eea0574..38eab6c 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-11, tree `master @ 4acac093`. Tags: `[live]` observed end to
+Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` observed end to
end; `[wip]` partially built; `[wall]` current blocker; `[target]` defined
success state; `[planned]` designed, not built.
@@ -81,14 +81,19 @@ fidelity:
green, and a guest pbuffer `glClear(red)+glFinish+glReadPixels` probe
returns a real pixel (`pixel=ff0000ff`): the replay and readback machinery
works. The off-screen frame path then produced **500/500 non-black 640x480
- animated frames** and a captured 45.4 s video. The direct-GL **GR ring
- `0xbeef0100` now resolves** (`4acac093`: beef-family always-probe,
- per-channel promote backoff, rank-collision fallback, parked-candidate
- eviction); its releases advance frame by frame and GZDoom reaches
- `V_Init: allocate screen` with its GL 4.6.0 context. The direct-GL **CE
- ring `0xbeef0101` never resolves**, so the client's CE work does not
- execute and the guest wedges ~90 s after `V_Init`; window/screen present
- is still the frontier (§6).
+ animated frames** per run and captured videos (45.4 s on 2026-11-11; a
+ 50 s 640x480 h264 capture on 2026-11-12). X and the stock NVIDIA GLX path
+ are fully green (`glxinfo -B` returns 0, OpenGL 4.6.0 direct, `glxgears`
+ ~520 FPS), and GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0
+ context whenever the shared nvClip `modeNum` is even. The direct-GL
+ ring/VAS anchor and USERD machinery are substantially hardened (verified
+ page-directory discovery, per-rank content scans, eager push pins,
+ client-allocated USERD resolution, foreign-USERD skip, aperture-aware
+ fallback, wrapped-PUT acceptance). What remains for the client's own
+ stream is **delivery**: its 59,556-byte setup push (GPU VA `0x4024004`) is
+ still not resolvable/readable host-side while the client's page-directory
+ incarnation churns, so no draw section opens and the window stays black;
+ window/screen present is still the frontier (§6).
## 4. The channel and object picture
@@ -139,13 +144,16 @@ DDX's reserve loop. For a windowed GL client the present is a kick; the GSP
event-IRQ fix now sets the RISC-V SWGEN0 IRQSTAT/IRQMASK/IRQDEST and latches
the CPU-tree leaf, so the guest services the event and glxgears completes
swaps, and the GR backend no longer times out (the pair-close/pair-safe
-replay fixes are default ON; draws retire in 3-2400 ms). The DDX 3D replay
-renders and reads back a pbuffer pixel (`pixel=ff0000ff`), the off-screen
-frame path produced non-black animated frames and a 45.4 s video, the
-RM write-lock holder (Xorg in the DDX vidheap scrub wait) is fixed
-(`df6e71bb`), and the direct-GL GR ring now resolves with advancing releases.
-The next step is the direct-GL CE ring `0xbeef0101` and the window/screen
-present path.
+ replay fixes are default ON; draws retire in 3-2400 ms). The stock GLX
+ path is fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 direct
+ rendering; `glxgears` renders ~520 FPS; the Xorg channel-idle WAIT count is
+ zero), the DDX 3D replay renders and reads back a pbuffer pixel
+ (`pixel=ff0000ff`), the off-screen frame path produced non-black animated
+ frames and captured videos (45.4 s and 50 s), the RM write-lock holder
+ (Xorg in the DDX vidheap scrub wait) is fixed (`df6e71bb`), and the
+ direct-GL ring/USERD machinery is hardened. The next step is delivering the
+ direct-GL client's own **setup push** (59,556 bytes at VA `0x4024004`) and
+ then the window/screen present path.
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
@@ -154,35 +162,37 @@ requires it switched off, along with any external poke.
## 6. Where the frontier is (ranked walls)
-1. **Direct-GL CE ring resolution** `[wall]`. The GR ring `0xbeef0100`
- resolves and its releases advance, but the CE ring `0xbeef0101`
- (`gpfifo=0x4100000`) never maps: `VAS-PROMOTE` walks a parked candidate and
- returns `rc=-2`, then `NOT mapped by any registered VAS` every ~7 s. The
- client's CE work never executes and GZDoom wedges ~90 s after `V_Init`.
- Next: walk all parked candidates regardless of owner VAS and/or keep at
- least two fresh same-VAS parks.
-2. **Window/screen present and the GLX lottery** `[wall]`. The pbuffer and
- off-screen frame paths are proven (`pixel=ff0000ff`, 500/500 non-black
- frames, 45.4 s video), but glxgears' window is black and the GLX
- probe/frames path is a per-window lottery (hang/black/BadValue). A
- synchronous window draw wedges X; screen capture must use the ivshmem
- frame path and the present must be made to land.
-3. **X startup / stability** `[wall]`. X startup is a per-boot lottery: on
- 3/6 boots window creation wedges Xorg in an unkillable kernel RM spin
- (`_nv052600rm+0x7b`); `Failed to initialize DMA`, push-buffer `0x51`,
- `Wait for channel idle timed out` and occasional vmalloc failures also
- appear. A fresh cycle clears it. The shared nvClip `modeNum` must be even
- for the GL client's state init to succeed; the odd value is the guest
- kernel's nvKms deferred close, not module-induced.
-4. **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.
-5. **Non-black window frames and sustained rate** `[wall]`/`[target]`. Once
- the CE ring, the window/screen present and X stability land, the capture
- must show motion in a window, then 60 fps in one VM with no forcing, then
- two VMs on two mediated devices with non-black frames in both.
+1. **Direct-GL command-stream delivery** `[wall]`. The direct-GL ring/VAS
+ anchor is substantially hardened (verified-pair page-directory discovery,
+ per-rank content scans, eager push pins at the ring latch, client-allocated
+ USERD resolution with a foreign-USERD skip, aperture-aware wire fallback and
+ wrapped-PUT acceptance), but the client's own **59,556-byte setup push**
+ (GPU VA `0x4024004`) is still not resolvable or readable host-side while
+ the client's page-directory incarnation churns — the pages live in the
+ emulated FB aperture beyond the visible window, and the CE ring sibling
+ (`0xbeef0101`) resolves only intermittently. Until the setup push decodes,
+ no GL draw section opens and no `GR LAUNCH` is submitted for the direct
+ client: GZDoom spins in its GL pipeline after `V_Init` and the window stays
+ black.
+2. **Window/screen present** `[wall]`. The pbuffer and off-screen frame paths
+ are proven (`pixel=ff0000ff`, 500/500 non-black frames, captured videos),
+ but a windowed present does not land: glxgears' window is black, the DDX
+ shared-surface `gpuRefCount`/`lastKickoffRefCount` poll (W1) must be
+ satisfied through a verified surface VA, and a synchronous window draw
+ wedges X.
+3. **X screen-init and stability** `[wall]`. X startup is still a per-boot
+ lottery: the DDX can fail its idle-DMA check (`Failed to idle DMA` ->
+ `Failed to allocate notification memory` -> `Failed to allocate push
+ buffer` -> `ScreenInit failed`), and the shared nvClip `modeNum` must be
+ even for the GL client's state init to succeed (an odd value is guest
+ userspace X-driver state, cleared by one X restart — not a host bug).
+ Wrapped PUTs and the kick-idle marker/GET publication are handled; a guest
+ kernel panic after a wedge is recovered by an offline filesystem check.
+4. **Non-black window frames and sustained rate** `[wall]`/`[target]`. Once
+ the command-stream delivery, the window/screen present and X screen-init
+ land, the capture must show motion in a window, 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
@@ -192,24 +202,26 @@ requires it switched off, along with any external poke.
| Display engine serves the modeset push buffers; notifier plus `UPDATE -> FINISHED` | `[live]` (campaign configuration) |
| 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]` |
-| X green on attempt 1 in three consecutive cycles (`ebf3130f`) | `[live]` |
+| X green on attempt 1 in three consecutive cycles (`ebf3130f`); X + stock GLX fully green on the current stack (`glxinfo -B` rc 0, OpenGL 4.6.0 direct, `glxgears` ~520 FPS, Xorg WAIT 0) | `[live]` |
| GSP event-IRQ fix wakes the guest poll; glxgears completes swaps | `[live]` |
| 2D path end-to-end: accelerated X fills read back via `xwd` | `[live]` |
| Guest's real GL draws forward and execute on the physical GPU (`work_gr backend_ok=5-7`) | `[live]` |
| GR backend timeouts fixed (`backend_timeout=0`; draws retire in 3-2400 ms) | `[live]` |
| DDX 3D replay executes (`section captured` + `GR LAUNCH` on `0x1000014`, 12 launches/cycle) | `[live]` |
| First real GPU readback: pbuffer `glClear(red)+glReadPixels` -> `pixel=ff0000ff` | `[live]` |
-| First non-black GPU-rendered frames: 500/500 off-screen frames; 45.4 s video captured (`r1769`) | `[live]` |
-| Direct-GL GR ring `0xbeef0100` resolves; releases advance (`4acac093`) | `[live]` |
+| First non-black GPU-rendered frames: 500/500 off-screen 640x480 frames per run; 45.4 s video (`r1769`) and a 50 s capture (2026-11-12) | `[live]` |
+| Direct-GL GR ring `0xbeef0100` resolves; releases advance; ring/VAS anchor hardened (verified page-directory discovery, eager push pins, per-rank scans) | `[live]` |
+| Client-allocated USERD resolved from the channel's memory objects (`hUserdMemory`/`userdOffset`); foreign-USERD adoption skipped; aperture-aware wire fallback | `[live]` |
+| Guest adapter init with the all-sysmem instance configuration (`RMInstLoc`) — the BAR2-verify trap | `[live]` |
| GZDoom passes `V_Init: allocate screen` with GL 4.6.0 when shared nvClip `modeNum` is even | `[live]` |
| RM write-lock holder identified (Xorg in the DDX vidheap scrub wait) and fixed (`df6e71bb`) | `[live]` |
| GL section capture: the X channel'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]` |
-| X server survives the run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` |
-| Direct-GL CE ring `0xbeef0101` resolves and the client's CE work executes | `[wall]` |
+| Emulated FB/GART sizing traps fixed (FB info replies in KB; GART default 256 MiB), removing the 4 GiB guest-allocation class | `[live]` |
+| Direct-GL command-stream delivery (the 59,556-byte setup push at VA `0x4024004`; the CE ring `0xbeef0101`) | `[wall]` |
| Window/screen present produces non-black window pixels | `[wall]` |
-| X startup/stability (`_nv052600rm` soft-lock, `0x51`, vmalloc) | `[wall]` |
+| X screen-init/stability (idle-DMA ScreenInit lottery, modeNum parity) | `[wall]` |
| Non-black screen pixels from the emulated vGPU's 3D pipeline | `[wall]` |
| Windows/DirectX guests | `[planned]` |
@@ -217,13 +229,14 @@ requires it switched off, along with any external poke.
* No **window/screen** pixel has been produced by the emulated vGPU's 3D
pipeline yet; every screen capture so far is black. The proven non-black
- frames and the 45.4 s video come from the off-screen pbuffer path
- (pbuffer -> sysmem -> kvmfr ivshmem -> host reader), not from a windowed X
- screen capture.
+ frames and the videos (45.4 s and 50 s) come from the off-screen pbuffer
+ path (pbuffer -> sysmem -> kvmfr ivshmem -> host reader), not from a
+ windowed X screen capture.
* Display/KMS bring-up (NvKms, `/dev/dri`, X, a real GL context) is not a
rendered-frame claim. GZDoom reaching `V_Init: allocate screen` proves the
client's GL init and the direct-GL GR lane, not the game loop or a
- presented frame; the direct-GL CE ring still does not resolve.
+ presented frame; the direct-GL setup push does not yet decode, so the
+ client's draws do not reach the engine.
* 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 6ffbed1..1fc6ee1 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-11, tree `master @ 4acac093`. Tags: `[live]` observed with
+> Status: 2026-11-12, tree `master @ 800c108f`. 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.
@@ -127,12 +127,16 @@ 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. The DDX 3D replay renders and reads back a pbuffer pixel
(`pixel=ff0000ff`), the off-screen frame path produced 500/500 non-black
-animated frames and a 45.4 s video, the RM write-lock holder (Xorg in the
-DDX vidheap scrub wait) is fixed (`df6e71bb`), and the direct-GL GR ring
-`0xbeef0100` now resolves with advancing releases (`4acac093`). The remaining
-GL gap is the direct-GL CE ring `0xbeef0101` (it never resolves, so the
-client's CE work does not execute) and the window/screen present path, which
-currently wedges X or stays black.
+animated frames per run and captured videos (45.4 s and 50 s), the RM
+write-lock holder (Xorg in the DDX vidheap scrub wait) is fixed
+(`df6e71bb`), X and the stock GLX path are fully green (`glxinfo -B` rc 0,
+~520 FPS `glxgears`), and the direct-GL ring/VAS and USERD machinery is
+hardened (verified page-directory discovery, eager push pins,
+client-allocated USERD resolution, foreign-USERD skip). The remaining GL gap
+is delivery of the direct-GL client's own setup push (59,556 bytes at VA
+`0x4024004` — not yet resolvable/readable host-side under the client's
+page-directory churn) and the window/screen present path, which currently
+stays black or wedges X.
## 6. Debug parameters
@@ -174,8 +178,8 @@ The physical-backend path adds a default-off set of backend controls
| Push decoding + semaphore completion [wip] | demonstrated live, being productized |
| Emulation-mode CUDA end-to-end [live] | repeatable 1M-element `vectorAdd`, `bad=0` |
| Guest-RAM physical path + server-owned page-table population [gated] | default-off; GPA→HPA via shared-file page cache verified live on the CE |
-| GPU work forwarding: CE copy, release and fault relay [gated] | default-off, verified live; GR open [wall] |
-| Execution backend (module-owned GPU, direct real-GSP session) [wall] | boot, static configuration and CE copies proven; GR execution open (failed mutating attempts park the device in a locked fail-safe, never auto-retried) |
+| GPU work forwarding: CE copy, release and fault relay [gated] | default-off, verified live; GR execution live for forwarded CUDA launches |
+| Execution backend (module-owned GPU, direct real-GSP session) [live] | boot, static configuration, CE copies and GR execution proven; failed mutating attempts park the device in a locked fail-safe, never auto-retried |
| Real VRAM backing [target]; Windows, Xen, aarch64 [planned] | designed, not implemented |
## 9. Related documentation
diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md
index 9540720..0bcaae7 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-11, tree `master @ 4acac093`. Tags: `[live]` observed with the
+Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` observed with the
stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]`
defined success state.
@@ -74,6 +74,7 @@ Rated honestly, against the milestone ladder in the plan:
| X server initialises on the emulated vGPU (driver push-DMA sanity test, ScreenInit) | `[live]` |
| nvidia-modeset/NvKms registers (`/dev/dri/card0`, `renderD128`, `fb0`); `nvidia-smi -L` enumerates | `[live]` (campaign configuration) |
| `glxinfo -B` reports the NVIDIA renderer (OpenGL 4.6.0, driver 570.144, direct rendering) | `[live]` |
+| The stock GLX path is fully green: `glxinfo -B` returns 0, `glxgears` renders ~520 FPS, Xorg WAIT count 0 | `[live]` |
| The X driver's RC-watchdog channel registers and its notifier is authored | `[live]` |
| X green on attempt 1 in three consecutive cycles (`ebf3130f`) | `[live]` |
| GSP event-IRQ fix wakes the guest poll; glxgears completes swaps | `[live]` |
@@ -82,16 +83,17 @@ Rated honestly, against the milestone ladder in the plan:
| GR backend timeouts fixed (`backend_timeout=0`; draws retire in 3-2400 ms) | `[live]` |
| DDX 3D replay executes (`section captured` + `GR LAUNCH` on `0x1000014`, 12 launches/cycle) | `[live]` |
| First real GPU readback: pbuffer `glClear(red)+glReadPixels` -> `pixel=ff0000ff` | `[live]` |
-| First non-black GPU-rendered frames: 500/500 off-screen 640x480 frames, 45.4 s video captured (`r1769`) | `[live]` |
-| Direct-GL GR ring `0xbeef0100` resolves; releases advance frame by frame (`4acac093`) | `[live]` |
+| First non-black GPU-rendered frames: 500/500 off-screen 640x480 frames per run; 45.4 s video (`r1769`) and a 50 s capture (2026-11-12) | `[live]` |
+| Direct-GL GR ring `0xbeef0100` resolves; releases advance; ring/VAS anchor hardened (verified page-directory discovery, eager push pins, per-rank scans) | `[live]` |
+| Client-allocated USERD resolved from the channel's memory objects (`hUserdMemory`/`userdOffset`); foreign-USERD adoption skipped; aperture-aware wire fallback | `[live]` |
| GZDoom passes `V_Init: allocate screen` with GL 4.6.0 when shared nvClip `modeNum` is even | `[live]` |
| RM write-lock holder identified (Xorg in the DDX vidheap scrub wait) and fixed (`df6e71bb`) | `[live]` |
| Engine executes a launch built from the captured section (real `sm_75` SASS retired) | `[live]` |
| Verbatim 3D method-stream replay retired by the engine, no MMU fault | `[live]` |
-| X server survives the run on a 12 GB guest (the DDX's 4 GB sysmem allocation forces the size) | `[live]` |
-| Direct-GL CE ring `0xbeef0101` resolves (GZDoom CE work executes) | `[wall]` |
+| Emulated FB/GART sizing traps fixed (FB info replies in KB; GART default 256 MiB), removing the 4 GiB guest-allocation class | `[live]` |
+| Direct-GL command-stream delivery (the 59,556-byte setup push at VA `0x4024004`; the CE ring `0xbeef0101`) | `[wall]` |
| Window/screen present produces non-black screen pixels | `[wall]` |
-| X startup/stability (`_nv052600rm` soft-lock, `0x51`, vmalloc) | `[wall]` |
+| X screen-init/stability (idle-DMA ScreenInit lottery, modeNum parity) | `[wall]` |
| 60 fps sustained, no forcing (M-GL4) | `[target]` |
## 4. How OpenGL runs are verified
@@ -112,21 +114,24 @@ client leaves its retry loop), M-GL2 (`glxgears` non-black), M-GL3 (GZDoom GL
non-black through the mdev), M-GL4 (60 fps, no forcing), M-GL5 (two VMs, two
mdevs), M-GL6 (split-screen video). The project sits **between M-GL1 and
M-GL2, with M-GL2's off-screen half proven**: the display/KMS stack registers,
-X settles, the client submits and retires its GR/CE channels, the direct-GL GR
-ring resolves and its releases advance, and the GPU-rendered pbuffer path
-produced non-black animated frames and a captured 45.4 s video. The remaining
-gates are the direct-GL CE ring `0xbeef0101`, the window/screen present path
-(a window draw currently wedges X and glxgears' window is black), and X
-stability across boots — then the first rendered screen frame.
+X and the stock GLX path are fully green (`glxinfo -B` rc 0, ~520 FPS
+`glxgears`, Xorg WAIT 0), the direct-GL ring/USERD machinery is hardened, and
+the GPU-rendered pbuffer path produced non-black animated frames and captured
+videos (45.4 s and 50 s). The remaining gates are **delivery of the direct-GL
+client's own command stream** (its 59,556-byte setup push is not yet
+resolvable/readable host-side under the client's page-directory churn), the
+window/screen present path (glxgears' window is black and a window draw can
+wedge X), and X screen-init stability — then the first rendered screen frame.
## 6. What is not claimed
* No **window/screen** frame has rendered real pixels through the emulated
vGPU yet; every screen capture so far is black. The non-black frames and the
- video come from the off-screen pbuffer path (pbuffer -> sysmem -> kvmfr
- ivshmem -> host reader), not from a windowed X screen capture. The direct-GL
- CE ring `0xbeef0101` does not resolve, a synchronous window draw wedges X,
- and X window creation wedges on some boots. Those are the current walls.
+ videos (45.4 s and 50 s) come from the off-screen pbuffer path (pbuffer ->
+ sysmem -> kvmfr ivshmem -> host reader), not from a windowed X screen
+ capture. The direct-GL client's setup push does not yet decode, its draws do
+ not reach the engine, a synchronous window draw wedges X, and X screen-init
+ is a per-boot lottery. Those are the current walls.
* GZDoom reaching `V_Init: allocate screen` is not a rendered-frame claim; it
proves the client's GL init and the direct-GL GR lane, not the game loop or
a presented frame.
diff --git a/wiki/Physical-GPU-Backend.md b/wiki/Physical-GPU-Backend.md
index ee014ad..bfd89bf 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-11, tree `master @ 4acac093`. Tags: `[live]` proven with the
+Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` proven with the
stock guest driver; `[gated]` implemented default-off; `[wip]` partially
built; `[wall]` current blocker; `[target]` planned end state.
@@ -109,7 +109,7 @@ FAIL a failed mutating operation parks the device in a locked fail-safe;
| Host RM client and first real engine work (static config, real objects, 4 KiB CE copy) | done `[live]` |
| Guest-copy forwarding, deferred release, hardware-primary copies, engine-authored relay, fault relay | verified live (seams parameterised and fail-open); the staged-transfer class is under repair `[live]` |
| CUDA kernel execution (`vectorAdd` and further clients) | done `[live]` — stock guest CUDA clients (vector-add, matrix-multiply, transformer) execute on the physical engine with verified results and engine-authored completions relayed to the guest |
-| Graphics method-stream execution (verbatim 3D replay, synthesized launches, direct-GL client channels) | `[wip]` — the engine retires real graphics streams, the display/KMS stack registers and the direct GL client's GR/CE channels submit; rendered pixels are the frontier ([`Graphics-Execution.md`](Graphics-Execution.md)) |
+| Graphics method-stream execution (verbatim 3D replay, synthesized launches, direct-GL client channels) | `[wip]` — the engine retires real graphics streams, the display/KMS stack registers and X + stock GLX are green, and the first non-black GPU-rendered frames are captured off-screen; delivery of the direct-GL client's own command stream and the window/screen present are the frontier ([`Graphics-Execution.md`](Graphics-Execution.md)) |
## 7. The execution frontier
@@ -122,12 +122,13 @@ 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); 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, X is reliable on good boots, the DDX 3D replay executes, and the first
-non-black GPU-rendered frames are proven (500/500 off-screen frames plus a
-45.4 s video); the direct-GL GR ring resolves with advancing releases, so the
-remaining graphics gates are the direct-GL CE ring `0xbeef0101`, the window/
-screen present, and X stability before non-black window pixels. The remaining
+client's ring/USERD machinery is hardened. The display/KMS stack registers,
+the X DDX waits are fixed, X and the stock GLX path are fully green
+(`glxinfo -B` rc 0, ~520 FPS `glxgears`), the DDX 3D replay executes, and the
+first non-black GPU-rendered frames are proven (500/500 off-screen frames per
+run plus captured videos); the remaining graphics gates are delivery of the
+direct-GL client's own 59,556-byte setup push, the window/screen present, and
+X screen-init stability before non-black window 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 884dbb6..b41797a 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-11, tree `master @ 4acac093`. Tags: `[live]` working with the
+Status: 2026-11-12, tree `master @ 800c108f`. 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.
@@ -46,12 +46,12 @@ drivers, no license.**
## 3. Goals and their status
-| Goal | What success looks like | Status (2026-11-11) |
+| Goal | What success looks like | Status (2026-11-12) |
|---|---|---|
| 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), the 2D path is green, the DDX 3D replay executes, and the first non-black GPU-rendered frames plus a 45.4 s video are captured off-screen; the direct-GL GR ring resolves and GZDoom reaches `V_Init`. Window/screen pixels remain the frontier: the direct-GL CE ring `0xbeef0101` does not resolve, glxgears' window is black, and X window creation wedges on some boots ([`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, the stock NVIDIA GLX path is fully green (`glxinfo -B` rc 0, OpenGL 4.6.0 direct, `glxgears` ~520 FPS), the 2D path is green, the DDX 3D replay executes, and the first non-black GPU-rendered frames plus captured videos (45.4 s and 50 s) are proven off-screen; GZDoom reaches `V_Init`. Window/screen pixels remain the frontier: the direct-GL client's 59,556-byte setup push does not yet resolve/read host-side under its page-directory churn (so its draws never reach the engine), the window/screen present is unproven, and X screen-init is a per-boot lottery ([`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 dd8de18..1d3a7d1 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-11, tree `master @ 4acac093`. Tags: `[done]`, `[active]`,
+Status: 2026-11-12, tree `master @ 800c108f`. 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 with M-GL2's off-screen half proven: the display/KMS and DDX replay machinery work, the first non-black GPU-rendered frames and a 45.4 s video are captured, and the direct-GL GR ring resolves; the direct-GL CE ring, the window/screen present and X stability 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 with M-GL2's off-screen half proven: the display/KMS and DDX replay machinery work, X + stock GLX are green, the first non-black GPU-rendered frames and videos are captured, and the direct-GL ring/USERD machinery is hardened; delivery of the direct-GL client's own setup push, the window/screen present and X screen-init stability 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]` |
@@ -57,15 +57,17 @@ available (P5 runs across the whole plan).
Ranked, in dependency order:
-1. **Graphics pixels (P2).** The client and display stacks execute, the
- DDX 3D replay runs, the first non-black GPU-rendered frames and a 45.4 s
- video are captured off-screen, and the direct-GL GR ring `0xbeef0100`
- resolves with advancing releases. The named walls are the direct-GL CE
- ring `0xbeef0101` (it never resolves, so GZDoom wedges ~90 s after
- `V_Init`), the window/screen present path (glxgears' window is black and a
- window draw wedges X), X startup/stability (`_nv052600rm` soft-lock,
- `0x51`, vmalloc), and the DDX's 4 GB sysmem allocation (12 GB guest
- workaround), then non-black window frames. Full detail:
+1. **Graphics pixels (P2).** The client and display stacks execute, X and the
+ stock GLX path are fully green (`glxinfo -B` rc 0, ~520 FPS `glxgears`),
+ the DDX 3D replay runs, the first non-black GPU-rendered frames and videos
+ are captured off-screen, and the direct-GL ring/USERD machinery is
+ hardened. The named walls are **delivery of the direct-GL client's own
+ command stream** (its 59,556-byte setup push is not yet resolvable/
+ readable host-side under the client's page-directory churn, so no draw
+ section opens and GZDoom spins after `V_Init`), the window/screen present
+ path (glxgears' window is black and a window draw wedges X), X screen-init
+ stability (the DDX idle-DMA ScreenInit lottery; even `modeNum` required),
+ and then non-black window 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
@@ -80,15 +82,19 @@ 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); the UVM channel-pool tracker;
-the direct-GL GR release and CE ring discovery; the X DDX kick-channel decode
+the direct-GL ring/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); the GSP event-IRQ fix that completes
swaps; the X DMA-init fix (`ebf3130f`); the GR backend timeout fix
(`backend_timeout=0`); the 2D path end-to-end; the DDX 3D replay and the
-first non-black GPU-rendered frames with a captured video (the ring-ledger
-scrub release, `f6184ac3`); the direct-GL GR ring resolution (`4acac093`);
-the RM write-lock holder fix (`df6e71bb`); and the guest Vulkan pipeline
-running end to end.
+first non-black GPU-rendered frames with captured videos (the ring-ledger
+scrub release, `f6184ac3`); the direct-GL ring/VAS and USERD hardening
+(verified page-directory discovery, eager push pins, client-allocated USERD
+resolution); the full green X/GLX path (`glxinfo -B` rc 0, ~520 FPS
+`glxgears`); the guest adapter-init regression (`RMInstLoc` lost to a
+kernel-cmdline override) and its fix; the emulated FB/GART sizing traps (FB
+info in KB, GART 256 MiB) that removed the 4 GiB guest-allocation class; 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 137b7d9..8d34d70 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-11, tree `master @ 4acac093`. Tags: `[live]` proven with the
+Status: 2026-11-12, tree `master @ 800c108f`. 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, X settles and `glxinfo` reports OpenGL 4.6.0 with direct rendering; the 2D path is green, the DDX 3D replay executes on `0x1000014`, and the **first non-black GPU-rendered output** is proven: a pbuffer probe returns `pixel=ff0000ff`, the off-screen frame path produced 500/500 non-black animated frames, and a 45.4 s video was captured. The direct-GL **GR ring `0xbeef0100` now resolves** (its releases advance frame by frame), so GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context whenever the shared nvClip `modeNum` is even. **Window/screen pixels remain the wall:** glxgears' window is still black, the direct-GL **CE ring `0xbeef0101` never resolves** and the guest wedges ~90 s after `V_Init`, X window creation wedges on some boots (`_nv052600rm+0x7b`), and the DDX's 4 GB sysmem allocation forces a 12 GB guest ([`OpenGL.md`](OpenGL.md)) |
+| OpenGL (3D graphics) | `[wip]` — the display/KMS stack registers, X and the stock NVIDIA GLX path are fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 and direct rendering; `glxgears` renders ~520 FPS with the emulated GPU's NVIDIA renderer), and the **first non-black GPU-rendered output** is proven: the pbuffer frame path produced 500/500 non-black 640x480 frames per run and captured videos (45.4 s on 2026-11-11; a 50 s 640x480 h264 capture on 2026-11-12). GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context whenever the shared nvClip `modeNum` is even. **The frontier is delivery of the direct-GL client's own command stream:** its 59,556-byte setup push is not yet resolvable/readable host-side while the client's page-directory incarnation churns, so its draw sections never reach the engine and the window stays black; the window/screen present path and the X DDX screen-init idle-DMA lottery are the other named blockers ([`OpenGL.md`](OpenGL.md)) |
| 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]` |
@@ -76,11 +76,13 @@ 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); the first non-black GPU-rendered frames are proven
-off-screen (the pbuffer path produced a 500-frame, 45.4 s video on the
-emulated vGPU) and the direct-GL GR channel now submits with advancing
-releases, but windowed/screen pixels remain the frontier (the direct-GL CE
-channel does not yet resolve and X window creation can wedge) — see
+with direct rendering, `glxgears` renders ~520 FPS); the first non-black
+GPU-rendered frames are proven off-screen (the pbuffer path produced a
+500-frame 45.4 s video on 2026-11-11 and a 50 s capture on 2026-11-12), and
+GZDoom reaches its screen-allocation stage with GL 4.6.0 on an even modeNum,
+but windowed/screen pixels remain the frontier (the direct-GL client's
+command stream does not yet reach the engine and X screen-init is a per-boot
+lottery) — see
[`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
diff --git a/wiki/System-Overview.md b/wiki/System-Overview.md
index 6ad4d3e..26da5df 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-11, tree `master @ 4acac093`. Tags: `[live]` proven with the
+Status: 2026-11-12, tree `master @ 800c108f`. Tags: `[live]` proven with the
stock guest driver; `[gated]` implemented default-off; `[wip]` partial;
`[wall]` current blocker; `[target]` designed end state.
@@ -35,7 +35,7 @@ PASS THROUGH (real hardware; correctness and performance)
channel execution: guest push buffers on real channels [wip]
compute (CUDA) kernel launches on the real engine [live]
3D graphics method streams on the real engine [wip]
- rendered 3D pixels / video work [wall/planned]
+ rendered 3D pixels / video work (off-screen proven) [wip]
DMA, completion and fault interrupts relayed to the guest
```
@@ -140,17 +140,18 @@ RPC from the guest to "firmware":
([`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 (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, the DDX 3D replay executes,
- the 2D path is green, the first non-black GPU-rendered frames and a
- 45.4 s video are captured off-screen, the direct-GL GR ring resolves with
- advancing releases, and the guest Vulkan pipeline runs end to end. The
- direct-GL CE ring `0xbeef0101` still does not resolve, a window draw
- wedges X (glxgears' window is black), and X window creation wedges on some
- boots, so the remaining gate is the window/screen present before the
- first non-black window frame ([`OpenGL.md`](OpenGL.md),
- [`Vulkan.md`](Vulkan.md)).
+ nvidia-modeset/NvKms registers (`/dev/dri`), X settles and the stock NVIDIA
+ GLX path is fully green (`glxinfo -B` rc 0, OpenGL 4.6.0 direct, `glxgears`
+ ~520 FPS); the X DDX waits are fixed, the DDX 3D replay executes, the 2D
+ path is green, the direct-GL ring/USERD machinery is hardened, the first
+ non-black GPU-rendered frames and captured videos (45.4 s and 50 s) are
+ proven off-screen, and the guest Vulkan pipeline runs end to end. The
+ direct-GL client's own setup push still does not resolve/read host-side
+ (so its draws never reach the engine), the window/screen present is
+ unproven (a window draw can wedge X and glxgears' window is black), and X
+ screen-init is a per-boot lottery, so the remaining gate is the window/
+ screen present before the first non-black window frame
+ ([`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md)).
## 6. Where the detail lives