Module: wine Branch: master Commit: 22e57d025cab64853a2255d7cc5731109b65a126 URL: http://source.winehq.org/git/wine.git/?a=commit;h=22e57d025cab64853a2255d7cc...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Apr 10 09:15:06 2009 +0200
wined3d: Store the destination shift in struct wined3d_shader_dst_param.
---
dlls/wined3d/arb_program_shader.c | 12 ++++++------ dlls/wined3d/baseshader.c | 1 + dlls/wined3d/glsl_shader.c | 7 +------ dlls/wined3d/vertexshader.c | 1 + dlls/wined3d/wined3d_private.h | 1 + 5 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 5d3bd76..a3f4613 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -815,7 +815,7 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins) char dst_name[50]; char src_name[3][50]; BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE; - DWORD shift = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + DWORD shift = ins->dst[0].shift;
/* FIXME: support output modifiers */
@@ -847,7 +847,7 @@ 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 = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + DWORD shift = ins->dst[0].shift; BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE;
/* FIXME: support output modifiers */ @@ -876,7 +876,7 @@ 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 = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + DWORD shift = ins->dst[0].shift; BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE;
pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); @@ -970,7 +970,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) if (centroid) FIXME("Unhandled modifier(%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT); } - shift = (dst->token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + shift = dst->shift; modifier = (saturate && !shift) ? "_SAT" : "";
/* Generate input register names (with modifiers) */ @@ -1632,7 +1632,7 @@ 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 = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + DWORD shift = ins->dst[0].shift; BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE;
pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); @@ -1659,7 +1659,7 @@ 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 = (ins->dst[0].token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; + DWORD shift = ins->dst[0].shift; BOOL sat = ins->dst[0].modifiers & WINED3DSPDM_SATURATE;
pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name); diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index c7931ee..5f19a99 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -219,6 +219,7 @@ static void shader_parse_dst_param(DWORD param, DWORD addr_param, struct wined3d dst->register_idx = param & WINED3DSP_REGNUM_MASK; dst->write_mask = param & WINED3DSP_WRITEMASK_ALL; dst->modifiers = param & WINED3DSP_DSTMOD_MASK; + dst->shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; dst->token = param; dst->addr_token = addr_param; } diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 19d8bf1..042c33e 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1289,14 +1289,9 @@ static DWORD shader_glsl_append_dst_ext(SHADER_BUFFER *buffer, { glsl_dst_param_t glsl_dst; DWORD mask; - int shift;
mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst); - if (mask) - { - shift = (dst->token & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[shift]); - } + if (mask) shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]);
return mask; } diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c index 8369251..e0640e9 100644 --- a/dlls/wined3d/vertexshader.c +++ b/dlls/wined3d/vertexshader.c @@ -184,6 +184,7 @@ static void vshader_set_input( This->semantics_in[regnum].reg.register_idx = regnum; This->semantics_in[regnum].reg.write_mask = WINED3DSP_WRITEMASK_ALL; This->semantics_in[regnum].reg.modifiers = 0; + This->semantics_in[regnum].reg.shift = 0; This->semantics_in[regnum].reg.token = reg_token; This->semantics_in[regnum].reg.addr_token = 0; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 200bf22..0d1dfe2 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -450,6 +450,7 @@ struct wined3d_shader_dst_param UINT register_idx; DWORD write_mask; DWORD modifiers; + DWORD shift; DWORD token; DWORD addr_token; };