ir_to_mesa: When generating a swizzle, respect the reg's current swizzle.
authorEric Anholt <eric@anholt.net>
Wed, 30 Jun 2010 22:26:41 +0000 (15:26 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 30 Jun 2010 22:30:00 +0000 (15:30 -0700)
Fixes depth-tex-modes-glsl.

src/mesa/shader/ir_to_mesa.cpp

index 8c074a8bd9a22f3d1ffd381e99fb371b84f0495e..61a1f306c880a7a07074df30da92eb7396b3dac9 100644 (file)
@@ -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];
       }
    }