summaryrefslogtreecommitdiffstats
path: root/wiki/Graphics-Execution.md
diff options
context:
space:
mode:
Diffstat (limited to 'wiki/Graphics-Execution.md')
-rw-r--r--wiki/Graphics-Execution.md104
1 files changed, 57 insertions, 47 deletions
diff --git a/wiki/Graphics-Execution.md b/wiki/Graphics-Execution.md
index 7879505..b221180 100644
--- a/wiki/Graphics-Execution.md
+++ b/wiki/Graphics-Execution.md
@@ -12,7 +12,8 @@
> [`../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-14, tree `master @ 339da842`. Tags: `[live]` observed end to
+Status: 2026-11-15, tree `master @ 444ae2c1` plus in-flight graphics changes in
+the working tree. Tags: `[live]` observed end to
end; `[wip]` partially built; `[wall]` current blocker; `[target]` defined
success state; `[planned]` designed, not built.
@@ -109,17 +110,28 @@ fidelity:
verbatim 3D lane (the first direct-GL stream3d marks), and with the golden
MME overlay satisfying the prelude gate it **reaches the engine**
(`GR LAUNCH submitted` + OK, MME-PRELUDE pack 1701 IR words, MME-GOLDEN
- slot 0 accepted). The current wall is **MME macro completion**: the beef
- lane's 2799-word packed program cannot complete inside its <=2048-word
- block together with the 156-400-word draw window, so the load-only carrier
- gate drops every beef window and `live_gen` never promotes; a multi-part
- keep-window mechanism is committed default-off (`b44694b5`) and enabled in
- the campaign parameters (`339da842`), with the A/B pending. RT routing was
- tested and refuted as the store cause (RT0 bind verified 16x, still
- `wrote=0`), and the `CODESRC` fault-park class is prevented (a suspect
- program page is relocated to the engine-mapped window-0 shadow;
- `17c7ed7c`). The window stays black; the window/screen present is still the
- frontier (§6).
+ slot 0 accepted). The MME chain then advanced from the multi-part gate to
+ **draw-macro execution**: 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 remapped by the host scratch page-table pool — 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) 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.
## 4. The channel and object picture
@@ -189,30 +201,29 @@ requires it switched off, along with any external poke.
## 6. Where the frontier is (ranked walls)
-1. **Direct-GL MME macro completion** `[wall]`. Delivery to the lane is no
- longer the gap: the submission is fully decoded (nine NV906F entries tile
- one contiguous buffer; no method-grammar draw header exists; the per-frame
- work is data-block blobs plus real state pushes that invoke MME macros),
- the recycled pushes are recovered by the content-gated FB-shadow and
- LOW-band rescues, the client's 324-B draw-state push opens a `C597`
- section, is captured and marked for the verbatim 3D lane, and reaches the
- engine with the golden MME overlay (`GR LAUNCH submitted` + OK,
- MME-PRELUDE pack 1701 IR words, MME-GOLDEN slot 0 accepted). The wall is
- the multi-part program gate: the beef lane's 2799-word packed MME program
- cannot complete inside a <=2048-word block together with its 156-400-word
- draw window, so the load-only carrier gate drops each beef window
- (`MME-LOAD-ONLY carrier ... window=156 ... dropped`) and `live_gen` never
- promotes. A multi-part keep-window mechanism is committed default-off
- (`b44694b5`) and enabled in the campaign parameters (`339da842`); the A/B
- is pending. Two hypotheses were closed on the way: the QMD-carrier theory
- (refuted: the entry format has no QMD bit, the blob is not a QMD, no QMD
- magic in 256 MiB BAR1) and RT routing (the clear targets RT0 while the
- window binds RT1; binding RT0 is verified 16x with correct target/geometry
- but the store still misses, 61/61 `wrote=0`) — the store wall is macro/
- front-end execution, not reachability. Related reliability result: the
+1. **Direct-GL MME draw-macro execution and stores** `[wall]`. Delivery to
+ the lane and the multi-part program gate are closed: the submission is
+ fully decoded (nine NV906F entries tile one contiguous buffer; no
+ method-grammar draw header exists; the per-frame work is data-block blobs
+ plus real state pushes that invoke MME macros), the recycled pushes are
+ recovered by the content-gated FB-shadow and LOW-band rescues, the
+ client's 324-B draw-state push opens a `C597` section, is captured and
+ marked for the verbatim 3D lane, and reaches the engine with the golden
+ 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
+ (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
`CODESRC` fault-park class is prevented by relocating a suspect program
- page to the engine-mapped window-0 shadow (`17c7ed7c`; one validated boot:
- 31 relocations, 51 GR launches, 79 GP_GET advances, 0 `FAULT_PDE`, 0
+ page to the engine-mapped window-0 shadow (`17c7ed7c`; validated boot: 31
+ relocations, 51 GR launches, 79 GP_GET advances, 0 `FAULT_PDE`, 0
`WEDGE-REARM`, `backend_ok=35`).
2. **Window/screen present** `[wall]`. The pbuffer and off-screen frame paths
are proven (`pixel=ff0000ff`, 500/500 non-black frames, captured videos),
@@ -236,14 +247,9 @@ requires it switched off, along with any external poke.
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.
-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
+ the draw stores, 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
@@ -279,7 +285,11 @@ requires it switched off, along with any external poke.
| 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]` |
| 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 MME macro completion (multi-part keep-window: the 2799-word packed program + 156-400-word draw window cannot fit the <=2048-word block; `live_gen` never promotes) | `[wall]` — mechanism committed `b44694b5` (default off) and enabled in params (`339da842`); A/B pending |
+| 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 |
| 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]` |
@@ -295,9 +305,9 @@ requires it switched off, along with any external poke.
* 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 client's draw-state push reaches the engine, but the
- MME macro program does not complete, so its draws do not store and the
- window stays black.
+ 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.
* 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