Repository navigation
Conversation
…ted bytes, or empty
|
Windows run, since the PR has no Intel or Windows results yet: Windows 11, WinLibs GCC 15.2.0 r7, Release, merged onto
Full AI-assisted (Claude Code); I ran this on my machine. |
|
Please keep the throw when the committed run reaches the limit (
|
adriadam10
left a comment
There was a problem hiding this comment.
Thanks. Findings:
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp:1899:oversizedDescriptorTestsis wrapped in#ifdef _WIN32, so on Linux it runs nothing, and the two Linux-runningexpectSingleFailure(... "descriptor range limit")rows are deleted. Net result: no Linux coverage of this path, and the negative check can't fail there. Please make the test run on Linux too (e.g. a guest-arena-independent way to get committed/uncommitted memory, ormmap/VirtualAllocthrough the same helper other tests in this file use), or keep a Linux-valid case.ShaderResources.cpp:2674-2682: this binds a plausible but unverified result wheremainthrew. The "accesses past it read 0 and drop stores" semantics have no cited source (hardware measurement or reference). Please state the source in the PR and add a TechnicalDebt line under "Unknown function info" (not at the end of the section) for the cut-at-committed-end and empty-placeholder choices.ShaderResources.cpp:2681: onlycommitted.back().secondis used, so gaps between committed runs inside the range stay bound as if valid. Say whether that is intended, or cut at the first gap.ShaderRegistry.cpp:62already computes a committed extent withCommittedRanges; please reuse/share that rule instead of a second copy.- The PPSA28416 result can't be reproduced here; a Linux test with a V# like the one reported (base/size values from the issue) would cover it.
|
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. The new oversizedDescriptorTests fixture is guarded by _WIN32, so this Linux run checks the shared-source build and existing graphics cases; it does not execute the new over-limit descriptor regression. That Linux regression gap remains as noted by the maintainer. No title/gameplay validation. These results cover the standalone head, not a merge with current main. |
|
Tested on High on Life (PPSA15388 v01.120.000, Unreal Engine 4): this fixes its stop when loading a level. On my tree, loading the first level of a new game aborted with: The PR's commit cherry-picks cleanly. With it, that load goes through, and the abort hasn't come back in any run since. The DetailsSetup: CachyOS (Linux 7.2), RTX 4090 (NVIDIA 615.78), GCC, Release. Tested and written by Claude (AI assistant) on a contributor's machine. |
|
I prepared a tested correction for the outstanding review points in this PR: patch on my fork. The correction keeps The tests now run on both Windows and Linux. They cover exact-limit acceptance, oversized rejection with committed memory at/beyond the limit, short prefixes, inaccessible and read-only gaps, and empty bindings. The reported V# base/size is checked as descriptor metadata; the runtime empty-binding case uses the same stride/record count at an unaligned address inside an owned reservation. A real Vulkan compute test also reads the bound SSBO length and two exact uint32 values from the valid prefix. It uses a reduced 192 KiB context limit over a bounded mapping; it does not allocate a device-limit-sized buffer or perform out-of-bounds shader accesses. Validation used current main
The three regressions are Test-only baseline: To apply both commits, first rebase this PR onto main This is focused validation, not a full-suite or retail-title run. I do not have either affected title, and have not measured console behavior, game startup time or FPS. AI-assisted. |
A buffer V# larger than maxStorageBufferRange aborted the draw or dispatch. Shaders keep unrelated words in SRT slots the path they take never reaches, so such a V# now binds what is committed at its base: nothing committed binds it as null, a shorter committed run cuts it there, and the first case is logged. A committed run that reaches the limit still throws, now with the V# words. Ghostrunner 2 aborts on such a V# after its first presentation; High on Life reached the same stop (boykopovar#3202). AI-assisted: yes
A buffer V# larger than maxStorageBufferRange aborted the draw or dispatch. Shaders keep unrelated words in SRT slots the path they take never reaches, so such a V# now binds what is committed at its base: nothing committed binds it as null, a shorter committed run cuts it there, and the first case is logged. A committed run that reaches the limit still throws, now with the V# words. Ghostrunner 2 aborts on such a V# after its first presentation; High on Life reached the same stop (boykopovar#3202). AI-assisted: yes
|
High on Life (PPSA15388) still needs this on current This PR's commit ( Tested and written by Claude (AI assistant) on a contributor's machine. |
What
A buffer V# whose size (
num_records * stride) is pastmaxStorageBufferRangeaborted the whole dispatch withshader buffer exceeds descriptor range limit. PPSA28416 (STAR WARS: Galactic Racer) reaches this with V# words read from memory that holds no descriptor (one had base0x55268c155511, size0x1c9523763d77); the shader never touches the buffer on the path it takes, so on hardware nothing happens.The descriptor is now bound by what is behind it:
A descriptor inside the limit is unchanged. The two
descriptor range limitrejections inGraphics.cppare gone, since that case no longer throws; the new test covers it.Tested
Windows 11, WinLibs GCC 15.2.0, Release, RTX 4080.
agc_driver_graphics(oversizedDescriptorTestsinGraphics.cpp): a V# of 256 GiB over 64 KiB of committed guest-arena memory is bound at the mock limit (16 KiB); the same V# over uncommitted memory is bound as the placeholder (EmptyBufferBytes). Without the change it fails withshader buffer exceeds descriptor range limit.main).Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)