Skip to content

feat(agc-driver): report submit validation as unavailable - #2849

Closed
alfalfa-star wants to merge 2 commits into
boykopovar:mainfrom
alfalfa-star:feat/agc-driver-submit-validation
Closed

alfalfa-star wants to merge 2 commits into
boykopovar:mainfrom
alfalfa-star:feat/agc-driver-submit-validation

Conversation

@alfalfa-star

@alfalfa-star alfalfa-star commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

What

Implements the five libSceAgcDriver submit validation exports that still called NotImplemented_nid_no_patch:

  • sceAgcDriverSetSubmitValidationMode, sceAgcDriverGetSubmitValidationMode
  • sceAgcDriverSetSubmitValidationConfig, sceAgcDriverGetSubmitValidationConfig
  • sceAgcDriverSetValidationErrorOutputFrequency

Each returns DEBUG_UNAVAILABLE (0x8A6C1000) without reading its arguments. This matches sceAgcDriverIsSubmitValidationEnabled, which already reports validation as off.

Source: OpenAGC describes each of these exports in a title's bundled libSceAgcDriver.sprx as mov eax, 0x8a6c1000; ret. That was not checked against a console's system module, and the parameter lists follow OpenAGC only, so both are recorded in TechnicalDebt.

Tested

Linux (Arch, GCC), Release build, on main 57f96fd:

  • guest_agc_driver_resources: calls all five, checks the error code, and checks that the mode and config outputs are left untouched and validation still reports off. It aborts without this change (exit 134).
  • Full ctest: 698/698 passed (4 skipped for lack of a display).
  • tools/check_conventions.py --base upstream/main passed.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none. Adds the same DEBUG_UNAVAILABLE constant to Status.cpp and touches the same test as feat(agc-driver): report GPU capture as unavailable #2851, so whichever merges second needs a rebase
  • AI-assisted: yes

🤖 Generated with Claude Code

alfalfa-star and others added 2 commits October 10, 2026 18:29
The submit validation mode, config and error output frequency exports
return DEBUG_UNAVAILABLE (0x8A6C1000) without reading their arguments,
matching sceAgcDriverIsSubmitValidationEnabled reporting validation off.

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

Copy link
Copy Markdown

Progress report (57f96fd → e18b5ce)

📈 System libraries: 84.68% (+0.16%, +5 implemented functions)

✅ 5 implemented
Library Name
libSceAgcDriver sceAgcDriverGetSubmitValidationConfig
libSceAgcDriver sceAgcDriverGetSubmitValidationMode
libSceAgcDriver sceAgcDriverSetSubmitValidationConfig
libSceAgcDriver sceAgcDriverSetSubmitValidationMode
libSceAgcDriver sceAgcDriverSetValidationErrorOutputFrequency

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Which title calls these on main? With the title ID and the log line where it stops, this can go in; otherwise I'll close it until one does.

@screamm

screamm commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

Windows validation of the current head e18b5ce0 merged onto main 262c0316.

Windows 11 Pro 26220, WinLibs MinGW-w64 GCC 15.2.0 r7, Ninja, Release, BUILD_TESTING=ON, full build including the libs target.

  • ctest -j8 -E "^agc_driver_|^video_out_flip" passes 475/475, including guest_agc_driver_resources.
  • The GPU execution tests (agc_driver_*) were not run; two of them fail on unchanged main on this host for unrelated reasons.

Validation run with Claude Code assistance.

@Silverash-i8

Copy link
Copy Markdown
Contributor

Windows run, since the PR has no Intel or Windows results yet: Windows 11, WinLibs GCC 15.2.0 r7, Release, merged onto main d31b57a in one build with #3217, #3202, #3167, #3137, #2863, #2849 and #2847, on an RTX 5060 Laptop and the Arrow Lake iGPU (ANYPS5_GPU=Intel).

  • guest_agc_driver_resources passes on both GPUs.

Full ctest of that build on both GPUs has no failure that isn't also on plain main here (guest_filesystem needs the symlink privilege, #3169; the Intel ones are listed on #2114 and #3207).

AI-assisted (Claude Code); I ran this on my machine.

@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.

Code, test and TechnicalDebt line look right: the five exports return 0x8A6C1000 as OpenAGC's disassembly of a title's libSceAgcDriver.sprx shows, and guest_agc_driver_resources fails here without the change.

Open request from @oneandonlydean above, still unanswered: please add the not implemented line where a title stops on one of these five on main (title ID and log line). Without a title that reaches them this stays a stub nobody needs. Once that's posted this is ready to merge.

@alfalfa-star

Copy link
Copy Markdown
Contributor Author

No title I can run reaches these five exports on current main (90c152e):

I'm converting this to a draft until a title stops at it. Then I'll post the title ID and the log line and mark it ready.

Tested: Linux, GCC, Release, RX 9070 XT (RADV): full ctest 813/813 (4 video_out_flip_* skipped) on main 90c152e merged with this branch, #2847, #2850 and #2852; tools/check_conventions.py passes.

AI-assisted: yes (Claude Code)

@alfalfa-star
alfalfa-star marked this pull request as draft October 11, 2026 09:45
RINNECODER added a commit to RINNECODER/AnyPS5 that referenced this pull request Oct 11, 2026
…l bridge (#373)

* Apply upstream open AGC PRs for the remaining stubbed imports

Ports upstream boykopovar/AnyPS5 open PRs into core/libs/prx (libs and
their tests only; docs excluded):
- boykopovar#2847 DCB/ACB marker span builders
- boykopovar#2848 occlusion query size queries
- boykopovar#2849 submit validation reported as unavailable
- boykopovar#2850 disabled shader instrumentation accepted
- boykopovar#2851 GPU capture reported as unavailable, shader debugging status
- boykopovar#1060 sceAgcAcquireMemSetEngine

Conflicts between the PRs (Unimplemented.cpp stubs and shared test
files) were resolved by keeping every change from both sides.

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

* Port libSceAgcDriver leaf imports and remaining libSceAgc rows to the Metal bridge

Binds the 35 libSceAgcDriver imports and 17 libSceAgc imports through
SceAgcImports without dereferencing guest pointers on the host:

- Driver leaf exports (resource registration, capture, submit
  validation, equeue queries) run the upstream bodies through prx bridge
  descriptors (upstream-prx/AgcDriver.cpp); the 7-argument registrations
  read user data from the caller stack.
- ACB flip and rendering wait emit the Metal driver packets, as the DCB
  rows do.
- Marker spans, occlusion sizes, shader instrumentation, AcquireMemSetEngine
  and branch _0300 patchers reuse upstream encoders on host copies.
- GetRegisterDefaults2(+Internal) publish the upstream tables in a guest
  window above the gate table; Create/UpdatePrimState run on host copies
  of the stage type and special registers.

New CTest anyps5_cpu_agc_driver_leaf is in NATIVE_REQUIRED_TESTS.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@oneandonlydean

Copy link
Copy Markdown
Collaborator

Closing until a title reaches these, since none does yet. Reopen with the title ID and the log line when one stops here.

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

Labels

agc libSceAgc* docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants