Repository navigation
fix(graphics): allow storage textures in reused depth memory - #2904
Conversation
|
Thank you for your interest in the project! We are sorry, but we cannot accept more PRs while we work through the existing backlog. This PR has been automatically closed and labeled "intake paused". This is not a judgment of the quality of your changes. |
|
I reopened this because it fixes the stop on main directly, so it doesn't have to wait for #425 or #454. Before it can go in:
|
|
Additional platform validation of standalone PR head Linux: passed — Arch Linux in WSL2 (kernel 6.6.87.2), GCC 16.2.1 20260810; CMake 4.3.1 / Ninja; Release, 1 checks, 0 failures, 0 CTest skips. Built the selected targets and dependencies; this is focused validation, not a full build or full-suite run. Checks: Command after building: This scope checks CPU-side behavior; no GPU execution result is claimed. Internal limitation: heap-mirror subcases returned early because the guest arena was not write-watched in WSL. Zero CTest skips does not include that early return. No title/gameplay validation. These results cover the standalone head, not a merge with current main. |
|
Hi! This PR currently conflicts with
It builds and If it helps, the rebased branch is available to pull: Feel free to ignore this if you'd rather rebase yourself. |
|
Tested on High on Life (PPSA15388 v01.120.000, Unreal Engine 4): this fixes its stop in the intro. With #425 and #454 ported, the run aborted the same way in 2 of 2 runs: #454's retirement doesn't catch it, because the storage write itself is what reuses the memory. With this PR's two commits on top, the intro plays through and the title reaches its main menu and a save load. That abort hasn't come back in any run since. DetailsSetup: CachyOS (Linux 7.2), RTX 4090 (NVIDIA 615.78), GCC, Release. One conflict with #425, in Tested and written by Claude (AI assistant) on a contributor's machine. |
|
Thanks for reopening and for the concrete validation requirements. I applied the conflict resolutions from blawesom's rebase (keeping DepthSurfaceHolds/HTILE helpers and the stencil16 test name) onto current main 1e8fff6 in an isolated worktree, preserving original authorship. Windows build is underway. I added the requested technical-debt disclosure and am validating a real GPU depth producer versus guest bytes in two reuse cases, with a matching sampled plane as the control. I will keep this draft until device checks and conventions pass. Thanks also to Tamalero for the independent High on Life cross-test; I am not treating its integrated result as standalone GPU validation. AI-assisted (Codex). |
3514a17 to
0beaafe
Compare
|
Updated to 0beaafe on main 1e8fff6; mergeable and marked ready. Windows graphics + depth fast-clear + new device reuse test passed 3/3. The new test has a real depth draw, matching sampled-plane control, and load/store readback for both incompatible storage descriptors. Restoring the old address-only guard makes it fail, restored source passes. TechnicalDebt now explicitly records the missing depth-to-guest writeback and descriptor-only limitation. The description distinguishes matching sampled depth from still-unsupported matching storage on this standalone branch. Thanks blawesom for the conflict resolutions and Tamalero for the cross-test. AI-assisted (Codex). |
|
CI limitation on the new head: conventions run 38139635004 fails during actions/checkout, before the checker executes, with fatal: No url found for submodule path 3rdparty/imgui in .gitmodules. The Build run 38139638334 has the same checkout failure in the Linux/Windows relinker jobs. Base main 1e8fff6 contains that gitlink without a .gitmodules entry; this PR does not change submodules. Local source/body conventions and the selected Windows device checks passed. CI is not green, and I am not claiming full CI validation. AI-assisted (Codex). |
0beaafe to
4fdbe91
Compare
|
After #3511 repaired main checkout, rebased again onto a11c8f7: head 4fdbe91. All six modified source/test/debt files are byte-identical to 0beaafe; selected Windows checks passed again, 3/3 in 5.56 s. Local source/body conventions pass and latest conventions CI is green. Remains ready for review. No full build CI claim. AI-assisted (Codex). |
|
Tested together with #425 on Demon's Souls (PPSA01342 v1.005, US), Windows, RTX 3060 (NVIDIA 591.86): The merge with #425 conflicts in Result: the AI-assisted: yes (Claude Code) |
|
Conflicts with main in While you're there, the TechnicalDebt line sits above |
4fdbe91 to
ef218ef
Compare
|
Rebased onto bca7a29, new head ef218ef. Kept Thanks fdfawef324 for the seven-run Demon's Souls cross-test and the exact #425 integration resolution. Updated description keeps the integrated-title evidence separate from standalone checks. AI-assisted: yes (Codex). |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
|
|
Linux cross-test with 007 First Light (PPSA11386 v01.018.000) on an integrated stack, not this standalone head. Setup: CachyOS, RTX 3080, NVIDIA 615.71.09, GCC 16.2.1, Release, bubblewrap sandbox. Stack. main 62f8758 plus:
Merge. I cherry-picked 4de5726, b9b83ce and ef218ef. There was one code conflict, in
Runs. First level load, same save and warm caches, one run each:
The 33 errors without this PR:
The sampled-texture path catches 31 of them and keeps its snapshot. For the other 2, a color target stays non-resident. The 2 same-extent R32_SFLOAT views are the D16 case in Tests. On the #2904 build of this stack, the 13 targets matching Not checked. The level doesn't render yet, so there's no visual check of these passes. AI-assisted: yes (Claude Code) |
What
A cached depth surface at a temporary GPU address can block a later storage texture whose extent or format cannot represent that depth plane. Match the newest surface on the same device by extent and plane format/raw depth layout before refusing actual depth/stencil storage access. Incompatible views use the ordinary storage path.
Rebased onto main bca7a29. Keep #419's RequireNoMultisampleTarget guard before the depth admission check. Move the existing limitation under TechnicalDebt's Functional section. Rendered depth is not written back to guest bytes, and descriptor compatibility does not establish allocation lifetime or writer ownership. Matching depth/stencil storage access still throws on this standalone branch; #425/#454 provide broader transfer/retirement and their integration must keep this admission check.
Tested
Windows 11 / GCC 15.2 / Release / SPIRV-Tools OFF / RTX 5070 Ti, Vulkan required, head ef218ef:
Checklist