Skip to content

fix(agc): fault image table entries the device or guest memory cannot hold - #6481

Open
fdfawef324 wants to merge 9 commits into
boykopovar:mainfrom
fdfawef324:fix/agc-image-table-entry-limits
Open

fdfawef324 wants to merge 9 commits into
boykopovar:mainfrom
fdfawef324:fix/agc-image-table-entry-limits

Conversation

@fdfawef324

@fdfawef324 fdfawef324 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

Resolving a bindless image table creates textures before the shader selects an entry. Descriptors over the sampled-image or heap limits, and surfaces in unregistered host memory, could therefore reach image creation even when the entry was never used.

Validate registered guest-memory overlap, the ordinary sampled image's format combination, extent, layers and minimum footprint before reading its surface. Refused entries fault when selected. A final host/device memory refusal from an entry's own snapshot image or upload allocation also becomes an entry fault; that incomplete table is resolved again on its next use. Other errors from the sampled-texture lookup, including device loss and submission failure, propagate.

The rebase preserves main's multisampleViewType argument, selected-column range handling and scoped test registrations. The ordinary snapshot still calls AllocateImageMemory: pool trim, texture reclaim, retry and allowed host fallback run before an eventual allocation refusal is classified. ownTextureMemory wraps that complete operation, rather than replacing it with raw allocation. It also wraps the snapshot's own image creation/binding, upload allocations and ordinary sRGB expansion. Storage-copy expansion and recorder submission failures retain their existing propagation.

The historical 7,520,387,072-byte Demon's Souls allocation was already attempting host heap 1 when its upload allocation failed after reclaim (initialResult=-2, two attempts). Main's device-to-host fallback does not create additional host-heap capacity. This explains why a final refusal can still reach the entry classifier; the historical run is not a new execution on this head, and does not show whether that entry would be selected. No title memory, FPS or first-level improvement is claimed.

Limits recorded in technical debt: format preflight queries the original sampled format with TRANSFER_DST | SAMPLED. It does not separately preflight the sRGB upload's additional TRANSFER_SRC usage or its secondary mutable RGBA8 expansion combination. The written-entry storage lookup retains its inherited std::runtime_error catch. Selecting a driver-refused entry remains a documented emulation limitation.

Tested

Exact clean candidate 1be24da14e8a0e9afecfa4f558018ce19d1bd895, rebased on 84c1a4d9a26429cb483ec963195cff8ef25d128b; Windows Server 2025, MinGW GCC 15.2 Release/O3. Seven affected targets build. CPU/mock agc_driver_graphics and agc_driver_image_table_cache pass, 2/2 in 10.84 seconds. The selected entry-validation suite also passes, with its arena/write-watch checks exercised.

The recording mock keeps image identity across allocation retries. A temporary first refusal must recover and serve the entry. Persistent image/upload refusals must fault only that entry, release its resources, allow the next entry, and retry resolution on later use. Device loss and submission failure retain typed error propagation. The ordinary sampled sRGB expansion has separate allocation-refusal and device-loss controls.

Two selective CPU regression controls fail at their intended assertions: removing only the sRGB expansion classifier fails the expanded sampled image classified its allocation failure incorrectly; replacing only the normal snapshot's common allocator with raw allocation fails the sampled image did not retry its initial device-memory refusal. Build plus selected-test feedback was 46.08 and 41.40 seconds respectively. Final source was restored and rebuilt clean. These controls test allocation contracts with mocks; they do not measure title performance.

Fresh managed-slot Vulkan checks on the exact candidate: agc_driver_bindless_images, agc_driver_image_sint8, agc_driver_image_table, agc_driver_image_table_cache_bounds and agc_driver_image_table_reuse, 5/5 pass in 5.22 seconds, no skipped cases or reported skipped subcases, with Vulkan required and shader caching disabled. Actual binaries/libraries were hash-checked before and after. Independent source review and 308 readiness pins were checked. Generated TraceRevision is 1be24da14e8a, dirty 0; natural shader SourceVersion is 0xb9fb57da52370e78.

Conventions pass against fetched main 676d423968a1a8fcc79c6247020ce22090a8e0d4; a clean merge-tree into that main was checked separately. All execution results above belong to the exact candidate, not the merge tree. Earlier RTX 3060 results and @nicolasfalesy's Linux/lavapipe composition report remain evidence for their recorded older heads. No new Linux, full-suite, title or real exhausted-heap result is claimed.

Checklist

  • Based on main; no other open PR implements these entry checks (nearby image-table reuse/registration work is preserved)
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw; silent stubs are listed in their library's technical debt (no new stub)
  • No notes, investigation .md files or images added to the repository
  • New third-party code is a submodule built from source (none added)
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none demonstrated on this head
  • GPUs tested: NVIDIA GeForce RTX 3060 12 GB, driver 591.86 (32.0.15.9186), Vulkan 1.4.325, Windows Server 2025 10.0.26100
  • AI-assisted: yes (Claude Code and Codex)

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Co-Authored-By: Codex noreply@openai.com

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 862 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 1896 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 2434 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4448 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4472 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5372 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6108 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6146 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6340 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6548 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6615 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 6743 docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6913 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6918 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6926 docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6973 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6987 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6989 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6995 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7002 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7085 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/GraphicsTests.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 7395 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7449 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
docs/dev/debt/libSceAgcDriver.md
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7622 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
core/libs/prx/libSceAgcDriver/tests/execution/ImageSint8.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7668 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7689 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 8089 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8212 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8246 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/GraphicsTests.hpp
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8707 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8748 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 8939 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 8963 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9020 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9289 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 9318 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9335 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9356 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9457 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 9489 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
core/libs/prx/libSceAgcDriver/tests/execution/ImageSint8.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9592 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9604 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9633 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 9671 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9672 docs/dev/debt/libSceAgcDriver.md
PR 9673 docs/dev/debt/libSceAgcDriver.md
PR 9674 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9675 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9700 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9712 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9742 docs/dev/debt/libSceAgcDriver.md
PR 9748 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9749 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 9790 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 9852 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 9875 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9884 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 9891 docs/dev/debt/libSceAgcDriver.md
PR 9892 docs/dev/debt/libSceAgcDriver.md
PR 9893 docs/dev/debt/libSceAgcDriver.md
PR 9895 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9897 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9898 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9915 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9950 docs/dev/debt/libSceAgcDriver.md
PR 9969 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 9999 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10000 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10025 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10043 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10049 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10064 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10069 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10141 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10159 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
core/libs/prx/libSceAgcDriver/tests/execution/ImageSint8.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10249 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10256 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10351 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10359 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10443 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10469 docs/dev/debt/libSceAgcDriver.md
PR 10472 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10489 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10492 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10497 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10556 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 10656 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 10668 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 10743 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10757 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10779 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10867 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10894 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 10920 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11104 docs/dev/debt/libSceAgcDriver.md
PR 11265 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 11346 docs/dev/debt/libSceAgcDriver.md
PR 11351 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11444 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 11485 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 11551 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11557 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11566 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 11587 docs/dev/debt/libSceAgcDriver.md
PR 11825 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11901 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 11920 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 11995 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11998 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12066 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12070 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12120 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
docs/dev/debt/libSceAgcDriver.md
PR 12157 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 12323 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12324 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12452 docs/dev/debt/libSceAgcDriver.md
PR 12565 docs/dev/debt/libSceAgcDriver.md
PR 12567 docs/dev/debt/libSceAgcDriver.md
PR 12568 docs/dev/debt/libSceAgcDriver.md
PR 12575 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 12617 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12662 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12745 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12746 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12764 docs/dev/debt/libSceAgcDriver.md
PR 12792 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12813 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12827 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 12828 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12840 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12855 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 12904 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
docs/dev/debt/libSceAgcDriver.md
PR 12921 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 12944 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 12980 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 12994 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13021 docs/dev/debt/libSceAgcDriver.md
PR 13023 docs/dev/debt/libSceAgcDriver.md
PR 13044 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13131 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13145 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 13146 docs/dev/debt/libSceAgcDriver.md
PR 13147 docs/dev/debt/libSceAgcDriver.md
PR 13148 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13151 docs/dev/debt/libSceAgcDriver.md
PR 13169 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13248 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13251 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13262 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 13263 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 13474 docs/dev/debt/libSceAgcDriver.md
PR 13599 docs/dev/debt/libSceAgcDriver.md
PR 13646 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13707 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 13793 docs/dev/debt/libSceAgcDriver.md
PR 13796 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 13809 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13858 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13863 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13920 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13928 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
core/libs/prx/libSceAgcDriver/tests/execution/ImageSint8.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13929 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/libs/prx/libSceAgcDriver/tests/execution/BindlessImages.cpp
core/libs/prx/libSceAgcDriver/tests/execution/ImageSint8.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13963 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13991 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 13994 docs/dev/debt/libSceAgcDriver.md
PR 14005 docs/dev/debt/libSceAgcDriver.md
PR 14018 docs/dev/debt/libSceAgcDriver.md
PR 14032 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14042 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 14051 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 14076 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14085 docs/dev/debt/libSceAgcDriver.md
PR 14212 docs/dev/debt/libSceAgcDriver.md
PR 14219 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14220 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14243 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14248 docs/dev/debt/libSceAgcDriver.md
PR 14261 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 14262 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 14263 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 14265 docs/dev/debt/libSceAgcDriver.md
PR 14296 docs/dev/debt/libSceAgcDriver.md
PR 14302 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14311 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14344 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
docs/dev/debt/libSceAgcDriver.md
PR 14473 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14561 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14621 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14628 core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14709 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 14815 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14838 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14853 core/libs/prx/libSceAgcDriver/tests/execution/ImageTable.cpp
PR 14868 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
PR 14871 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14880 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 14891 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 14909 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 14940 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 14943 core/libs/prx/libSceAgcDriver/Graphics/include/GuestBufferMemory.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14944 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14950 docs/dev/debt/libSceAgcDriver.md
PR 14963 docs/dev/debt/libSceAgcDriver.md
PR 14964 docs/dev/debt/libSceAgcDriver.md
PR 14976 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 14982 docs/dev/debt/libSceAgcDriver.md
PR 14993 docs/dev/debt/libSceAgcDriver.md
PR 15002 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 15015 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 15058 core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp
docs/dev/debt/libSceAgcDriver.md
PR 15059 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp

EagleBearerYS added a commit to EagleBearerYS/AnyPS5 that referenced this pull request Oct 15, 2026
@fdfawef324

Copy link
Copy Markdown
Contributor Author

P2 source-review finding at e441ee7bc13c4f2136a8a349ce197abafe79fdcf: sampledImageFormatLimits caches nullopt when the query explicitly returns VK_ERROR_FORMAT_NOT_SUPPORTED (Texture.cpp:259–277). RequireSampledImageWithinDeviceLimits then falls back to broad VkPhysicalDeviceLimits (295–306). An otherwise valid, registered 8x8 entry can pass and reach cachedTexture / vkCreateImage with the same format, type, optimal tiling, transfer-destination/sampled usage and create flags. A missing query provider already throws; this nullopt represents an explicit rejection.

The Vulkan query contract defines that result as an unsupported combination. Broad dimension/layer limits cannot establish support for it; see also image-creation support requirements.

Please turn the explicit unsupported result into an ordinary descriptive entry refusal before creation. resolveImageTables can then record its per-entry fault through the existing runtime_error catch, while retaining VulkanError propagation for genuine driver failures.

Suggested regression in the existing recording mock: return VK_ERROR_FORMAT_NOT_SUPPORTED for a registered 8x8 entry, use a fresh physical-device identity to avoid a cached positive result, and assert that the query ran, the table element is rejected, and no vkCreateImage call was recorded. The present stub always returns success.

Source/specification review only. A native regression patch was prepared and checked for applicability, but remains uncompiled/unexecuted. No GPU failure or connection to the observed title device loss is established.

fdfawef324 added a commit to fdfawef324/AnyPS5 that referenced this pull request Oct 15, 2026
…ported

RequireSampledImageWithinDeviceLimits fell back to VkPhysicalDeviceLimits
when vkGetPhysicalDeviceImageFormatProperties reported
VK_ERROR_FORMAT_NOT_SUPPORTED for the format, type, usage and create flags
of the entry's sampled image. A small entry in registered memory then passed
and the texture lookup called vkCreateImage with that combination, which the
device reports unsupported (VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251).
Such an entry is now refused before its guest memory is read, naming the
format, type and flags, and faults when selected like the other refused
entries; the device-wide limits are no longer consulted. Other query
failures still propagate as VulkanError.

Test: agc_driver_graphics (tests/ImageTableEntryValidation.cpp) resolves a
registered 8x8 RGBA8 entry while the mock's format query reports
VK_ERROR_FORMAT_NOT_SUPPORTED and checks that the query ran, the entry
faults and no image is created. Without this change it fails with "an 8x8
registered texture whose exact image combination is unsupported: the entry
was served instead of faulting when selected; images created: 8x8x1/1
layers". Reported in review of boykopovar#6481.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fdfawef324

Copy link
Copy Markdown
Contributor Author

Confirmed at e441ee7: sampledImageFormatLimits cached nullopt for VK_ERROR_FORMAT_NOT_SUPPORTED, and RequireSampledImageWithinDeviceLimits then compared the entry with VkPhysicalDeviceLimits, so a registered 8x8 entry reached vkCreateImage with the combination the query had rejected.

Fixed in c578222: an unsupported combination is now refused before the entry's guest memory is read (the message names the VkFormat, image type and create flags), through the existing runtime_error path, so the entry faults when selected like the other refusals. The device-wide limits are no longer consulted. Any other query result still goes through Check and propagates as VulkanError.

Your regression is in tests/ImageTableEntryValidation.cpp as testUnsupportedImageCombination, unchanged apart from whitespace. Before the fix it fails with an 8x8 registered texture whose exact image combination is unsupported: the entry was served instead of faulting when selected; images created: 8x8x1/1 layers; with it, agc_driver_graphics and the 73 image-related AGC tests pass on the RTX 3060 (591.86, Windows Server 2025). The technical debt entry and the PR body's Tested section are updated.

AI-assisted: yes

@fdfawef324

Copy link
Copy Markdown
Contributor Author

ds-main5-c01: one image table entry's out-of-memory error stopped Demon's Souls (PPSA01342)

Windows Server 2025, RTX 3060 12 GB, driver 591.86, 32 GB RAM. The build was main a5e2a80c6 with an earlier head of this PR and other open PRs, among them #5987 and #6553, which print the two [gpu] texture: placement lines. Emulator log lines only:

stderr 11037   [gpu] texture 0x27ad00000 (format 22) has unreadable DCC keys at 0x909809240000; its texels are read as stored
stdout 457474  [src/Texture.cpp:348 Texture] Texture address=0x27ad00000 1024x1024 mips=1 layers=1793 dim=2 tile=4 format=22 vk=100 element=4
stderr 11044   [gpu] texture: device-local heap 0 uses 7970 of its 10053 MiB budget and no allowed host heap has room, 7520387072 bytes kept in device-local memory type 1; 1 such allocations, 7172 MiB
stderr 11045   [gpu] texture: device-local memory type 1 is out of device memory for 7520387072 bytes; placed in host memory type 0; 1 such allocations, 7172 MiB
stderr 11046   [videoout] presentation failed: AGC graphics: vkAllocateMemory buffer: allocation=7520387072 memoryType=4 reclaimed=1867581668 initialResult=-2 attempts=2: Vulkan result -2
stderr 11050   FATAL: abort() (SIGABRT) on thread 12272
  • The entry (stdout L457474): a 1024x1024 format 22, tile 4 array of 1793 layers, 4 MiB x 1793 = 7,520,387,072 bytes. Its first four dwords match a render target the run uses with 3 and 4 layers. Its last slice (0x700) and its DCC address (0x909809240000, L11037) are not a T#. 1793 layers is under the device's 2048 and the surface starts in registered memory, so this PR's checks passed it.
  • Memory (L11044–L11046): device-local heap 0 was at 7970 of its 10053 MiB budget. The image went to host memory type 0 (heap 1, 16334.9 MiB). Its 7,520,387,072-byte staging buffer in host type 4 (also heap 1) then failed with -2 (VK_ERROR_OUT_OF_DEVICE_MEMORY), after the buffer pool reclaimed 1,867,581,668 bytes.
  • The stop (L11046–L11050): resolveImageTables rethrew the VulkanError, presentation failed, and the VideoOut thread called std::terminate (SIGABRT).
  • Not system commit: private memory rose from 28.6 to 42.4 GB between 652 and 672 s, while commit stood at 70.8 of 95.9 GB. What ran out was Vulkan heap 1.

What changed on the branch (force-pushed, 46f639206 → ce99615b2):

  • c72f290 refuses an entry whose level 0 is larger than the largest memory heap. This is an exact limit (VUID-vkAllocateMemory-pAllocateInfo-01713). The bound is the heap's size, not the budget: L11044 reports no host heap with budget room, yet L11045 shows the driver allocated the image there. This entry fits heap 1, so it is not refused by size.
  • ce99615 turns an out-of-memory result from the entry's own image or upload buffers into a faulting entry, and resolves the table again on its next use. Every other VulkanError still stops the draw, including out-of-memory errors from a recorder submit or a storage image refresh. With it, this entry would stop the title only if a shader selected it.

This is one run, and it does not show whether a shader selects the entry.

AI-assisted: yes

@nicolasfalesy

Copy link
Copy Markdown
Contributor

Tested on Linux (Arch), c++ (GCC) 16.2.1 20260810, Release, BUILD_TESTING=ON, main at 5d9dcc42d2ec5401aebd089028b8d4d7410a77b4. GPU tests ran on lavapipe (Mesa 26.2.2, llvmpipe with LLVM 22.1.8).

This PR and #6402 break agc_driver_image_table together. main passes (2 of 2), each PR alone passes, and the pair fails (2 of 2):

overlapping guest allocation

Cause: this PR registers FloatTexels, UintTexels, SintTexels and DepthStorage once for the whole run in main() (ImageTable.cpp:1331). #6402 registers the same three texel arrays again inside RunStoreTests (ImageTable.cpp:996-1000 on its head), and the allocation registry rejects the overlap. Removing the registeredUint/Float/Sint registration in RunStoreTests makes the test pass on the merge.

Whichever PR lands second should drop its duplicate registration.

AI-assisted: yes

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 16, 2026
fdfawef324 added a commit to fdfawef324/AnyPS5 that referenced this pull request Oct 16, 2026
…ported

RequireSampledImageWithinDeviceLimits fell back to VkPhysicalDeviceLimits
when vkGetPhysicalDeviceImageFormatProperties reported
VK_ERROR_FORMAT_NOT_SUPPORTED for the format, type, usage and create flags
of the entry's sampled image. A small entry in registered memory then passed
and the texture lookup called vkCreateImage with that combination, which the
device reports unsupported (VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251).
Such an entry is now refused before its guest memory is read, naming the
format, type and flags, and faults when selected like the other refused
entries; the device-wide limits are no longer consulted. Other query
failures still propagate as VulkanError.

Test: agc_driver_graphics (tests/ImageTableEntryValidation.cpp) resolves a
registered 8x8 RGBA8 entry while the mock's format query reports
VK_ERROR_FORMAT_NOT_SUPPORTED and checks that the query ran, the entry
faults and no image is created. Without this change it fails with "an 8x8
registered texture whose exact image combination is unsupported: the entry
was served instead of faulting when selected; images created: 8x8x1/1
layers". Reported in review of boykopovar#6481.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fdfawef324
fdfawef324 force-pushed the fix/agc-image-table-entry-limits branch from ce99615 to d1f7857 Compare October 16, 2026 19:52
@fdfawef324

Copy link
Copy Markdown
Contributor Author

Thank you, @nicolasfalesy. Your reading is right. Our agc_driver_image_table change registered FloatTexels, UintTexels, SintTexels and DepthStorage once in main() for the whole run. #6402's RunStoreTests registers the same three texel arrays again, and the guest allocation registry throws "overlapping guest allocation" when an address is registered twice. Each PR passes alone, and the two fail together. We confirmed that from the code; we have not reproduced your lavapipe run.

What changed (new head d1f7857, was ce99615; rebased onto current main c842491):

  • tests/execution/ImageTable.cpp: the four registrations are now one scoped helper (TexelRegistrations) that is alive only while the tests that sample those arrays run. RunStoreTests runs outside that scope, so nothing of ours is registered while feat(agc): store to images selected through image tables #6402 registers its own copies. No assertion of our tests changed.
  • The rebase had one conflict, in docs/dev/debt/libSceAgcDriver.md. We kept main's new Pipeline journal entry and our extended AGC buffer allocations entry.

Checked on CPU, without a GPU:

GPU, on the RTX 3060 (driver 591.86, Windows Server 2025): on this head agc_driver_graphics, agc_driver_bindless_images, agc_driver_image_sint8, agc_driver_image_table, agc_driver_image_table_cache, agc_driver_image_table_cache_bounds and agc_driver_image_table_reuse pass (7 of 7). On the merge with #6402, agc_driver_image_table passes (1 of 1).

The test change is folded into the first commit of this PR, so the push is a force-push; the difference to the previous head is tests/execution/ImageTable.cpp and the rebase conflict above.

AI-assisted: yes

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 16, 2026
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed unblocks title Names a title ID on the Unblocks line labels Oct 17, 2026
fdfawef324 and others added 4 commits October 18, 2026 19:44
… hold

A bindless image table is resolved whole: every entry's T# becomes a Vulkan
image before the shader runs, whether or not it is ever selected. An entry
was refused only when its surface had no committed host page, so garbage
records reached vkCreateImage. In a Demon's Souls (PPSA01342) run a 1547-entry
table held a T# at 0x200 of 256x256 R16G16B16A16_FLOAT with 7425 array layers
(3.6 GiB). The host pages below 3.6 GiB passed the mapping check, the driver
snapshotted host process memory into a texture and created an image of 7425
layers on an RTX 3060, whose limit is 2048 (VUID-VkImageCreateInfo-arrayLayers-02256),
and the device was lost during that table's resolution.

Each table entry is now checked before its guest memory is read or any image
is created:

- RequireSampledImageWithinDeviceLimits compares the image the sampled upload
  would create (format, type, cube and mutable-format flags, extent, layers)
  with vkGetPhysicalDeviceImageFormatProperties for it (cached per physical
  device, format, type and flags), or with VkPhysicalDeviceLimits when the
  query reports VK_ERROR_FORMAT_NOT_SUPPORTED. Level 0 of the image is a lower
  bound of its size, compared with maxResourceSize. The mip count is not
  checked here.
- The surface must overlap a readable registered guest allocation
  (RegisteredReadableOverlaps, the registry RegisteredReadableCovers already
  reads for storage write-backs) instead of any committed host page. A surface
  that overlaps one is read as before.

A refused entry is handled like the entries the driver already rejects: it
faults when the shader selects it (the dispatch reports "rejected by the
driver" with the reason) and has no effect otherwise. The console samples such
a T#; the technical debt records it.

Graphics::Check throws VulkanError (a std::runtime_error with the VkResult),
and resolveImageTables rethrows it from the entry checks and the texture
lookup instead of turning it into a faulting entry, so a device loss or an
allocation failure while an entry's texture is made reaches the draw or
dispatch.

Test: agc_driver_graphics (tests/ImageTableEntryValidation.cpp) resolves
tables against a recording mock device with maxImageArrayLayers 2048. The T#
at 0x200 encoded from the logged fields, an 8x8 texture in unregistered host
memory, a 2049-layer array and a 16384x1 texture over a format extent of 8192
fault without vkCreateImage; an 8x8 texture and a 2048-layer array in
registered memory next to them are created. A 64x64 RGBA8 texture faults
under a maxResourceSize of 8192 while a 32x32 one is created, a texture whose
second page alone is registered is created, and VK_ERROR_DEVICE_LOST from an
entry's vkCreateImage reaches the caller. With the ShaderResources.cpp change
reverted it fails with "the 256x256 2D array of 7425 layers at 0x200: the
entry was served instead of faulting when selected; images created: 8x8x1/1
layers 256x256x1/7425 layers 8x8x1/1 layers 8x8x1/2049 layers 8x8x1/2048
layers 16384x1x1/1 layers". agc_driver_image_table, agc_driver_bindless_images
and agc_driver_image_sint8 register the static texels their tables sample.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ported

RequireSampledImageWithinDeviceLimits fell back to VkPhysicalDeviceLimits
when vkGetPhysicalDeviceImageFormatProperties reported
VK_ERROR_FORMAT_NOT_SUPPORTED for the format, type, usage and create flags
of the entry's sampled image. A small entry in registered memory then passed
and the texture lookup called vkCreateImage with that combination, which the
device reports unsupported (VUID-VkImageCreateInfo-imageCreateMaxMipLevels-02251).
Such an entry is now refused before its guest memory is read, naming the
format, type and flags, and faults when selected like the other refused
entries; the device-wide limits are no longer consulted. Other query
failures still propagate as VulkanError.

Test: agc_driver_graphics (tests/ImageTableEntryValidation.cpp) resolves a
registered 8x8 RGBA8 entry while the mock's format query reports
VK_ERROR_FORMAT_NOT_SUPPORTED and checks that the query ran, the entry
faults and no image is created. Without this change it fails with "an 8x8
registered texture whose exact image combination is unsupported: the entry
was served instead of faulting when selected; images created: 8x8x1/1
layers". Reported in review of boykopovar#6481.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The map and image bindings of tests/ImageTableEntryValidation.cpp left
DescriptorBinding::descriptorSet, which has no default member initializer,
uninitialized. ShaderResources refuses a binding outside its stage's
descriptor set, so the test depended on stack contents: on a build where the
garbage was not 0 the whole agc_driver_graphics run stopped with "unexpected
descriptor set: a shader resource must use its stage's descriptor set". Both
bindings are value-initialized and use RuntimeAbi::DescriptorSet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An image table entry within the format's array layers, extent and
maxResourceSize was snapshotted and given an image even when level 0 of
the image alone needed more bytes than any memory heap holds. No memory
type can back such an image: an allocation larger than its heap is
invalid usage (VUID-vkAllocateMemory-pAllocateInfo-01713). A garbage T#
reaches this easily: in a Demon's Souls (PPSA01342) run on an RTX 3060
(driver 591.86) one entry whose first four dwords describe a 1024x1024
render target decoded with a last slice of 1792 from its other dwords,
1793 layers and 7520387072 bytes, within the device's 2048 layers. That
image fits the 16334.9 MiB host heap; the same last slice over a
2048x2048 surface would fit no heap.

RequireSampledImageWithinDeviceLimits now also compares level 0 of the
image, the lower bound its maxResourceSize check uses, with the largest
heap a memory type allocates from, and the entry faults when selected
before its guest memory is read. The bound is the heap's size, not what
its VK_EXT_memory_budget budget leaves: in that run the budget showed no
host heap with room for the 7520387072-byte image (stderr L11044) and
the driver then allocated it in host heap 1 (L11045), so the budget is
not a limit the device enforces. The debt file records the bound.

Test: agc_driver_graphics (tests/ImageTableEntryValidation.cpp). A
256x256 RGBA8 array of 3 layers (786432 bytes) is created in heaps of
4 GiB whose budgets leave 524288 and 262144 bytes; in heaps of 524288
and 262144 bytes an array of 2 layers is created and one of 3 layers
faults with no image and no upload buffer. Without the Texture.cpp change
it fails with "a 256x256 RGBA8 array of 3 layers (786432 bytes) in heaps
of 524288 and 262144 bytes: the entry was served instead of faulting when
selected; images created: 256x256x1/2 layers 256x256x1/3 layers".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adriadam10 adriadam10 self-assigned this Oct 19, 2026

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conflicts with main in ShaderResources.cpp, Texture.cpp, tests/execution/ImageTable.cpp and docs/dev/debt/libSceAgcDriver.md, so the Build run can't test it as it would land. Please rebase.

The Texture.cpp conflict is not only textual: main now allocates the image through AllocateImageMemory(context, allocation, requirements.memoryTypeBits, "vkAllocateMemory texture"), which already retries in host memory when a device-local allocation is refused. Please re-derive what ownTextureMemory / TextureMemoryExhausted should wrap on top of it:

  • which VK_ERROR_OUT_OF_* results can still reach the entry after AllocateImageMemory has fallen back (and for the vkCreateImage, staging, tiled and linear buffer paths that still allocate directly);
  • the second-run case in the description (7520387072-byte allocation, initialResult=-2 in host heap 1) should be re-checked against that fallback, and the ImageTableEntryValidation OOM cases updated so they still fail without the change.

The cachedTexture call in resolveImageTables also gained a multisampleViewType argument on main; keep it when merging the new catch clauses.

@fdfawef324
fdfawef324 force-pushed the fix/agc-image-table-entry-limits branch from d1f7857 to 1be24da Compare October 19, 2026 04:35
@fdfawef324

Copy link
Copy Markdown
Contributor Author

@adriadam10 rebased to 84c1a4d9a and re-derived the allocation boundary in clean head 1be24da14e8a0e9afecfa4f558018ce19d1bd895.

The snapshot retains main's complete AllocateImageMemory reclaim/retry/host-fallback route inside ownTextureMemory. Only a final host/device allocation refusal becomes an entry fault. Its own image creation/binding, upload allocations and ordinary sRGB expansion are classified too; device loss, recorder submission and storage-copy expansion errors retain propagation. Main's multisampleViewType and scoped image-table registrations are preserved.

The historical 7.52 GB upload refusal was already in host heap 1 after reclaim; device-to-host fallback cannot provide more room there. I have qualified the body: that old run is not a test of this head or proof that the entry remains unselected. The format preflight's sRGB usage/expansion limits are also explicit.

The allocation mock now tracks the same image across retries. One temporary refusal must recover; persistent refusals fault the entry and permit the next one. Removing only the common allocator or only the ordinary sRGB classifier produces the intended new assertions. Both CPU/mock suites pass; the five required-Vulkan image-table adjacency cases pass on RTX 3060 in 5.22 s without skips. Conventions and a clean merge-tree against 676d42396 pass separately; tests ran on the exact candidate. No new title or Linux result is claimed.

GPUs tested: NVIDIA GeForce RTX 3060 12 GB, driver 591.86 (32.0.15.9186), Vulkan 1.4.325, Windows Server 2025 10.0.26100.

AI-assisted: yes (Claude Code and Codex)

Co-Authored-By: Codex noreply@openai.com

@github-actions github-actions Bot removed unblocks title Names a title ID on the Unblocks line needs rebase Conflicts with main, rebase needed labels Oct 19, 2026

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The queue's full Build on 1be24da14 fails linux:agc_draw_descriptors, which main does not fail:

AGC graphics: the draw snapshot wrote the wrong number of image table descriptors into the vertex set

Cause: ShaderResources.cpp:4749 now requires RegisteredReadableOverlaps(...) where main accepted any accessible memory. drawSnapshotTableSetTests (tests/Recorder.cpp, the texels array around line 3173) points its table entries at an unregistered static std::array, so every entry now faults when resolved and the expected 1 (vertex) / 2 (fragment) descriptor writes don't happen.

Please register that array as a guest allocation in the test (like the image-table tests do), and run agc_draw_descriptors plus the other tests that build image-table entries from host memory (grep -rn "imageTable\|ImageTable" core/libs/prx/libSceAgcDriver/tests/*.cpp), since the stricter check can affect any of them. Once the full Build is green this is ready to merge.

@MarcZX10

Copy link
Copy Markdown
Contributor

One coverage distinction for coordination: RequireSampledImageWithinDeviceLimits is currently called while resolving image-table entries. Issue #7923 reproduces a direct sampled-texture path (agc_driver_image_plane_compare_on_line): the Texture constructor creates a 1D D16 image with TRANSFER_DST | SAMPLED, which RADV reports unsupported via vkGetPhysicalDeviceImageFormatProperties; llvmpipe supports it. That direct path still reaches vkCreateImage without this preflight. I have a local candidate that queries support immediately before creation, but it overlaps this constructor hunk, so I’m holding it for sequencing. I have not run the RADV validation case locally.

@fogydes

fogydes commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

stale+rebase

1. Freshness Envelope

  • Head SHA: 1be24da14e8a0e9afecfa4f558018ce19d1bd895
  • Merge-base SHA: 84c1a4d9a26429cb483ec963195cff8ef25d128b
  • Behind origin/main: 11,944 commits
  • Merge-tree status: exit code 1 (conflicts against origin/main in core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp, core/libs/prx/libSceAgcDriver/Graphics/src/Texture.cpp, core/libs/prx/libSceAgcDriver/tests/Graphics.cpp, core/libs/prx/libSceAgcDriver/tests/GraphicsTests.hpp, and docs/dev/debt/libSceAgcDriver.md)

2. Findings

  1. [verified] Merge conflicts require rebase: git merge-tree --write-tree origin/main 1be24da14e8a0e9afecfa4f558018ce19d1bd895 exits with code 1 due to conflicts in ShaderResources.cpp, Texture.cpp, Graphics.cpp, GraphicsTests.hpp, and libSceAgcDriver.md.
  2. [verified] Conventions clean against merge-base: python tools/check_conventions.py --base 84c1a4d9a26429cb483ec963195cff8ef25d128b in an isolated scratch worktree reported 0 findings.
  3. [read-only] Full template checklist compliance: PR description follows .github/pull_request_template.md with all checklist lines populated.
  4. [read-only] Missing Vulkan validation layer comparison: AGENTS.md requires AGC PRs to report test runs with ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, and VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, confirming no new VUID- validation errors are introduced.
  5. [author-reported] Reported extensive test additions in ImageTableEntryValidation.cpp covering memory preflight, allocation recovery, and faulting behavior on Windows Server 2025 / RTX 3060.

3. Cross-PR Ledger

@B-Howell

B-Howell commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

@fdfawef324 a title now needs this check on current main. God of War Ragnarök (PPSA08329, Windows, RTX 4080 SUPER) aborts with compute shader 0x1052a03100: std::bad_alloc right after [gpu] sampled view 0x4140000000 (4978x14883 format 28, dimension 4, slices 0..568) covers 161263 MiB.

  • The entry is not a real texture. The image-table walk on an address-column table reads all 65,536 records from a base that moves with each dispatch. The real entries end at keys 4-17, and records further on are unrelated memory: dword 0 here is 0x41400000 (12.0f), and a later run decoded the same base as 12818x15412x368. cachedTexture copies the surface to host before any size check, so the 161 GiB view throws bad_alloc. The image-table path catches only std::runtime_error, so the dispatch dies even though the shader never selects that key.
  • A narrow version of this PR's heap check fixes it: reject a view of 1 GiB or more that exceeds the device's largest heap before anything is read, so the entry faults only if it is selected. With that, a 2,700 s warm GWR run passed the old abort point (the same view appeared 10 times) with no image-table fault and kept presenting.

This PR has conflicts and has been 11,944 commits behind since 10-30. Do you plan to rebase it? If not, I can open the narrow check on its own, with a test that fails on main with std::bad_alloc, and credit this PR. MarcZX10's direct sampled-texture path (#7923) is not covered by the narrow version.

AI-assisted: yes (Claude Code)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* build docs needs rebase Conflicts with main, rebase needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants