panfrost/midgard: Map more bany/ball opcodes
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 25 Mar 2019 00:12:06 +0000 (00:12 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 26 Mar 2019 23:35:20 +0000 (23:35 +0000)
Some of these are not yet fully functional due to related bugs, but this
the correct op mapping. The native ball/bany opcodes act on vec4's
unconditionally. That said, both ball and bany have the nice property
that duplicating an argument does not affect their output, so the
default "hanging swizzles" allow us to implement 2/3-component opcodes
correctly, implicitly lowering.

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

index 2be883fa3fc3c26ee2a906f3900b8860e9a096fb..fe779b154a8e1b708d323a9c3d986c5626227d0c 100644 (file)
@@ -1007,9 +1007,20 @@ emit_alu(compiler_context *ctx, nir_alu_instr *instr)
                 ALU_CASE(ishr, iasr);
                 ALU_CASE(ushr, ilsr);
 
+                ALU_CASE(ball_fequal2, fball_eq);
+                ALU_CASE(ball_fequal3, fball_eq);
                 ALU_CASE(ball_fequal4, fball_eq);
+
+                ALU_CASE(bany_fnequal2, fbany_neq);
+                ALU_CASE(bany_fnequal3, fbany_neq);
                 ALU_CASE(bany_fnequal4, fbany_neq);
+
+                ALU_CASE(ball_iequal2, iball_eq);
+                ALU_CASE(ball_iequal3, iball_eq);
                 ALU_CASE(ball_iequal4, iball_eq);
+
+                ALU_CASE(bany_inequal2, ibany_neq);
+                ALU_CASE(bany_inequal3, ibany_neq);
                 ALU_CASE(bany_inequal4, ibany_neq);
 
         /* For greater-or-equal, we use less-or-equal and flip the