Repository navigation
fix(agc): return the console results of the capture, shader instrumentation and occlusion query size calls - #8296
Conversation
…tation and occlusion query size calls sceAgcDriverRequestCaptureStart, sceAgcDriverRequestCaptureStop and sceAgcDriverTriggerCapture return 0x8A6C1000 without doing anything. sceAgcSetShaderInstrumentation keeps the flags and returns 0, and sceAgcGetShaderInstrumentation returns them. sceAgcDcbBeginOcclusionQueryGetSize is 0x10 for type 0, 0x120 for type 1 and 0 otherwise; sceAgcDcbEndOcclusionQueryGetSize is 0x10. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
Progress report (6ef5a1c → b83fe20)📈 System libraries: 42.39% (+0.06%, +7 implemented functions) ✅ 7 implemented
⚪ 4 behaviourally empty (constant return or throw)
|
|
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.
|
…trumentation-query-sizes # Conflicts: # core/libs/prx/libSceAgc/DcbDraw/src/Stats.cpp # core/libs/prx/libSceAgc/Unimplemented.cpp
|
Checked all seven against firmware 13.42's AI-assisted: yes (Claude Code) |
|
@BunnyFl thanks for confirming all seven against 13.42, including |
What
Replaces seven
NotImplementedstubs with what the firmware does. The behaviour was read from the decryptedlibSceAgc.sprxandlibSceAgcDriver.sprx:sceAgcDriverRequestCaptureStartSAfhzJPcjukmov eax, 0x8a6c1000; ret0x8A6C1000sceAgcDriverRequestCaptureStopFOwvmNlFLjMsceAgcDriverTriggerCaptureXq5WmbwPTnQsceAgcSetShaderInstrumentationRTpj-tIlvZcediin a global, returns 0sceAgcGetShaderInstrumentationSwI6QxqwAC0sceAgcDcbBeginOcclusionQueryGetSizems1xVoZ-Vwctype == 1 ? 0x120 : type == 0 ? 0x10 : 0sceAgcDcbEndOcclusionQueryGetSizeP1CugZ99Uzcmov eax, 0x10; ret0x8A6C1000is the code the driver already returns from its other unavailable debug calls (DEBUG_UNAVAILABLEinlibSceAgcDriver/Unimplemented.cpp).The firmware's
sceAgcGetShaderInstrumentationalso ORs in bit 0 and bit 31 from two developer registry keys (sceRegMgrNonSysGetInt), but only when libSceAgc's module init succeeded in loading system module0x8000001f. With those keys unset, as on a retail console, the result is the stored flags. That is what this returns.PRAGMATA (#8005) and the Horizon Call of the Mountain thread (#6214) list the capture imports among the calls that throw. Neither title was run with this change.
Tested
Linux (CachyOS, GCC, Release):
agc_instrumentation_query_size_testschecks the flag round trip and all threeBeginOcclusionQueryGetSizecases plusEndOcclusionQueryGetSize;agc_end_of_shader_action_size_tests,agc_context_state_size_testsandagc_commandspass.No Vulkan path changes, so there was no validation-layer run.
pr_overlapshows no line conflicts. InlibSceAgc/CMakeLists.txt, #6747's hunks (lines 193–200 and 213–220) and #5021's (68–74) are clear of the new block at line 256; #6044 moves every test block. #1060 edits lines 15–26 oflibSceAgc/Unimplemented.cpp; this removes lines 43–51.Checklist
main; no other open PR implements the same functionsNotImplemented_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)🤖 Generated with Claude Code
https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK