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
GTA V (PPSA04264) stops before the menu: color export format 4 into an unsigned integer target is unsupported #11513
Grand Theft Auto V stops before its main menu on current main, every run:
[videoout] presentation failed: AGC graphics: color export format 4 into an unsigned integer target is unsupported
terminate called after throwing an instance of 'std::runtime_error'
what(): AGC graphics: color export format 4 into an unsigned integer target is unsupported
The check was added by #9789 (State.cpp, ColorExportPacking::Uint). Before it, this draw ran.
Title, test or build step
PPSA04264 01.005.000 (Grand Theft Auto V)
AnyPS5 commit
main48c160c58b, no pull requests on top. Last good: main5b5d24cb22. Between the two, #9789 is the only change to Graphics/src/State.cpp.
System
Windows 11 Pro 26200, RTX 4090 (NVIDIA 616.92), WinLibs GCC 15.2.0 r7, Release.
Steps to reproduce
Build main (relinker + libs), relink with relinker --windows --to-intel --registry.
Start the title with an empty ANYPS5_SHADER_CACHE_DIR and no other APS5_* variables.
It stops during the start-up loading, before the main menu, in 2 of 2 runs (and the same in 3 more runs with trace or capture variables).
Log
The same run with the message extended locally, printing the registers of the rejected slot:
color export format 4 into an unsigned integer target is unsupported [slot 0 export index 0 CB_COLOR_INFO 0x00050408 SPI_SHADER_COL_FORMAT 0x00000004 CB_TARGET_MASK 0x0000000f]
CB_COLOR_INFO0x00050408: FORMAT 2 (COLOR_16), NUMBER_TYPE 4 (UINT), BLEND_BYPASS and ROUND_MODE set. The pixel shader exports SPI_SHADER_FP16_ABGR (4) into a one-channel R16_UINT target, all four mask bits set.
Not measured: what the console's CB writes for an FP16_ABGR export into a 16-bit UINT target. One reading is that with BLEND_BYPASS the CB stores the exported half's 16 raw bits, which before fix(libSceAgcDriver): export raw 32-bit values into UINT color targets as integers #9789 the float output into the R16_UINT attachment did not reproduce either. That is a guess, not a measurement. Which value this draw needs is for whoever has the hardware data.
I checked the original #9789 change: its tests explicitly reject FP16_ABGR exports into a UINT16 target, and its debt note says the console's 8-/16-bit UINT conversion behavior was not measured. This report confirms a title reaches that guard, but the expected stored value is still unknown. Before changing the guard, the needed evidence is a PS5 capture of this export/target pair (or an authoritative hardware reference for how the CB writes it); otherwise accepting the path could replace a clear refusal with incorrect output.
relinker --windows --registry --module-dir . eboot.elf eboot.exe on the unwrapped eboot.bin, with the five .prx beside it and sce_module/ converted.
Run with APS5_DRAW_PIPELINE=1 APS5_PIPELINED_DRAWS=256 APS5_PIPELINE_DISPATCH=1 APS5_MIMALLOC=1, empty shader caches.
Log
terminate called after throwing an instance of 'std::runtime_error'
what(): AGC graphics: color export format 4 into an unsigned integer target is unsupported
[gpu] driver failure: AGC graphics: color exporFATAL: abort() (SIGABRT) on thread 50068
The abort comes from the VideoOut presentation thread (libSceVideoOut.prx frames in the crash report).
What was checked
One run on the build above: it stops on this check.
A third title stops on this check: Builder's Journey (PPSA05496 03.002.583), when the ray-tracing option is toggled in the in-game options menu. I don't know whether it was switched on or off. In its default mode the title runs (#11308, #11574).
Disclosure: this run also had a local experiment enabled (APS5_EXPERIMENT_NO_ENTRY_EPOCH=1). It stops a satisfied-at-entry WAIT_REG_MEM from advancing the collect epoch. It doesn't touch the color-export decode in State.cpp. I haven't yet reproduced the stop without it.
System
Windows 11 (build 26300), Ryzen 7 9800X3D, NVIDIA GeForce RTX 5080 with driver 617.42, 3840x2160 output.
Steps
Convert eboot.bin, Media/Modules, Media/Plugins and sce_module with relinker --windows --registry --sce-module-path app0 --module-dir Media\Modules --module-dir Media\Plugins. The Unity modules were first unwrapped with tools/unwrap_self.py.
Start the title, press Cross at the title screen, open the options menu and toggle the ray-tracing setting.
Result
Exit code 0xc0000409:
[gpu] driver failure: terminate called after throwing an instance of 'std::runtime_error'
what(): AGC graphics: color export format 4 into an unsigned integer target is unsupported
FATAL: abort() (SIGABRT) on thread 36620
The [gpu] driver failure line is interleaved with the terminate output in the log, so it's reassembled above.
Reproduced without the experiment. A clean build of mainf95acfc94 plus #11098 (merge commit 6649abca5) was run with no APS5_* variables set, and the ray-tracing option was toggled in the options menu. It stops the same way, with exit code 0xc0000409:
terminate called after throwing an instance of 'std::runtime_error'
what(): AGC graphics: color export format 4 into an unsigned integer target is unsupported
FATAL: abort() (SIGABRT) on thread 31752
Thanks for adding the Minecraft and clean Builder's Journey reproductions. The new reports establish that this guard is reached beyond GTA V, but they still do not show whether the rejected slots have the same target and export configuration. Could you capture the rejected slot's CB_COLOR_INFO, SPI_SHADER_COL_FORMAT, target format/sample count and write mask for Minecraft and Builder's Journey, as was done for GTA V? A console capture or other hardware evidence of the resulting 16-bit UINT write would settle whether the guard can be relaxed without substituting an incorrect value. Until then I would keep the refusal in place; the register values alone identify the case but do not determine the stored bits.
To help unblock the investigation across all three reporting titles (GTA VPPSA04264, MinecraftPPSA17221, and Builder's JourneyPPSA05496), could anyone with an active hardware or test environment capture:
Rejected Slot Register Dumps: The exact CB_COLOR_INFO, SPI_SHADER_COL_FORMAT, CB_TARGET_MASK, and target format/sample count at the point of refusal for Minecraft and Builder's Journey (matching the slot 0 format 4 dump reported for GTA V).
Hardware CB Write Behavior: Any physical PS5 trace or hardware reference establishing whether the console CB writes the raw 16-bit half representation under BLEND_BYPASS into R16_UINT attachments, or performs bitfield conversion.
Having the exact register state for the other two titles will confirm if all three share the identical FP16_ABGR -> R16_UINT slot 0 layout or exercise different channel masks/formats.
A fourth title stops on this check, with a different target than GTA V: Marvel's Guardians of the Galaxy (PPSA01748 01.006.000) aborts at start-up, before its first menu, on main319621b. Its rejected slot is an 8-bit one-channel UINT target (R8_UINT) in slot 3 of a four-target pass, not slot 0 R16_UINT.
The same message extended locally (not pushed) to print the slot:
color export format 4 into an unsigned integer target is unsupported [slot 3 export index 3 CB_COLOR_INFO 0x00050404 SPI_SHADER_COL_FORMAT 0x00004444 CB_TARGET_MASK 0x0000111f CB_BLEND_CONTROL 0x60010141 VkFormat 13 samples 1 extent 1920x1080 write mask 0x1 blend 0]
CB_COLOR_INFO 0x00050404: FORMAT 1 (COLOR_8), NUMBER_TYPE 4 (UINT), the same BLEND_BYPASS and ROUND_MODE bits as GTA V's 0x00050408.
SPI_SHADER_COL_FORMAT 0x00004444: all four exports are FP16_ABGR.
CB_TARGET_MASK 0x0000111f: slot 0 writes RGBA, slots 1 to 3 only the first channel. Slot 3 maps to VK_FORMAT_R8_UINT with write mask R, one sample, 1920x1080, blending off.
Control: the same main build with only b15a58d (#9789) reverted reaches the main menu (closed after 864 s, exit code 0). Before #9789, e13027a with #9694 and #10388 reached the menu in every run on 2026-10-23 to 10-28.
Details
Linux 7.3 (CachyOS), RTX 4090, NVIDIA 615.78.08, GCC 16.2.1, Release. Relinked with --to-intel. No APS5_* variables. It stops 65 s after launch with a warm shader cache (308 s cold), 2 of 2 runs on 319621b. I first filed this as #12639 without finding this issue; I've closed it as a duplicate.
I don't have a console, so I can't say what the color block stores for an FP16_ABGR export into an 8-bit UINT target either.
Tested and written by Claude (AI assistant) on a contributor's machine.
@Tamalero Thank you for capturing the detailed slot parameters and control run for Marvel's Guardians of the Galaxy (PPSA01748)!
The register dump (CB_COLOR_INFO 0x00050404, SPI_SHADER_COL_FORMAT 0x00004444, CB_TARGET_MASK 0x0000111f) confirms slot 3 is an 8-bit single-channel UINT target (VK_FORMAT_R8_UINT) in a multi-target pass with FP16_ABGR export format, sharing the same BLEND_BYPASS and ROUND_MODE configuration as the GTA V capture. Having traces across multiple titles (GTA V, Minecraft, Builder's Journey, and Guardians of the Galaxy) helps clearly map out the hardware target/export combinations.
Hardware data for the open question (what the CB stores for an FP16_ABGR export into a UINT channel), measured on two Radeon PRO V620 (Navi21, RDNA2, gfx1030). This is desktop RDNA2, not a console.
Method: RADV (Mesa 26.2.6) with one local change, an environment variable that overrides SPI_SHADER_COL_FORMAT for every color output. A fragment shader writes a uvec4 whose words hold float bits. With the override set to FP16_ABGR (4), ACO packs each pair with v_cvt_pkrtz_f16_f32 and exports with compr (checked in the ISA). So the CB receives exactly the halves listed below. For these targets RADV programs CB_COLOR_INFO with BLEND_BYPASS and ROUND_MODE set, as in the Guardians register dump above (0x00050404). It also sets SIMPLE_FLOAT, which the title's value does not.
Result: each half is widened to a 32-bit float, those 32 bits are read as an unsigned integer, and the result is clamped to the channel. It is neither the half's 16-bit pattern nor a float-to-integer conversion of its value.
half exported
R32_UINT
R16_UINT
R8_UINT
0x0000 (+0.0)
0x00000000
0x0000
0x00
0x8000 (-0.0)
0x80000000
0xffff
0xff
0x0001 (smallest subnormal)
0x33800000
0xffff
0xff
0x3800 (0.5)
0x3f000000
0xffff
0xff
0x3c00 (1.0)
0x3f800000
0xffff
0xff
0xbc00 (-1.0)
0xbf800000
0xffff
0xff
0x7bff (65504)
0x477fe000
0xffff
0xff
0x7c00 (+inf)
0x7f800000
0xffff
0xff
0xfc00 (-inf)
0xff800000
0xffff
0xff
0x7c01 (NaN)
0x7fc02000 (quiet bit set)
0xffff
0xff
Other targets:R8G8_UINT, R8G8B8A8_UINT and R16G16B16A16_UINT follow the same rule per channel. Both GPUs gave identical results.
SINT targets:R8_SINT/R16_SINT give the signed counterpart: +0.0 → 0, a positive half → the maximum, any half with the sign bit set → the minimum.
So for the cases in this issue: GTA V's R16_UINT and Guardians' R8_UINT hold 0 where the shader exports +0.0, and 0xffff / 0xff everywhere else.
Side result, for the existing raw 32-bit path: with the override set to 32_R (1), a 32-bit word into R8_UINT or R16_UINT keeps its low 8 or 16 bits (0x43808000 → 0x8000 in R16_UINT). It is truncated, not clamped. The debt entry lists this as unmeasured.
I've opened #14243 with a defined path for FP16_ABGR into UINT targets that follows this.
Tested and written by Claude (AI assistant) on a contributor's machine.
Confirmed on Windows (RTX 5080, NVIDIA 32.0.16.1742): main4f41f4c with #14243 takes GTA V PPSA04264 01.005.000 past this stop to the title screen, the menu and prologue gameplay, with no abort in 6000 s over two runs.
Activity
MarcZX10 commentedon Oct 26, 2026
I checked the original #9789 change: its tests explicitly reject
FP16_ABGRexports into a UINT16 target, and its debt note says the console's 8-/16-bit UINT conversion behavior was not measured. This report confirms a title reaches that guard, but the expected stored value is still unknown. Before changing the guard, the needed evidence is a PS5 capture of this export/target pair (or an authoritative hardware reference for how the CB writes it); otherwise accepting the path could replace a clear refusal with incorrect output.simon-moulin commentedon Oct 26, 2026
A second title stops on this check: Minecraft (PPSA17221 01.044.000), at start-up, before any menu.
Build
main88795ed44with #9656 (heada1d33614a) merged on top for an unrelated title. No other change. #9656 only toucheslibSceVoice.System
Windows 11 Pro 26200, AMD Radeon RX 7800 XT (AMD proprietary driver 26.10.1, LLPC), Intel Core i5-14600KF, WinLibs GCC 15.2.0 r7, Release.
Steps
tools/audit_dump.py <app0> --relinker build/core/relinker/relinker.exe --libs build/core/libs/libs --windows: 0 absent imports.relinker --windows --registry --module-dir . eboot.elf eboot.exeon the unwrappedeboot.bin, with the five.prxbeside it andsce_module/converted.APS5_DRAW_PIPELINE=1 APS5_PIPELINED_DRAWS=256 APS5_PIPELINE_DISPATCH=1 APS5_MIMALLOC=1, empty shader caches.Log
The abort comes from the VideoOut presentation thread (
libSceVideoOut.prxframes in the crash report).What was checked
git revert -m 1 6641f4835, no other change): this check no longer stops it, and it then stops on the error of Palworld (PPSA23126): abort at compute shader 0x15c1486e00, "storing storage image results pending over memory outside the write watch without the guest bytes saved before them is not implemented" #7017 (storing storage image results pending over memory outside the write watch without the guest bytes saved before them is not implemented).R16_UINTas in GTA V.AI-assisted: yes (Claude Code). The runs, log lines and commands above were made on this machine.
XatiX commentedon Oct 26, 2026
A third title stops on this check: Builder's Journey (PPSA05496 03.002.583), when the ray-tracing option is toggled in the in-game options menu. I don't know whether it was switched on or off. In its default mode the title runs (#11308, #11574).
Build
mainf95acfc94plus fix(agc): select the first level of a single-level depth view #11098 (headf1fb9d6ea), which the title needs to get past "depth view mip 1 on a surface without mips".APS5_EXPERIMENT_NO_ENTRY_EPOCH=1). It stops a satisfied-at-entryWAIT_REG_MEMfrom advancing the collect epoch. It doesn't touch the color-export decode inState.cpp. I haven't yet reproduced the stop without it.System
Windows 11 (build 26300), Ryzen 7 9800X3D, NVIDIA GeForce RTX 5080 with driver 617.42, 3840x2160 output.
Steps
eboot.bin,Media/Modules,Media/Pluginsandsce_modulewithrelinker --windows --registry --sce-module-path app0 --module-dir Media\Modules --module-dir Media\Plugins. The Unity modules were first unwrapped withtools/unwrap_self.py.Result
Exit code 0xc0000409:
The
[gpu] driver failureline is interleaved with theterminateoutput in the log, so it's reassembled above.XatiX commentedon Oct 26, 2026
Reproduced without the experiment. A clean build of
mainf95acfc94plus #11098 (merge commit6649abca5) was run with noAPS5_*variables set, and the ray-tracing option was toggled in the options menu. It stops the same way, with exit code 0xc0000409:MarcZX10 commentedon Oct 27, 2026
Thanks for adding the Minecraft and clean Builder's Journey reproductions. The new reports establish that this guard is reached beyond GTA V, but they still do not show whether the rejected slots have the same target and export configuration. Could you capture the rejected slot's
CB_COLOR_INFO,SPI_SHADER_COL_FORMAT, target format/sample count and write mask for Minecraft and Builder's Journey, as was done for GTA V? A console capture or other hardware evidence of the resulting 16-bit UINT write would settle whether the guard can be relaxed without substituting an incorrect value. Until then I would keep the refusal in place; the register values alone identify the case but do not determine the stored bits.pushkarreddyy commentedon Oct 27, 2026
To help unblock the investigation across all three reporting titles (GTA V
PPSA04264, MinecraftPPSA17221, and Builder's JourneyPPSA05496), could anyone with an active hardware or test environment capture:CB_COLOR_INFO,SPI_SHADER_COL_FORMAT,CB_TARGET_MASK, and target format/sample count at the point of refusal for Minecraft and Builder's Journey (matching the slot 0 format 4 dump reported for GTA V).BLEND_BYPASSintoR16_UINTattachments, or performs bitfield conversion.Having the exact register state for the other two titles will confirm if all three share the identical
FP16_ABGR->R16_UINTslot 0 layout or exercise different channel masks/formats.Tamalero commentedon Oct 29, 2026
A fourth title stops on this check, with a different target than GTA V: Marvel's Guardians of the Galaxy (PPSA01748 01.006.000) aborts at start-up, before its first menu, on
main319621b. Its rejected slot is an 8-bit one-channel UINT target (R8_UINT) in slot 3 of a four-target pass, not slot 0R16_UINT.The same message extended locally (not pushed) to print the slot:
CB_COLOR_INFO0x00050404: FORMAT 1 (COLOR_8), NUMBER_TYPE 4 (UINT), the same BLEND_BYPASS and ROUND_MODE bits as GTA V's 0x00050408.SPI_SHADER_COL_FORMAT0x00004444: all four exports areFP16_ABGR.CB_TARGET_MASK0x0000111f: slot 0 writes RGBA, slots 1 to 3 only the first channel. Slot 3 maps toVK_FORMAT_R8_UINTwith write mask R, one sample, 1920x1080, blending off.Control: the same
mainbuild with only b15a58d (#9789) reverted reaches the main menu (closed after 864 s, exit code 0). Before #9789, e13027a with #9694 and #10388 reached the menu in every run on 2026-10-23 to 10-28.Details
Linux 7.3 (CachyOS), RTX 4090, NVIDIA 615.78.08, GCC 16.2.1, Release. Relinked with
--to-intel. NoAPS5_*variables. It stops 65 s after launch with a warm shader cache (308 s cold), 2 of 2 runs on 319621b. I first filed this as #12639 without finding this issue; I've closed it as a duplicate.I don't have a console, so I can't say what the color block stores for an
FP16_ABGRexport into an 8-bit UINT target either.Tested and written by Claude (AI assistant) on a contributor's machine.
pushkarreddyy commentedon Oct 29, 2026
@Tamalero Thank you for capturing the detailed slot parameters and control run for Marvel's Guardians of the Galaxy (
PPSA01748)!The register dump (
CB_COLOR_INFO 0x00050404,SPI_SHADER_COL_FORMAT 0x00004444,CB_TARGET_MASK 0x0000111f) confirms slot 3 is an 8-bit single-channel UINT target (VK_FORMAT_R8_UINT) in a multi-target pass withFP16_ABGRexport format, sharing the sameBLEND_BYPASSandROUND_MODEconfiguration as the GTA V capture. Having traces across multiple titles (GTA V, Minecraft, Builder's Journey, and Guardians of the Galaxy) helps clearly map out the hardware target/export combinations.Tamalero commentedon Nov 1, 2026
Hardware data for the open question (what the CB stores for an
FP16_ABGRexport into a UINT channel), measured on two Radeon PRO V620 (Navi21, RDNA2, gfx1030). This is desktop RDNA2, not a console.Method: RADV (Mesa 26.2.6) with one local change, an environment variable that overrides
SPI_SHADER_COL_FORMATfor every color output. A fragment shader writes auvec4whose words hold float bits. With the override set toFP16_ABGR(4), ACO packs each pair withv_cvt_pkrtz_f16_f32and exports withcompr(checked in the ISA). So the CB receives exactly the halves listed below. For these targets RADV programsCB_COLOR_INFOwithBLEND_BYPASSandROUND_MODEset, as in the Guardians register dump above (0x00050404). It also setsSIMPLE_FLOAT, which the title's value does not.Result: each half is widened to a 32-bit float, those 32 bits are read as an unsigned integer, and the result is clamped to the channel. It is neither the half's 16-bit pattern nor a float-to-integer conversion of its value.
R32_UINTR16_UINTR8_UINT0x0000(+0.0)0x000000000x00000x000x8000(-0.0)0x800000000xffff0xff0x0001(smallest subnormal)0x338000000xffff0xff0x3800(0.5)0x3f0000000xffff0xff0x3c00(1.0)0x3f8000000xffff0xff0xbc00(-1.0)0xbf8000000xffff0xff0x7bff(65504)0x477fe0000xffff0xff0x7c00(+inf)0x7f8000000xffff0xff0xfc00(-inf)0xff8000000xffff0xff0x7c01(NaN)0x7fc02000(quiet bit set)0xffff0xffR8G8_UINT,R8G8B8A8_UINTandR16G16B16A16_UINTfollow the same rule per channel. Both GPUs gave identical results.R8_SINT/R16_SINTgive the signed counterpart: +0.0 → 0, a positive half → the maximum, any half with the sign bit set → the minimum.R16_UINTand Guardians'R8_UINThold 0 where the shader exports +0.0, and 0xffff / 0xff everywhere else.Side result, for the existing raw 32-bit path: with the override set to
32_R(1), a 32-bit word intoR8_UINTorR16_UINTkeeps its low 8 or 16 bits (0x43808000→0x8000inR16_UINT). It is truncated, not clamped. The debt entry lists this as unmeasured.I've opened #14243 with a defined path for
FP16_ABGRinto UINT targets that follows this.Tested and written by Claude (AI assistant) on a contributor's machine.
fix(libSceAgcDriver): export FP16_ABGR into UINT color targets
dantdmdarealguy commentedon Nov 3, 2026
Confirmed on Windows (RTX 5080, NVIDIA 32.0.16.1742):
main4f41f4c with #14243 takes GTA V PPSA04264 01.005.000 past this stop to the title screen, the menu and prologue gameplay, with no abort in 6000 s over two runs.