mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
SPI_SHADER_COL_FORMAT 7 (UINT16_ABGR) was rejected by DecodeState, though the recompiler already handles it: a pixel shader's MRT output under mode 7 is a uvec4, and a compressed export's 16-bit halves are taken with OpBitFieldUExtract. The format is now accepted when the target's CB_COLOR_INFO number type is UINT; into any other target it still throws, as does SINT16_ABGR (8), whose halves would need sign extension. The target records the export (ColorTarget::uintExport). Shader validation then requires a uint4 output at its location instead of a float4 one, and blending into it is refused (Vulkan has no blending of integer attachments). PPSA14632 (LEGO Horizon Adventures) writes a 2848x1600 R8_UINT target this way; those draws were dropped. agc_driver_pixel_uint16_export draws compressed MRT0 exports under mode 7 into a linear 16_16_16_16 UINT target, one row per pair of packed words (0x0000ffff/0xffff0000, 0x00010002/0xffffffff and four distinct halves), and reads every 16-bit component back under the identity, STD_REV and ALT_REV export mappings. agc_driver_graphics covers the decode and the blend refusal. Co-Authored-By: Claude Opus 5.5 <[email protected]>