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