panfrost/midgard: Fix integer selection
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Fri, 3 May 2019 01:54:16 +0000 (01:54 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 4 May 2019 19:08:51 +0000 (19:08 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/panfrost/ci/expected-failures.txt
src/gallium/drivers/panfrost/midgard/midgard_compile.c

index 837b4d2ff1cf3809bb71722774ec999d1ad4d76a..08dbe3c92331dcea94b1baa6f2df94375b1a563c 100644 (file)
@@ -1928,38 +1928,6 @@ dEQP-GLES2.functional.shaders.operator.binary_operator.div_assign_result.mediump
 dEQP-GLES2.functional.shaders.operator.binary_operator.div_assign_result.mediump_ivec4_int_fragment
 dEQP-GLES2.functional.shaders.operator.binary_operator.div_assign_result.mediump_ivec4_int_vertex
 dEQP-GLES2.functional.shaders.operator.binary_operator.div_assign_result.mediump_ivec4_vertex
-dEQP-GLES2.functional.shaders.operator.selection.bool_fragment
-dEQP-GLES2.functional.shaders.operator.selection.bool_vertex
-dEQP-GLES2.functional.shaders.operator.selection.bvec2_fragment
-dEQP-GLES2.functional.shaders.operator.selection.bvec2_vertex
-dEQP-GLES2.functional.shaders.operator.selection.bvec3_fragment
-dEQP-GLES2.functional.shaders.operator.selection.bvec3_vertex
-dEQP-GLES2.functional.shaders.operator.selection.bvec4_fragment
-dEQP-GLES2.functional.shaders.operator.selection.bvec4_vertex
-dEQP-GLES2.functional.shaders.operator.selection.highp_int_fragment
-dEQP-GLES2.functional.shaders.operator.selection.highp_int_vertex
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec2_fragment
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec2_vertex
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec3_fragment
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec3_vertex
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec4_fragment
-dEQP-GLES2.functional.shaders.operator.selection.highp_ivec4_vertex
-dEQP-GLES2.functional.shaders.operator.selection.lowp_int_fragment
-dEQP-GLES2.functional.shaders.operator.selection.lowp_int_vertex
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec2_fragment
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec2_vertex
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec3_fragment
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec3_vertex
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec4_fragment
-dEQP-GLES2.functional.shaders.operator.selection.lowp_ivec4_vertex
-dEQP-GLES2.functional.shaders.operator.selection.mediump_int_fragment
-dEQP-GLES2.functional.shaders.operator.selection.mediump_int_vertex
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec2_fragment
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec2_vertex
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec3_fragment
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec3_vertex
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec4_fragment
-dEQP-GLES2.functional.shaders.operator.selection.mediump_ivec4_vertex
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_vertex
 dEQP-GLES2.functional.shaders.random.all_features.fragment.10
index aa3070839fb43bcba3c34d8c0a7b266f000269cb..6dffd7290d2d253c91a1b2e91d0d5ff679c25048 100644 (file)
@@ -1239,7 +1239,16 @@ emit_alu(compiler_context *ctx, nir_alu_instr *instr)
                         instr->src[1] = instr->src[0];
                         instr->src[0] = instr->src[2];
                 } else {
-                        op = midgard_alu_op_fcsel;
+                        /* Midgard features both fcsel and icsel, depending on
+                         * the type of the arguments/output. However, as long
+                         * as we're careful we can _always_ use icsel and
+                         * _never_ need fcsel, since the latter does additional
+                         * floating-point-specific processing whereas the
+                         * former just moves bits on the wire. It's not obvious
+                         * why these are separate opcodes, save for the ability
+                         * to do things like sat/pos/abs/neg for free */
+
+                        op = midgard_alu_op_icsel;
 
                         /* csel works as a two-arg in Midgard, since the condition is hardcoded in r31.w */
                         nr_inputs = 2;