Ivan Gyurdiev : wined3d: Modify shader_dump_param() to take into account address token.

Alexandre Julliard julliard at wine.codeweavers.com
Wed May 17 04:46:53 CDT 2006


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

Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date:   Wed May 17 02:05:49 2006 -0400

wined3d: Modify shader_dump_param() to take into account address token.

Currently we hardcode a0.x, which I think is correct for shaders 1.0.
However, for shaders 2.0, we must look into the address token, and
print the register there. Handle both cases to correct the trace.

---

 dlls/wined3d/baseshader.c      |   36 +++++++++++++++++++++++++++++++-----
 dlls/wined3d/pixelshader.c     |    6 +++---
 dlls/wined3d/vertexshader.c    |    6 +++---
 dlls/wined3d/wined3d_private.h |    1 +
 4 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index f69f0ab..1af6a71 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -146,7 +146,7 @@ int shader_skip_unrecognized(
 
         FIXME("Unrecognized opcode param: token=%08lX "
             "addr_token=%08lX name=", param, addr_token);
-        shader_dump_param(iface, param, i);
+        shader_dump_param(iface, param, addr_token, i);
         FIXME("\n");
         ++i;
     }
@@ -306,9 +306,31 @@ void shader_program_dump_decl_usage(
     }
 }
 
+static void shader_dump_arr_entry(
+    IWineD3DBaseShader *iface,
+    const DWORD param,
+    const DWORD addr_token,
+    int input) {
+
+    DWORD reg = param & D3DSP_REGNUM_MASK;
+    char relative =
+        ((param & D3DSHADER_ADDRESSMODE_MASK) == D3DSHADER_ADDRMODE_RELATIVE);
+
+    TRACE("[");
+    if (relative) {
+        if (addr_token)
+            shader_dump_param(iface, addr_token, 0, input);
+        else
+            TRACE("a0.x");
+        TRACE(" + ");
+     }
+     TRACE("%lu]", reg);
+}
+
 void shader_dump_param(
     IWineD3DBaseShader *iface,
     const DWORD param, 
+    const DWORD addr_token,
     int input) {
 
     IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
@@ -347,7 +369,8 @@ void shader_dump_param(
             TRACE("v%lu", reg);
             break;
         case D3DSPR_CONST:
-            TRACE("c%s%lu", (param & D3DVS_ADDRMODE_RELATIVE) ? "a0.x + " : "", reg);
+            TRACE("c");
+            shader_dump_arr_entry(iface, param, addr_token, input);
             break;
         case D3DSPR_TEXTURE: /* vs: case D3DSPR_ADDR */
             TRACE("%c%lu", (pshader? 't':'a'), reg);
@@ -368,16 +391,19 @@ void shader_dump_param(
             TRACE("oT%lu", reg);
             break;
         case D3DSPR_CONSTINT:
-            TRACE("i%s%lu", (param & D3DVS_ADDRMODE_RELATIVE) ? "a0.x + " : "", reg);
+            TRACE("i");
+            shader_dump_arr_entry(iface, param, addr_token, input);
             break;
         case D3DSPR_CONSTBOOL:
-            TRACE("b%s%lu", (param & D3DVS_ADDRMODE_RELATIVE) ? "a0.x + " : "", reg);
+            TRACE("b");
+            shader_dump_arr_entry(iface, param, addr_token, input);
             break;
         case D3DSPR_LABEL:
             TRACE("l%lu", reg);
             break;
         case D3DSPR_LOOP:
-            TRACE("aL%s%lu", (param & D3DVS_ADDRMODE_RELATIVE) ? "a0.x + " : "", reg);
+            TRACE("aL");
+            shader_dump_arr_entry(iface, param, addr_token, input);
             break;
         case D3DSPR_SAMPLER:
             TRACE("s%lu", reg);
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index afee2fd..6ff64b3 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -1427,7 +1427,7 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_S
 
                     shader_dump_ins_modifiers(param);
                     TRACE(" ");
-                    shader_dump_param((IWineD3DBaseShader*) This, param, 0);
+                    shader_dump_param((IWineD3DBaseShader*) This, param, 0, 0);
                     pToken += 2;
                     len += 2;
 
@@ -1463,7 +1463,7 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_S
 
                         shader_dump_ins_modifiers(param);
                         TRACE(" ");
-                        shader_dump_param((IWineD3DBaseShader*) This, param, 0);
+                        shader_dump_param((IWineD3DBaseShader*) This, param, addr_token, 0);
                          
                         for (i = 1; i < curOpcode->num_params; ++i) {
 
@@ -1473,7 +1473,7 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_S
                             len += tokens_read;
 
                             TRACE(", ");
-                            shader_dump_param((IWineD3DBaseShader*) This, param, 1);
+                            shader_dump_param((IWineD3DBaseShader*) This, param, addr_token, 1);
                         }
                     }
                 }
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 9b46866..b3d17b5 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1549,7 +1549,7 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
                     shader_program_dump_decl_usage(usage, param);
                     shader_dump_ins_modifiers(param);
                     TRACE(" ");
-                    shader_dump_param((IWineD3DBaseShader*) This, param, 0);
+                    shader_dump_param((IWineD3DBaseShader*) This, param, 0, 0);
                     pToken += 2;
                     len += 2;
 
@@ -1585,7 +1585,7 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
 
                         shader_dump_ins_modifiers(param);
                         TRACE(" ");
-                        shader_dump_param((IWineD3DBaseShader*) This, param, 0);
+                        shader_dump_param((IWineD3DBaseShader*) This, param, addr_token, 0);
 
                         for (i = 1; i < curOpcode->num_params; ++i) {
 
@@ -1595,7 +1595,7 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
                             len += tokens_read;
 
                             TRACE(", ");
-                            shader_dump_param((IWineD3DBaseShader*) This, param, 1);
+                            shader_dump_param((IWineD3DBaseShader*) This, param, addr_token, 1);
                         }
                     }
                 }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1227b3f..7a61921 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1372,6 +1372,7 @@ extern void shader_dump_ins_modifiers(
 extern void shader_dump_param(
     IWineD3DBaseShader *iface,
     const DWORD param,
+    const DWORD addr_token,
     int input);
 
 extern int shader_get_param(




More information about the wine-cvs mailing list