panfrost/midgard: Fix b2f32 swizzle for vectors
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 24 Mar 2019 16:07:31 +0000 (16:07 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 26 Mar 2019 23:35:08 +0000 (23:35 +0000)
Fixes issues in most of dEQP-GLES2.functional.shaders.*

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/panfrost/midgard/midgard_compile.c

index 87c504061aa0385fc8a0107d9f72a4f85292c322..2be883fa3fc3c26ee2a906f3900b8860e9a096fb 100644 (file)
@@ -204,6 +204,10 @@ const midgard_vector_alu_src blank_alu_src = {
         .swizzle = SWIZZLE(COMPONENT_X, COMPONENT_Y, COMPONENT_Z, COMPONENT_W),
 };
 
+const midgard_vector_alu_src blank_alu_src_xxxx = {
+        .swizzle = SWIZZLE(COMPONENT_X, COMPONENT_X, COMPONENT_X, COMPONENT_X),
+};
+
 const midgard_scalar_alu_src blank_scalar_alu_src = {
         .full = true
 };
@@ -904,10 +908,6 @@ emit_condition(compiler_context *ctx, nir_src *src, bool for_branch)
         /* XXX: Force component correct */
         int condition = nir_src_index(ctx, src);
 
-        const midgard_vector_alu_src alu_src = {
-                .swizzle = SWIZZLE(COMPONENT_X, COMPONENT_X, COMPONENT_X, COMPONENT_X),
-        };
-
         /* There is no boolean move instruction. Instead, we simulate a move by
          * ANDing the condition with itself to get it into r31.w */
 
@@ -924,8 +924,8 @@ emit_condition(compiler_context *ctx, nir_src *src, bool for_branch)
                         .reg_mode = midgard_reg_mode_full,
                         .dest_override = midgard_dest_override_none,
                         .mask = (0x3 << 6), /* w */
-                        .src1 = vector_alu_srco_unsigned(alu_src),
-                        .src2 = vector_alu_srco_unsigned(alu_src)
+                        .src1 = vector_alu_srco_unsigned(blank_alu_src_xxxx),
+                        .src2 = vector_alu_srco_unsigned(blank_alu_src_xxxx)
                 },
         };
 
@@ -1130,6 +1130,8 @@ emit_alu(compiler_context *ctx, nir_alu_instr *instr)
                 ins.ssa_args.src1 = SSA_FIXED_REGISTER(REGISTER_CONSTANT);
                 ins.has_constants = true;
                 ins.constants[0] = 1.0;
+
+                ins.alu.src2 = vector_alu_srco_unsigned(blank_alu_src_xxxx);
         }
 
         if ((opcode_props & UNITS_ALL) == UNIT_VLUT) {