fix(overhaul): integrate completed-frame capture and host visibility

This commit is contained in:
Erik 2026-09-05 13:09:55 +02:00
parent 0bd2ee7c22
commit 0ca10cf249
16 changed files with 1167 additions and 131 deletions

View file

@ -1092,8 +1092,18 @@ the exact retail `Client::UseTime` order. See the completed Slice 6 ledger and
`RenderFrameOrchestrator`. Its frozen graph begins per-resource frames and
render-thread uploads; draws world/PView and its two shared-alpha scopes;
renders portal and paperdoll private viewports, retained gameplay UI,
devtools, and screenshots; then closes the GPU-flight transaction in
`finally`. There is one UI stack: the retained tree.
and devtools; closes GPU measurement and exactly one GPU-flight transaction;
then captures the successfully submitted complete frame before CPU diagnostics,
shadow comparison, and lifecycle checkpoint publication. Zero-area and failed-
close frames do not consume queued captures. Vulkan retained-copy validity is
earned only by a successful submission containing that frame's copy, never by
allocation, resize, or command recording alone. The retained-copy command emits
an exact-range COPY/TRANSFER_WRITE to HOST/HOST_READ buffer dependency; capture
uses the existing device-idle completion wait before reading. This opt-in path
requires the actual capture allocation to be host-coherent and rejects an
unsupported noncoherent allocation before wait/read (AD-121); it does not change
shared heap selection or generic buffer invalidation. There is one UI stack:
the retained tree.
---

File diff suppressed because one or more lines are too long

View file

@ -759,6 +759,13 @@ are deferred, not passed. Continue crash/stability, dungeon lighting, object
placement and hand-item verification, with #476 capture as their immediate
prerequisite. C1a remains correctness-only. No main merge or G4 acceptance.
**#476 current (packet§55):** reviewed scratch02b707133 integrates with this
ledger, both lenses closed including narrow F1 re-review3. Root Release0W0E,
affected179/179, portableGPU307/307, two native mutations independently fail/
restore. #477/#480 preserved; AD-121 added with AD-118 still retired and92active
AD rows. Fresh integrated Release/tests and first-current-frame/resize/hand
graphics next, not yet PASS. No FPS work or main merge.
## 14. Risk register (condensed)
- **R1 second scene graph.** Graph records own only topology/membership facts;

View file

@ -81,3 +81,55 @@ capture evidence. Both toggles use the real input action; no attack or inventory
mutation is requested. Gate after accepted integration and green Release, with
both clients absent, ACE up, agent builds/tests paused, one runner invocation,
same session-v10/High profile, core+sync validation retained to guard #477 merge.
## F1 lead completion and independent verification
James froze the two F1 source/test edits before compiling or running them;
no implementer F1 gate is claimed. Root's first Release build found one test
handle type error CS1503 (uint passed to Device's nint constructor). Root
corrected only that cast, then six capture tests passed. Root completed the
bounded architecture/AD-121 documentation; no other source behavior changed.
Root independently read the actual native copy/barrier/read methods and all
four added tests. RecordBackbufferCapture emits an image transition, real
copy and exact-buffer/range COPY/TRANSFER_WRITE→HOST/HOST_READ dependency in
that order. Copy-off/mismatch emits none. Actual CaptureBackbuffer reads and
swizzles distinct coherent mapped bytes after one native idle wait; its
noncoherent allocation is rejected before wait/read. These are intercepted
native-call witnesses, not physical GPU results.
Two separate root production mutations, with exact raw restoration:
- Omit the real host-read barrier call: actual native command collection
fails expected3/actual2 (image barrier and copy only).
- Invert the actual coherence guard: the noncoherent witness fails because
the expected NotSupportedException is not thrown.
After restoration full Release0W0E4.98s; the exact twelve prior affected
classes give179PASS/0FAIL/0SKIP (175 plus four native witnesses). Portable GPU
filter `FullyQualifiedName~AcDream.App.Tests.Rendering.Gpu&Lane!=Vulkan`
gives307PASS/0FAIL/0SKIP on this pre-#477 scratch base. Do not compare this
count to integrated#477's314 as a regression: that repair adds different tests.
Existing early-capture/premature-validity pins remain in the affected run;
their original root mutations above were not repeated again for F1.
| Frozen F1 item | SHA256 |
| --- | --- |
| Resources.cs | 8782D8DDE8201FFCAFE0DFD55E949E5E058F6CEE20A0774D2B24989A4613070E |
| VulkanBackbufferCaptureValidityTests.cs | BFAE818A74BC4C4C09F643BE9885ED3F42B42CDA21CC225AF2D8B80FDF95E541 |
| Architecture | 06543E3145D26D3576BF8770F22C895DD0F6DB69F74B7CFDCCA305E525E4BFF2 |
| Divergence register | 61E8AAE1D8A483A817B77114E51ED93BD299369344F8689126532C0353BBD37C |
| artifacts/476-root/f1-m1/root-476-f1-m1.trx | 7EF4A88E0B579BC4009E441D3E63DA4299F05CF264AE93E375C78E556CE9509B |
| artifacts/476-root/f1-m2/root-476-f1-m2.trx | FC24D369242E0179756AF5F0B342EB204F27DD6FBBFF4C58A37704D59956548C |
| artifacts/476-root/f1-final/root-476-f1-affected.trx | BB98BEB2108981AC0453175AFC646D8F4A38FDF491E25B355CF5CE6C0541D232 |
| artifacts/476-root/f1-gpu/root-476-f1-gpu.trx | E84997D224244F06CA2B980239FD7C22D8437670D97472B6053449CE316690CC |
Wegener's narrow F1 re-review PASS, no findings; unchanged broad retail review1
was not restarted. Reviewed scratch02b70713338f5513a2fd19c26c90298e474f57dc
lands with this evidence. Nine nonoverlapping source/test blobs are identical;
the two Vulkan partials differ only by the preserved#477 changes, independently
read in the integration diff. Architecture preserves#477/#480; AD-121 lands
alongside preserved AD-118 retirement, counted105total/13retired/92active.
Fresh integrated Release/tests and current-frame graphical PASS are still owed.
Owner12:53 FPS deferral remains binding; no profiling/optimization is part
of this capture repair or its graphical correctness run.

View file

@ -4840,3 +4840,21 @@ assertion, isolate the setup difference, and do not weaken/pin a golden over
the mismatch. No production change follows from it without a separate proof.
G4 remains FAIL; FPS deferral is not acceptance of the other owner findings.
No merge to main.
## 55. Completed-frame capture accepted for integration
#476 reviewed scratch02b707133 lands with this ledger. Rawls retail review1
PASS; Wegener production2's inherited host-visibility gap is closed by F1 and
narrow re-review3 PASS. Root six native-state tests, affected179/179 and
portableGPU307/307 on scratch; full Release0W0E; two actual missing-barrier/
coherence mutations fail as intended and restore exactly. Root corrected one
test handle cast before compiling; no implementer F1 execution is claimed.
476-lead-verification.md gives the exact source/TRX seals and scope limits.
Integration preserves#477 GPU synchronization and#480 held-item publication.
AD-121 records opt-in capture's explicit noncoherent-memory rejection; combined
register105total/13retired/92active preserves C1c's AD-118 retirement. Root's
fresh integrated Release/tests and first-request/two-resize/held-item graphics
are next. Rawls confirms no command active; all agent builds/tests are paused
for the graphical window. Owner FPS deferral still applies. No graphical PASS
or G4 acceptance is inferred from the offline checks.