r600g: fix check_and_set_bank_swizzle for cayman
authorVadim Girlin <vadimgirlin@gmail.com>
Tue, 26 Feb 2013 16:50:25 +0000 (20:50 +0400)
committerVincent Lejeune <vljn@ovi.com>
Sun, 3 Mar 2013 20:38:49 +0000 (21:38 +0100)
Tested-by: Vincent Lejeune <vljn at ovi.com>
Reviewed-by: Vincent Lejeune <vljn at ovi.com>
src/gallium/drivers/r600/r600_asm.c

index 3632aa5763cf1e511f7c0580e9078e8b08fc406c..b5a29cbb003e84f0eb36114bc0052835c6feb9fd 100644 (file)
@@ -475,12 +475,6 @@ static int check_and_set_bank_swizzle(struct r600_bytecode *bc,
        bank_swizzle[4] = SQ_ALU_SCL_210;
        while(bank_swizzle[4] <= SQ_ALU_SCL_221) {
 
-               if (max_slots == 4) {
-                       for (i = 0; i < max_slots; i++) {
-                               if (bank_swizzle[i] == SQ_ALU_VEC_210)
-                                 return -1;
-                       }
-               }
                init_bank_swizzle(&bs);
                if (scalar_only == false) {
                        for (i = 0; i < 4; i++) {
@@ -512,8 +506,10 @@ static int check_and_set_bank_swizzle(struct r600_bytecode *bc,
                                        bank_swizzle[i]++;
                                        if (bank_swizzle[i] <= SQ_ALU_VEC_210)
                                                break;
-                                       else
+                                       else if (i < max_slots - 1)
                                                bank_swizzle[i] = SQ_ALU_VEC_012;
+                                       else
+                                               return -1;
                                }
                        }
                }