mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
Forspoken (PPSA03984) has a pixel shader with v_interp_p2_f16 v1, ..., v7 op_sel:[0,0,0,1], and main throws "VOP3 interpolation modifiers are not implemented" one second after start. On GFX10, op_sel[3] of a 16-bit VOP3 result selects the high half of the destination and keeps the other half. The decoder already maps that bit to destination.sdwaSel 5 for the other 16-bit VOP3 ops, and write16Bits/writeRawU32 then insert the result into bits 31:16 and keep bits 15:0. v_interp_p2_f16 is the only 16-bit-result interpolation instruction, so only it accepts the bit; other op_sel bits and the bit on the 32-bit-result p1ll/p1lv forms are still refused. agc_vop3_interp_decode checks the decoded selector with and without the bit, and that v_interp_p1ll_f16 still refuses it. In agc_driver_interpolation_f16 the second v_interp_p2_f16 now writes the high half of a register holding 0x00001234, and the GPU result must keep 0x1234 in the low half. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>