Skip to content

feat(libSceAgc): implement the vieBRwlh1Lw interpolant mapping update - #3829

Merged
adriadam10 merged 2 commits into
boykopovar:mainfrom
YossiYad:carry/agc-vieBRwlh1Lw
Oct 11, 2026
Merged

adriadam10 merged 2 commits into
boykopovar:mainfrom
YossiYad:carry/agc-vieBRwlh1Lw

Conversation

@YossiYad

Copy link
Copy Markdown
Contributor

What

Carries David's screamm/AnyPS5:feat/agc-vieBRwlh1Lw commit from #3364 onto current main, preserving its author. The only rebase conflict was in TechnicalDebt, where both new entries are kept; the implementation and test files are identical to blawesom's verified rebase (blawesom:verify/3364).

  • Implement sceAgcUnknown_vieBRwlh1Lw, the interpolant mapping update Hollow Knight: Silksong (PPSA12544) imports (feat(libs): add exports imported by PPSA12544 #699), after OpenAGC's game_compat.c and its test vectors. It takes the same (regs, gs, ps) as the implemented dbOlWdppb4o, applies the same register transform without the identity tail, writes one register per pixel shader input and nothing for a shader without inputs, and rejects null registers, a null pixel shader, more than 32 inputs, a missing geometry shader and null semantic tables. A fillIdentityTail flag is added to CreateInterpolantMapping; the two existing exports are unchanged.
  • One disagreement throws: for an f16 input with different low and high defaults, OpenAGC fills the default from default_value_hi while this repository's dbOlWdppb4o, KytyPS5 and sharpemu use default_value. Recorded in TechnicalDebt.

The library progress moves from 2903/3383 (85.81%) to 2904/3383 (85.84%).

Closes #3364.

Tested

Linux (Bazzite 44, GCC 16.2.1, Ninja, Release, -DBUILD_TESTING=ON), based on main a11c8f7f:

  • Full build, libs, and full ctest: 823 pass, 8 skip, 1 failure (832 registered tests). The failure is the GPU agc_driver_pixel_interlock test, which passes 5 of 10 runs on its own here and also fails intermittently on this machine on branches that do not touch libSceAgc. Its test binary loads only libSceAgcDriver.prx, not libSceAgc.prx, so this change cannot reach it.
  • agc_interpolant_mapping and guest_shader_link pass.
  • tools/check_conventions.py --base upstream/main and git diff --check pass.
  • The original author reported Windows testing in libSceAgc: the vieBRwlh1Lw interpolant mapping update is a stub (Silksong imports); fix branch ready #3364, and blawesom reported a Linux run of the rebased commit there. Silksong was not run on this machine.

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; no silent stubs added
  • No notes, investigation .md files or images added to the repository
  • No new third-party code
  • Generic behaviour, not specific to one title
  • Depends on: none
  • AI-assisted: yes

Hollow Knight Silksong (PPSA12544) imports libSceAgc NID vieBRwlh1Lw
(boykopovar#699). Its name is unknown: it is not in aerolib, and the
sceAgcUpdateInterpolantMapping label other projects give it hashes to
SbuY2jN+axQ.

OpenAGC (src/game_compat.c at 3c7e807, sceAgcUnknownVieBRwlh1Lw) reads
it from FW 11.60 as the dbOlWdppb4o transform with the same (regs, gs,
ps) arguments, without the identity tail: it writes one register per
pixel shader input, none for a pixel shader without inputs, and rejects
a null pixel shader. It now shares the dbOlWdppb4o path and throws for
the rejected arguments.

For is_f16 1 and 3 inputs whose default_value and default_value_hi
differ, OpenAGC takes DEFAULT_VAL from default_value_hi, while KytyPS5,
sharpemu and dbOlWdppb4o here take it from default_value; these inputs
throw. On every other input the dbOlWdppb4o values equal OpenAGC's.

agc_interpolant_mapping runs the dbOlWdppb4o vectors and OpenAGC's
enhanced-mapping vectors through it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Progress report (31bf997 → 07af520)

📈 System libraries: 85.71% (+0.03%, +1 implemented functions)

✅ 1 implemented
Library Name
libSceAgc sceAgcUnknown_vieBRwlh1Lw

…ional

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

Copy link
Copy Markdown
Collaborator

Checked on Linux: libSceAgc build and ctest (20/20, including agc_interpolant_mapping), the new test fails to link without the change, and the export matches OpenAGC's game_compat.c (dbOlWdppb4o transform without the identity tail). The disagreement on default_value_hi is recorded in TechnicalDebt and throws.

Added one commit: moved the Functional TechnicalDebt line off the end of the file, where every PR appends and conflicts. Merging once CI is green.

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 11, 2026
@adriadam10
adriadam10 merged commit 6dbc0ea into boykopovar:main Oct 11, 2026
14 checks passed
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.

libSceAgc: the vieBRwlh1Lw interpolant mapping update is a stub (Silksong imports); fix branch ready

2 participants