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