You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
AGC: five homebrew titles stop on 'last provoking vertex with explicit per-vertex flat interpolation is unsupported' #3581
Five catalog titles stop in the same pipeline check on main (Windows 11, WinLibs GCC 15.2.0 r7, RTX 4070, maina11c8f7, catalog builds with eboot.bin and sce_module/libc.prx unwrapped, 60 s each):
[videoout] presentation failed: AGC graphics: last provoking vertex with explicit per-vertex flat interpolation is unsupported
terminate called after throwing an instance of 'std::runtime_error'
Title
Where the line is
SymphonyStation5 (PPSA17641)
the title's own log under download0/
VITA5 (PPSA39410)
same
Homebrew UI Lab (PPSA99050)
download0/hui/dev/app.log
Surround Sound Studio (PPSA99051)
the title's own log under download0/
Stremio Plus (PPSA74126)
console. It needs getsid (#3493) to load; with that it reaches this check
The four titles that log to their own file look silent from the console: only Transferring control to ELF entry point and exit 0xc0000409. That's likely why this stop hasn't been reported, so whoever runs the catalog may want to check download0/**/*.log too.
The check is ValidateProvokingVertex (Graphics/src/Pipeline.cpp:104, from 3a8cf3a): the pipeline uses the last provoking vertex (PA_SU_SC_MODE_CNTL bit), and a fragment shader reads a flat parameter through the explicit per-vertex path. Under VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, per-vertex index 0 is no longer the provoking vertex. A flat attribute read through the per-vertex path would need the index of the provoking vertex instead (the last vertex of the primitive: 2 for triangles, 1 for lines), so the program would depend on the pipeline's provoking mode and topology. I haven't looked at whether these titles' shaders read the flat parameters through P0/v_interp_mov or another way.
This is the open question of #1413, and there is a fix for the case these titles use that isn't upstream yet: AlxcBTW#12. With it, ProsperoStore (PPSA99000), one more title that stops here, gets past this check and renders its UI.
Why these titles reach it. They draw through ps5-opengl (ProsperoStore pins its SDK in tools/fetch-opengl-sdk.sh). In ps5-opengl main 00ea837b:
src/gallium/ps5/ps5_screen.c:2244 sets PA_SU_SC_MODE_CNTL.PROVOKING_VTX_LAST when flatshade_first is clear, which is also GL's default.
AnyPS5 marks a flat input read through P10 or P20 as per-vertex (ShaderInfoCollector.cpp, mode < 2u) and maps bit 19 to Vulkan's last-vertex mode (#2322), so ValidateProvokingVertex refuses the first pipeline whose fragment shader has a flat varying.
The open question is what P10 of a FLAT_SHADE input without pass-through returns. CouchRiv measured 0 on gfx1036; ps5-opengl, which reads every flat input this way, passes the GL 4.6 CTS on a PS5 (both on #1413). AlxcBTW#12 (c18298c3) takes the PS5 side for exactly this case: P10 of such an input under the last provoking vertex returns the provoking vertex's value. P20, and P10 under the first provoking vertex, still throw.
Run with it.#12 cherry-picks onto maina11c8f7 with one conflict, in TechnicalDebt.md. ProsperoStore 1.000.050 (catalog build), Windows 11, RTX 4080, Release, with #3512 for its earlier v_fma_mix stop:
with WIP: The Smurfs Dreams on Linux, first frames (stacked on #5) #12: still running when killed at 60 s; first frame at 5.4 s, then about 16.7 ms per frame. Frames saved with APS5_DUMP_FRAMES show the whole UI: the splash (logo tiles, title, progress bar, "Loading the catalog"), then the Discover page (tab bar, "The catalog is on its way" since it is offline, button hints).
On #1413 AlxcBTW reported the same for Homebrew UI Lab and VITA5 with #12, and the ps5-opengl showcase (PPSA99005) gets past it too. ProsperoTV (PPSA99003) reaches this line once its poll stop (#3521) is fixed.
@AlxcBTW, #12 is still only on your fork. Would you open it here, as you did #3546? It is the change maintainers would need to accept or reject on the PS5 evidence above.
The other titles of this issue, with and without AlxcBTW#12. Both runs use the same tree: maina11c8f7 + #3512 + getsid from #3493 (for Stremio Plus) + screamm's feat/libkernel-poll-files for #3521 (for ProsperoTV). The only difference is #12's core/ diff. Catalog builds, Windows 11, RTX 4080, Release, 45 s each. The screens come from frames saved with APS5_DUMP_FRAMES.
runs 45 s; full home screen (cards, text, buttons)
VITA5 (PPSA39410)
stops at this line
runs 45 s; "Dock your PS Vita" screen
SymphonyStation5 (PPSA17641)
stops at this line
runs 45 s; its Navidrome login form
ProsperoTV (PPSA99003)
stops at this line
runs 45 s; full UI, "The channel list could not be loaded" (offline)
Stremio Plus (PPSA74126)
stops at this line
runs 45 s; draws its own "App storage is unavailable" screen (lstat /data gives ENOENT here)
Surround Sound Studio (PPSA99051)
stops at this line
past this check, then sceAudioOutSysGetHdmiMonitorInfo not implemented after 16 s, before its first frame
So all six titles, and ProsperoStore above, use the case #12 covers. None hits the throws #12 keeps (P20, or P10 under the first provoking vertex).
@babyhuey, Surround Sound Studio's next stop is the throwing export from #2887. #2887 says the title doesn't call it during start-up, but once this check passes it does.
@orishamir thanks, that's a clear table: all seven titles hit the one case #12 covers, and none reaches the throws it keeps.
I'll open AlxcBTW#12 as an upstream PR, rebased onto current main, as soon as #3546 is merged. Until then I can only have one PR open. If someone wants to carry it sooner, c18298c is ready.
The open question stays the one on #1413: CouchRiv measured 0 on gfx1036. ps5-opengl reading every flat input through P10 and passing the GL 4.6 CTS on a PS5 is the only PS5-side evidence. #12 follows the PS5 side for exactly that case and keeps the other cases as throws.
PShare (PPSA99773, release 1.0) is another title that gets past this check with AlxcBTW#12. Thanks AlxcBTW for the patch.
Tested on Windows 11, Ryzen 5 3600, GTX 1660 SUPER (driver 555.85), WinLibs GCC 15.2, Release. Both sides use maina11c8f7 + #3606 (187fd85, needed for getlogin_r) + #3855 (36d37a0, fixes the earlier UTC-to-local stack overwrite). Same relinked executable and runtime libraries; only libSceAgcDriver.prx changes for the comparison. Each run uses a fresh shader-cache directory.
Without AlxcBTW's patch: aborts before the first captured frame with [videoout] presentation failed: AGC graphics: last provoking vertex with explicit per-vertex flat interpolation is unsupported.
With c18298c3: gets past that guard and renders. GPU frame dumps show the splash/logo animation, then the Captures screen with its sidebar, filter tabs, text and icons. The screen says "PShare can't see your captures"; no captures were supplied to this test installation.
ShaderRecompiler::Recompile: v_fma_mixlo/mixhi_f16 at pc 348 in FLOAT_MODE 204 (f16 denormals not kept or rounding not to nearest even) is not implemented
The first comparison used APS5_DUMP_FRAMES=8; a second patched run used APS5_DUMP_FRAMES=8 APS5_DUMP_FRAMES_EVERY=30 APS5_DUMP_SCALE=1 APS5_DUMP_SHADERS=1, which captured the splash and main UI at 1920x1080 and saved the next failing shader request. Logs are in the title's download0/pshare/dev/app.log.
Validation: the targeted build succeeds, and agc_driver_graphics (including the patch's P10 case), agc_shader_disk_cache, and the existing agc_driver_provoking_vertex pixel tests pass 3/3, with ANYPS5_REQUIRE_VULKAN=1. The latter pixel test covers GLSL/guest P0, not a new P10 pixel oracle. The captured next shader also reproduces the FLOAT_MODE error with agc_shader_replay without running the title. The full test suite was not run.
This confirms progress through PShare's rendering path on this Windows GPU, not the unresolved PS5 hardware semantics in #1413. I have not validated interaction/uploading or compared pixels against a console capture.
@Lorkydey thanks, that makes PShare the eighth title through this check with AlxcBTW#12. It goes into the PR's title list, and the PR opens as soon as #3546 is merged.
AlxcBTW#12 is now upstream as #4030, rebased onto maina11c8f7. The titles list covers @orishamir's table, @Lorkydey's PShare and @AchrafReyani's merge map. It still covers only the P10 case; P20 stays a throw (see #1413).
With #4030 merged, the titles of this issue no longer reach this line on main. Windows 11, RTX 4080 (driver 616.56), WinLibs GCC 15.2.0 r7, Release, plain main2a5eca1 with no other PRs and no extra relinker options, catalog builds, 60 s each with APS5_DUMP_FRAMES=4 (one frame every 300 presents). Before #4030, the eight titles other than ProsperoTV stopped at this line on Windows main0ef9dc9 earlier today, six of them also on 3d8ffeb (#4030 (comment)).
runs 60 s; Discover page, "The catalog is on its way" (offline)
Homebrew UI Lab (PPSA99050)
runs 60 s; full home screen
VITA5 (PPSA39410)
runs 60 s; "Dock your PS Vita" screen
SymphonyStation5 (PPSA17641)
runs 60 s; its login form
Surround Sound Studio (PPSA99051)
runs 60 s; its Passthrough page. Its earlier next stop is gone too: GetHdmiMonitorInfo rc=0x00000000 in its log
Forwarder Manager (PPSA99930)
runs 60 s; draws "No access to /data/homebrew"
Stremio Plus (PPSA74126)
runs 60 s; draws "App storage is unavailable"
PS5 OpenGL Showcase (PPSA99005)
runs 60 s; draws its text overlay (3840x2160, 19-23 FPS by its own counter) over a black scene. Its download0/ps5-opengl.log has 988 [ps5-gallium] draw-rejected status=-12 mode=4 lines with counts around 1.0e9 and 3.2e9; not looked into
ProsperoTV (PPSA99003)
still stops first at poll: descriptor 4 is not a socket after 10 s (#3521); babyhuey's run with #3649 on maind592d54: #3649 (comment)
None of the logs contains the line of this issue. Each run logs once shader library prebuild skipped: AGC graphics: v_interp_mov p10 of a flat input with the first provoking vertex is not measured (the case #4030 keeps as a throw, caught by the prebuild); the titles' draws then go through.
Closing: fixed by #4030. The nine titles listed here no longer reach last provoking vertex with explicit per-vertex flat interpolation is unsupported on main (orishamir's run above). The P20 case stays in #1413.
Activity
orishamir commentedon Oct 11, 2026
This is the open question of #1413, and there is a fix for the case these titles use that isn't upstream yet: AlxcBTW#12. With it, ProsperoStore (PPSA99000), one more title that stops here, gets past this check and renders its UI.
Why these titles reach it. They draw through ps5-opengl (ProsperoStore pins its SDK in
tools/fetch-opengl-sdk.sh). In ps5-openglmain00ea837b:toolchain/opengnm-psbc-ps5.patchrunslower_flat_input_vertexon every PS5 fragment shader (:3576). Under GL's default convention it turns each flat input load intoload_input_vertex(1)(:938-960), which ACO emits asv_interp_mov_f32 ..., p10(see v_interp_mov P10/P20 of a FLAT_SHADE input without pass-through: deltas or raw vertices? #1413).src/gallium/ps5/ps5_screen.c:2244setsPA_SU_SC_MODE_CNTL.PROVOKING_VTX_LASTwhenflatshade_firstis clear, which is also GL's default.AnyPS5 marks a flat input read through P10 or P20 as per-vertex (
ShaderInfoCollector.cpp,mode < 2u) and maps bit 19 to Vulkan's last-vertex mode (#2322), soValidateProvokingVertexrefuses the first pipeline whose fragment shader has aflatvarying.The open question is what P10 of a FLAT_SHADE input without pass-through returns. CouchRiv measured 0 on gfx1036; ps5-opengl, which reads every flat input this way, passes the GL 4.6 CTS on a PS5 (both on #1413). AlxcBTW#12 (
c18298c3) takes the PS5 side for exactly this case: P10 of such an input under the last provoking vertex returns the provoking vertex's value. P20, and P10 under the first provoking vertex, still throw.Run with it. #12 cherry-picks onto
maina11c8f7 with one conflict, inTechnicalDebt.md. ProsperoStore 1.000.050 (catalog build), Windows 11, RTX 4080, Release, with #3512 for its earlierv_fma_mixstop:presentation failed: AGC graphics: last provoking vertex with explicit per-vertex flat interpolation is unsupported;APS5_DUMP_FRAMESshow the whole UI: the splash (logo tiles, title, progress bar, "Loading the catalog"), then the Discover page (tab bar, "The catalog is on its way" since it is offline, button hints).On #1413 AlxcBTW reported the same for Homebrew UI Lab and VITA5 with #12, and the ps5-opengl showcase (PPSA99005) gets past it too. ProsperoTV (PPSA99003) reaches this line once its
pollstop (#3521) is fixed.@AlxcBTW, #12 is still only on your fork. Would you open it here, as you did #3546? It is the change maintainers would need to accept or reject on the PS5 evidence above.
AI-assisted: yes (Claude Code Opus 5.5 xhigh)
orishamir commentedon Oct 11, 2026
The other titles of this issue, with and without AlxcBTW#12. Both runs use the same tree:
maina11c8f7 + #3512 +getsidfrom #3493 (for Stremio Plus) + screamm'sfeat/libkernel-poll-filesfor #3521 (for ProsperoTV). The only difference is #12'score/diff. Catalog builds, Windows 11, RTX 4080, Release, 45 s each. The screens come from frames saved withAPS5_DUMP_FRAMES.lstat /datagives ENOENT here)sceAudioOutSysGetHdmiMonitorInfo not implementedafter 16 s, before its first frameSo all six titles, and ProsperoStore above, use the case #12 covers. None hits the throws #12 keeps (P20, or P10 under the first provoking vertex).
@babyhuey, Surround Sound Studio's next stop is the throwing export from #2887. #2887 says the title doesn't call it during start-up, but once this check passes it does.
AI-assisted: yes (Claude Code Opus 5.5 xhigh)
AlxcBTW commentedon Oct 11, 2026
@orishamir thanks, that's a clear table: all seven titles hit the one case #12 covers, and none reaches the throws it keeps.
I'll open AlxcBTW#12 as an upstream PR, rebased onto current
main, as soon as #3546 is merged. Until then I can only have one PR open. If someone wants to carry it sooner, c18298c is ready.The open question stays the one on #1413: CouchRiv measured 0 on gfx1036. ps5-opengl reading every flat input through P10 and passing the GL 4.6 CTS on a PS5 is the only PS5-side evidence. #12 follows the PS5 side for exactly that case and keeps the other cases as throws.
AI-assisted: yes (Claude Code)
Lorkydey commentedon Oct 11, 2026
PShare (PPSA99773, release 1.0) is another title that gets past this check with AlxcBTW#12. Thanks AlxcBTW for the patch.
Tested on Windows 11, Ryzen 5 3600, GTX 1660 SUPER (driver 555.85), WinLibs GCC 15.2, Release. Both sides use
maina11c8f7 + #3606 (187fd85, needed forgetlogin_r) + #3855 (36d37a0, fixes the earlier UTC-to-local stack overwrite). Same relinked executable and runtime libraries; onlylibSceAgcDriver.prxchanges for the comparison. Each run uses a fresh shader-cache directory.[videoout] presentation failed: AGC graphics: last provoking vertex with explicit per-vertex flat interpolation is unsupported.c18298c3: gets past that guard and renders. GPU frame dumps show the splash/logo animation, then the Captures screen with its sidebar, filter tabs, text and icons. The screen says "PShare can't see your captures"; no captures were supplied to this test installation.0xcc) case covered by fix(shader): round v_fma_mixlo_f16 and v_fma_mixhi_f16 in every f16 rounding mode #3512; I have not applied that PR in these runs.The first comparison used
APS5_DUMP_FRAMES=8; a second patched run usedAPS5_DUMP_FRAMES=8 APS5_DUMP_FRAMES_EVERY=30 APS5_DUMP_SCALE=1 APS5_DUMP_SHADERS=1, which captured the splash and main UI at 1920x1080 and saved the next failing shader request. Logs are in the title'sdownload0/pshare/dev/app.log.Validation: the targeted build succeeds, and
agc_driver_graphics(including the patch's P10 case),agc_shader_disk_cache, and the existingagc_driver_provoking_vertexpixel tests pass 3/3, withANYPS5_REQUIRE_VULKAN=1. The latter pixel test covers GLSL/guest P0, not a new P10 pixel oracle. The captured next shader also reproduces the FLOAT_MODE error withagc_shader_replaywithout running the title. The full test suite was not run.This confirms progress through PShare's rendering path on this Windows GPU, not the unresolved PS5 hardware semantics in #1413. I have not validated interaction/uploading or compared pixels against a console capture.
AI-assisted: yes (Codex).
AlxcBTW commentedon Oct 11, 2026
@Lorkydey thanks, that makes PShare the eighth title through this check with AlxcBTW#12. It goes into the PR's title list, and the PR opens as soon as #3546 is merged.
AI-assisted: yes (Claude Code)
AlxcBTW commentedon Oct 11, 2026
AlxcBTW#12 is now upstream as #4030, rebased onto
maina11c8f7. The titles list covers @orishamir's table, @Lorkydey's PShare and @AchrafReyani's merge map. It still covers only the P10 case; P20 stays a throw (see #1413).AI-assisted: yes (Claude Code)
feat(libSceAudioOut): implement sceAudioOutSysGetHdmiMonitorInfo
orishamir commentedon Oct 12, 2026
With #4030 merged, the titles of this issue no longer reach this line on
main. Windows 11, RTX 4080 (driver 616.56), WinLibs GCC 15.2.0 r7, Release, plainmain2a5eca1 with no other PRs and no extra relinker options, catalog builds, 60 s each withAPS5_DUMP_FRAMES=4(one frame every 300 presents). Before #4030, the eight titles other than ProsperoTV stopped at this line on Windowsmain0ef9dc9 earlier today, six of them also on 3d8ffeb (#4030 (comment)).main2a5eca1GetHdmiMonitorInfo rc=0x00000000in its logdownload0/ps5-opengl.loghas 988[ps5-gallium] draw-rejected status=-12 mode=4lines with counts around 1.0e9 and 3.2e9; not looked intopoll: descriptor 4 is not a socketafter 10 s (#3521); babyhuey's run with #3649 onmaind592d54: #3649 (comment)None of the logs contains the line of this issue. Each run logs once
shader library prebuild skipped: AGC graphics: v_interp_mov p10 of a flat input with the first provoking vertex is not measured(the case #4030 keeps as a throw, caught by the prebuild); the titles' draws then go through.AI-assisted: yes (Claude Code Opus 5.5 xhigh)
Move #1413 out of the chains of nine titles on main 2a5eca11 (#45)
Upstream sync: small HLE libs (chunk 1) (#437)
Upstream sync 6: small HLE libs, remainder (slice E2) (#441)
oneandonlydean commentedon Oct 13, 2026
Closing: fixed by #4030. The nine titles listed here no longer reach
last provoking vertex with explicit per-vertex flat interpolation is unsupportedon main (orishamir's run above). The P20 case stays in #1413.