Repository navigation
fix(agc): preserve hand-built user VGPR offsets - #3496
adriadam10 merged 4 commits into
Conversation
|
Checked the change against Added by us (pushed to your branch):
Rebased on current |
fb37dae to
8351f30
Compare
|
CI on this head failed in |
|
Ran it on Windows: Radeon 860M (RDNA 3.5), Windows 11 (26300), WinLibs GCC 15.2.0 r7, Release, driver and shader caches emptied. |
|
Thanks for the native Windows run and trace. Getting past |
…ePrimState Co-Authored-By: Claude <noreply@anthropic.com>
8351f30 to
b33d2e3
Compare
|
Update after #3511 merged: I rebased this PR onto current |
|
Update: the rerun on rebased head |
…ceAgcCreatePrimState EVO Player (PPSA99039), Jelly5 (PPSA99505), Emby5 (PPSA99515) and Nuvio PS5 (PPSA99997) stop on main 0f863c1 with what(): sceAgcCreatePrimState: invalid user configuration register offsets All four build their shader headers by hand (EVO-PLAYER-PS5 evo_agc_shader_header.c, ported from ps5-xash3d-halflife) and store the ge_user_vgpr_en special at 0x25c (GE_USER_VGPR1, value 0) instead of 0x262 (GE_USER_VGPR_EN), as analysed in boykopovar#3457. They run on the console. OpenAGC's reconstruction of the FW 5.50 sceAgcCreatePrimState (src/game_compat.c at 3c7e8072) copies the four special register pairs verbatim without checking their offsets; KytyPS5's offset checks (src/libs/agc.cpp at 16a7fe68) are EXIT_NOT_IMPLEMENTED guards. The special is now copied at the offset the header stores, not moved to 0x262; the driver reads neither register. GE_CNTL, VGT_SHADER_STAGES_EN and a used VGT_GS_OUT_PRIM_TYPE are still required at their own offsets because the driver reads them there, and the error now names the special and the offset found. With the change all four titles get past sceAgcCreatePrimState and stop in the shader recompiler (GetImageResource dword 3 is not a valid runtime value), as boykopovar#3457 reported for EVO Player. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit aeaa508)
|
Update on the revised implementation:
The PR description now reflects the pass-through behavior and credits the implementation. Please review the revised diff when convenient. |
|
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.
|
|
Windows check of head All five get past That one is separate from this PR. The SRT evaluator handles
|
|
Follow-up: with this PR plus #3807 (signed compare in SRT values) and a branch that reads a linear 2D T#'s DEPTH as its default pitch (to be opened after #3807), all five titles run the full 60 s on Windows with no error. EVO Player, Jelly5 and Nuvio PS5 present 600 frames. PS5VR compiles 150 shaders. Emby5 sits in its library scan. |
|
Checked the revised pass-through against OpenAGC's |
What
Issue #3457 reports four titles with hand-built shader headers (
PPSA99039,PPSA99505,PPSA99515andPPSA99997) stopping insceAgcCreatePrimState: theirge_user_vgpr_enspecial is stored atGE_USER_VGPR1(0x25c) with value 0. This change passes that special through at the offset recorded by the shader header instead of rejecting or relocating it.This follows OpenAGC's clean-room reconstruction of the FW 5.50 SPRX, which copies the special register pairs verbatim.
GE_CNTL,VGT_SHADER_STAGES_ENand a usedVGT_GS_OUT_PRIM_TYPEremain checked at the offsets the driver reads. Offset errors now identify the special and the offset found.The implementation adopts screamm's commit
aeaa5080, shared on #3457 after the intake check prevented them from opening a PR. The regression test covers the0x25cpass-through and theGE_CNTLdiagnostic.Tested
Linux, GCC 12.2, Release: built
agc_shader_helpers_tests;agc_shader_helperspassed three consecutive runs.python3 tools/check_conventions.py --base upstream/mainandgit diff --checkpassed. The issue contributor reports all four titles get pastsceAgcCreatePrimStatewith this pass-through change; the title then encounters the separately reportedGetImageResourceshader-recompiler error. Windows and console behavior have not been independently retested on this PR head.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