Henri Verbeet : wined3d: Store the destination shift in struct wined3d_shader_dst_param.

Alexandre Julliard julliard at winehq.org
Fri Apr 10 08:10:14 CDT 2009


Module: wine
Branch: master
Commit: 22e57d025cab64853a2255d7cc5731109b65a126
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=22e57d025cab64853a2255d7cc5731109b65a126

Author: Henri Verbeet <hverbeet at 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;
 };




More information about the wine-cvs mailing list