mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 17:16:18 +00:00
wined3d: Pass the instr to pshader_gen_output_modifier_line.
This commit is contained in:
parent
2fd485ae31
commit
f025829449
|
@ -798,9 +798,26 @@ static void pshader_gen_input_modifier_line(IWineD3DBaseShader *iface, SHADER_BU
|
|||
sprintf(outregstr, "T%c%s", 'A' + tmpreg, swzstr);
|
||||
}
|
||||
|
||||
static inline void pshader_gen_output_modifier_line(SHADER_BUFFER *buffer, int saturate, const char *write_mask,
|
||||
int shift, const char *regstr)
|
||||
static inline void pshader_gen_output_modifier_line(const struct wined3d_shader_instruction *ins)
|
||||
{
|
||||
BOOL saturate;
|
||||
DWORD shift;
|
||||
char write_mask[20], regstr[50];
|
||||
SHADER_BUFFER *buffer = ins->ctx->buffer;
|
||||
BOOL is_color = FALSE;
|
||||
const struct wined3d_shader_dst_param *dst;
|
||||
|
||||
if (!ins->dst_count) return;
|
||||
|
||||
dst = &ins->dst[0];
|
||||
shift = dst->shift;
|
||||
if(shift == 0) return; /* Saturate alone is handled by the instructions */
|
||||
saturate = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
|
||||
shader_arb_get_write_mask(ins, dst, write_mask);
|
||||
shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
|
||||
dst->reg.idx, !!dst->reg.rel_addr, regstr, &is_color);
|
||||
|
||||
/* Generate a line that does the output modifier computation */
|
||||
shader_addline(buffer, "MUL%s %s%s, %s, %s;\n", saturate ? "_SAT" : "",
|
||||
regstr, write_mask, regstr, shift_tab[shift]);
|
||||
|
@ -857,7 +874,6 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins)
|
|||
char dst_name[50];
|
||||
char src_name[3][50];
|
||||
BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
DWORD shift = dst->shift;
|
||||
BOOL is_color;
|
||||
DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
|
||||
ins->ctx->reg_maps->shader_version.minor);
|
||||
|
@ -883,8 +899,8 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "CMP%s %s%s, TMP, %s, %s;\n",
|
||||
sat ? "_SAT" : "", dst_name, dst_wmask, src_name[1], src_name[2]);
|
||||
}
|
||||
if (shift != 0)
|
||||
pshader_gen_output_modifier_line(buffer, FALSE, dst_wmask, shift, dst_name);
|
||||
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
}
|
||||
|
||||
static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins)
|
||||
|
@ -894,7 +910,6 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins)
|
|||
char dst_wmask[20];
|
||||
char dst_name[50];
|
||||
char src_name[3][50];
|
||||
DWORD shift = dst->shift;
|
||||
BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
BOOL is_color;
|
||||
|
||||
|
@ -913,8 +928,7 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "CMP%s %s%s, %s, %s, %s;\n", sat ? "_SAT" : "", dst_name, dst_wmask,
|
||||
src_name[0], src_name[2], src_name[1]);
|
||||
|
||||
if (shift != 0)
|
||||
pshader_gen_output_modifier_line(buffer, FALSE, dst_wmask, shift, dst_name);
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
}
|
||||
|
||||
/** Process the WINED3DSIO_DP2ADD instruction in ARB.
|
||||
|
@ -926,7 +940,6 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins)
|
|||
char dst_wmask[20];
|
||||
char dst_name[50];
|
||||
char src_name[3][50];
|
||||
DWORD shift = dst->shift;
|
||||
BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
BOOL is_color;
|
||||
|
||||
|
@ -944,8 +957,7 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "DP3 TMP2, TMP, %s;\n", src_name[1]);
|
||||
shader_addline(buffer, "ADD%s %s%s, TMP2, %s;\n", sat ? "_SAT" : "", dst_name, dst_wmask, src_name[2]);
|
||||
|
||||
if (shift != 0)
|
||||
pshader_gen_output_modifier_line(buffer, FALSE, dst_wmask, shift, dst_name);
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
}
|
||||
|
||||
/* Map the opcode 1-to-1 to the GL code */
|
||||
|
@ -1048,7 +1060,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "%s%s %s;\n", instruction, modifier, arguments);
|
||||
|
||||
/* A shift requires another line. */
|
||||
if (shift) pshader_gen_output_modifier_line(buffer, saturate, output_wmask, shift, output_rname);
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
} else {
|
||||
/* Note that shader_arb_add_*_param() adds spaces. */
|
||||
|
||||
|
@ -1687,7 +1699,6 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins)
|
|||
char dst_name[50];
|
||||
char src_name[50];
|
||||
char dst_wmask[20];
|
||||
DWORD shift = dst->shift;
|
||||
BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
BOOL is_color;
|
||||
|
||||
|
@ -1702,8 +1713,7 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "MUL%s %s%s, %s, TMP;\n", sat ? "_SAT" : "", dst_name, dst_wmask,
|
||||
src_name);
|
||||
|
||||
if (shift != 0)
|
||||
pshader_gen_output_modifier_line(buffer, FALSE, dst_wmask, shift, dst_name);
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
}
|
||||
|
||||
static void shader_hw_sincos(const struct wined3d_shader_instruction *ins)
|
||||
|
@ -1717,7 +1727,6 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins)
|
|||
char dst_name[50];
|
||||
char src_name[50];
|
||||
char dst_wmask[20];
|
||||
DWORD shift = dst->shift;
|
||||
BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
|
||||
BOOL is_color;
|
||||
|
||||
|
@ -1729,8 +1738,7 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins)
|
|||
shader_addline(buffer, "SCS%s %s%s, %s;\n", sat ? "_SAT" : "", dst_name, dst_wmask,
|
||||
src_name);
|
||||
|
||||
if (shift != 0)
|
||||
pshader_gen_output_modifier_line(buffer, FALSE, dst_wmask, shift, dst_name);
|
||||
pshader_gen_output_modifier_line(ins);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue