wined3d: Pass a struct wined3d_shader_register to shader_arb_get_register_name().

Henri Verbeet hverbeet at codeweavers.com
Mon May 11 09:43:49 CDT 2009


---
 dlls/wined3d/arb_program_shader.c |   90 +++++++++++++++---------------------
 1 files changed, 38 insertions(+), 52 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 56ee162..25654f3 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -476,8 +476,8 @@ static void shader_arb_get_swizzle(const struct wined3d_shader_src_param *param,
     *ptr = '\0';
 }
 
-static void shader_arb_get_register_name(IWineD3DBaseShader *iface, WINED3DSHADER_PARAM_REGISTER_TYPE register_type,
-        UINT register_idx, BOOL rel_addr, char *register_name, BOOL *is_color)
+static void shader_arb_get_register_name(IWineD3DBaseShader *iface,
+        const struct wined3d_shader_register *reg, char *register_name, BOOL *is_color)
 {
     /* oPos, oFog and oPts in D3D */
     static const char * const rastout_reg_names[] = {"TMP_OUT", "result.fogcoord", "result.pointsize"};
@@ -486,63 +486,63 @@ static void shader_arb_get_register_name(IWineD3DBaseShader *iface, WINED3DSHADE
 
     *is_color = FALSE;
 
-    switch (register_type)
+    switch (reg->type)
     {
         case WINED3DSPR_TEMP:
-            sprintf(register_name, "R%u", register_idx);
+            sprintf(register_name, "R%u", reg->idx);
             break;
 
         case WINED3DSPR_INPUT:
             if (pshader)
             {
-                if (register_idx == 0) strcpy(register_name, "fragment.color.primary");
+                if (reg->idx == 0) strcpy(register_name, "fragment.color.primary");
                 else strcpy(register_name, "fragment.color.secondary");
             }
             else
             {
-                if (((IWineD3DVertexShaderImpl *)This)->cur_args->swizzle_map & (1 << register_idx)) *is_color = TRUE;
-                sprintf(register_name, "vertex.attrib[%u]", register_idx);
+                if (((IWineD3DVertexShaderImpl *)This)->cur_args->swizzle_map & (1 << reg->idx)) *is_color = TRUE;
+                sprintf(register_name, "vertex.attrib[%u]", reg->idx);
             }
             break;
 
         case WINED3DSPR_CONST:
-            if (!pshader && rel_addr)
+            if (!pshader && reg->rel_addr)
             {
                 UINT rel_offset = ((IWineD3DVertexShaderImpl *)This)->rel_offset;
-                if (register_idx >= rel_offset)
-                    sprintf(register_name, "C[A0.x + %u]", register_idx - rel_offset);
+                if (reg->idx >= rel_offset)
+                    sprintf(register_name, "C[A0.x + %u]", reg->idx - rel_offset);
                 else
-                    sprintf(register_name, "C[A0.x - %u]", -register_idx + rel_offset);
+                    sprintf(register_name, "C[A0.x - %u]", -reg->idx + rel_offset);
             }
             else
             {
                 if (This->baseShader.reg_maps.usesrelconstF)
-                    sprintf(register_name, "C[%u]", register_idx);
+                    sprintf(register_name, "C[%u]", reg->idx);
                 else
-                    sprintf(register_name, "C%u", register_idx);
+                    sprintf(register_name, "C%u", reg->idx);
             }
             break;
 
         case WINED3DSPR_TEXTURE: /* case WINED3DSPR_ADDR: */
-            if (pshader) sprintf(register_name, "T%u", register_idx);
-            else  sprintf(register_name, "A%u", register_idx);
+            if (pshader) sprintf(register_name, "T%u", reg->idx);
+            else  sprintf(register_name, "A%u", reg->idx);
             break;
 
         case WINED3DSPR_COLOROUT:
-            if (register_idx == 0)
+            if (reg->idx == 0)
             {
                 strcpy(register_name, "TMP_COLOR");
             }
             else
             {
                 /* TODO: See GL_ARB_draw_buffers */
-                FIXME("Unsupported write to render target %u\n", register_idx);
+                FIXME("Unsupported write to render target %u\n", reg->idx);
                 sprintf(register_name, "unsupported_register");
             }
             break;
 
         case WINED3DSPR_RASTOUT:
-            sprintf(register_name, "%s", rastout_reg_names[register_idx]);
+            sprintf(register_name, "%s", rastout_reg_names[reg->idx]);
             break;
 
         case WINED3DSPR_DEPTHOUT:
@@ -550,19 +550,19 @@ static void shader_arb_get_register_name(IWineD3DBaseShader *iface, WINED3DSHADE
             break;
 
         case WINED3DSPR_ATTROUT:
-            if (pshader) sprintf(register_name, "oD[%u]", register_idx);
-            else if (register_idx == 0) strcpy(register_name, "result.color.primary");
+            if (pshader) sprintf(register_name, "oD[%u]", reg->idx);
+            else if (reg->idx == 0) strcpy(register_name, "result.color.primary");
             else strcpy(register_name, "result.color.secondary");
             break;
 
         case WINED3DSPR_TEXCRDOUT:
-            if (pshader) sprintf(register_name, "oT[%u]", register_idx);
-            else sprintf(register_name, "result.texcoord[%u]", register_idx);
+            if (pshader) sprintf(register_name, "oT[%u]", reg->idx);
+            else sprintf(register_name, "result.texcoord[%u]", reg->idx);
             break;
 
         default:
-            FIXME("Unhandled register type %#x[%u]\n", register_type, register_idx);
-            sprintf(register_name, "unrecognized_register[%u]", register_idx);
+            FIXME("Unhandled register type %#x[%u]\n", reg->type, reg->idx);
+            sprintf(register_name, "unrecognized_register[%u]", reg->idx);
             break;
     }
 }
@@ -574,8 +574,7 @@ static void shader_arb_get_dst_param(const struct wined3d_shader_instruction *in
     char write_mask[6];
     BOOL is_color;
 
-    shader_arb_get_register_name(ins->ctx->shader, wined3d_dst->reg.type,
-            wined3d_dst->reg.idx, !!wined3d_dst->reg.rel_addr, register_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &wined3d_dst->reg, register_name, &is_color);
     strcpy(str, register_name);
 
     shader_arb_get_write_mask(ins, wined3d_dst, write_mask);
@@ -726,8 +725,7 @@ static void shader_arb_get_src_param(const struct wined3d_shader_instruction *in
     insert_line = 1;
 
     /* Get register name */
-    shader_arb_get_register_name(ins->ctx->shader, src->reg.type,
-            src->reg.idx, !!src->reg.rel_addr, regstr, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &src->reg, regstr, &is_color);
     shader_arb_get_swizzle(src, is_color, swzstr);
 
     switch (src->modifiers)
@@ -801,8 +799,7 @@ static void pshader_hw_bem(const struct wined3d_shader_instruction *ins)
         }
     }
 
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
     strcat(dst_name, dst_wmask);
 
@@ -837,8 +834,7 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins)
     /* FIXME: support output modifiers */
 
     /* Handle output register */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
 
     /* Generate input register names (with modifiers) */
@@ -870,8 +866,7 @@ static void pshader_hw_cmp(const struct wined3d_shader_instruction *ins)
     /* FIXME: support output modifiers */
 
     /* Handle output register */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
 
     /* Generate input register names (with modifiers) */
@@ -895,8 +890,7 @@ static void pshader_hw_dp2add(const struct wined3d_shader_instruction *ins)
     BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
     BOOL is_color;
 
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
 
     shader_arb_get_src_param(ins, &ins->src[0], 0, src_name[0]);
@@ -1050,8 +1044,7 @@ static void pshader_hw_tex(const struct wined3d_shader_instruction *ins)
     DWORD reg_sampler_code;
 
     /* All versions have a destination register */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, reg_dest, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, reg_dest, &is_color);
 
     /* 1.0-1.3: Use destination register as coordinate source.
        1.4+: Use provided coordinate source register. */
@@ -1180,8 +1173,7 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins)
     /* All versions have a destination register */
     reg_dest_code = dst->reg.idx;
     /* Can directly use the name because texbem is only valid for <= 1.3 shaders */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, reg_coord, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, reg_coord, &is_color);
 
     for(i = 0; i < This->numbumpenvmatconsts; i++) {
         if (This->bumpenvmatconst[i].const_num != WINED3D_CONST_NUM_UNUSED
@@ -1390,8 +1382,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
      */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
 
     /* According to the msdn, the source register(must be r5) is unusable after
      * the texdepth instruction, so we're free to modify it
@@ -1438,8 +1429,7 @@ static void pshader_hw_texdp3(const struct wined3d_shader_instruction *ins)
     BOOL is_color;
 
     /* Handle output register */
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_str, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_str, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_mask);
 
     shader_arb_get_src_param(ins, &ins->src[0], 0, src0);
@@ -1459,8 +1449,7 @@ static void pshader_hw_texm3x3(const struct wined3d_shader_instruction *ins)
     char src0[50];
     BOOL is_color;
 
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_str, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_str, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_mask);
 
     shader_arb_get_src_param(ins, &ins->src[0], 0, src0);
@@ -1593,8 +1582,7 @@ static void shader_hw_nrm(const struct wined3d_shader_instruction *ins)
     BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
     BOOL is_color;
 
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
 
     shader_arb_get_src_param(ins, &ins->src[0], 0, src_name);
@@ -1619,8 +1607,7 @@ static void shader_hw_sincos(const struct wined3d_shader_instruction *ins)
     BOOL sat = dst->modifiers & WINED3DSPDM_SATURATE;
     BOOL is_color;
 
-    shader_arb_get_register_name(ins->ctx->shader, dst->reg.type,
-            dst->reg.idx, !!dst->reg.rel_addr, dst_name, &is_color);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, dst_name, &is_color);
     shader_arb_get_write_mask(ins, dst, dst_wmask);
 
     shader_arb_get_src_param(ins, &ins->src[0], 0, src_name);
@@ -2157,8 +2144,7 @@ static void shader_arb_add_instruction_modifiers(const struct wined3d_shader_ins
     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);
+    shader_arb_get_register_name(ins->ctx->shader, &dst->reg, regstr, &is_color);
 
     /* Generate a line that does the output modifier computation */
     shader_addline(buffer, "MUL%s %s%s, %s, %s;\n", saturate ? "_SAT" : "",
-- 
1.6.0.6



--------------050508000905090504060907--



More information about the wine-patches mailing list