- if (type_valid)
- return type;
- }
-
- switch (tgsi_opcode) {
- case TGSI_OPCODE_UIF:
- case TGSI_OPCODE_I2F:
- case TGSI_OPCODE_NOT:
- case TGSI_OPCODE_AND:
- case TGSI_OPCODE_OR:
- case TGSI_OPCODE_MOD:
- case TGSI_OPCODE_XOR:
- case TGSI_OPCODE_SAD: /* why? */
- case TGSI_OPCODE_TXF:
- case TGSI_OPCODE_TXQ:
- case TGSI_OPCODE_TXQ_LZ:
- case TGSI_OPCODE_IDIV:
- case TGSI_OPCODE_IMAX:
- case TGSI_OPCODE_IMIN:
- case TGSI_OPCODE_INEG:
- case TGSI_OPCODE_ISGE:
- case TGSI_OPCODE_ISHR:
- case TGSI_OPCODE_ISLT:
- case TGSI_OPCODE_UARL: /* why? */
- case TGSI_OPCODE_IABS:
- case TGSI_OPCODE_ISSG:
- case TGSI_OPCODE_ATOMXCHG:
- case TGSI_OPCODE_ATOMCAS:
- case TGSI_OPCODE_ATOMAND:
- case TGSI_OPCODE_ATOMOR:
- case TGSI_OPCODE_ATOMXOR:
- case TGSI_OPCODE_ATOMIMIN:
- case TGSI_OPCODE_ATOMIMAX:
- type = TOY_TYPE_D;
- break;
- case TGSI_OPCODE_SHL:
- case TGSI_OPCODE_U2F:
- case TGSI_OPCODE_UADD:
- case TGSI_OPCODE_UDIV:
- case TGSI_OPCODE_UMAD:
- case TGSI_OPCODE_UMAX:
- case TGSI_OPCODE_UMIN:
- case TGSI_OPCODE_UMOD:
- case TGSI_OPCODE_UMUL:
- case TGSI_OPCODE_USEQ:
- case TGSI_OPCODE_USGE:
- case TGSI_OPCODE_USHR:
- case TGSI_OPCODE_USLT:
- case TGSI_OPCODE_USNE:
- case TGSI_OPCODE_SAMPLE_I:
- case TGSI_OPCODE_SAMPLE_I_MS:
- case TGSI_OPCODE_SVIEWINFO:
- case TGSI_OPCODE_SAMPLE_POS:
- case TGSI_OPCODE_SAMPLE_INFO:
- case TGSI_OPCODE_UCMP:
- case TGSI_OPCODE_LOAD:
- case TGSI_OPCODE_STORE:
- case TGSI_OPCODE_ATOMUADD:
- case TGSI_OPCODE_ATOMUMIN:
- case TGSI_OPCODE_ATOMUMAX:
- type = TOY_TYPE_UD;
- break;
+ if (is_dst)
+ type = tgsi_opcode_infer_dst_type(tgsi_opcode);
+ else
+ type = tgsi_opcode_infer_src_type(tgsi_opcode);
+
+ switch (type) {
+ case TGSI_TYPE_UNSIGNED:
+ return TOY_TYPE_UD;
+ case TGSI_TYPE_SIGNED:
+ return TOY_TYPE_D;
+ case TGSI_TYPE_FLOAT:
+ return TOY_TYPE_F;
+ case TGSI_TYPE_UNTYPED:
+ case TGSI_TYPE_VOID:
+ case TGSI_TYPE_DOUBLE: