r300: fix swizzle masking in getUsedComponents
authorMaciej Cencora <m.cencora@gmail.com>
Sat, 11 Jul 2009 17:10:58 +0000 (19:10 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Mon, 13 Jul 2009 17:28:15 +0000 (19:28 +0200)
src/mesa/drivers/dri/r300/r300_vertprog.c

index 703fba4874462fa891f3c32575278f84de3a03a7..9f807dbc993057d5ca30a6127024bb3c0469b1fc 100644 (file)
@@ -1524,10 +1524,14 @@ static GLuint getUsedComponents(const GLuint swizzle)
        ret = 0;
 
        /* need to mask out ZERO, ONE and NIL swizzles */
-       ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_X) & 0x3);
-       ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_Y) & 0x3);
-       ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_Z) & 0x3);
-       ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_W) & 0x3);
+       if (GET_SWZ(swizzle, SWIZZLE_X) <= SWIZZLE_W)
+               ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_X));
+       if (GET_SWZ(swizzle, SWIZZLE_Y) <= SWIZZLE_W)
+               ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_Y));
+       if (GET_SWZ(swizzle, SWIZZLE_Z) <= SWIZZLE_W)
+               ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_Z));
+       if (GET_SWZ(swizzle, SWIZZLE_W) <= SWIZZLE_W)
+               ret |= 1 << (GET_SWZ(swizzle, SWIZZLE_W));
 
        return ret;
 }