Ivan Gyurdiev : wined3d: Trace improvements.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 6 05:15:51 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: aec2e3e46df528315cb38bce618a27102ebcb514
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=aec2e3e46df528315cb38bce618a27102ebcb514

Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date:   Tue Jun  6 02:40:08 2006 -0400

wined3d: Trace improvements.

---

 dlls/wined3d/baseshader.c      |   41 +++++++++++++++++++++++++++------
 dlls/wined3d/pixelshader.c     |   49 ++++++++++++++++++++++++++--------------
 dlls/wined3d/vertexshader.c    |   49 ++++++++++++++++++++++++++--------------
 dlls/wined3d/wined3d_private.h |    2 ++
 4 files changed, 99 insertions(+), 42 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 7c24fa0..ee54a5e 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -160,6 +160,25 @@ int shader_skip_unrecognized(
     return tokens_read;
 }
 
+/* Convert floating point offset relative
+ * to a register file to an absolute offset for float constants */
+
+unsigned int shader_get_float_offset(const DWORD reg) {
+
+     unsigned int regnum = reg & D3DSP_REGNUM_MASK;
+     int regtype = shader_get_regtype(reg);
+
+     switch (regtype) {
+        case D3DSPR_CONST: return regnum;
+        case D3DSPR_CONST2: return 2048 + regnum;
+        case D3DSPR_CONST3: return 4096 + regnum;
+        case D3DSPR_CONST4: return 6144 + regnum;
+        default:
+            FIXME("Unsupported register type: %d\n", regtype);
+            return regnum;
+     }
+}
+
 /* Note that this does not count the loop register
  * as an address register. */
 
@@ -330,21 +349,23 @@ static void shader_dump_arr_entry(
     IWineD3DBaseShader *iface,
     const DWORD param,
     const DWORD addr_token,
+    unsigned int reg,
     int input) {
 
-    DWORD reg = param & D3DSP_REGNUM_MASK;
     char relative =
         ((param & D3DSHADER_ADDRESSMODE_MASK) == D3DSHADER_ADDRMODE_RELATIVE);
 
-    TRACE("[");
     if (relative) {
+        TRACE("[");
         if (addr_token)
             shader_dump_param(iface, addr_token, 0, input);
         else
             TRACE("a0.x");
         TRACE(" + ");
      }
-     TRACE("%lu]", reg);
+     TRACE("%u", reg);
+     if (relative)
+         TRACE("]");
 }
 
 void shader_dump_param(
@@ -388,11 +409,15 @@ void shader_dump_param(
             TRACE("r%lu", reg);
             break;
         case D3DSPR_INPUT:
-            TRACE("v%lu", reg);
+            TRACE("v");
+            shader_dump_arr_entry(iface, param, addr_token, reg, input);
             break;
         case D3DSPR_CONST:
+        case D3DSPR_CONST2:
+        case D3DSPR_CONST3:
+        case D3DSPR_CONST4:
             TRACE("c");
-            shader_dump_arr_entry(iface, param, addr_token, input);
+            shader_dump_arr_entry(iface, param, addr_token, shader_get_float_offset(param), input);
             break;
         case D3DSPR_TEXTURE: /* vs: case D3DSPR_ADDR */
             TRACE("%c%lu", (pshader? 't':'a'), reg);
@@ -416,18 +441,18 @@ void shader_dump_param(
 
             if (D3DSHADER_VERSION_MAJOR(This->baseShader.hex_version) >= 3) {
                 TRACE("o");
-                shader_dump_arr_entry(iface, param, addr_token, input);
+                shader_dump_arr_entry(iface, param, addr_token, reg, input);
             }
             else 
                TRACE("oT%lu", reg);
             break;
         case D3DSPR_CONSTINT:
             TRACE("i");
-            shader_dump_arr_entry(iface, param, addr_token, input);
+            shader_dump_arr_entry(iface, param, addr_token, reg, input);
             break;
         case D3DSPR_CONSTBOOL:
             TRACE("b");
-            shader_dump_arr_entry(iface, param, addr_token, input);
+            shader_dump_arr_entry(iface, param, addr_token, reg, input);
             break;
         case D3DSPR_LABEL:
             TRACE("l%lu", reg);
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index a1b1d49..30e1831 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -1424,23 +1424,38 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_S
                     pToken += 2;
                     len += 2;
 
-                } else 
-                    if (curOpcode->opcode == D3DSIO_DEF) {
-                        TRACE("def c%lu = ", *pToken & 0xFF);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f", *(float *)pToken);
-                        ++pToken;
-                        ++len;
+                } else if (curOpcode->opcode == D3DSIO_DEF) {
+
+                        unsigned int offset = shader_get_float_offset(*pToken);
+
+                        TRACE("def c%u = %f, %f, %f, %f", offset,
+                            *(float *)(pToken + 1),
+                            *(float *)(pToken + 2),
+                            *(float *)(pToken + 3),
+                            *(float *)(pToken + 4));
+
+                        pToken += 5;
+                        len += 5;
+
+                } else if (curOpcode->opcode == D3DSIO_DEFI) {
+
+                        TRACE("defi i%lu = %ld, %ld, %ld, %ld", *pToken & D3DSP_REGNUM_MASK,
+                            (long) *(pToken + 1),
+                            (long) *(pToken + 2),
+                            (long) *(pToken + 3),
+                            (long) *(pToken + 4));
+
+                        pToken += 5;
+                        len += 5;
+
+                } else if (curOpcode->opcode == D3DSIO_DEFB) {
+
+                        TRACE("defb b%lu = %s", *pToken & D3DSP_REGNUM_MASK,
+                            *(pToken + 1)? "true": "false");
+
+                        pToken += 2;
+                        len += 2;
+
                 } else {
 
                     DWORD param, addr_token;
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index d82546e..0c525a6 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1571,23 +1571,38 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
                     pToken += 2;
                     len += 2;
 
-                } else 
-                    if (curOpcode->opcode == D3DSIO_DEF) {
-                        TRACE("def c%lu = ", *pToken & 0xFF);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f ,", *(float *)pToken);
-                        ++pToken;
-                        ++len;
-                        TRACE("%f", *(float *)pToken);
-                        ++pToken;
-                        ++len;
+                } else if (curOpcode->opcode == D3DSIO_DEF) {
+
+                        unsigned int offset = shader_get_float_offset(*pToken);
+
+                        TRACE("def c%u = %f, %f, %f, %f", offset,
+                            *(float *)(pToken + 1),
+                            *(float *)(pToken + 2),
+                            *(float *)(pToken + 3),
+                            *(float *)(pToken + 4));
+
+                        pToken += 5;
+                        len += 5;
+
+                } else if (curOpcode->opcode == D3DSIO_DEFI) {
+
+                        TRACE("defi i%lu = %ld, %ld, %ld, %ld", *pToken & D3DSP_REGNUM_MASK,
+                            (long) *(pToken + 1),
+                            (long) *(pToken + 2),
+                            (long) *(pToken + 3),
+                            (long) *(pToken + 4));
+
+                        pToken += 5;
+                        len += 5;
+
+                } else if (curOpcode->opcode == D3DSIO_DEFB) {
+
+                        TRACE("defb b%lu = %s", *pToken & D3DSP_REGNUM_MASK,
+                            *(pToken + 1)? "true": "false");
+
+                        pToken += 2;
+                        len += 2;
+
                 } else {
 
                     DWORD param, addr_token;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 0552ee4..5148c01 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1363,6 +1363,8 @@ inline static int shader_get_regtype(con
             ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2));
 }
 
+extern unsigned int shader_get_float_offset(const DWORD reg);
+
 inline static BOOL shader_is_pshader_version(DWORD token) {
     return 0xFFFF0000 == (token & 0xFFFF0000);
 }




More information about the wine-cvs mailing list