diff options
| -rw-r--r-- | STATE-CURRENT.md | 56 | ||||
| -rw-r--r-- | wiki/.publish-manifest.json | 110 | ||||
| -rw-r--r-- | wiki/Execution-Frontier.md | 48 | ||||
| -rw-r--r-- | wiki/Execution-Plane.md | 21 | ||||
| -rw-r--r-- | wiki/FAQ.md | 18 | ||||
| -rw-r--r-- | wiki/Graphics-Execution.md | 58 | ||||
| -rw-r--r-- | wiki/Host-Module.md | 15 | ||||
| -rw-r--r-- | wiki/OpenGL.md | 33 | ||||
| -rw-r--r-- | wiki/Physical-GPU-Backend.md | 15 | ||||
| -rw-r--r-- | wiki/Project-Goals.md | 7 | ||||
| -rw-r--r-- | wiki/Project-Plan.md | 23 | ||||
| -rw-r--r-- | wiki/Project-Status.md | 35 | ||||
| -rw-r--r-- | wiki/System-Overview.md | 23 |
13 files changed, 263 insertions, 199 deletions
diff --git a/STATE-CURRENT.md b/STATE-CURRENT.md index 2fb0241..3cf5c30 100644 --- a/STATE-CURRENT.md +++ b/STATE-CURRENT.md @@ -1,5 +1,61 @@ # Open-IOV Current State +> **Snapshot: 2026-11-15 ~13:55 (SESSION 157 continued; HEAD `692a7eb0` == +> `vgpu/master`; the working tree carries only the campaign parameter file +> `tools/guest-diag/params-r1624.txt`; supersedes the 2026-11-14 ~10:55 entry +> below).** +> The graphics front moved two rungs since the last snapshot: the **MME +> multi-part gate closed** (multi-frame keep-windows; the part-launch poison +> eliminated; the 2799-word pack completes; `MME-PACK-REARM` fires; the fixed-CB +> region is aliased; the released calls run macros through to `DRAW_IAB`, +> `mac=0x22`), and the **DS stage image is authored and live**. The DS gate was +> pinned precisely: the synthesized prelude's j1 override is overwritten at +> execution time by the window's own later `0x2054` slot-1 bind pair, so the +> module now authors a 640-B VTG SPH at `family+0x900` (`SPH-AUTHOR ... first +> word 020a0481 w6=0000f00f`) and **rewrites the window's own slot-1 pair +> operand** to that page (`SPH-SLOT1-REWRITE old=0x01e00300 new=0x01e00900`, +> `692a7eb0`). The DS latch now reads the authored image for both vertex +> slots: `DS-IMAGE st0 w0=020a0481 code=ff007321 st1 w0=020a0481 +> code=ff007321`, and the DS value fell **`0x86040626 -> 0x84000420`** +> (`M_PIPE_STAGE TI` + SPH5/SPH10/SPH18) — reproduced on two boots (c749, +> c754). A hostile second-family window (a 640-B candidate with `w6=0`, whose +> range overlaps `+0x900`) is guarded: the candidate scan rejects `w6==0` and +> falls back to the builtin image (c748's `badf1201` poison class). +> +> **What remains is the draw-issue call and the stores.** The 728-B draw +> window's released macros are `0x33/0x39/0x1/0x0`; `DRAW_IAB` (`mac=0x22`) is +> not among them, so the draws still do not store (`output retirement wait: +> 0/1030`, `wrote=0`, `px0=0`). c716 ran `0x22` on a 324-B window whose held +> calls had been released by a cross-lane `MME-PACK-REARM` before the launch; +> the next levers are the 324-B window class or the window's own call/SA slot +> census. Fixes along the way: the pump atomic-sleep hoist (the r707e VAS +> verify moved out of `svc.chan_lock`, with `in_atomic()` guards — c741 showed +> the `BUG: scheduling while atomic`), the DDX ring-head tracker decode +> (`sema_ddx_tracker_auth`) plus the `sema_gr_scan_top` raise to 12 GiB, the +> default-off MME pack carrier, and `timeout -k` in the mission tooling. +> +> **X/GL start remains the run-rate limiter.** The per-boot first-generation +> lottery is frequent: c756 reached authoring/pack-parts only, c757/c758 saw no +> chain (and c753 none) — the follow-up A/B boots mostly did not survive X plus +> the draw-synth window. Remaining named gates: the stage type/context bits +> (SPH5/SPH10/SPH18), the `mac=0x22` call and stores, then the window/screen +> present. +> +> CUDA front unchanged (backgrounded while graphics holds the device; its +> 10-30 status stands): `41343c63` green (`victory_mail` `VADD bad=0` + +> `STATUS OK`; `vecadd_loop` 100 launches PASS); the fresh-boot battery's red +> class is D2H-stage with release-discipline fixes staged; the SESSION 143 +> Vulkan fence regression is not re-measured. +> +> Live at check (read-only): host uptime 3 h 53 m (fresh boot 2026-11-15 +> ~10:03); `vgsp` loaded (refcount 0) + mdev +> `c0ba3c27-7923-4131-a127-759315bd7e72` + QEMU cycle c758 (PID 41318, 12 GiB +> file-backed guest, kvmfr ivshmem, since 13:27); display-channel polls +> advancing (X alive); `gl_frames` 2/2 black (`px0=0`); `nvidia-smi` reports no +> GPU (the claim is held); pstore empty; no Xid/Oops; no reboot during the +> check. The open-iov.org wiki was refreshed alongside this snapshot (11 pages, +> revs 24155-24165; 68 pages audited, 0 problems). +> > **Snapshot: 2026-11-14 ~10:55 (SESSION 157 continued; HEAD `339da842` == > `vgpu/master`; working tree clean; supersedes the 2026-11-13 ~11:10 entry > below).** diff --git a/wiki/.publish-manifest.json b/wiki/.publish-manifest.json index eb6b430..284637d 100644 --- a/wiki/.publish-manifest.json +++ b/wiki/.publish-manifest.json @@ -64,11 +64,11 @@ }, "FAQ": { "file": "FAQ.wiki", - "new_revid": 24149, - "old_revid": 24138, - "source_sha": "e4f67b8e33bc3243", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:20Z", + "new_revid": 24157, + "old_revid": 24149, + "source_sha": "d3693204ba2e2047", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:13Z", "title": "FAQ" }, "GMMU Multi-Tenant Protection": { @@ -127,11 +127,11 @@ }, "Graphics Execution": { "file": "Graphics-Execution.wiki", - "new_revid": 24145, - "old_revid": 24134, - "source_sha": "7270693e3ff2d8f8", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:14Z", + "new_revid": 24158, + "old_revid": 24145, + "source_sha": "0bec237d98b7f442", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:13Z", "title": "Graphics Execution" }, "Guest Driver Lifecycle: A Field Guide": { @@ -226,11 +226,11 @@ }, "OpenGL": { "file": "OpenGL.wiki", - "new_revid": 24146, - "old_revid": 24135, - "source_sha": "d7cf31994f4f175f", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:16Z", + "new_revid": 24160, + "old_revid": 24146, + "source_sha": "08c583681fea9d54", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:14Z", "title": "OpenGL" }, "Performance": { @@ -244,38 +244,38 @@ }, "Physical GPU Backend and Guest Wiring": { "file": "Physical-GPU-Backend.wiki", - "new_revid": 24151, - "old_revid": 24140, - "source_sha": "21240b6fe98f105c", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:23Z", + "new_revid": 24161, + "old_revid": 24151, + "source_sha": "2fd146b3a6c7a2e2", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:15Z", "title": "Physical GPU Backend and Guest Wiring" }, "Project Goals": { "file": "Project-Goals.wiki", - "new_revid": 24152, - "old_revid": 24141, - "source_sha": "b1ce8081b88564b4", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:25Z", + "new_revid": 24162, + "old_revid": 24152, + "source_sha": "33b028e78eeec590", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:15Z", "title": "Project Goals" }, "Project Plan": { "file": "Project-Plan.wiki", - "new_revid": 24153, - "old_revid": 24142, - "source_sha": "0cb4313944736f12", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:26Z", + "new_revid": 24163, + "old_revid": 24153, + "source_sha": "49a3a98f1b8de158", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:16Z", "title": "Project Plan" }, "Project Status": { "file": "Project-Status.wiki", - "new_revid": 24144, - "old_revid": 24133, - "source_sha": "4ac8dcb2cf7e27ff", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:13Z", + "new_revid": 24164, + "old_revid": 24144, + "source_sha": "ed9bb8b3c0d564f5", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:16Z", "title": "Project Status" }, "RPC Message Format": { @@ -289,11 +289,11 @@ }, "System Overview": { "file": "System-Overview.wiki", - "new_revid": 24154, - "old_revid": 24143, - "source_sha": "3c1d9ea91e55ad1d", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:27Z", + "new_revid": 24165, + "old_revid": 24154, + "source_sha": "3fa9fc93813ae23a", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:17Z", "title": "System Overview" }, "Template:About message": { @@ -325,11 +325,11 @@ }, "The Execution Frontier": { "file": "Execution-Frontier.wiki", - "new_revid": 24147, - "old_revid": 24136, - "source_sha": "d20ea2d0fe872b06", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:17Z", + "new_revid": 24155, + "old_revid": 24147, + "source_sha": "1376a274a45b302c", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:11Z", "title": "The Execution Frontier" }, "The Guest Stack and CUDASW": { @@ -343,20 +343,20 @@ }, "The Host Module (vgsp.ko)": { "file": "Host-Module.wiki", - "new_revid": 24150, - "old_revid": 24139, - "source_sha": "01db3c718be37c24", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:22Z", + "new_revid": 24159, + "old_revid": 24150, + "source_sha": "cc9ef114a2cdcf4c", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:14Z", "title": "The Host Module (vgsp.ko)" }, "The vGSP Execution Plane (vEP)": { "file": "Execution-Plane.wiki", - "new_revid": 24148, - "old_revid": 24137, - "source_sha": "d9a53fc06056cb90", - "summary": "2026-11-14 status refresh: direct-GL submission decoded (macro-driven), push rescues land, draw-state push reaches the engine; MME multi-part completion is the wall; X start lottery is the limiter", - "timestamp": "2026-11-14T15:54:19Z", + "new_revid": 24156, + "old_revid": 24148, + "source_sha": "4303167a355bf82f", + "summary": "2026-11-15 status refresh: DS stage image authored+live (st0=st1=020a0481; DS 0x86040626->0x84000420, two boots); draw-issue mac=0x22 and stores remain; X start lottery limits the run rate", + "timestamp": "2026-11-15T19:09:12Z", "title": "The vGSP Execution Plane (vEP)" }, "UVM in the Guest": { diff --git a/wiki/Execution-Frontier.md b/wiki/Execution-Frontier.md index 5f0acfc..1425aaf 100644 --- a/wiki/Execution-Frontier.md +++ b/wiki/Execution-Frontier.md @@ -14,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` observed; `[wip]` partial; `[wall]` current blocker; theories are labelled as such. @@ -120,16 +119,20 @@ keep-windows land, the part-launch poison is eliminated (the client's own real fault; they are redirected to a mapped scratch slot), the 2799-word pack completes (2799/2799), the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND prelude intact -(84 words) and the DS stage VAs populated. What is missing is -**window/screen pixels through the NVIDIA path**: the DS stage-0/1 image is -the last named gate (the synthesized binds read `family+0x900`, which is zero -in the live family page, while the client's VTG SPH image is at -`family+0x600`), so the draw never stores (`wrote=0`, `px0=0`); the -window/screen present path is unproven, glxgears' window is black, and a -synchronous window draw wedges X on some boots. The per-boot binding and X -first-generation start lottery are now the dominant throughput limiter. The -guest Vulkan pipeline's inline-to-memory upload arm is its gap. The full -picture lives on [`Graphics-Execution.md`](Graphics-Execution.md). +(84 words) and the DS stage VAs populated. The **DS stage-0/1 image is now +authored and live**: a VTG SPH at `family+0x900` (`SPH-AUTHOR`, first word +`020a0481`) is what both vertex slots fetch (`DS-IMAGE st0=st1=020a0481 +code=ff007321`), the window's own later slot-1 bind is rewritten to it, and +the DS value fell `0x86040626 -> 0x84000420` (reproduced on two boots). What +is missing is **window/screen pixels through the NVIDIA path**: the remaining +DS bits are stage type/context (SPH5/SPH10/SPH18), the 728-B draw window's +released macros (`0x33/0x39/0x1/0x0`) do not include `DRAW_IAB` (`mac=0x22`), +so the draw still does not store (`wrote=0`, `px0=0`); the window/screen +present path is unproven, glxgears' window is black, and a synchronous window +draw wedges X on some boots. The per-boot binding and X first-generation +start lottery are now the dominant throughput limiter. 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 numbers remain planned. @@ -198,10 +201,12 @@ captures and reaches the engine. The MME chain now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes, the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND prelude intact and the DS stage VAs -populated. The remaining gap is the **DS stage-0/1 image** (the synthesized -binds read `family+0x900`, which is zero in the live family page, while the -client's VTG SPH image is at `family+0x600`; the `+0x600` bind is in flight) -so the draw stores. glxgears' window is black, a window draw wedges X on some +populated. The **DS stage-0/1 image is now authored and live** (a VTG SPH at +`family+0x900`, fetched by both vertex slots as `st0=st1=020a0481`; DS fell +`0x86040626 -> 0x84000420`, reproduced on two boots); the remaining bits are +stage type/context (SPH5/SPH10/SPH18), and the 728-B window's released macros +(`0x33/0x39/0x1/0x0`) do not include the `DRAW_IAB` call, so the draws still +do not store. glxgears' window is black, a window draw wedges X on some boots, and the per-boot binding plus X first-generation start lottery is the dominant throughput limiter ([`Graphics-Execution.md`](Graphics-Execution.md)). @@ -218,11 +223,12 @@ dominant throughput limiter 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** — finish the DS stage-0/1 image bind - (`family+0x600`) so the executed `DRAW_IAB` macro stores (`wrote>0`) at the - bound render target, then make the window/screen present land, and reduce - the per-boot binding/X start lottery so the proven off-screen frames become - window pixels; the lanes, the walls and the milestone ladder are on +5. **The graphics pixel frontier** — the DS stage image is authored and live + for both vertex slots; next get the draw-issue `DRAW_IAB` (`mac=0x22`) call + into the window so it stores (`wrote>0`) at the bound render target, then + make the window/screen present land, and reduce the per-boot binding/X + start lottery 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 7f6dd6b..567f41c 100644 --- a/wiki/Execution-Plane.md +++ b/wiki/Execution-Plane.md @@ -8,8 +8,7 @@ > when the two disagree, the docs tree wins. Front door: > [`../docs/README.md`](../docs/README.md). -Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` proven with the +Status: 2026-11-15, tree `master @ 692a7eb0`. 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. @@ -166,13 +165,17 @@ guest: push + QMD + GPFIFO entry + doorbell (BAR0 0x88704) chain now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes, the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the - SPH-BIND prelude intact (84 words) and the DS stage VAs populated. No - non-black **window/screen** frame has been produced through the NVIDIA path - yet: the remaining gate is the DS stage-0/1 image (the synthesized binds - read `family+0x900`, zero in the live family page, while the client's VTG - SPH image is at `family+0x600`), so the draw never stores (`wrote=0`, - `px0=0`); the window/screen present is unproven, and the per-boot binding - plus X first-generation lottery is the throughput limiter. Those are the + SPH-BIND prelude intact (84 words) and the DS stage VAs populated. The DS + stage-0/1 image is now authored and live: a VTG SPH at `family+0x900` + (first word `020a0481`) is fetched by both vertex slots + (`DS-IMAGE st0=st1=020a0481`; DS fell `0x86040626 -> 0x84000420`, + reproduced on two boots). No non-black **window/screen** frame has been + produced through the NVIDIA path yet: the remaining DS bits are stage + type/context (SPH5/SPH10/SPH18), the 728-B draw window's released macros + (`0x33/0x39/0x1/0x0`) do not include the `DRAW_IAB` call, so the draw never + stores (`wrote=0`, `px0=0`); the window/screen present is unproven, and the + per-boot binding plus X first-generation lottery is the throughput limiter. + Those are the named blockers. The lanes and the ladder are on [`Graphics-Execution.md`](Graphics-Execution.md). diff --git a/wiki/FAQ.md b/wiki/FAQ.md index 37179ee..1035c5f 100644 --- a/wiki/FAQ.md +++ b/wiki/FAQ.md @@ -5,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. +Status: 2026-11-15, tree `master @ 692a7eb0`. ## Project and positioning @@ -57,12 +56,15 @@ captures and reaches the engine. The MME chain now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes, the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND prelude intact and the DS stage VAs -populated. Window and screen pixels are still the wall: the remaining gate is -the DS stage-0/1 image (the synthesized binds read `family+0x900`, zero in -the live family page, while the client's VTG SPH image is at `family+0x600`), -so the draw never stores, glxgears' window is black, and the per-boot binding -plus X first-generation start lottery is the throughput limiter. The guest -Vulkan pipeline runs end to end (device +populated. The DS stage-0/1 image is now authored and live: a VTG SPH at +`family+0x900` (first word `020a0481`) is fetched by both vertex slots +(`st0=st1=020a0481`), and the DS value fell `0x86040626 -> 0x84000420` +(reproduced on two boots). Window and screen pixels are still the wall: the +remaining DS bits are stage type/context (SPH5/SPH10/SPH18), the 728-B draw +window's released macros (`0x33/0x39/0x1/0x0`) do not include the `DRAW_IAB` +call, so the draw never stores, glxgears' window is black, and the per-boot +binding plus X first-generation start lottery is the throughput limiter. 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 5fd4943..31ad576 100644 --- a/wiki/Graphics-Execution.md +++ b/wiki/Graphics-Execution.md @@ -12,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` observed end to +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` observed end to end; `[wip]` partially built; `[wall]` current blocker; `[target]` defined success state; `[planned]` designed, not built. @@ -124,14 +123,19 @@ fidelity: broke its kept/final count (`444ae2c1`), and the stage block was silently skipped by a double-counted budget; with both fixed the prelude emits 84 words and the DS stage VAs populate (one validated boot carried the full - post-REARM chain, `mac=0x22` and `DS 86040624`). The remaining gap is the - **DS stage-0/1 image**: the synthesized binds read `family+0x900` (zero in - the live family page) while the client's VTG SPH image is at - `family+0x600`, so binding `+0x600` is the in-flight change. Stores still - miss (`wrote=0`, `px0=0`), the window/screen present is still the frontier - (§6), and the per-boot binding lottery (the GL client usually rides the X - channel in indirect mode, and X start keeps a first-generation lottery) is - the throughput limiter. + post-REARM chain, `mac=0x22` and `DS 86040624`). The **DS stage-0/1 image is + now authored and live**: the module writes a VTG SPH at `family+0x900` + (`SPH-AUTHOR`, first word `020a0481`), rewrites the window's own later + `0x2054` slot-1 bind to the authored page (`SPH-SLOT1-REWRITE`), and the DS + latch reads the authored image for both vertex slots (`DS-IMAGE + st0=st1=020a0481 code=ff007321`; the DS value fell + `0x86040626 -> 0x84000420`), reproduced on two boots. The remaining DS bits + are stage type/context (SPH5/SPH10/SPH18); the `DRAW_IAB` (`mac=0x22`) call + does not run in the 728-B draw window, whose released macros are + `0x33/0x39/0x1/0x0`, so stores still miss (`wrote=0`, `px0=0`). The + window/screen present is still the frontier (§6), and the per-boot binding + lottery (the GL client usually rides the X channel in indirect mode, and X + start keeps a first-generation lottery) is the throughput limiter. ## 4. The channel and object picture @@ -190,9 +194,10 @@ swaps, and the GR backend no longer times out (the pair-close/pair-safe 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`), the X DDX/ScreenInit stability walls are closed, and the direct-GL ring/USERD - machinery is hardened. The MME pack now completes and the draw macro runs; - the next step is the DS stage image so the draw stores, then the - window/screen present path. + machinery is hardened. The MME pack completes and the draw macro runs, and + the authored DS stage image is live for both vertex slots; the next step is + the draw-issue macro (`mac=0x22`) and the stores, 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 @@ -212,12 +217,17 @@ requires it switched off, along with any external poke. MME overlay (`GR LAUNCH submitted` + OK). The 2799-word pack completes (2799/2799), the first `MME-PACK-REARM` fires (engine-global completion plus keep-done-across-recycle), the fixed-CB region is aliased, the - released calls run macros, and `DRAW_IAB` (`mac=0x22`) executes. The - prelude now emits 84 words and the DS stage VAs populate; the last named - gate is the **DS stage-0/1 image**: the synthesized binds read - `family+0x900` (zero in the live family page) while the client's VTG SPH - image is at `family+0x600`, so the `+0x600` bind is in flight. Stores - still miss (`wrote=0`, `px0=0`). Closed on the way: the QMD-carrier theory + released calls run macros, and `DRAW_IAB` (`mac=0x22`) executes on the 324-B + window class after a cross-lane `MME-PACK-REARM`. The **DS stage-0/1 image + is now authored and live**: a VTG SPH is written at `family+0x900` + (`SPH-AUTHOR`, first word `020a0481`) and the window's own `0x2054` slot-1 + bind is rewritten to it (`SPH-SLOT1-REWRITE`), so the DS latch reads + `st0=st1=020a0481 code=ff007321` and the DS value falls + `0x86040626 -> 0x84000420` (reproduced on two boots). The remaining gates + are the stage type/context bits (SPH5/SPH10/SPH18) and the draw-issue call: + the 728-B draw window's released macros are `0x33/0x39/0x1/0x0`, the + `DRAW_IAB` (`mac=0x22`) call does not run, and stores still miss + (`wrote=0`, `px0=0`). Closed on the way: the QMD-carrier theory (refuted: no QMD bit in the entry format, no QMD magic in 256 MiB BAR1) and RT routing (the clear targets RT0 while the window binds RT1; RT0 bind verified 16x with correct target/geometry, still 61/61 `wrote=0`). The @@ -288,8 +298,9 @@ requires it switched off, along with any external poke. | Multi-part MME keep-window: multi-frame windows admitted; the 2799-word pack completes (2799/2799) | `[live]` | | Part-launch poison eliminated: client `SET_REPORT_SEMAPHORE`/`SET_NOTIFY` targets redirected to a mapped scratch slot (49 cycles, 0 poison, 0 MMU faults) | `[live]` | | First `MME-PACK-REARM` captured (engine-global completion plus keep-done-across-recycle); fixed-CB region aliased; released calls run macros | `[live]` | -| `DRAW_IAB` (`mac=0x22`) executes; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` (single validated boot) | -| DS stage-0/1 image (synthesized binds read `family+0x900` = zero; the client's VTG SPH image is at `family+0x600`) | `[wall]` — `+0x600` bind in flight | +| `DRAW_IAB` (`mac=0x22`) executes on the 324-B window class after a cross-lane `MME-PACK-REARM`; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` | +| DS stage-0/1 image: a VTG SPH is authored at `family+0x900` and the window's own slot-1 bind rewritten to it; the DS latch reads `st0=st1=020a0481` (`0x86040626 -> 0x84000420`, two boots) | `[live]` | +| Remaining DS bits (stage type/context: SPH5/SPH10/SPH18); the 728-B draw window's released macros (`0x33/0x39/0x1/0x0`) do not include `DRAW_IAB` (`mac=0x22`); stores `wrote=0` | `[wall]` | | Window/screen present produces non-black window pixels | `[wall]` | | X screen-init first-generation lottery (`modeNum` parity; only an immediately-post-boot X passes DDX DMA init; dominant throughput limiter) | `[wip]` | | Non-black screen pixels from the emulated vGPU's 3D pipeline | `[wall]` | @@ -306,8 +317,9 @@ requires it switched off, along with any external poke. 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 client's draw-state push reaches the engine, the MME - program completes and the draw macro executes, but the DS stage image is - not yet right, so its draws do not store and the window stays black. + program completes and the draw macro executes, and the authored DS stage + image is fetched by both vertex slots, but the 728-B window's draw-issue + call and the stores are still missing, so the window stays black. * The engine-zero-write (NOWRITE) campaign is not a rendering result: it and the draw census together proved the submission is macro-driven (no method-grammar draw header exists), that RT routing is not the cause, and diff --git a/wiki/Host-Module.md b/wiki/Host-Module.md index 4557dbe..fa0b5a9 100644 --- a/wiki/Host-Module.md +++ b/wiki/Host-Module.md @@ -6,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes -> in the working tree. Tags: `[live]` observed with +> Status: 2026-11-15, tree `master @ 692a7eb0`. 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. @@ -142,10 +141,14 @@ engine with the golden MME overlay. The MME chain now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes, the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND prelude intact and the DS stage -VAs populated. The remaining GL gap is the DS stage-0/1 image (the synthesized -binds read `family+0x900`, zero in the live family page, while the client's -VTG SPH image is at `family+0x600`) and the window/screen present path, which -currently stays black or wedges X. +VAs populated. The DS stage-0/1 image is now authored and live: a VTG SPH at +`family+0x900` (`SPH-AUTHOR`, first word `020a0481`) is fetched by both vertex +slots, with the window's own slot-1 bind rewritten to it +(`SPH-SLOT1-REWRITE`; DS `0x86040626 -> 0x84000420`, two boots). The remaining +GL gap is the stage type/context bits (SPH5/SPH10/SPH18) plus the 728-B +window's draw-issue call (`mac=0x22` is not among its released macros), so the +draws still do not store, and the window/screen present path, which currently +stays black or wedges X. ## 6. Debug parameters diff --git a/wiki/OpenGL.md b/wiki/OpenGL.md index 3d04e8e..f07765f 100644 --- a/wiki/OpenGL.md +++ b/wiki/OpenGL.md @@ -12,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` observed with the +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` observed with the stock guest driver; `[wip]` partial; `[wall]` current blocker; `[target]` defined success state. @@ -103,8 +102,9 @@ Rated honestly, against the milestone ladder in the plan: | Multi-part MME keep-window: multi-frame windows admitted; the 2799-word pack completes (2799/2799) | `[live]` | | Part-launch poison eliminated: client `SET_REPORT_SEMAPHORE`/`SET_NOTIFY` targets redirected to a mapped scratch slot (49 cycles, 0 poison, 0 MMU faults) | `[live]` | | First `MME-PACK-REARM` captured (engine-global completion plus keep-done-across-recycle); fixed-CB region aliased; released calls run macros | `[live]` | -| `DRAW_IAB` (`mac=0x22`) executes; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` (single validated boot) | -| DS stage-0/1 image (synthesized binds read `family+0x900` = zero; the client's VTG SPH image is at `family+0x600`) | `[wall]` — `+0x600` bind in flight | +| `DRAW_IAB` (`mac=0x22`) executes on the 324-B window class after a cross-lane `MME-PACK-REARM`; SPH-BIND prelude emits 84 words; DS stage VAs populate | `[live]` | +| DS stage-0/1 image: a VTG SPH is authored at `family+0x900` and the window's own slot-1 bind rewritten to it; the DS latch reads `st0=st1=020a0481` (`0x86040626 -> 0x84000420`, two boots) | `[live]` | +| Remaining DS bits (stage type/context: SPH5/SPH10/SPH18); the 728-B draw window's released macros (`0x33/0x39/0x1/0x0`) do not include `DRAW_IAB` (`mac=0x22`); stores `wrote=0` | `[wall]` | | Window/screen present produces non-black screen pixels | `[wall]` | | X screen-init first-generation lottery (`modeNum` parity; only an immediately-post-boot X passes DDX DMA init; dominant throughput limiter) | `[wip]` | | 60 fps sustained, no forcing (M-GL4) | `[target]` | @@ -139,13 +139,16 @@ client's draw-state push opens, captures and reaches the engine. The MME chain now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes (2799/2799), the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the SPH-BIND -prelude intact (84 words) and the DS stage VAs populated. The remaining gates -are the **DS stage-0/1 image** (the synthesized binds read `family+0x900`, -which is zero in the live family page, while the client's VTG SPH image is at -`family+0x600`; the `+0x600` bind is in flight) so the draw stores, the -window/screen present path (glxgears' window is black and a window draw can -wedge X), and the per-boot binding/X first-generation start lottery — then the -first rendered screen frame. +prelude intact (84 words) and the DS stage VAs populated. The **DS stage-0/1 +image is now authored and live** (a VTG SPH at `family+0x900`, first word +`020a0481`, with the window's own slot-1 bind rewritten to it): the DS latch +reads `st0=st1=020a0481 code=ff007321` and the DS value falls +`0x86040626 -> 0x84000420`, reproduced on two boots. The remaining gates are +the stage type/context bits (SPH5/SPH10/SPH18), the draw-issue call (the +728-B window's released macros are `0x33/0x39/0x1/0x0`, not `DRAW_IAB`), so +the draw still does not store, the window/screen present path (glxgears' +window is black and a window draw can wedge X), and the per-boot binding/X +first-generation start lottery — then the first rendered screen frame. ## 6. What is not claimed @@ -154,10 +157,10 @@ first rendered screen frame. 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 client's draw-state push reaches the engine, the MME program - completes and the draw macro executes, but the DS stage image is not yet - right so the draw never stores, a synchronous window draw wedges X, and X - start retains a per-boot first-generation lottery. Those are the current - walls. + completes and the draw macro executes, and the authored DS stage image is + fetched by both vertex slots; but the 728-B window's draw-issue call and the + stores are still missing, a synchronous window draw can wedge X, and X start + retains a per-boot first-generation 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 ad033be..f050b1d 100644 --- a/wiki/Physical-GPU-Backend.md +++ b/wiki/Physical-GPU-Backend.md @@ -5,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` proven with the +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` proven with the stock guest driver; `[gated]` implemented default-off; `[wip]` partially built; `[wall]` current blocker; `[target]` planned end state. @@ -110,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 X + stock GLX are green (the DDX/ScreenInit stability walls are closed, X green >10 minutes), captured GL sections execute, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes and the `DRAW_IAB` macro executes, and the first non-black GPU-rendered frames are captured off-screen; the DS stage image (so the draw stores) and the window/screen present 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 (the DDX/ScreenInit stability walls are closed, X green >10 minutes), captured GL sections execute, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes, the `DRAW_IAB` macro executes, and the DS stage image is authored and live for both vertex slots (`st0=st1=020a0481`), and the first non-black GPU-rendered frames are captured off-screen; the remaining draw-issue `mac=0x22`/stores and the window/screen present are the frontier ([`Graphics-Execution.md`](Graphics-Execution.md)) | ## 7. The execution frontier @@ -131,10 +130,12 @@ the DDX 3D replay executes, captured GL sections execute on the engine, and the first non-black GPU-rendered frames are proven (500/500 off-screen frames per run plus captured videos); the direct-GL submission is fully decoded (macro-driven) and its draw-state push reaches the engine, the MME pack -completes and the `DRAW_IAB` macro executes, so the remaining graphics gates -are the DS stage image (so the draw stores), the window/screen present, and -the per-boot binding/X first-generation start lottery before non-black window -pixels. The remaining +completes, the `DRAW_IAB` macro executes, and the DS stage image is authored +and live for both vertex slots (`st0=st1=020a0481`; DS `0x86040626 -> +0x84000420`, two boots), so the remaining graphics gates are the stage +type/context bits plus the draw-issue call and stores, the window/screen +present, and the per-boot binding/X first-generation start lottery 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 6d9e15a..f041aa1 100644 --- a/wiki/Project-Goals.md +++ b/wiki/Project-Goals.md @@ -10,8 +10,7 @@ > [`Execution-Frontier.md`](Execution-Frontier.md) and > [`Graphics-Execution.md`](Graphics-Execution.md). -Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` working with the +Status: 2026-11-15, tree `master @ 692a7eb0`. 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. @@ -47,12 +46,12 @@ drivers, no license.** ## 3. Goals and their status -| Goal | What success looks like | Status (2026-11-14) | +| Goal | What success looks like | Status (2026-11-15) | |---|---|---| | 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, 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, the X DDX/ScreenInit stability walls are closed (X green >10 minutes), captured GL sections execute on the engine, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes and the `DRAW_IAB` macro 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 DS stage image is the last named gate before stores, the window/screen present is unproven, and the per-boot binding/X first-generation lottery is the throughput limiter ([`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, the X DDX/ScreenInit stability walls are closed (X green >10 minutes), captured GL sections execute on the engine, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes, the `DRAW_IAB` macro executes, the DS stage image is authored and live for both vertex slots (`st0=st1=020a0481`), 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 remaining DS stage type/context bits and the draw-issue `mac=0x22`/stores are the last named gates before window pixels, the window/screen present is unproven, and the per-boot binding/X first-generation lottery is the throughput limiter ([`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 293e6c6..9f8b55d 100644 --- a/wiki/Project-Plan.md +++ b/wiki/Project-Plan.md @@ -15,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[done]`, `[active]`, +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[done]`, `[active]`, `[ahead]` — the plan's own state vocabulary, distinct from the goal tags. ## 1. How the plan works @@ -41,11 +40,11 @@ itself: ## 2. The phases -| Phase | What it delivers | Exit gate | State (2026-11-14) | +| Phase | What it delivers | Exit gate | State (2026-11-15) | |---|---|---|---| | **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, X + stock GLX are green, the first non-black GPU-rendered frames and videos are captured, the X DDX/ScreenInit stability walls are closed, captured GL sections execute on the engine, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes and the `DRAW_IAB` macro executes; the remaining walls are the DS stage image (so the draw stores), the window/screen present, and the per-boot binding/X first-generation start lottery | +| **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, the X DDX/ScreenInit stability walls are closed, captured GL sections execute on the engine, the direct-GL submission is fully decoded (macro-driven, no classic draw header), the client's draw-state push reaches the engine, the MME pack completes, the `DRAW_IAB` macro executes, the DS stage image is authored and live for both vertex slots (`st0=st1=020a0481`); the remaining walls are the remaining DS stage type/context bits, the draw-issue `mac=0x22`/stores, the window/screen present, and the per-boot binding/X first-generation start lottery | | **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]` | @@ -67,13 +66,15 @@ Ranked, in dependency order: draw header), and the client's draw-state push reaches the engine with the golden MME overlay. The MME pack then completes and `DRAW_IAB` (`mac=0x22`) executes with the SPH-BIND prelude intact and the DS stage VAs populated. - The named walls are the **DS stage-0/1 image** (the synthesized binds read - `family+0x900`, zero in the live family page, while the client's VTG SPH - image is at `family+0x600`; the `+0x600` bind is in flight), the - window/screen present path (glxgears' window is black and a window draw - wedges X), the per-boot binding/X first-generation start lottery (even - `modeNum` required; now the dominant throughput limiter), and then - non-black window frames. + The **DS stage-0/1 image is now authored and live** (a VTG SPH at + `family+0x900`, first word `020a0481`; the window's own slot-1 bind is + rewritten to it; DS `0x86040626 -> 0x84000420`, two boots). The named walls + are the remaining DS stage type/context bits (SPH5/SPH10/SPH18) plus the + draw-issue call (the 728-B window's released macros are `0x33/0x39/0x1/0x0`, + not `DRAW_IAB`), the window/screen present path (glxgears' window is black + and a window draw wedges X), the per-boot binding/X first-generation start + lottery (even `modeNum` required; now the dominant throughput limiter), 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, diff --git a/wiki/Project-Status.md b/wiki/Project-Status.md index 445b00d..b63d6aa 100644 --- a/wiki/Project-Status.md +++ b/wiki/Project-Status.md @@ -10,8 +10,7 @@ > (the execution frontier). When this page and the docs disagree, the docs tree > wins. -Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` proven with the +Status: 2026-11-15, tree `master @ 692a7eb0`. 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. @@ -29,30 +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 X DDX idle-DMA/ScreenInit, USERD-latch lifetime, re-probe-thrash, Xorg kernel-mode-spin and flip-event walls were closed (X green for >10 minutes in a validated window); what remains is the per-boot **first-generation X start lottery**, which by 11-13/11-14 was the dominant throughput limiter for the graphics A/B runs (only an X started immediately after boot passes DDX DMA init; long stretches of dead starts, one green first-start boot). The display-capability seam is parameterised ([`Graphics-Execution.md`](Graphics-Execution.md)) | | Multi-tenant isolation (mdev per VM, per-context page directories) | `[wip]` device-level coexistence works — multiple mediated devices with different emulated VRAM sizes and multiple guests coexist (two guests demonstrated); per-guest execution isolation for simultaneous CUDA guests is in progress | -| OpenGL (3D graphics) | `[wip]` — the display/KMS stack registers, X and the stock NVIDIA GLX path are fully green (`glxinfo -B` returns 0 with OpenGL 4.6.0 and direct rendering; `glxgears` renders ~520 FPS with the emulated GPU's NVIDIA renderer), and the **first non-black GPU-rendered output** is proven: the pbuffer frame path produced 500/500 non-black 640x480 frames per run and captured videos (45.4 s on 2026-11-11; a 50 s 640x480 h264 capture on 2026-11-12). GZDoom reaches `V_Init: allocate screen` with its GL 4.6.0 context whenever the shared nvClip `modeNum` is even. **The direct-GL submission is now fully decoded:** no client push carries a method-grammar draw header — the channel's 9 NV906F entries tile one contiguous buffer and its per-frame work is carried as rewritten data-block blobs plus small state pushes (324/476/728 B) that invoke MME macros (the QMD-carrier hypothesis was tested and refuted). A content-gated FB-shadow rescue and a LOW-band rescue recover the recycled pushes: the client's draw-state push now opens a C597 section, is captured and marked for the verbatim 3D lane (the first direct-GL stream3d marks), and reaches the engine (`GR LAUNCH submitted`/`OK`, golden MME overlay accepted). **The MME chain now completes and executes the draw macro.** The multi-part -keep-window mechanism won multi-frame windows; the part-launch poison was -eliminated (the real fault was the client's own -`SET_REPORT_SEMAPHORE`/`SET_NOTIFY` writes to client VAs that the host scratch -page-table pool remaps — redirected to a mapped scratch slot; 49 cycles with -zero poison and zero MMU faults); the 2799-word pack completes (2799/2799); -engine-global completion plus keep-done-across-recycle produced the first -`MME-PACK-REARM`; the fixed-CB region is aliased; and the released calls run -macros through to **`DRAW_IAB` (`mac=0x22`)**. Two synthesized-prelude defects -were then fixed: the SPH-BIND prelude self-destructed because an auto-dropped -run broke its kept/final count (`444ae2c1`), and the stage block was silently -skipped by a double-counted budget; with both fixed the prelude emits 84 words -and the DS stage VAs populate (one validated boot carried the full post-REARM -chain, `mac=0x22` and `DS 86040624`). The remaining gap is the **DS stage-0/1 -image**: the synthesized binds read `family+0x900` (zero in the live family -page). Binding `family+0x600` was tried and poisons the DS (`badf1201`) because -the engine-visible alias shadow there is the client's SASS upload, not an SPH -header; the next step is authoring a VTG SPH at an engine-visible VA the -client does not overwrite (`family+0x900`). Stores still miss (`wrote=0`, -`px0=0`); the -window/screen present path is unproven; and the per-boot binding lottery (the -GL client usually rides the X channel in indirect mode, and X start keeps a -first-generation lottery) is the throughput limiter -([`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 direct-GL submission is now fully decoded:** no client push carries a method-grammar draw header — the channel's 9 NV906F entries tile one contiguous buffer and its per-frame work is carried as rewritten data-block blobs plus small state pushes (324/476/728 B) that invoke MME macros (the QMD-carrier hypothesis was tested and refuted). A content-gated FB-shadow rescue and a LOW-band rescue recover the recycled pushes: the client's draw-state push now opens a C597 section, is captured and marked for the verbatim 3D lane (the first direct-GL stream3d marks), and reaches the engine (`GR LAUNCH submitted`/`OK`, golden MME overlay accepted). **The MME chain now completes and executes the draw macro.** The multi-part keep-window mechanism won multi-frame windows; the part-launch poison was eliminated (the real fault was the client's own `SET_REPORT_SEMAPHORE`/`SET_NOTIFY` writes to client VAs that the host scratch page-table pool remaps — redirected to a mapped scratch slot; 49 cycles with zero poison and zero MMU faults); the 2799-word pack completes (2799/2799); engine-global completion plus keep-done-across-recycle produced the first `MME-PACK-REARM`; the fixed-CB region is aliased; and the released calls run macros through to **`DRAW_IAB` (`mac=0x22`)**. Two synthesized-prelude defects were then fixed: the SPH-BIND prelude self-destructed because an auto-dropped run broke its kept/final count (`444ae2c1`), and the stage block was silently skipped by a double-counted budget; with both fixed the prelude emits 84 words and the DS stage VAs populate (one validated boot carried the full post-REARM chain, `mac=0x22` and `DS 86040624`). **The DS stage-0/1 image is now authored and live**: a VTG SPH is written at `family+0x900` (`SPH-AUTHOR`, first word `020a0481`), the window's own later `0x2054` slot-1 bind is rewritten to the authored page (`SPH-SLOT1-REWRITE`), and the DS latch reads the authored image for both vertex slots (`DS-IMAGE st0=st1=020a0481 code=ff007321`; the DS value fell `0x86040626 -> 0x84000420`), reproduced on two boots. The remaining DS bits are stage type/context (SPH5/SPH10/SPH18), and the **`DRAW_IAB` (`mac=0x22`)** call does not run in the 728-B draw window (its released macros are `0x33/0x39/0x1/0x0`), so stores still miss (`wrote=0`, `px0=0`); the window/screen present path is unproven; and the per-boot binding lottery (the GL client usually rides the X channel in indirect mode, and X start keeps a first-generation lottery) is the throughput limiter ([`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]` | @@ -105,9 +81,10 @@ 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. The direct-GL submission is fully decoded, the MME multi-part program now -completes and the draw macro executes, but windowed/screen pixels remain the -frontier (the DS stage image is the last named gate before stores, and X start -keeps a first-generation lottery) — see [`OpenGL.md`](OpenGL.md). The +completes and the draw macro executes, and the DS stage image is authored and +live for both vertex slots; but windowed/screen pixels remain the frontier +(the draw-issue `mac=0x22` and the stores are the next named gates, and X +start keeps a first-generation lottery) — see [`OpenGL.md`](OpenGL.md). The risc-v-gsp-rm-debugger workbench ([`Riscv-GSP-RM-Debugger.md`](Riscv-GSP-RM-Debugger.md)) is the host-side tooling used to study the firmware side of that frontier. diff --git a/wiki/System-Overview.md b/wiki/System-Overview.md index 74adf71..8d85b10 100644 --- a/wiki/System-Overview.md +++ b/wiki/System-Overview.md @@ -7,8 +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-15, tree `master @ 444ae2c1` plus in-flight graphics changes in -the working tree. Tags: `[live]` proven with the +Status: 2026-11-15, tree `master @ 692a7eb0`. Tags: `[live]` proven with the stock guest driver; `[gated]` implemented default-off; `[wip]` partial; `[wall]` current blocker; `[target]` designed end state. @@ -157,15 +156,17 @@ RPC from the guest to "firmware": now completes and executes the draw macro: multi-frame keep-windows land, the 2799-word pack completes, the first `MME-PACK-REARM` fires, the fixed-CB region is aliased, and `DRAW_IAB` (`mac=0x22`) runs with the - SPH-BIND prelude intact and the DS stage VAs populated. The remaining gate - is the DS stage-0/1 image (the synthesized binds read `family+0x900`, zero - in the live family page, while the client's VTG SPH image is at - `family+0x600`), so the draw never stores (`wrote=0`, `px0=0`). The - window/screen present is unproven (a window draw can wedge X and glxgears' - window is black), and the per-boot binding plus X first-generation start - lottery is the dominant throughput limiter, so the remaining gate is the - DS stage image plus the window/screen present before the first non-black - window frame + SPH-BIND prelude intact and the DS stage VAs populated. The DS stage-0/1 + image is now authored and live: a VTG SPH at `family+0x900` (first word + `020a0481`) is fetched by both vertex slots (`st0=st1=020a0481`; DS + `0x86040626 -> 0x84000420`, two boots). The remaining gates are the stage + type/context bits (SPH5/SPH10/SPH18) plus the draw-issue call (the 728-B + window's released macros are `0x33/0x39/0x1/0x0`, not `DRAW_IAB`), so the + draw still does not store (`wrote=0`, `px0=0`); the window/screen present + is unproven (a window draw can wedge X and glxgears' window is black), and + the per-boot binding plus X first-generation start lottery is the dominant + throughput limiter, so the remaining gates are the draw-issue/store and + the window/screen present before the first non-black window frame ([`OpenGL.md`](OpenGL.md), [`Vulkan.md`](Vulkan.md)). ## 6. Where the detail lives |
