wined3d: Explicitly pass the register type and index to pshader_get_register_name().

Henri Verbeet hverbeet at codeweavers.com
Fri Apr 10 02:15:06 CDT 2009


---
 dlls/wined3d/arb_program_shader.c |   62 ++++++++++++++++++-------------------
 1 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index a3f4613..8e5a149 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -433,19 +433,19 @@ static void shader_arb_get_swizzle(const DWORD param, BOOL fixup, char *swizzle_
     *ptr = '\0';
 }
 
-static void pshader_get_register_name(IWineD3DBaseShader* iface,
-    const DWORD param, char* regstr) {
-
-    DWORD reg = param & WINED3DSP_REGNUM_MASK;
-    DWORD regtype = shader_get_regtype(param);
+static void pshader_get_register_name(IWineD3DBaseShader *iface,
+        WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx, char *regstr)
+{
     IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *) iface;
 
-    switch (regtype) {
+    switch (register_type)
+    {
     case WINED3DSPR_TEMP:
-        sprintf(regstr, "R%u", reg);
+        sprintf(regstr, "R%u", register_idx);
     break;
     case WINED3DSPR_INPUT:
-        if (reg==0) {
+        if (register_idx == 0)
+        {
             strcpy(regstr, "fragment.color.primary");
         } else {
             strcpy(regstr, "fragment.color.secondary");
@@ -453,20 +453,20 @@ static void pshader_get_register_name(IWineD3DBaseShader* iface,
     break;
     case WINED3DSPR_CONST:
         if(This->baseShader.load_local_constsF || list_empty(&This->baseShader.constantsF)) {
-            sprintf(regstr, "C[%u]", reg);
+            sprintf(regstr, "C[%u]", register_idx);
         } else {
-            sprintf(regstr, "C%u", reg);
+            sprintf(regstr, "C%u", register_idx);
         }
     break;
     case WINED3DSPR_TEXTURE: /* case WINED3DSPR_ADDR: */
-        sprintf(regstr,"T%u", reg);
+        sprintf(regstr, "T%u", register_idx);
     break;
     case WINED3DSPR_COLOROUT:
-        if (reg == 0)
+        if (register_idx == 0)
             sprintf(regstr, "TMP_COLOR");
         else {
             /* TODO: See GL_ARB_draw_buffers */
-            FIXME("Unsupported write to render target %u\n", reg);
+            FIXME("Unsupported write to render target %u\n", register_idx);
             sprintf(regstr, "unsupported_register");
         }
     break;
@@ -474,13 +474,13 @@ static void pshader_get_register_name(IWineD3DBaseShader* iface,
         sprintf(regstr, "result.depth");
     break;
     case WINED3DSPR_ATTROUT:
-        sprintf(regstr, "oD[%u]", reg);
+        sprintf(regstr, "oD[%u]", register_idx);
     break;
     case WINED3DSPR_TEXCRDOUT:
-        sprintf(regstr, "oT[%u]", reg);
+        sprintf(regstr, "oT[%u]", register_idx);
     break;
     default:
-        FIXME("Unhandled register name Type(%d)\n", regtype);
+        FIXME("Unhandled register name Type(%d)\n", register_type);
         sprintf(regstr, "unrecognized_register");
     break;
     }
@@ -709,7 +709,7 @@ static void pshader_gen_input_modifier_line (
     insert_line = 1;
 
     /* Get register name */
-    pshader_get_register_name(iface, instr, regstr);
+    pshader_get_register_name(iface, shader_get_regtype(instr), instr & WINED3DSP_REGNUM_MASK, regstr);
     shader_arb_get_swizzle(instr, FALSE, swzstr);
 
     switch (instr & WINED3DSP_SRCMOD_MASK) {
@@ -788,7 +788,7 @@ static void pshader_hw_bem(const struct wined3d_shader_instruction *ins)
         }
     }
 
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
     strcat(dst_name, dst_wmask);
 
@@ -820,7 +820,7 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins)
     /* FIXME: support output modifiers */
 
     /* Handle output register */
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
 
     /* Generate input register names (with modifiers) */
@@ -853,7 +853,7 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins)
     /* FIXME: support output modifiers */
 
     /* Handle output register */
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
 
     /* Generate input register names (with modifiers) */
@@ -879,7 +879,7 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins)
     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);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
 
     pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name[0]);
@@ -980,7 +980,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins)
         }
 
         /* Handle output register */
-        pshader_get_register_name(ins->shader, dst->token, output_rname);
+        pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, output_rname);
         strcpy(operands[0], output_rname);
         shader_arb_get_write_mask(ins, dst->token, output_wmask);
         strcat(operands[0], output_wmask);
@@ -1069,7 +1069,7 @@ static void pshader_hw_texkill(const struct wined3d_shader_instruction *ins)
     /* No swizzles are allowed in d3d's texkill. PS 1.x ignores the 4th component as documented,
      * but >= 2.0 honors it(undocumented, but tested by the d3d9 testsuit)
      */
-    pshader_get_register_name(ins->shader, ins->dst[0].token, reg_dest);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, reg_dest);
 
     if (shader_version >= WINED3DPS_VERSION(2,0))
     {
@@ -1090,7 +1090,6 @@ static void pshader_hw_tex(const struct wined3d_shader_instruction *ins)
     IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->shader;
     IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
 
-    DWORD dst = ins->dst[0].token;
     const DWORD *src = ins->src;
     SHADER_BUFFER* buffer = ins->buffer;
     DWORD shader_version = ins->reg_maps->shader_version;
@@ -1103,7 +1102,7 @@ static void pshader_hw_tex(const struct wined3d_shader_instruction *ins)
 
     /* All versions have a destination register */
     reg_dest_code = ins->dst[0].register_idx;
-    pshader_get_register_name(ins->shader, dst, reg_dest);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, reg_dest);
 
     /* 1.0-1.3: Use destination register as coordinate source.
        1.4+: Use provided coordinate source register. */
@@ -1222,7 +1221,6 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins)
     BOOL has_luminance = FALSE;
     int i;
 
-    DWORD dst = ins->dst[0].token;
     DWORD src = ins->src[0] & WINED3DSP_REGNUM_MASK;
     SHADER_BUFFER* buffer = ins->buffer;
 
@@ -1232,7 +1230,7 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins)
     /* All versions have a destination register */
     reg_dest_code = ins->dst[0].register_idx;
     /* Can directly use the name because texbem is only valid for <= 1.3 shaders */
-    pshader_get_register_name(ins->shader, dst, reg_coord);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, reg_coord);
 
     for(i = 0; i < This->numbumpenvmatconsts; i++) {
         if (This->bumpenvmatconst[i].const_num != WINED3D_CONST_NUM_UNUSED
@@ -1436,7 +1434,7 @@ static void pshader_hw_texdepth(const struct wined3d_shader_instruction *ins)
      * parameter. According to the msdn, this must be register r5, but let's keep it more flexible
      * here
      */
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_name);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
 
     /* According to the msdn, the source register(must be r5) is unusable after
      * the texdepth instruction, so we're free to modify it
@@ -1482,7 +1480,7 @@ static void pshader_hw_texdp3(const struct wined3d_shader_instruction *ins)
     SHADER_BUFFER *buffer = ins->buffer;
 
     /* Handle output register */
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_str);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_str);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_mask);
 
     pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src0);
@@ -1501,7 +1499,7 @@ static void pshader_hw_texm3x3(const struct wined3d_shader_instruction *ins)
     char src0[50];
     DWORD dst_reg = ins->dst[0].register_idx;
 
-    pshader_get_register_name(ins->shader, ins->dst[0].token, dst_str);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_str);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_mask);
 
     pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src0);
@@ -1635,7 +1633,7 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins)
     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);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
 
     pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name);
@@ -1662,7 +1660,7 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins)
     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);
+    pshader_get_register_name(ins->shader, ins->dst[0].register_type, ins->dst[0].register_idx, dst_name);
     shader_arb_get_write_mask(ins, ins->dst[0].token, dst_wmask);
 
     pshader_gen_input_modifier_line(ins->shader, buffer, ins->src[0], 0, src_name);
-- 
1.6.0.6



--------------010702000002050504070202--



More information about the wine-patches mailing list