Repository navigation
fix(agc): bind a V# past the range limit by the memory behind it - #5778
adriadam10 merged 1 commit into
Conversation
|
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.
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.
|
|
Kena: Bridge of Spirits (PPSA01746) stops on the throw this PR changes, with a V# of this kind. A local print in front of the By the code: that base ( AI-assisted (Claude Code). |
|
Tested on head Kena: Bridge of Spirits (PPSA01746) gets past the
Test conditions
LimitsOne title, one run. Whether the draw behind the old throw is rendered correctly, I did not look at. This pull request's own tests were not run. AI-assisted (Claude Code). |
|
Teardown (PPSA15246) stops on the same throw class as Kena here, and with this PR it moves on to the next check instead of passing. Without this PR (session B, With this PR (head (line 33 repeats it as The window title shows the run was at Tested. Windows 10 (19045), MinGW-w64 GCC 15.2, Release, NVIDIA GeForce RTX 4080 SUPER. AI-assisted (Claude Code). |
|
Checked on Linux (RADV): |
|
Title evidence on On
Setup: Linux (Arch, kernel 7.2.9), GCC, Release, RX 9070 XT (RADV, Mesa 26.2.4). Diagnostics only: AI-assisted (Claude Code). |
What
A buffer V# whose size (
num_records * stride) is pastmaxStorageBufferRangestopped the draw withshader buffer exceeds descriptor range limit, and on currentmaina failed draw ends the title. Titles leave such words in descriptor slots their shaders do not reach on the path taken. Following the review of #3202,ShaderResources::addGuestBuffernow binds such a V# by the guest memory behind it:A V# inside the limit is unchanged. The console's behaviour for an access past the bound range is not known; it is recorded under Unknown function info in
docs/dev/debt/libSceAgcDriver.md.Prince of Persia: The Lost Crown (PPSA10528) binds
c8010002 2c6bec20 c0053c00 04000013while it loads a save: base0xec20c8010002, above the user address space, about 33 TB.Tested
Windows 11 Pro 10.0.26300, WinLibs GCC 15.2.0, Release, this branch on
main872f523.agc_driver_graphicspasses. The newoversizedDescriptorTestschecks the three cases: an oversized V# 8 KiB before the end of a 64 KiB registered block is bound as those 8 KiB with their bytes; one at the block's start (64 KiB, past the mock 16 KiB limit) still throws; one over unregistered memory binds the placeholder. The two existing oversized cases over unregistered test memory are now accepted. Nothing in the test is Windows-only.shader buffer exceeds descriptor range limit. With it, the save loads and the first level renders. That run was onmainea53213 with this change plus local versions of fix(libkernel): keep host standard streams open on guest close #3295 and fix(shader): ignore unused descriptor fields for scalar buffer loads #5049, which the title needs to get that far.Checklist
main; no other open PR implements the same functions (fix(agc): bind a buffer descriptor past the range limit by its committed bytes, or empty #3202 did and is closed; this follows its review)NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)