From 76a2d3cb16ea5550fb2f11f39a78b9eaa2804314 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 12 Nov 2026 20:01:07 -0500 Subject: docs: 2026-11-12 status refresh - green X/GLX, non-black GPU captures, direct-GL stream frontier Refresh STATE-CURRENT.md and the open-iov.org wiki pages with the 2026-11-12 state: stock-driver X + GLX green (glxinfo 4.6.0 direct rendering, glxgears ~520 FPS), the pbuffer frame path captured 500/500 non-black frames (50 s 640x480 h264) plus the earlier 45.4 s capture, and the named frontier (direct-GL client command-stream delivery: setup push unreadable, CE ring 0xbeef0101 intermittent) alongside the guest-init/sizing fixes (RMInstLoc modprobe single-source, FB info in KB, 256 MiB GART). --- wiki/.publish-manifest.json | 200 +++++++++++++++++++++---------------------- wiki/Execution-Frontier.md | 55 ++++++------ wiki/Execution-Plane.md | 26 +++--- wiki/FAQ.md | 26 +++--- wiki/Graphics-Execution.md | 123 ++++++++++++++------------ wiki/Host-Module.md | 22 +++-- wiki/OpenGL.md | 37 ++++---- wiki/Physical-GPU-Backend.md | 17 ++-- wiki/Project-Goals.md | 6 +- wiki/Project-Plan.md | 38 ++++---- wiki/Project-Status.md | 16 ++-- wiki/System-Overview.md | 27 +++--- 12 files changed, 316 insertions(+), 277 deletions(-) (limited to 'wiki') 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 -- cgit v1.2.3