mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 00:53:02 -05:00
With DB_SHADER_CONTROL.STENCIL_OP_VAL_EXPORT_ENABLE the pixel shader supplies the value that REPLACE_OP and the add and subtract operations use in place of DB_STENCILREFMASK.STENCILOPVAL. The bit was refused as a whole, which stopped Onimusha: Way of the Sword (PPSA27836) at a DB_SHADER_CONTROL 0x45 draw with DB_STENCIL_CONTROL 0x40040 (REPLACE_OP on depth pass, both faces), write mask 0xff and compare ALWAYS. The export is accepted with the 32_GR and 32_ABGR Z formats. When no reachable operation through a non-zero write mask reads the value, it cannot change the result and is ignored. Without a test value export, a reachable REPLACE_OP becomes REPLACE with the exported value as FragStencilRefEXT (or the bounded replay on devices without the extension), provided both faces compare without the test value and use no ONES or REPLACE_TEST; early tests throw. The add and subtract operations, and REPLACE_OP with a test value export, still throw. The value is read from bits 8-15 of the second MRTZ channel: the title's pixel shader shifts it left by 8 right before exp mrtz (v_lshlrev_b32 v0, 8, v0). That is the only evidence for the layout and it is listed as technical debt. The pixel stage info carries the new flag into the cache key, the draw keys and request serialization version 31. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>