fix #425: pack resident budget is a 1080p ceiling that scales with pixel count; an explicit Apply retries a failed selection
Live Holtburg at 2560x1440: the Low preset needed 67,368,164 resident bytes (screen-sized HDR/depth/ray targets are 44 MB of that) against an absolute 64 MiB ceiling that had only been validated at 1080p, so Options -> Apply fell back to the default path; every later Apply was then refused by the controller's failure memo, which treated the user's deliberate choice like automatic re-activation. RenderPackResidentBudget.Effective scales the declared 1080p figure by the viewport's pixel-count ratio (never below 1), still capped by the hardware MaxPackResidentBytes; both pack graphs use it and the performance-matrix tool judges its resident column by the same rule (contract test updated). RenderPackController.Request gains explicitUserChoice, which clears the memo for that selection; RenderPackSelectionBinding passes it on every display edge (Apply, including resolution changes) and keeps the memo for the startup request. Tests: RenderPackResidentBudgetTests (1080p/720p keep the declared ceiling, 1440p = 16/9x, 4K = 4x, hardware cap wins, zero extent rejected); controller explicit-retry; the binding test now proves the user's next Apply activates once the cause is gone. App hermetic lane 6,068/0 (Release). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
38def07edb
commit
132395e6f7
11 changed files with 250 additions and 8 deletions
|
|
@ -24,6 +24,44 @@ What does NOT go here:
|
|||
- Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending.
|
||||
- Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed.
|
||||
|
||||
## #425 — Options Apply "Atmospheric rendering" fell back to the default path and stayed locked out: Low's 64 MiB resident budget did not scale with resolution
|
||||
|
||||
**Status:** ✅ FIXED 2026-08-23 (found at the owner's VM3/VM6 gate launch).
|
||||
**Component:** rendering / render packs (Campaign AR budget contract + activation memo)
|
||||
|
||||
**Symptom:** live Holtburg, 2560×1440 fullscreen; Options → Atmospheric rendering →
|
||||
Apply → the panel snapped back to "acdream default". Log
|
||||
(`artifacts/owner-gate/launch2.log`): first Apply `Render pack preset 'low'
|
||||
needs 67368164 resident GPU bytes after materializing its scene-dependent
|
||||
shadow command buffers; the active pack budget is 67108864 bytes`, then every
|
||||
later Apply `This pack selection already failed for the current registration
|
||||
and will not be retried.`
|
||||
|
||||
**Two root causes:** (1) a preset's `MaxResidentGpuBytes` (Low 64 / Medium 128 /
|
||||
High 256 MiB) was applied as an absolute ceiling at any resolution, but the
|
||||
pack's resident set is dominated by screen-sized images (12 B/px HDR+depth plus
|
||||
ray/bloom intermediates): Low's targets are 25 MB at 1080p and 44 MB at 1440p,
|
||||
and live Holtburg's shadow command buffers took the total to 64.25 MiB — 0.4 %
|
||||
over. Medium would have failed the same way at 4K. The ceilings were only ever
|
||||
validated at 1080p. (2) The controller's failure memo keyed the user's explicit
|
||||
Apply and automatic re-activation identically, so one failed attempt locked
|
||||
that selection out until restart even after the cause (resolution, scene)
|
||||
changed.
|
||||
|
||||
**Fix:** `RenderPackResidentBudget.Effective` — the declared figure is the 1080p
|
||||
ceiling, scaled by the viewport's pixel-count ratio (never below 1) and still
|
||||
capped by the hardware's `MaxPackResidentBytes`; used by both pack graphs and
|
||||
mirrored in `tools/run-atmospheric-performance-matrix.ps1` so the tool judges
|
||||
1440p/4K rows by the same rule. `RenderPackController.Request(selection,
|
||||
explicitUserChoice: true)` clears the memo for that selection; the settings
|
||||
binding passes it for every display edge (the user's Apply, including a
|
||||
resolution change); startup keeps the memo. Tests:
|
||||
`RenderPackResidentBudgetTests`, `An_explicit_user_request_retries_a_selection_that_failed_earlier`,
|
||||
the extended `Selection_binding_activates_only_at_boundary_and_persists_failed_fallback`,
|
||||
and the matrix contract test. Not a workaround: the ceiling now means what the
|
||||
budget table implied ("at 1080p"), and a deliberate user action is allowed to
|
||||
try again.
|
||||
|
||||
## #424 — Client crashed on alt-tab out of exclusive fullscreen: zero-area frame reached `RenderPackActivationExtent.Validate`
|
||||
|
||||
**Status:** ✅ FIXED 2026-08-23 (same session it was found — the owner's VM6/VM3 gate launch).
|
||||
|
|
|
|||
|
|
@ -739,7 +739,7 @@ CPU-submission-bound. Fullscreen work may occupy currently idle GPU time, but
|
|||
it is not treated as free. Shadow cascades must protect the CPU submission
|
||||
path.
|
||||
|
||||
| Preset | Incremental GPU p50 / p99 at 1080p | Incremental render-CPU p50 / p99 | Pack-owned resident GPU memory |
|
||||
| Preset | Incremental GPU p50 / p99 at 1080p | Incremental render-CPU p50 / p99 | Pack-owned resident GPU memory **at 1080p** (scales with pixel count — `RenderPackResidentBudget.Effective`, #425) |
|
||||
|---|---:|---:|---:|
|
||||
| Low | ≤ 2.0 / 3.0 ms | ≤ 0.15 / 0.50 ms | ≤ 64 MiB |
|
||||
| Medium | ≤ 3.25 / 4.50 ms | ≤ 0.25 / 0.75 ms | ≤ 128 MiB |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue