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.
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 @@
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 @@
}
}
+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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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_param(
IWineD3DBaseShader *iface,
const DWORD param,
+ const DWORD addr_token,
int input);
extern int shader_get_param(