[PATCH 3/4] d3dcompiler: Merge asmutils.c into utils.c.

Henri Verbeet hverbeet at codeweavers.com
Mon Oct 18 06:05:50 CDT 2010


---
 dlls/d3dcompiler_43/Makefile.in |    1 -
 dlls/d3dcompiler_43/asmutils.c  |  388 ---------------------------------------
 dlls/d3dcompiler_43/utils.c     |  382 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 382 insertions(+), 389 deletions(-)
 delete mode 100644 dlls/d3dcompiler_43/asmutils.c

diff --git a/dlls/d3dcompiler_43/Makefile.in b/dlls/d3dcompiler_43/Makefile.in
index 47c0f3c..02259f8 100644
--- a/dlls/d3dcompiler_43/Makefile.in
+++ b/dlls/d3dcompiler_43/Makefile.in
@@ -5,7 +5,6 @@ EXTRALIBS = $(LIBWPP)
 
 C_SRCS = \
 	asmparser.c \
-	asmutils.c \
 	blob.c \
 	bytecodewriter.c \
 	compiler.c \
diff --git a/dlls/d3dcompiler_43/asmutils.c b/dlls/d3dcompiler_43/asmutils.c
deleted file mode 100644
index 4219269..0000000
--- a/dlls/d3dcompiler_43/asmutils.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Direct3D shader library utility routines
- *
- * Copyright 2008 Stefan Dösinger
- * Copyright 2009 Matteo Bruni
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- */
-
-#include "config.h"
-#include "wine/debug.h"
-
-#include "d3d9types.h"
-#include "d3dcompiler_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(asmshader);
-
-/* Debug print functions */
-const char *debug_print_srcmod(DWORD mod) {
-    switch(mod) {
-        case BWRITERSPSM_NEG:       return "D3DSPSM_NEG";
-        case BWRITERSPSM_BIAS:      return "D3DSPSM_BIAS";
-        case BWRITERSPSM_BIASNEG:   return "D3DSPSM_BIASNEG";
-        case BWRITERSPSM_SIGN:      return "D3DSPSM_SIGN";
-        case BWRITERSPSM_SIGNNEG:   return "D3DSPSM_SIGNNEG";
-        case BWRITERSPSM_COMP:      return "D3DSPSM_COMP";
-        case BWRITERSPSM_X2:        return "D3DSPSM_X2";
-        case BWRITERSPSM_X2NEG:     return "D3DSPSM_X2NEG";
-        case BWRITERSPSM_DZ:        return "D3DSPSM_DZ";
-        case BWRITERSPSM_DW:        return "D3DSPSM_DW";
-        case BWRITERSPSM_ABS:       return "D3DSPSM_ABS";
-        case BWRITERSPSM_ABSNEG:    return "D3DSPSM_ABSNEG";
-        case BWRITERSPSM_NOT:       return "D3DSPSM_NOT";
-        default:                    return "Unknown source modifier\n";
-    }
-}
-
-const char *debug_print_dstmod(DWORD mod) {
-    switch(mod) {
-        case 0:
-            return "";
-
-        case BWRITERSPDM_SATURATE:
-            return "_sat";
-        case BWRITERSPDM_PARTIALPRECISION:
-            return "_pp";
-        case BWRITERSPDM_MSAMPCENTROID:
-            return "_centroid";
-
-        case BWRITERSPDM_SATURATE | BWRITERSPDM_PARTIALPRECISION:
-            return "_sat_pp";
-        case BWRITERSPDM_SATURATE | BWRITERSPDM_MSAMPCENTROID:
-            return "_sat_centroid";
-        case BWRITERSPDM_PARTIALPRECISION | BWRITERSPDM_MSAMPCENTROID:
-            return "_pp_centroid";
-
-        case BWRITERSPDM_SATURATE | BWRITERSPDM_PARTIALPRECISION | BWRITERSPDM_MSAMPCENTROID:
-            return "_sat_pp_centroid";
-
-        default:
-            return "Unexpected modifier\n";
-    }
-}
-
-const char *debug_print_shift(DWORD shift) {
-    static const char * const shiftstrings[] = {
-        "",
-        "_x2",
-        "_x4",
-        "_x8",
-        "_x16",
-        "_x32",
-        "",
-        "",
-        "",
-        "",
-        "",
-        "",
-        "_d16",
-        "_d8",
-        "_d4",
-        "_d2",
-    };
-    return shiftstrings[shift];
-}
-
-static const char *get_regname(const struct shader_reg *reg) {
-    switch(reg->type) {
-        case BWRITERSPR_TEMP:
-            return wine_dbg_sprintf("r%u", reg->regnum);
-        case BWRITERSPR_INPUT:
-            return wine_dbg_sprintf("v%u", reg->regnum);
-        case BWRITERSPR_CONST:
-            return wine_dbg_sprintf("c%u", reg->regnum);
-        case BWRITERSPR_ADDR:
-            return wine_dbg_sprintf("a%u", reg->regnum);
-        case BWRITERSPR_TEXTURE:
-            return wine_dbg_sprintf("t%u", reg->regnum);
-        case BWRITERSPR_RASTOUT:
-            switch(reg->regnum) {
-                case BWRITERSRO_POSITION:   return "oPos";
-                case BWRITERSRO_FOG:        return "oFog";
-                case BWRITERSRO_POINT_SIZE: return "oPts";
-                default: return "Unexpected RASTOUT";
-            }
-        case BWRITERSPR_ATTROUT:
-            return wine_dbg_sprintf("oD%u", reg->regnum);
-        case BWRITERSPR_TEXCRDOUT:
-            return wine_dbg_sprintf("oT%u", reg->regnum);
-        case BWRITERSPR_OUTPUT:
-            return wine_dbg_sprintf("o%u", reg->regnum);
-        case BWRITERSPR_CONSTINT:
-            return wine_dbg_sprintf("i%u", reg->regnum);
-        case BWRITERSPR_COLOROUT:
-            return wine_dbg_sprintf("oC%u", reg->regnum);
-        case BWRITERSPR_DEPTHOUT:
-            return "oDepth";
-        case BWRITERSPR_SAMPLER:
-            return wine_dbg_sprintf("s%u", reg->regnum);
-        case BWRITERSPR_CONSTBOOL:
-            return wine_dbg_sprintf("b%u", reg->regnum);
-        case BWRITERSPR_LOOP:
-            return "aL";
-        case BWRITERSPR_MISCTYPE:
-            switch(reg->regnum) {
-                case 0: return "vPos";
-                case 1: return "vFace";
-                case 2: return "unexpected misctype";
-            }
-        case BWRITERSPR_LABEL:
-            return wine_dbg_sprintf("l%u", reg->regnum);
-        case BWRITERSPR_PREDICATE:
-            return wine_dbg_sprintf("p%u", reg->regnum);
-        default:
-            return wine_dbg_sprintf("unknown regname %#x", reg->type);
-    }
-}
-
-static const char *debug_print_writemask(DWORD mask) {
-    char ret[6];
-    unsigned char pos = 1;
-
-    if(mask == BWRITERSP_WRITEMASK_ALL) return "";
-    ret[0] = '.';
-    if(mask & BWRITERSP_WRITEMASK_0) ret[pos++] = 'x';
-    if(mask & BWRITERSP_WRITEMASK_1) ret[pos++] = 'y';
-    if(mask & BWRITERSP_WRITEMASK_2) ret[pos++] = 'z';
-    if(mask & BWRITERSP_WRITEMASK_3) ret[pos++] = 'w';
-    ret[pos] = 0;
-    return wine_dbg_sprintf("%s", ret);
-}
-
-static const char *debug_print_swizzle(DWORD arg) {
-    char ret[6];
-    unsigned int i;
-    DWORD swizzle[4];
-
-    switch(arg) {
-        case BWRITERVS_NOSWIZZLE:
-            return "";
-        case BWRITERVS_SWIZZLE_X:
-            return ".x";
-        case BWRITERVS_SWIZZLE_Y:
-            return ".y";
-        case BWRITERVS_SWIZZLE_Z:
-            return ".z";
-        case BWRITERVS_SWIZZLE_W:
-            return ".w";
-    }
-
-    swizzle[0] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 0)) & 0x03;
-    swizzle[1] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 2)) & 0x03;
-    swizzle[2] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 4)) & 0x03;
-    swizzle[3] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 6)) & 0x03;
-
-    ret[0] = '.';
-    for(i = 0; i < 4; i++) {
-        switch(swizzle[i]) {
-            case 0: ret[1 + i] = 'x'; break;
-            case 1: ret[1 + i] = 'y'; break;
-            case 2: ret[1 + i] = 'z'; break;
-            case 3: ret[1 + i] = 'w'; break;
-        }
-    }
-    ret[5] = '\0';
-    return wine_dbg_sprintf("%s", ret);
-}
-
-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->u.swizzle);
-
-    if(reg->rel_reg->type == BWRITERSPR_ADDR) {
-        return wine_dbg_sprintf("[a%u%s]", reg->rel_reg->regnum, short_swizzle);
-    } else if(reg->rel_reg->type == BWRITERSPR_LOOP && reg->rel_reg->regnum == 0) {
-        return wine_dbg_sprintf("[aL%s]", short_swizzle);
-    } else {
-        return "Unexpected relative addressing argument";
-    }
-}
-
-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->u.writemask));
-}
-
-const char *debug_print_srcreg(const struct shader_reg *reg) {
-    switch(reg->srcmod) {
-        case BWRITERSPSM_NONE:
-            return wine_dbg_sprintf("%s%s%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_BIAS:
-            return wine_dbg_sprintf("%s%s_bias%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_SIGN:
-            return wine_dbg_sprintf("%s%s_bx2%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_COMP:
-            return wine_dbg_sprintf("1 - %s%s%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_X2NEG:
-            return wine_dbg_sprintf("-%s%s_x2%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_DW:
-            return wine_dbg_sprintf("%s%s_dw%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-        case BWRITERSPSM_ABSNEG:
-            return wine_dbg_sprintf("-%s%s_abs%s", get_regname(reg),
-                                    debug_print_relarg(reg),
-                                    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->u.swizzle));
-    }
-    return "Unknown modifier";
-}
-
-const char *debug_print_comp(DWORD comp) {
-    switch(comp) {
-        case BWRITER_COMPARISON_NONE: return "";
-        case BWRITER_COMPARISON_GT:   return "_gt";
-        case BWRITER_COMPARISON_EQ:   return "_eq";
-        case BWRITER_COMPARISON_GE:   return "_ge";
-        case BWRITER_COMPARISON_LT:   return "_lt";
-        case BWRITER_COMPARISON_NE:   return "_ne";
-        case BWRITER_COMPARISON_LE:   return "_le";
-        default: return "_unknown";
-    }
-}
-
-const char *debug_print_opcode(DWORD opcode) {
-    switch(opcode){
-        case BWRITERSIO_NOP:          return "nop";
-        case BWRITERSIO_MOV:          return "mov";
-        case BWRITERSIO_ADD:          return "add";
-        case BWRITERSIO_SUB:          return "sub";
-        case BWRITERSIO_MAD:          return "mad";
-        case BWRITERSIO_MUL:          return "mul";
-        case BWRITERSIO_RCP:          return "rcp";
-        case BWRITERSIO_RSQ:          return "rsq";
-        case BWRITERSIO_DP3:          return "dp3";
-        case BWRITERSIO_DP4:          return "dp4";
-        case BWRITERSIO_MIN:          return "min";
-        case BWRITERSIO_MAX:          return "max";
-        case BWRITERSIO_SLT:          return "slt";
-        case BWRITERSIO_SGE:          return "sge";
-        case BWRITERSIO_EXP:          return "exp";
-        case BWRITERSIO_LOG:          return "log";
-        case BWRITERSIO_LIT:          return "lit";
-        case BWRITERSIO_DST:          return "dst";
-        case BWRITERSIO_LRP:          return "lrp";
-        case BWRITERSIO_FRC:          return "frc";
-        case BWRITERSIO_M4x4:         return "m4x4";
-        case BWRITERSIO_M4x3:         return "m4x3";
-        case BWRITERSIO_M3x4:         return "m3x4";
-        case BWRITERSIO_M3x3:         return "m3x3";
-        case BWRITERSIO_M3x2:         return "m3x2";
-        case BWRITERSIO_CALL:         return "call";
-        case BWRITERSIO_CALLNZ:       return "callnz";
-        case BWRITERSIO_LOOP:         return "loop";
-        case BWRITERSIO_RET:          return "ret";
-        case BWRITERSIO_ENDLOOP:      return "endloop";
-        case BWRITERSIO_LABEL:        return "label";
-        case BWRITERSIO_DCL:          return "dcl";
-        case BWRITERSIO_POW:          return "pow";
-        case BWRITERSIO_CRS:          return "crs";
-        case BWRITERSIO_SGN:          return "sgn";
-        case BWRITERSIO_ABS:          return "abs";
-        case BWRITERSIO_NRM:          return "nrm";
-        case BWRITERSIO_SINCOS:       return "sincos";
-        case BWRITERSIO_REP:          return "rep";
-        case BWRITERSIO_ENDREP:       return "endrep";
-        case BWRITERSIO_IF:           return "if";
-        case BWRITERSIO_IFC:          return "ifc";
-        case BWRITERSIO_ELSE:         return "else";
-        case BWRITERSIO_ENDIF:        return "endif";
-        case BWRITERSIO_BREAK:        return "break";
-        case BWRITERSIO_BREAKC:       return "breakc";
-        case BWRITERSIO_MOVA:         return "mova";
-        case BWRITERSIO_DEFB:         return "defb";
-        case BWRITERSIO_DEFI:         return "defi";
-        case BWRITERSIO_TEXCOORD:     return "texcoord";
-        case BWRITERSIO_TEXKILL:      return "texkill";
-        case BWRITERSIO_TEX:          return "tex";
-        case BWRITERSIO_TEXBEM:       return "texbem";
-        case BWRITERSIO_TEXBEML:      return "texbeml";
-        case BWRITERSIO_TEXREG2AR:    return "texreg2ar";
-        case BWRITERSIO_TEXREG2GB:    return "texreg2gb";
-        case BWRITERSIO_TEXM3x2PAD:   return "texm3x2pad";
-        case BWRITERSIO_TEXM3x2TEX:   return "texm3x2tex";
-        case BWRITERSIO_TEXM3x3PAD:   return "texm3x3pad";
-        case BWRITERSIO_TEXM3x3TEX:   return "texm3x3tex";
-        case BWRITERSIO_TEXM3x3SPEC:  return "texm3x3vspec";
-        case BWRITERSIO_TEXM3x3VSPEC: return "texm3x3vspec";
-        case BWRITERSIO_EXPP:         return "expp";
-        case BWRITERSIO_LOGP:         return "logp";
-        case BWRITERSIO_CND:          return "cnd";
-        case BWRITERSIO_DEF:          return "def";
-        case BWRITERSIO_TEXREG2RGB:   return "texreg2rgb";
-        case BWRITERSIO_TEXDP3TEX:    return "texdp3tex";
-        case BWRITERSIO_TEXM3x2DEPTH: return "texm3x2depth";
-        case BWRITERSIO_TEXDP3:       return "texdp3";
-        case BWRITERSIO_TEXM3x3:      return "texm3x3";
-        case BWRITERSIO_TEXDEPTH:     return "texdepth";
-        case BWRITERSIO_CMP:          return "cmp";
-        case BWRITERSIO_BEM:          return "bem";
-        case BWRITERSIO_DP2ADD:       return "dp2add";
-        case BWRITERSIO_DSX:          return "dsx";
-        case BWRITERSIO_DSY:          return "dsy";
-        case BWRITERSIO_TEXLDD:       return "texldd";
-        case BWRITERSIO_SETP:         return "setp";
-        case BWRITERSIO_TEXLDL:       return "texldl";
-        case BWRITERSIO_BREAKP:       return "breakp";
-        case BWRITERSIO_PHASE:        return "phase";
-
-        case BWRITERSIO_TEXLDP:       return "texldp";
-        case BWRITERSIO_TEXLDB:       return "texldb";
-
-        default:                      return "unknown";
-    }
-}
diff --git a/dlls/d3dcompiler_43/utils.c b/dlls/d3dcompiler_43/utils.c
index 544e26b..e265667 100644
--- a/dlls/d3dcompiler_43/utils.c
+++ b/dlls/d3dcompiler_43/utils.c
@@ -1,4 +1,6 @@
 /*
+ * Copyright 2008 Stefan Dösinger
+ * Copyright 2009 Matteo Bruni
  * Copyright 2008-2009 Henri Verbeet for CodeWeavers
  * Copyright 2010 Rico Schüller
  *
@@ -49,8 +51,388 @@ const char *debug_d3dcompiler_d3d_blob_part(D3D_BLOB_PART part)
     }
 }
 
+const char *debug_print_srcmod(DWORD mod)
+{
+    switch (mod)
+    {
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_NEG);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_BIAS);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_BIASNEG);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_SIGN);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_SIGNNEG);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_COMP);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_X2);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_X2NEG);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_DZ);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_DW);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_ABS);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_ABSNEG);
+        WINE_D3DCOMPILER_TO_STR(BWRITERSPSM_NOT);
+        default:
+            FIXME("Unrecognized source modifier %#x.\n", mod);
+            return "unrecognized_src_mod";
+    }
+}
+
 #undef WINE_D3DCOMPILER_TO_STR
 
+const char *debug_print_dstmod(DWORD mod)
+{
+    switch (mod)
+    {
+        case 0:
+            return "";
+        case BWRITERSPDM_SATURATE:
+            return "_sat";
+        case BWRITERSPDM_PARTIALPRECISION:
+            return "_pp";
+        case BWRITERSPDM_MSAMPCENTROID:
+            return "_centroid";
+        case BWRITERSPDM_SATURATE | BWRITERSPDM_PARTIALPRECISION:
+            return "_sat_pp";
+        case BWRITERSPDM_SATURATE | BWRITERSPDM_MSAMPCENTROID:
+            return "_sat_centroid";
+        case BWRITERSPDM_PARTIALPRECISION | BWRITERSPDM_MSAMPCENTROID:
+            return "_pp_centroid";
+        case BWRITERSPDM_SATURATE | BWRITERSPDM_PARTIALPRECISION | BWRITERSPDM_MSAMPCENTROID:
+            return "_sat_pp_centroid";
+        default:
+            return "Unexpected modifier\n";
+    }
+}
+
+const char *debug_print_shift(DWORD shift)
+{
+    static const char * const shiftstrings[] =
+    {
+        "",
+        "_x2",
+        "_x4",
+        "_x8",
+        "_x16",
+        "_x32",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "_d16",
+        "_d8",
+        "_d4",
+        "_d2",
+    };
+    return shiftstrings[shift];
+}
+
+static const char *get_regname(const struct shader_reg *reg)
+{
+    switch (reg->type)
+    {
+        case BWRITERSPR_TEMP:
+            return wine_dbg_sprintf("r%u", reg->regnum);
+        case BWRITERSPR_INPUT:
+            return wine_dbg_sprintf("v%u", reg->regnum);
+        case BWRITERSPR_CONST:
+            return wine_dbg_sprintf("c%u", reg->regnum);
+        case BWRITERSPR_ADDR:
+            return wine_dbg_sprintf("a%u", reg->regnum);
+        case BWRITERSPR_TEXTURE:
+            return wine_dbg_sprintf("t%u", reg->regnum);
+        case BWRITERSPR_RASTOUT:
+            switch (reg->regnum)
+            {
+                case BWRITERSRO_POSITION:   return "oPos";
+                case BWRITERSRO_FOG:        return "oFog";
+                case BWRITERSRO_POINT_SIZE: return "oPts";
+                default: return "Unexpected RASTOUT";
+            }
+        case BWRITERSPR_ATTROUT:
+            return wine_dbg_sprintf("oD%u", reg->regnum);
+        case BWRITERSPR_TEXCRDOUT:
+            return wine_dbg_sprintf("oT%u", reg->regnum);
+        case BWRITERSPR_OUTPUT:
+            return wine_dbg_sprintf("o%u", reg->regnum);
+        case BWRITERSPR_CONSTINT:
+            return wine_dbg_sprintf("i%u", reg->regnum);
+        case BWRITERSPR_COLOROUT:
+            return wine_dbg_sprintf("oC%u", reg->regnum);
+        case BWRITERSPR_DEPTHOUT:
+            return "oDepth";
+        case BWRITERSPR_SAMPLER:
+            return wine_dbg_sprintf("s%u", reg->regnum);
+        case BWRITERSPR_CONSTBOOL:
+            return wine_dbg_sprintf("b%u", reg->regnum);
+        case BWRITERSPR_LOOP:
+            return "aL";
+        case BWRITERSPR_MISCTYPE:
+            switch (reg->regnum)
+            {
+                case 0: return "vPos";
+                case 1: return "vFace";
+                case 2: return "unexpected misctype";
+            }
+        case BWRITERSPR_LABEL:
+            return wine_dbg_sprintf("l%u", reg->regnum);
+        case BWRITERSPR_PREDICATE:
+            return wine_dbg_sprintf("p%u", reg->regnum);
+        default:
+            return wine_dbg_sprintf("unknown regname %#x", reg->type);
+    }
+}
+
+static const char *debug_print_writemask(DWORD mask)
+{
+    char ret[6];
+    unsigned char pos = 1;
+
+    if(mask == BWRITERSP_WRITEMASK_ALL) return "";
+    ret[0] = '.';
+    if(mask & BWRITERSP_WRITEMASK_0) ret[pos++] = 'x';
+    if(mask & BWRITERSP_WRITEMASK_1) ret[pos++] = 'y';
+    if(mask & BWRITERSP_WRITEMASK_2) ret[pos++] = 'z';
+    if(mask & BWRITERSP_WRITEMASK_3) ret[pos++] = 'w';
+    ret[pos] = 0;
+
+    return wine_dbg_sprintf("%s", ret);
+}
+
+static const char *debug_print_swizzle(DWORD arg)
+{
+    char ret[6];
+    unsigned int i;
+    DWORD swizzle[4];
+
+    switch (arg)
+    {
+        case BWRITERVS_NOSWIZZLE:
+            return "";
+        case BWRITERVS_SWIZZLE_X:
+            return ".x";
+        case BWRITERVS_SWIZZLE_Y:
+            return ".y";
+        case BWRITERVS_SWIZZLE_Z:
+            return ".z";
+        case BWRITERVS_SWIZZLE_W:
+            return ".w";
+    }
+
+    swizzle[0] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 0)) & 0x03;
+    swizzle[1] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 2)) & 0x03;
+    swizzle[2] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 4)) & 0x03;
+    swizzle[3] = (arg >> (BWRITERVS_SWIZZLE_SHIFT + 6)) & 0x03;
+
+    ret[0] = '.';
+    for (i = 0; i < 4; ++i)
+    {
+        switch (swizzle[i])
+        {
+            case 0: ret[1 + i] = 'x'; break;
+            case 1: ret[1 + i] = 'y'; break;
+            case 2: ret[1 + i] = 'z'; break;
+            case 3: ret[1 + i] = 'w'; break;
+        }
+    }
+    ret[5] = '\0';
+
+    return wine_dbg_sprintf("%s", ret);
+}
+
+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->u.swizzle);
+
+    if (reg->rel_reg->type == BWRITERSPR_ADDR)
+        return wine_dbg_sprintf("[a%u%s]", reg->rel_reg->regnum, short_swizzle);
+    else if(reg->rel_reg->type == BWRITERSPR_LOOP && reg->rel_reg->regnum == 0)
+        return wine_dbg_sprintf("[aL%s]", short_swizzle);
+    else
+        return "Unexpected relative addressing argument";
+}
+
+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->u.writemask));
+}
+
+const char *debug_print_srcreg(const struct shader_reg *reg)
+{
+    switch (reg->srcmod)
+    {
+        case BWRITERSPSM_NONE:
+            return wine_dbg_sprintf("%s%s%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_BIAS:
+            return wine_dbg_sprintf("%s%s_bias%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_SIGN:
+            return wine_dbg_sprintf("%s%s_bx2%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_COMP:
+            return wine_dbg_sprintf("1 - %s%s%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_X2NEG:
+            return wine_dbg_sprintf("-%s%s_x2%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_DW:
+            return wine_dbg_sprintf("%s%s_dw%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+        case BWRITERSPSM_ABSNEG:
+            return wine_dbg_sprintf("-%s%s_abs%s", get_regname(reg),
+                    debug_print_relarg(reg),
+                    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->u.swizzle));
+    }
+    return "Unknown modifier";
+}
+
+const char *debug_print_comp(DWORD comp)
+{
+    switch (comp)
+    {
+        case BWRITER_COMPARISON_NONE: return "";
+        case BWRITER_COMPARISON_GT:   return "_gt";
+        case BWRITER_COMPARISON_EQ:   return "_eq";
+        case BWRITER_COMPARISON_GE:   return "_ge";
+        case BWRITER_COMPARISON_LT:   return "_lt";
+        case BWRITER_COMPARISON_NE:   return "_ne";
+        case BWRITER_COMPARISON_LE:   return "_le";
+        default: return "_unknown";
+    }
+}
+
+const char *debug_print_opcode(DWORD opcode)
+{
+    switch (opcode)
+    {
+        case BWRITERSIO_NOP:          return "nop";
+        case BWRITERSIO_MOV:          return "mov";
+        case BWRITERSIO_ADD:          return "add";
+        case BWRITERSIO_SUB:          return "sub";
+        case BWRITERSIO_MAD:          return "mad";
+        case BWRITERSIO_MUL:          return "mul";
+        case BWRITERSIO_RCP:          return "rcp";
+        case BWRITERSIO_RSQ:          return "rsq";
+        case BWRITERSIO_DP3:          return "dp3";
+        case BWRITERSIO_DP4:          return "dp4";
+        case BWRITERSIO_MIN:          return "min";
+        case BWRITERSIO_MAX:          return "max";
+        case BWRITERSIO_SLT:          return "slt";
+        case BWRITERSIO_SGE:          return "sge";
+        case BWRITERSIO_EXP:          return "exp";
+        case BWRITERSIO_LOG:          return "log";
+        case BWRITERSIO_LIT:          return "lit";
+        case BWRITERSIO_DST:          return "dst";
+        case BWRITERSIO_LRP:          return "lrp";
+        case BWRITERSIO_FRC:          return "frc";
+        case BWRITERSIO_M4x4:         return "m4x4";
+        case BWRITERSIO_M4x3:         return "m4x3";
+        case BWRITERSIO_M3x4:         return "m3x4";
+        case BWRITERSIO_M3x3:         return "m3x3";
+        case BWRITERSIO_M3x2:         return "m3x2";
+        case BWRITERSIO_CALL:         return "call";
+        case BWRITERSIO_CALLNZ:       return "callnz";
+        case BWRITERSIO_LOOP:         return "loop";
+        case BWRITERSIO_RET:          return "ret";
+        case BWRITERSIO_ENDLOOP:      return "endloop";
+        case BWRITERSIO_LABEL:        return "label";
+        case BWRITERSIO_DCL:          return "dcl";
+        case BWRITERSIO_POW:          return "pow";
+        case BWRITERSIO_CRS:          return "crs";
+        case BWRITERSIO_SGN:          return "sgn";
+        case BWRITERSIO_ABS:          return "abs";
+        case BWRITERSIO_NRM:          return "nrm";
+        case BWRITERSIO_SINCOS:       return "sincos";
+        case BWRITERSIO_REP:          return "rep";
+        case BWRITERSIO_ENDREP:       return "endrep";
+        case BWRITERSIO_IF:           return "if";
+        case BWRITERSIO_IFC:          return "ifc";
+        case BWRITERSIO_ELSE:         return "else";
+        case BWRITERSIO_ENDIF:        return "endif";
+        case BWRITERSIO_BREAK:        return "break";
+        case BWRITERSIO_BREAKC:       return "breakc";
+        case BWRITERSIO_MOVA:         return "mova";
+        case BWRITERSIO_DEFB:         return "defb";
+        case BWRITERSIO_DEFI:         return "defi";
+        case BWRITERSIO_TEXCOORD:     return "texcoord";
+        case BWRITERSIO_TEXKILL:      return "texkill";
+        case BWRITERSIO_TEX:          return "tex";
+        case BWRITERSIO_TEXBEM:       return "texbem";
+        case BWRITERSIO_TEXBEML:      return "texbeml";
+        case BWRITERSIO_TEXREG2AR:    return "texreg2ar";
+        case BWRITERSIO_TEXREG2GB:    return "texreg2gb";
+        case BWRITERSIO_TEXM3x2PAD:   return "texm3x2pad";
+        case BWRITERSIO_TEXM3x2TEX:   return "texm3x2tex";
+        case BWRITERSIO_TEXM3x3PAD:   return "texm3x3pad";
+        case BWRITERSIO_TEXM3x3TEX:   return "texm3x3tex";
+        case BWRITERSIO_TEXM3x3SPEC:  return "texm3x3vspec";
+        case BWRITERSIO_TEXM3x3VSPEC: return "texm3x3vspec";
+        case BWRITERSIO_EXPP:         return "expp";
+        case BWRITERSIO_LOGP:         return "logp";
+        case BWRITERSIO_CND:          return "cnd";
+        case BWRITERSIO_DEF:          return "def";
+        case BWRITERSIO_TEXREG2RGB:   return "texreg2rgb";
+        case BWRITERSIO_TEXDP3TEX:    return "texdp3tex";
+        case BWRITERSIO_TEXM3x2DEPTH: return "texm3x2depth";
+        case BWRITERSIO_TEXDP3:       return "texdp3";
+        case BWRITERSIO_TEXM3x3:      return "texm3x3";
+        case BWRITERSIO_TEXDEPTH:     return "texdepth";
+        case BWRITERSIO_CMP:          return "cmp";
+        case BWRITERSIO_BEM:          return "bem";
+        case BWRITERSIO_DP2ADD:       return "dp2add";
+        case BWRITERSIO_DSX:          return "dsx";
+        case BWRITERSIO_DSY:          return "dsy";
+        case BWRITERSIO_TEXLDD:       return "texldd";
+        case BWRITERSIO_SETP:         return "setp";
+        case BWRITERSIO_TEXLDL:       return "texldl";
+        case BWRITERSIO_BREAKP:       return "breakp";
+        case BWRITERSIO_PHASE:        return "phase";
+
+        case BWRITERSIO_TEXLDP:       return "texldp";
+        case BWRITERSIO_TEXLDB:       return "texldb";
+
+        default:                      return "unknown";
+    }
+}
+
 void skip_dword_unknown(const char **ptr, unsigned int count)
 {
     unsigned int i;
-- 
1.7.2.2




More information about the wine-patches mailing list