Commit 3529e0ce authored by Jason Green's avatar Jason Green Committed by Alexandre Julliard

wined3d: Fix D3DSIO_M#X# instruction for both ARB and GLSL shaders.

This instruction was being handled incorrectly in the case where the 2nd src argument contained a relatively addressed constant.
parent 05bdf67d
...@@ -809,6 +809,7 @@ void vshader_hw_mnxn(SHADER_OPCODE_ARG* arg) { ...@@ -809,6 +809,7 @@ void vshader_hw_mnxn(SHADER_OPCODE_ARG* arg) {
tmpArg.buffer = arg->buffer; tmpArg.buffer = arg->buffer;
tmpArg.src[0] = arg->src[0]; tmpArg.src[0] = arg->src[0];
tmpArg.src_addr[0] = arg->src_addr[0]; tmpArg.src_addr[0] = arg->src_addr[0];
tmpArg.src_addr[1] = arg->src_addr[1];
tmpArg.reg_maps = arg->reg_maps; tmpArg.reg_maps = arg->reg_maps;
switch(arg->opcode->opcode) { switch(arg->opcode->opcode) {
......
...@@ -995,6 +995,7 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG* arg) { ...@@ -995,6 +995,7 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG* arg) {
tmpArg.buffer = arg->buffer; tmpArg.buffer = arg->buffer;
tmpArg.src[0] = arg->src[0]; tmpArg.src[0] = arg->src[0];
tmpArg.src_addr[0] = arg->src_addr[0]; tmpArg.src_addr[0] = arg->src_addr[0];
tmpArg.src_addr[1] = arg->src_addr[1];
tmpArg.reg_maps = arg->reg_maps; tmpArg.reg_maps = arg->reg_maps;
switch(arg->opcode->opcode) { switch(arg->opcode->opcode) {
...@@ -1025,7 +1026,6 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG* arg) { ...@@ -1025,7 +1026,6 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG* arg) {
for (i = 0; i < nComponents; i++) { for (i = 0; i < nComponents; i++) {
tmpArg.dst = ((arg->dst) & ~D3DSP_WRITEMASK_ALL)|(D3DSP_WRITEMASK_0<<i); tmpArg.dst = ((arg->dst) & ~D3DSP_WRITEMASK_ALL)|(D3DSP_WRITEMASK_0<<i);
tmpArg.src[1] = arg->src[1]+i; tmpArg.src[1] = arg->src[1]+i;
tmpArg.src_addr[1] = arg->src[1]+i;
shader_glsl_dot(&tmpArg); shader_glsl_dot(&tmpArg);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment