static const struct wined3d_sm1_opcode_info *shader_get_opcode(const struct wined3d_sm1_data *priv, DWORD code) { DWORD shader_version = WINED3D_SHADER_VERSION(priv->shader_version.major, priv->shader_version.minor); const struct wined3d_sm1_opcode_info *opcode_table = priv->opcode_table; DWORD i = 0; while (opcode_table[i].handler_idx != WINED3DSIH_TABLE_SIZE) { if ((code & WINED3DSI_OPCODE_MASK) == opcode_table[i].opcode && shader_version >= opcode_table[i].min_version && (!opcode_table[i].max_version || shader_version <= opcode_table[i].max_version)) { return &opcode_table[i]; } ++i; } FIXME("Unsupported opcode %#x(%d) masked %#x, shader version %#x\n", code, code, code & WINED3DSI_OPCODE_MASK, shader_version); return NULL; }
static const struct wined3d_sm1_opcode_info *shader_get_opcode(const struct wined3d_sm1_data *priv, DWORD token) { DWORD shader_version = WINED3D_SHADER_VERSION(priv->shader_version.major, priv->shader_version.minor); const struct wined3d_sm1_opcode_info *opcode_table = priv->opcode_table; unsigned int i = 0; while (opcode_table[i].handler_idx != WINED3DSIH_TABLE_SIZE) { if ((token & WINED3D_SM1_OPCODE_MASK) == opcode_table[i].opcode && shader_version >= opcode_table[i].min_version && (!opcode_table[i].max_version || shader_version <= opcode_table[i].max_version)) { return &opcode_table[i]; } ++i; } FIXME("Unsupported opcode %#x, token 0x%08x, shader version %#x.\n", token & WINED3D_SM1_OPCODE_MASK, token, shader_version); return NULL; }
struct wined3d_shader_src_param src_rel_addr[4]; struct wined3d_shader_src_param pred_rel_addr; struct wined3d_shader_src_param dst_rel_addr; struct wined3d_shader_src_param src_param[4]; struct wined3d_shader_src_param pred_param; struct wined3d_shader_dst_param dst_param; }; /* This table is not order or position dependent. */ static const struct wined3d_sm1_opcode_info vs_opcode_table[] = { /* Arithmetic */ {WINED3D_SM1_OP_NOP, 0, 0, WINED3DSIH_NOP, 0, 0 }, {WINED3D_SM1_OP_MOV, 1, 2, WINED3DSIH_MOV, 0, 0 }, {WINED3D_SM1_OP_MOVA, 1, 2, WINED3DSIH_MOVA, WINED3D_SHADER_VERSION(2,0), -1 }, {WINED3D_SM1_OP_ADD, 1, 3, WINED3DSIH_ADD, 0, 0 }, {WINED3D_SM1_OP_SUB, 1, 3, WINED3DSIH_SUB, 0, 0 }, {WINED3D_SM1_OP_MAD, 1, 4, WINED3DSIH_MAD, 0, 0 }, {WINED3D_SM1_OP_MUL, 1, 3, WINED3DSIH_MUL, 0, 0 }, {WINED3D_SM1_OP_RCP, 1, 2, WINED3DSIH_RCP, 0, 0 }, {WINED3D_SM1_OP_RSQ, 1, 2, WINED3DSIH_RSQ, 0, 0 }, {WINED3D_SM1_OP_DP3, 1, 3, WINED3DSIH_DP3, 0, 0 }, {WINED3D_SM1_OP_DP4, 1, 3, WINED3DSIH_DP4, 0, 0 }, {WINED3D_SM1_OP_MIN, 1, 3, WINED3DSIH_MIN, 0, 0 }, {WINED3D_SM1_OP_MAX, 1, 3, WINED3DSIH_MAX, 0, 0 }, {WINED3D_SM1_OP_SLT, 1, 3, WINED3DSIH_SLT, 0, 0 }, {WINED3D_SM1_OP_SGE, 1, 3, WINED3DSIH_SGE, 0, 0 }, {WINED3D_SM1_OP_ABS, 1, 2, WINED3DSIH_ABS, 0, 0 }, {WINED3D_SM1_OP_EXP, 1, 2, WINED3DSIH_EXP, 0, 0 }, {WINED3D_SM1_OP_LOG, 1, 2, WINED3DSIH_LOG, 0, 0 },