d3dcompiler_43: Don't use nameless unions in our private structures to avoid trouble with compilers where they are not supported.

Francois Gouget fgouget at free.fr
Sun Aug 29 16:40:33 CDT 2010


---
 dlls/d3dcompiler_43/asmparser.c           |   24 ++++++++--------
 dlls/d3dcompiler_43/asmshader.y           |   34 +++++++++++-----------
 dlls/d3dcompiler_43/asmutils.c            |   32 +++++++++++-----------
 dlls/d3dcompiler_43/bytecodewriter.c      |   42 ++++++++++++++--------------
 dlls/d3dcompiler_43/d3dcompiler_private.h |    2 +-
 5 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/dlls/d3dcompiler_43/asmparser.c b/dlls/d3dcompiler_43/asmparser.c
index bcef8d4..8d65d04 100644
--- a/dlls/d3dcompiler_43/asmparser.c
+++ b/dlls/d3dcompiler_43/asmparser.c
@@ -110,7 +110,7 @@ static void asmparser_dcl_output(struct asm_parser *This, DWORD usage, DWORD num
         asmparser_message(This, "Line %u: Output register declared in a pixel shader\n", This->line_no);
         set_parse_status(This, PARSE_ERR);
     }
-    if(!record_declaration(This->shader, usage, num, 0, TRUE, reg->regnum, reg->writemask, FALSE)) {
+    if(!record_declaration(This->shader, usage, num, 0, TRUE, reg->regnum, reg->u.writemask, FALSE)) {
         ERR("Out of memory\n");
         set_parse_status(This, PARSE_ERR);
     }
@@ -141,7 +141,7 @@ static void asmparser_dcl_input(struct asm_parser *This, DWORD usage, DWORD num,
     instr.shift = 0;
     This->funcs->dstreg(This, &instr, reg);
 
-    if(!record_declaration(This->shader, usage, num, mod, FALSE, reg->regnum, reg->writemask, FALSE)) {
+    if(!record_declaration(This->shader, usage, num, mod, FALSE, reg->regnum, reg->u.writemask, FALSE)) {
         ERR("Out of memory\n");
         set_parse_status(This, PARSE_ERR);
     }
@@ -155,7 +155,7 @@ static void asmparser_dcl_input_ps_2(struct asm_parser *This, DWORD usage, DWORD
     instr.dstmod = mod;
     instr.shift = 0;
     This->funcs->dstreg(This, &instr, reg);
-    if(!record_declaration(This->shader, usage, num, mod, FALSE, instr.dst.regnum, instr.dst.writemask, FALSE)) {
+    if(!record_declaration(This->shader, usage, num, mod, FALSE, instr.dst.regnum, instr.dst.u.writemask, FALSE)) {
         ERR("Out of memory\n");
         set_parse_status(This, PARSE_ERR);
     }
@@ -396,7 +396,7 @@ static void asmparser_texhelper(struct asm_parser *This, DWORD mod, DWORD shift,
     ZeroMemory(&instr->src[1], sizeof(instr->src[1]));
     instr->src[1].type = BWRITERSPR_SAMPLER;
     instr->src[1].regnum = dst->regnum;
-    instr->src[1].swizzle = BWRITERVS_NOSWIZZLE;
+    instr->src[1].u.swizzle = BWRITERVS_NOSWIZZLE;
     instr->src[1].srcmod = BWRITERSPSM_NONE;
     instr->src[1].rel_reg = NULL;
 
@@ -450,7 +450,7 @@ static void asmparser_texld14(struct asm_parser *This, DWORD mod, DWORD shift,
     ZeroMemory(&instr->src[1], sizeof(instr->src[1]));
     instr->src[1].type = BWRITERSPR_SAMPLER;
     instr->src[1].regnum = dst->regnum;
-    instr->src[1].swizzle = BWRITERVS_NOSWIZZLE;
+    instr->src[1].u.swizzle = BWRITERVS_NOSWIZZLE;
     instr->src[1].srcmod = BWRITERSPSM_NONE;
     instr->src[1].rel_reg = NULL;
 
@@ -467,7 +467,7 @@ static void asmparser_texreg2ar(struct asm_parser *This, DWORD mod, DWORD shift,
 
     src = map_oldps_register(src0, FALSE);
     /* Supply the correct swizzle */
-    src.swizzle = BWRITERVS_X_W | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X;
+    src.u.swizzle = BWRITERVS_X_W | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X;
     asmparser_texhelper(This, mod, shift, dst, &src);
 }
 
@@ -478,7 +478,7 @@ static void asmparser_texreg2gb(struct asm_parser *This, DWORD mod, DWORD shift,
 
     src = map_oldps_register(src0, FALSE);
     /* Supply the correct swizzle */
-    src.swizzle = BWRITERVS_X_Y | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z;
+    src.u.swizzle = BWRITERVS_X_Y | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z;
     asmparser_texhelper(This, mod, shift, dst, &src);
 }
 
@@ -489,7 +489,7 @@ static void asmparser_texreg2rgb(struct asm_parser *This, DWORD mod, DWORD shift
 
     src = map_oldps_register(src0, FALSE);
     /* Supply the correct swizzle */
-    src.swizzle = BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z | BWRITERVS_W_Z;
+    src.u.swizzle = BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z | BWRITERVS_W_Z;
     asmparser_texhelper(This, mod, shift, dst, &src);
 }
 
@@ -618,11 +618,11 @@ static struct shader_reg map_oldvs_register(const struct shader_reg *reg) {
                     break;
                 case BWRITERSRO_FOG:
                     ret.regnum = OFOG_REG;
-                    ret.writemask = OFOG_WRITEMASK;
+                    ret.u.writemask = OFOG_WRITEMASK;
                     break;
                 case BWRITERSRO_POINT_SIZE:
                     ret.regnum = OPTS_REG;
-                    ret.writemask = OPTS_WRITEMASK;
+                    ret.u.writemask = OPTS_WRITEMASK;
                     break;
                 default:
                     FIXME("Unhandled RASTOUT register %u\n", reg->regnum);
@@ -690,9 +690,9 @@ static void check_abs_srcmod(struct asm_parser *This, DWORD srcmod) {
 
 static void check_loop_swizzle(struct asm_parser *This,
                                const struct shader_reg *src) {
-    if((src->type == BWRITERSPR_LOOP && src->swizzle != BWRITERVS_NOSWIZZLE) ||
+    if((src->type == BWRITERSPR_LOOP && src->u.swizzle != BWRITERVS_NOSWIZZLE) ||
        (src->rel_reg && src->rel_reg->type == BWRITERSPR_LOOP &&
-        src->rel_reg->swizzle != BWRITERVS_NOSWIZZLE)) {
+        src->rel_reg->u.swizzle != BWRITERVS_NOSWIZZLE)) {
         asmparser_message(This, "Line %u: Swizzle not allowed on aL register\n", This->line_no);
         set_parse_status(This, PARSE_ERR);
     }
diff --git a/dlls/d3dcompiler_43/asmshader.y b/dlls/d3dcompiler_43/asmshader.y
index 764010e..4e22c95 100644
--- a/dlls/d3dcompiler_43/asmshader.y
+++ b/dlls/d3dcompiler_43/asmshader.y
@@ -48,7 +48,7 @@ void set_rel_reg(struct shader_reg *reg, struct rel_reg *rel) {
             return;
         }
         reg->rel_reg->type = rel->type;
-        reg->rel_reg->swizzle = rel->swizzle;
+        reg->rel_reg->u.swizzle = rel->swizzle;
         reg->rel_reg->regnum = rel->rel_regnum;
     }
 }
@@ -557,7 +557,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $3;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = BWRITERSP_WRITEMASK_ALL;
+                                reg.u.writemask = BWRITERSP_WRITEMASK_ALL;
                                 asm_ctx.funcs->dcl_output(&asm_ctx, $2.dclusage, $2.regnum, &reg);
                             }
                     | INSTR_DCL dclusage REG_OUTPUT writemask
@@ -569,7 +569,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $3;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = $4;
+                                reg.u.writemask = $4;
                                 asm_ctx.funcs->dcl_output(&asm_ctx, $2.dclusage, $2.regnum, &reg);
                             }
                     | INSTR_DCL dclusage omods dcl_inputreg
@@ -592,7 +592,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $4.regnum;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = BWRITERSP_WRITEMASK_ALL;
+                                reg.u.writemask = BWRITERSP_WRITEMASK_ALL;
                                 asm_ctx.funcs->dcl_input(&asm_ctx, $2.dclusage, $2.regnum, $3.mod, &reg);
                             }
                     | INSTR_DCL dclusage omods dcl_inputreg writemask
@@ -615,7 +615,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $4.regnum;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = $5;
+                                reg.u.writemask = $5;
                                 asm_ctx.funcs->dcl_input(&asm_ctx, $2.dclusage, $2.regnum, $3.mod, &reg);
                             }
                     | INSTR_DCL omods dcl_inputreg
@@ -637,7 +637,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $3.regnum;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = BWRITERSP_WRITEMASK_ALL;
+                                reg.u.writemask = BWRITERSP_WRITEMASK_ALL;
                                 asm_ctx.funcs->dcl_input(&asm_ctx, 0, 0, $2.mod, &reg);
                             }
                     | INSTR_DCL omods dcl_inputreg writemask
@@ -659,7 +659,7 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                                 reg.regnum = $3.regnum;
                                 reg.rel_reg = NULL;
                                 reg.srcmod = 0;
-                                reg.writemask = $4;
+                                reg.u.writemask = $4;
                                 asm_ctx.funcs->dcl_input(&asm_ctx, 0, 0, $2.mod, &reg);
                             }
                     | INSTR_DCL sampdcl omods REG_SAMPLER
@@ -976,7 +976,7 @@ dreg:                 dreg_name rel_reg
                             {
                                 $$.regnum = $1.regnum;
                                 $$.type = $1.type;
-                                $$.writemask = BWRITERSP_WRITEMASK_ALL;
+                                $$.u.writemask = BWRITERSP_WRITEMASK_ALL;
                                 $$.srcmod = BWRITERSPSM_NONE;
                                 set_rel_reg(&$$, &$2);
                             }
@@ -984,7 +984,7 @@ dreg:                 dreg_name rel_reg
                             {
                                 $$.regnum = $1.regnum;
                                 $$.type = $1.type;
-                                $$.writemask = $2;
+                                $$.u.writemask = $2;
                                 $$.srcmod = BWRITERSPSM_NONE;
                                 $$.rel_reg = NULL;
                             }
@@ -1250,7 +1250,7 @@ sreg:                   sreg_name rel_reg swizzle
                         {
                             $$.type = $1.type;
                             $$.regnum = $1.regnum;
-                            $$.swizzle = $3;
+                            $$.u.swizzle = $3;
                             $$.srcmod = BWRITERSPSM_NONE;
                             set_rel_reg(&$$, &$2);
                         }
@@ -1260,7 +1260,7 @@ sreg:                   sreg_name rel_reg swizzle
                             $$.regnum = $1.regnum;
                             set_rel_reg(&$$, &$2);
                             $$.srcmod = $3;
-                            $$.swizzle = $4;
+                            $$.u.swizzle = $4;
                         }
                     | '-' sreg_name rel_reg swizzle
                         {
@@ -1268,7 +1268,7 @@ sreg:                   sreg_name rel_reg swizzle
                             $$.regnum = $2.regnum;
                             $$.srcmod = BWRITERSPSM_NEG;
                             set_rel_reg(&$$, &$3);
-                            $$.swizzle = $4;
+                            $$.u.swizzle = $4;
                         }
                     | '-' sreg_name rel_reg smod swizzle
                         {
@@ -1293,7 +1293,7 @@ sreg:                   sreg_name rel_reg swizzle
                                 default:
                                     FIXME("Unhandled combination of NEGATE and %u\n", $4);
                             }
-                            $$.swizzle = $5;
+                            $$.u.swizzle = $5;
                         }
                     | IMMVAL '-' sreg_name rel_reg swizzle
                         {
@@ -1307,7 +1307,7 @@ sreg:                   sreg_name rel_reg swizzle
                             $$.regnum = $3.regnum;
                             $$.srcmod = BWRITERSPSM_COMP;
                             set_rel_reg(&$$, &$4);
-                            $$.swizzle = $5;
+                            $$.u.swizzle = $5;
                         }
                     | IMMVAL '-' sreg_name rel_reg smod swizzle
                         {
@@ -1329,7 +1329,7 @@ sreg:                   sreg_name rel_reg swizzle
                             $$.regnum = $2.regnum;
                             $$.rel_reg = NULL;
                             $$.srcmod = BWRITERSPSM_NOT;
-                            $$.swizzle = $3;
+                            $$.u.swizzle = $3;
                         }
 
 rel_reg:               /* empty */
@@ -1647,7 +1647,7 @@ predicate:            '(' REG_PREDICATE swizzle ')'
                             $$.regnum = 0;
                             $$.rel_reg = NULL;
                             $$.srcmod = BWRITERSPSM_NONE;
-                            $$.swizzle = $3;
+                            $$.u.swizzle = $3;
                         }
                     | '(' SMOD_NOT REG_PREDICATE swizzle ')'
                         {
@@ -1655,7 +1655,7 @@ predicate:            '(' REG_PREDICATE swizzle ')'
                             $$.regnum = 0;
                             $$.rel_reg = NULL;
                             $$.srcmod = BWRITERSPSM_NOT;
-                            $$.swizzle = $4;
+                            $$.u.swizzle = $4;
                         }
 
 %%
diff --git a/dlls/d3dcompiler_43/asmutils.c b/dlls/d3dcompiler_43/asmutils.c
index e6f0d74..11f5d22 100644
--- a/dlls/d3dcompiler_43/asmutils.c
+++ b/dlls/d3dcompiler_43/asmutils.c
@@ -423,7 +423,7 @@ static const char *debug_print_relarg(const struct shader_reg *reg) {
     const char *short_swizzle;
     if(!reg->rel_reg) return "";
 
-    short_swizzle = debug_print_swizzle(reg->rel_reg->swizzle);
+    short_swizzle = debug_print_swizzle(reg->rel_reg->u.swizzle);
 
     if(reg->rel_reg->type == BWRITERSPR_ADDR) {
         return wine_dbg_sprintf("[a%u%s]", reg->rel_reg->regnum, short_swizzle);
@@ -437,7 +437,7 @@ static const char *debug_print_relarg(const struct shader_reg *reg) {
 const char *debug_print_dstreg(const struct shader_reg *reg) {
     return wine_dbg_sprintf("%s%s%s", get_regname(reg),
                             debug_print_relarg(reg),
-                            debug_print_writemask(reg->writemask));
+                            debug_print_writemask(reg->u.writemask));
 }
 
 const char *debug_print_srcreg(const struct shader_reg *reg) {
@@ -445,59 +445,59 @@ const char *debug_print_srcreg(const struct shader_reg *reg) {
         case BWRITERSPSM_NONE:
             return wine_dbg_sprintf("%s%s%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_NEG:
             return wine_dbg_sprintf("-%s%s%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_BIAS:
             return wine_dbg_sprintf("%s%s_bias%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_BIASNEG:
             return wine_dbg_sprintf("-%s%s_bias%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_SIGN:
             return wine_dbg_sprintf("%s%s_bx2%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_SIGNNEG:
             return wine_dbg_sprintf("-%s%s_bx2%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_COMP:
             return wine_dbg_sprintf("1 - %s%s%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_X2:
             return wine_dbg_sprintf("%s%s_x2%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_X2NEG:
             return wine_dbg_sprintf("-%s%s_x2%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_DZ:
             return wine_dbg_sprintf("%s%s_dz%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_DW:
             return wine_dbg_sprintf("%s%s_dw%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_ABS:
             return wine_dbg_sprintf("%s%s_abs%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_ABSNEG:
             return wine_dbg_sprintf("-%s%s_abs%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
         case BWRITERSPSM_NOT:
             return wine_dbg_sprintf("!%s%s%s", get_regname(reg),
                                     debug_print_relarg(reg),
-                                    debug_print_swizzle(reg->swizzle));
+                                    debug_print_swizzle(reg->u.swizzle));
     }
     return "Unknown modifier";
 }
diff --git a/dlls/d3dcompiler_43/bytecodewriter.c b/dlls/d3dcompiler_43/bytecodewriter.c
index 01038fb..5b22580 100644
--- a/dlls/d3dcompiler_43/bytecodewriter.c
+++ b/dlls/d3dcompiler_43/bytecodewriter.c
@@ -373,7 +373,7 @@ static void write_declarations(struct bc_writer *This,
         /* Write the dest register */
         reg.type = type;
         reg.regnum = decls[i].regnum;
-        reg.writemask = decls[i].writemask;
+        reg.u.writemask = decls[i].writemask;
         This->funcs->dstreg(This, &reg, buffer, 0, decls[i].mod);
     }
 }
@@ -687,7 +687,7 @@ static void vs_12_dstreg(struct bc_writer *This, const struct shader_reg *reg,
 
     switch(reg->type) {
         case BWRITERSPR_OUTPUT:
-            token |= map_vs_output(This, reg->regnum, reg->writemask, &has_wmask);
+            token |= map_vs_output(This, reg->regnum, reg->u.writemask, &has_wmask);
             break;
 
         case BWRITERSPR_RASTOUT:
@@ -747,7 +747,7 @@ static void vs_12_dstreg(struct bc_writer *This, const struct shader_reg *reg,
     token |= d3d9_dstmod(mod);
 
     if(has_wmask) {
-        token |= d3d9_writemask(reg->writemask);
+        token |= d3d9_writemask(reg->u.writemask);
     }
     put_dword(buffer, token);
 }
@@ -763,7 +763,7 @@ static void vs_1_x_srcreg(struct bc_writer *This, const struct shader_reg *reg,
             /* Map the swizzle to a writemask, the format expected
                by map_vs_output
              */
-            switch(reg->swizzle) {
+            switch(reg->u.swizzle) {
                 case BWRITERVS_SWIZZLE_X:
                     component = BWRITERSP_WRITEMASK_0;
                     break;
@@ -798,7 +798,7 @@ static void vs_1_x_srcreg(struct bc_writer *This, const struct shader_reg *reg,
             if(reg->rel_reg) {
                 if(reg->rel_reg->type != BWRITERSPR_ADDR ||
                    reg->rel_reg->regnum != 0 ||
-                   reg->rel_reg->swizzle != BWRITERVS_SWIZZLE_X) {
+                   reg->rel_reg->u.swizzle != BWRITERVS_SWIZZLE_X) {
                     WARN("Relative addressing in vs_1_x is only allowed with a0.x\n");
                     This->state = E_INVALIDARG;
                     return;
@@ -813,7 +813,7 @@ static void vs_1_x_srcreg(struct bc_writer *This, const struct shader_reg *reg,
             return;
     }
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
 
     token |= d3d9_srcmod(reg->srcmod);
     put_dword(buffer, token);
@@ -908,7 +908,7 @@ static void ps_1_0123_srcreg(struct bc_writer *This, const struct shader_reg *re
             return;
     }
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
 
     if(reg->srcmod == BWRITERSPSM_DZ || reg->srcmod == BWRITERSPSM_DW ||
        reg->srcmod == BWRITERSPSM_ABS || reg->srcmod == BWRITERSPSM_ABSNEG ||
@@ -951,7 +951,7 @@ static void ps_1_0123_dstreg(struct bc_writer *This, const struct shader_reg *re
     token |= (shift << D3DSP_DSTSHIFT_SHIFT) & D3DSP_DSTSHIFT_MASK;
     token |= d3d9_dstmod(mod);
 
-    token |= d3d9_writemask(reg->writemask);
+    token |= d3d9_writemask(reg->u.writemask);
     put_dword(buffer, token);
 }
 
@@ -1079,17 +1079,17 @@ static void instr_ps_1_0123_texld(struct bc_writer *This,
         swizzlemask = (3 << BWRITERVS_SWIZZLE_SHIFT) |
             (3 << (BWRITERVS_SWIZZLE_SHIFT + 2)) |
             (3 << (BWRITERVS_SWIZZLE_SHIFT + 4));
-        if((instr->src[0].swizzle & swizzlemask) == (BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z)) {
+        if((instr->src[0].u.swizzle & swizzlemask) == (BWRITERVS_X_X | BWRITERVS_Y_Y | BWRITERVS_Z_Z)) {
             TRACE("writing texreg2rgb\n");
             This->funcs->opcode(This, instr, D3DSIO_TEXREG2RGB & D3DSI_OPCODE_MASK, buffer);
-        } else if(instr->src[0].swizzle == (BWRITERVS_X_W | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X)) {
+        } else if(instr->src[0].u.swizzle == (BWRITERVS_X_W | BWRITERVS_Y_X | BWRITERVS_Z_X | BWRITERVS_W_X)) {
             TRACE("writing texreg2ar\n");
             This->funcs->opcode(This, instr, D3DSIO_TEXREG2AR & D3DSI_OPCODE_MASK, buffer);
-        } else if(instr->src[0].swizzle == (BWRITERVS_X_Y | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z)) {
+        } else if(instr->src[0].u.swizzle == (BWRITERVS_X_Y | BWRITERVS_Y_Z | BWRITERVS_Z_Z | BWRITERVS_W_Z)) {
             TRACE("writing texreg2gb\n");
             This->funcs->opcode(This, instr, D3DSIO_TEXREG2GB & D3DSI_OPCODE_MASK, buffer);
         } else {
-            WARN("Unsupported src addr swizzle in dependent texld: 0x%08x\n", instr->src[0].swizzle);
+            WARN("Unsupported src addr swizzle in dependent texld: 0x%08x\n", instr->src[0].u.swizzle);
             This->state = E_INVALIDARG;
             return;
         }
@@ -1100,7 +1100,7 @@ static void instr_ps_1_0123_texld(struct bc_writer *This,
          */
         This->funcs->dstreg(This, &instr->dst, buffer, instr->shift, instr->dstmod);
         reg = instr->src[0];
-        reg.swizzle = BWRITERVS_NOSWIZZLE;
+        reg.u.swizzle = BWRITERVS_NOSWIZZLE;
         This->funcs->srcreg(This, &reg, buffer);
     } else {
         WARN("Invalid address data source register\n");
@@ -1211,7 +1211,7 @@ static void ps_1_4_srcreg(struct bc_writer *This, const struct shader_reg *reg,
             return;
     }
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
 
     if(reg->srcmod == BWRITERSPSM_ABS || reg->srcmod == BWRITERSPSM_ABSNEG ||
        reg->srcmod == BWRITERSPSM_NOT) {
@@ -1254,7 +1254,7 @@ static void ps_1_4_dstreg(struct bc_writer *This, const struct shader_reg *reg,
     token |= (shift << D3DSP_DSTSHIFT_SHIFT) & D3DSP_DSTSHIFT_MASK;
     token |= d3d9_dstmod(mod);
 
-    token |= d3d9_writemask(reg->writemask);
+    token |= d3d9_writemask(reg->u.writemask);
     put_dword(buffer, token);
 }
 
@@ -1388,7 +1388,7 @@ static void vs_2_srcreg(struct bc_writer *This,
             /* Map the swizzle to a writemask, the format expected
                by map_vs_output
              */
-            switch(reg->swizzle) {
+            switch(reg->u.swizzle) {
                 case BWRITERVS_SWIZZLE_X:
                     component = BWRITERSP_WRITEMASK_0;
                     break;
@@ -1461,7 +1461,7 @@ static void vs_2_srcreg(struct bc_writer *This,
             return;
     }
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
 
     token |= d3d9_srcmod(reg->srcmod);
 
@@ -1706,7 +1706,7 @@ static void ps_2_srcreg(struct bc_writer *This,
             return;
     }
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; /* already shifted */
 
     token |= d3d9_srcmod(reg->srcmod);
     put_dword(buffer, token);
@@ -1759,7 +1759,7 @@ static void ps_2_0_dstreg(struct bc_writer *This,
     token |= (shift << D3DSP_DSTSHIFT_SHIFT) & D3DSP_DSTSHIFT_MASK;
     token |= d3d9_dstmod(mod);
 
-    token |= d3d9_writemask(reg->writemask);
+    token |= d3d9_writemask(reg->u.writemask);
     put_dword(buffer, token);
 }
 
@@ -1905,7 +1905,7 @@ static void sm_3_srcreg(struct bc_writer *This,
     token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2;
     token |= reg->regnum & D3DSP_REGNUM_MASK;
 
-    token |= d3d9_swizzle(reg->swizzle) & D3DVS_SWIZZLE_MASK;
+    token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK;
     token |= d3d9_srcmod(reg->srcmod);
 
     if(reg->rel_reg) {
@@ -1960,7 +1960,7 @@ static void sm_3_dstreg(struct bc_writer *This,
 
     token |= d3d9_dstmod(mod);
 
-    token |= d3d9_writemask(reg->writemask);
+    token |= d3d9_writemask(reg->u.writemask);
     put_dword(buffer, token);
 
     /* vs_2_0 and newer write the register containing the index explicitly in the
diff --git a/dlls/d3dcompiler_43/d3dcompiler_private.h b/dlls/d3dcompiler_43/d3dcompiler_private.h
index 929e635..d76591a 100644
--- a/dlls/d3dcompiler_43/d3dcompiler_private.h
+++ b/dlls/d3dcompiler_43/d3dcompiler_private.h
@@ -83,7 +83,7 @@ struct shader_reg {
     union {
         DWORD               swizzle;
         DWORD               writemask;
-    };
+    } u;
 };
 
 struct instruction {
-- 
1.7.1



More information about the wine-patches mailing list