diff options
Diffstat (limited to 'src/gallium/drivers/r600/r600_shader.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 1180 |
1 files changed, 589 insertions, 591 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 4e67447ad65..acac89fcca9 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -311,8 +311,6 @@ struct r600_shader_ctx { }; struct r600_shader_tgsi_instruction { - unsigned tgsi_opcode; - unsigned is_op3; unsigned op; int (*process)(struct r600_shader_ctx *ctx); }; @@ -7273,604 +7271,604 @@ static int tgsi_umad(struct r600_shader_ctx *ctx) } static struct r600_shader_tgsi_instruction r600_shader_tgsi_instruction[] = { - {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_r600_arl}, - {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2}, - {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit}, + [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_r600_arl}, + [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2}, + [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit}, /* XXX: * For state trackers other than OpenGL, we'll want to use * _RECIP_IEEE instead. */ - {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_CLAMPED, tgsi_trans_srcx_replicate}, - - {TGSI_OPCODE_RSQ, 0, ALU_OP0_NOP, tgsi_rsq}, - {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp}, - {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log}, - {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2}, - {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst}, - {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2}, - {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2}, - {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap}, - {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2}, - {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3}, - {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp}, - {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported}, - {22, 0, ALU_OP0_NOP, tgsi_unsupported}, - {23, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2}, - {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2}, - {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2}, - {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, tgsi_pow}, - {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd}, - {32, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2}, - {34, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_COS, 0, ALU_OP1_COS, tgsi_trig}, - {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, - {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, - {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ - {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {44, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2}, - {46, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2}, - {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, tgsi_trig}, - {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap}, - {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2}, - {51, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex}, - {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {59, 0, ALU_OP0_NOP, tgsi_unsupported}, - {60, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_r600_arl}, - {62, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg}, - {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp}, - {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs}, - {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {69, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, - {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, - {76, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, - {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, - {TGSI_OPCODE_DDX_FINE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DDY_FINE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2}, - {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2_trans}, - {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2}, - {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2}, - {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2_trans}, - {88, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2}, - {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2}, - {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod}, - {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2}, - {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex}, - {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, - {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop}, - {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop}, - {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {104, 0, ALU_OP0_NOP, tgsi_unsupported}, - {105, 0, ALU_OP0_NOP, tgsi_unsupported}, - {106, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap}, - {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap}, - {112, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported}, - {114, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_loop_breakc}, - {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ - {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */ - {118, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_op2_trans}, - {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv}, - {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2}, - {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2}, - {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg}, - {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2}, - {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2_trans}, - {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap}, - {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_op2_trans}, - {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2_trans}, - {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2}, - {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv}, - {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad}, - {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2}, - {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2}, - {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod}, - {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_UINT, tgsi_op2_trans}, - {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2}, - {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2}, - {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2_trans}, - {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap}, - {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2_swap}, - {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_r600_arl}, - {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp}, - {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs}, - {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg}, - {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, tgsi_op2_trans}, - {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, tgsi_op2_trans}, - {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_unsupported}, - {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_unsupported}, - {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_unsupported}, - {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_unsupported}, - {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_unsupported}, - {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_unsupported}, - {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_unsupported}, - {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_unsupported}, - {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_unsupported}, - {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_CLAMPED, tgsi_trans_srcx_replicate}, + + [TGSI_OPCODE_RSQ] = { ALU_OP0_NOP, tgsi_rsq}, + [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp}, + [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log}, + [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2}, + [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst}, + [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2}, + [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2}, + [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap}, + [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2}, + [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3}, + [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp}, + [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported}, + [22] = { ALU_OP0_NOP, tgsi_unsupported}, + [23] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2}, + [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2}, + [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2}, + [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_POW] = { ALU_OP0_NOP, tgsi_pow}, + [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd}, + [32] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2}, + [34] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_COS] = { ALU_OP1_COS, tgsi_trig}, + [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, + [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, + [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ + [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [44] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2}, + [46] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2}, + [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, tgsi_trig}, + [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap}, + [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2}, + [51] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex}, + [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [59] = { ALU_OP0_NOP, tgsi_unsupported}, + [60] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_r600_arl}, + [62] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg}, + [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp}, + [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs}, + [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [69] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, + [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if}, + [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif}, + [76] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else}, + [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif}, + [TGSI_OPCODE_DDX_FINE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DDY_FINE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2}, + [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2_trans}, + [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2}, + [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2}, + [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2_trans}, + [88] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2}, + [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2}, + [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod}, + [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2}, + [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex}, + [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, + [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop}, + [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop}, + [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [104] = { ALU_OP0_NOP, tgsi_unsupported}, + [105] = { ALU_OP0_NOP, tgsi_unsupported}, + [106] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap}, + [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap}, + [112] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported}, + [114] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_loop_breakc}, + [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ + [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */ + [118] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_op2_trans}, + [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv}, + [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2}, + [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2}, + [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg}, + [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2}, + [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2_trans}, + [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap}, + [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_op2_trans}, + [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2_trans}, + [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2}, + [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv}, + [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad}, + [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2}, + [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2}, + [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod}, + [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_UINT, tgsi_op2_trans}, + [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2}, + [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2}, + [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2_trans}, + [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap}, + [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2_swap}, + [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_r600_arl}, + [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp}, + [TGSI_OPCODE_IABS] = { 0, tgsi_iabs}, + [TGSI_OPCODE_ISSG] = { 0, tgsi_issg}, + [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, tgsi_op2_trans}, + [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, tgsi_op2_trans}, + [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_unsupported}, + [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_unsupported}, + [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_unsupported}, + [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_unsupported}, + [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_unsupported}, + [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_unsupported}, + [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_unsupported}, + [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_unsupported}, + [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_unsupported}, + [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported}, }; static struct r600_shader_tgsi_instruction eg_shader_tgsi_instruction[] = { - {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_eg_arl}, - {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2}, - {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit}, - {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_RSQ, 0, ALU_OP1_RECIPSQRT_IEEE, tgsi_rsq}, - {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp}, - {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log}, - {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2}, - {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst}, - {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2}, - {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2}, - {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap}, - {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2}, - {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3}, - {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp}, - {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported}, - {22, 0, ALU_OP0_NOP, tgsi_unsupported}, - {23, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2}, - {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2}, - {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2}, - {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate}, - {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, tgsi_pow}, - {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd}, - {32, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2}, - {34, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_COS, 0, ALU_OP1_COS, tgsi_trig}, - {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, - {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, - {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ - {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {44, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2}, - {46, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2}, - {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, tgsi_trig}, - {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap}, - {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2}, - {51, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex}, - {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {59, 0, ALU_OP0_NOP, tgsi_unsupported}, - {60, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_eg_arl}, - {62, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg}, - {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp}, - {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs}, - {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {69, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, - {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, - {76, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, - {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, - {TGSI_OPCODE_DDX_FINE, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, - {TGSI_OPCODE_DDY_FINE, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, - {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2}, - {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2_trans}, - {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2}, - {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2}, - {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2}, - {88, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2}, - {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2}, - {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod}, - {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2}, - {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex}, - {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, - {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop}, - {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop}, - {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {104, 0, ALU_OP0_NOP, tgsi_unsupported}, - {105, 0, ALU_OP0_NOP, tgsi_unsupported}, - {106, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap}, - {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap}, - {112, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported}, - {114, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ - {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */ - {118, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_f2i}, - {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv}, - {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2}, - {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2}, - {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg}, - {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2}, - {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2}, - {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap}, - {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_f2i}, - {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2_trans}, - {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2}, - {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv}, - {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad}, - {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2}, - {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2}, - {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod}, - {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_UINT, tgsi_op2_trans}, - {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2}, - {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2}, - {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2}, - {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap}, - {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2}, - {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_eg_arl}, - {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp}, - {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs}, - {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg}, - {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, tgsi_op2_trans}, - {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, tgsi_op2_trans}, - {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_tex}, - {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_tex}, - {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_op3}, - {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_op3}, - {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_bfi}, - {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_op2}, - {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_op2}, - {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_op2}, - {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_msb}, - {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_msb}, - {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_eg_arl}, + [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2}, + [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit}, + [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_RSQ] = { ALU_OP1_RECIPSQRT_IEEE, tgsi_rsq}, + [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp}, + [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log}, + [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2}, + [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst}, + [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2}, + [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2}, + [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap}, + [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2}, + [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3}, + [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp}, + [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported}, + [22] = { ALU_OP0_NOP, tgsi_unsupported}, + [23] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2}, + [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2}, + [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2}, + [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate}, + [TGSI_OPCODE_POW] = { ALU_OP0_NOP, tgsi_pow}, + [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd}, + [32] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2}, + [34] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_COS] = { ALU_OP1_COS, tgsi_trig}, + [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, + [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, + [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ + [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [44] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2}, + [46] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2}, + [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, tgsi_trig}, + [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap}, + [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2}, + [51] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex}, + [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [59] = { ALU_OP0_NOP, tgsi_unsupported}, + [60] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_eg_arl}, + [62] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg}, + [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp}, + [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs}, + [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [69] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, + [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if}, + [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif}, + [76] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else}, + [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif}, + [TGSI_OPCODE_DDX_FINE] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, + [TGSI_OPCODE_DDY_FINE] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, + [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2}, + [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2_trans}, + [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2}, + [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2}, + [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2}, + [88] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2}, + [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2}, + [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod}, + [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2}, + [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex}, + [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, + [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop}, + [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop}, + [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [104] = { ALU_OP0_NOP, tgsi_unsupported}, + [105] = { ALU_OP0_NOP, tgsi_unsupported}, + [106] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap}, + [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap}, + [112] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported}, + [114] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ + [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */ + [118] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_f2i}, + [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv}, + [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2}, + [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2}, + [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg}, + [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2}, + [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2}, + [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap}, + [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_f2i}, + [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2_trans}, + [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2}, + [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv}, + [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad}, + [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2}, + [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2}, + [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod}, + [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_UINT, tgsi_op2_trans}, + [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2}, + [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2}, + [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2}, + [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap}, + [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2}, + [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_eg_arl}, + [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp}, + [TGSI_OPCODE_IABS] = { 0, tgsi_iabs}, + [TGSI_OPCODE_ISSG] = { 0, tgsi_issg}, + [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, tgsi_op2_trans}, + [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, tgsi_op2_trans}, + [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_tex}, + [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_tex}, + [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_op3}, + [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_op3}, + [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_bfi}, + [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_op2}, + [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_op2}, + [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_op2}, + [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_msb}, + [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_msb}, + [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported}, }; static struct r600_shader_tgsi_instruction cm_shader_tgsi_instruction[] = { - {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_eg_arl}, - {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2}, - {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit}, - {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_IEEE, cayman_emit_float_instr}, - {TGSI_OPCODE_RSQ, 0, ALU_OP1_RECIPSQRT_IEEE, cayman_emit_float_instr}, - {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp}, - {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log}, - {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2}, - {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst}, - {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2}, - {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2}, - {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap}, - {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2}, - {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3}, - {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2}, - {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp}, - {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, cayman_emit_float_instr}, - {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported}, - {22, 0, ALU_OP0_NOP, tgsi_unsupported}, - {23, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2}, - {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2}, - {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2}, - {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, cayman_emit_float_instr}, - {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, cayman_emit_float_instr}, - {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, cayman_pow}, - {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd}, - {32, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2}, - {34, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_COS, 0, ALU_OP1_COS, cayman_trig}, - {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, - {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, - {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ - {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {44, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2}, - {46, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2}, - {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, cayman_trig}, - {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap}, - {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2}, - {51, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex}, - {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {59, 0, ALU_OP0_NOP, tgsi_unsupported}, - {60, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_eg_arl}, - {62, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg}, - {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp}, - {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs}, - {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {69, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp}, - {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, - {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, - {76, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, - {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, - {TGSI_OPCODE_DDX_FINE, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, - {TGSI_OPCODE_DDY_FINE, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, - {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2}, - {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2}, - {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2}, - {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2}, - {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2}, - {88, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2}, - {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2}, - {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod}, - {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2}, - {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex}, - {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, - {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit}, - {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop}, - {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop}, - {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, - {104, 0, ALU_OP0_NOP, tgsi_unsupported}, - {105, 0, ALU_OP0_NOP, tgsi_unsupported}, - {106, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2}, - {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap}, - {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap}, - {112, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported}, - {114, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ - {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */ - {118, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_op2}, - {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv}, - {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2}, - {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2}, - {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg}, - {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2}, - {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2}, - {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap}, - {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_op2}, - {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2}, - {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2}, - {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv}, - {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad}, - {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2}, - {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2}, - {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod}, - {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_INT, cayman_mul_int_instr}, - {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2}, - {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2}, - {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2}, - {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap}, - {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2}, - {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported}, - {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_eg_arl}, - {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp}, - {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs}, - {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg}, - {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported}, - {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex}, - {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex}, - {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, - {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, cayman_mul_int_instr}, - {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, cayman_mul_int_instr}, - {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_tex}, - {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_tex}, - {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_op3}, - {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_op3}, - {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_bfi}, - {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_op2}, - {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_op2}, - {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_op2}, - {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_msb}, - {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_msb}, - {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_interp_egcm}, - {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_eg_arl}, + [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2}, + [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit}, + [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_IEEE, cayman_emit_float_instr}, + [TGSI_OPCODE_RSQ] = { ALU_OP1_RECIPSQRT_IEEE, cayman_emit_float_instr}, + [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp}, + [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log}, + [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2}, + [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst}, + [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2}, + [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2}, + [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap}, + [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2}, + [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3}, + [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2}, + [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp}, + [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, cayman_emit_float_instr}, + [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported}, + [22] = { ALU_OP0_NOP, tgsi_unsupported}, + [23] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2}, + [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2}, + [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2}, + [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, cayman_emit_float_instr}, + [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, cayman_emit_float_instr}, + [TGSI_OPCODE_POW] = { ALU_OP0_NOP, cayman_pow}, + [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd}, + [32] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2}, + [34] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_COS] = { ALU_OP1_COS, cayman_trig}, + [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, + [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, + [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */ + [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [44] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2}, + [46] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2}, + [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, cayman_trig}, + [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap}, + [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2}, + [51] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex}, + [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported}, + [59] = { ALU_OP0_NOP, tgsi_unsupported}, + [60] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_eg_arl}, + [62] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg}, + [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp}, + [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs}, + [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [69] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp}, + [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, + [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if}, + [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif}, + [76] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else}, + [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif}, + [TGSI_OPCODE_DDX_FINE] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex}, + [TGSI_OPCODE_DDY_FINE] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex}, + [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2}, + [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2}, + [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2}, + [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2}, + [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2}, + [88] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2}, + [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2}, + [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod}, + [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2}, + [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex}, + [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont}, + [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit}, + [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop}, + [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop}, + [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex}, + [104] = { ALU_OP0_NOP, tgsi_unsupported}, + [105] = { ALU_OP0_NOP, tgsi_unsupported}, + [106] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2}, + [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap}, + [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap}, + [112] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported}, + [114] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */ + [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */ + [118] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_op2}, + [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv}, + [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2}, + [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2}, + [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg}, + [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2}, + [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2}, + [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap}, + [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_op2}, + [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2}, + [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2}, + [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv}, + [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad}, + [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2}, + [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2}, + [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod}, + [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_INT, cayman_mul_int_instr}, + [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2}, + [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2}, + [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2}, + [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap}, + [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2}, + [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported}, + [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_eg_arl}, + [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp}, + [TGSI_OPCODE_IABS] = { 0, tgsi_iabs}, + [TGSI_OPCODE_ISSG] = { 0, tgsi_issg}, + [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported}, + [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex}, + [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex}, + [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex}, + [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, cayman_mul_int_instr}, + [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, cayman_mul_int_instr}, + [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_tex}, + [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_tex}, + [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_op3}, + [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_op3}, + [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_bfi}, + [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_op2}, + [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_op2}, + [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_op2}, + [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_msb}, + [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_msb}, + [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_interp_egcm}, + [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported}, }; |