wined3d: Fix D3DSIO_M#X# instruction for both ARB and GLSL shaders
Jason Green
jave27 at gmail.com
Wed Jul 5 21:35:56 CDT 2006
This instruction was being handled incorrectly in the case where the
2nd src argument contained a relatively addressed constant.
-------------- next part --------------
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 753789f..467fdf7 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -807,6 +807,7 @@ void vshader_hw_mnxn(SHADER_OPCODE_ARG*
tmpArg.buffer = arg->buffer;
tmpArg.src[0] = arg->src[0];
tmpArg.src_addr[0] = arg->src_addr[0];
+ tmpArg.src_addr[1] = arg->src_addr[1];
tmpArg.reg_maps = arg->reg_maps;
switch(arg->opcode->opcode) {
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 94871c0..1ff6ab0 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -995,6 +995,7 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG*
tmpArg.buffer = arg->buffer;
tmpArg.src[0] = arg->src[0];
tmpArg.src_addr[0] = arg->src_addr[0];
+ tmpArg.src_addr[1] = arg->src_addr[1];
tmpArg.reg_maps = arg->reg_maps;
switch(arg->opcode->opcode) {
@@ -1025,7 +1026,6 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG*
for (i = 0; i < nComponents; i++) {
tmpArg.dst = ((arg->dst) & ~D3DSP_WRITEMASK_ALL)|(D3DSP_WRITEMASK_0<<i);
tmpArg.src[1] = arg->src[1]+i;
- tmpArg.src_addr[1] = arg->src[1]+i;
shader_glsl_dot(&tmpArg);
}
}
More information about the wine-patches
mailing list