summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-06-30 15:26:41 -0700
committerEric Anholt <eric@anholt.net>2010-06-30 15:30:00 -0700
commit698b84444343189357ad252856d3c5493e47e4fa (patch)
tree18255017e70c762f4367a40a3fc5d7035469096c
parent77049a702ad54e09c4102fe8c964e069944f83e5 (diff)
ir_to_mesa: When generating a swizzle, respect the reg's current swizzle.
Fixes depth-tex-modes-glsl.
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 8c074a8bd9a..61a1f306c88 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -817,23 +817,23 @@ ir_to_mesa_visitor::visit(ir_swizzle *ir)
if (i < ir->type->vector_elements) {
switch (i) {
case 0:
- swizzle[i] = ir->mask.x;
+ swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.x);
break;
case 1:
- swizzle[i] = ir->mask.y;
+ swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.y);
break;
case 2:
- swizzle[i] = ir->mask.z;
+ swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.z);
break;
case 3:
- swizzle[i] = ir->mask.w;
+ swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.w);
break;
}
} else {
/* If the type is smaller than a vec4, replicate the last
* channel out.
*/
- swizzle[i] = ir->type->vector_elements - 1;
+ swizzle[i] = swizzle[ir->type->vector_elements - 1];
}
}