freedreno/ir3: Demote centroid usage to pixel on non-msaa.
authorEric Anholt <eric@anholt.net>
Tue, 16 Mar 2021 19:00:01 +0000 (12:00 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 18 Mar 2021 17:46:09 +0000 (10:46 -0700)
Like with the sample qualifier on all GPUs, use pixel on older HW when
MSAA rasterization is disabled to get reliable results.  Since I ran many
CI jobs on this, this updates the A530 TF flakes list, though I don't
think that this MR necessarily made it flakier (we were already struggling
on a5xx TF, which was what was motivating me to look at this!)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9641>

src/freedreno/ci/deqp-freedreno-a307-fails.txt
src/freedreno/ci/deqp-freedreno-a307-flakes.txt
src/freedreno/ci/deqp-freedreno-a530-fails.txt
src/freedreno/ci/deqp-freedreno-a530-flakes.txt
src/freedreno/ir3/ir3_compiler_nir.c
src/freedreno/ir3/ir3_shader.c

index eef8932..2ba5ba6 100644 (file)
@@ -295,55 +295,3 @@ dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.med
 dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.highp_mat2x4,Fail
 dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4,Fail
 dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_mat2x4,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_lines_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_lines_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_triangles_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_triangles_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_lines_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_lines_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_triangles_interleaved,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_triangles_separate,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.10,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.3,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.4,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.8,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.lines.9,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.10,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.10,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.2,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.4,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.7,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.10,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.6,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.8,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.10,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.3,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.4,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.8,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.9,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.10,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.10,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.2,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.4,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.lines.7,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.10,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.4,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.5,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.6,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.7,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.9,Fail
index d320181..9f5525b 100644 (file)
@@ -3,7 +3,4 @@
 # delete lines from the test list.  Be careful.
 dEQP-GLES3.functional.shaders.texture_functions.texture.*gradoffset.*
 dEQP-GLES3.functional.texture.units.4_units.only_3d.*
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.8
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.8
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.4
 dEQP-GLES3.functional.vertex_arrays.single_attribute.*
index adc99a8..29caaca 100644 (file)
@@ -17,19 +17,6 @@ dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_array,Crash
 dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_max,Crash
 dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_array,Crash
 dEQP-GLES31.functional.layout_binding.image.image3d.fragment_binding_max,Crash
-dEQP-GLES31.functional.separate_shader.random.105,Fail
-dEQP-GLES31.functional.separate_shader.random.113,Fail
-dEQP-GLES31.functional.separate_shader.random.121,Fail
-dEQP-GLES31.functional.separate_shader.random.123,Fail
-dEQP-GLES31.functional.separate_shader.random.35,Fail
-dEQP-GLES31.functional.separate_shader.random.3,Fail
-dEQP-GLES31.functional.separate_shader.random.51,Fail
-dEQP-GLES31.functional.separate_shader.random.59,Fail
-dEQP-GLES31.functional.separate_shader.random.63,Fail
-dEQP-GLES31.functional.separate_shader.random.67,Fail
-dEQP-GLES31.functional.separate_shader.random.73,Fail
-dEQP-GLES31.functional.separate_shader.random.79,Fail
-dEQP-GLES31.functional.separate_shader.random.81,Fail
 dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth24_stencil8.gather_size_pot,Fail
 dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.gather_size_pot,Fail
 dEQP-GLES31.functional.texture.border_clamp.depth_compare_mode.depth32f_stencil8.linear_size_pot,Fail
@@ -501,13 +488,10 @@ dEQP-GLES3.functional.transform_feedback.basic_types.separate.points.mediump_vec
 dEQP-GLES3.functional.transform_feedback.basic_types.separate.points.mediump_vec4,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_lines_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_points_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.highp_vec4_triangles_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_lines_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_points_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.lowp_vec4_triangles_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_lines_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_points_separate,Fail
-dEQP-GLES3.functional.transform_feedback.interpolation.centroid.mediump_vec4_triangles_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.flat.highp_vec4_lines_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.flat.highp_vec4_points_separate,Fail
 dEQP-GLES3.functional.transform_feedback.interpolation.flat.lowp_vec4_lines_separate,Fail
@@ -534,8 +518,6 @@ dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.p
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.5,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.7,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.points.9,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.interleaved.triangles.3,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.1,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.3,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.lines.5,Fail
@@ -546,11 +528,6 @@ dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.poin
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.5,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.7,Fail
 dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.points.9,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.5,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.7,Fail
-dEQP-GLES3.functional.transform_feedback.random_full_array_capture.separate.triangles.9,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.1,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.3,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.lines.5,Fail
@@ -561,8 +538,6 @@ dEQP-GLES3.functional.transform_feedback.random.interleaved.points.3,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.points.5,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.points.7,Fail
 dEQP-GLES3.functional.transform_feedback.random.interleaved.points.9,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random.interleaved.triangles.3,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.lines.1,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.lines.3,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.lines.5,Fail
@@ -573,11 +548,6 @@ dEQP-GLES3.functional.transform_feedback.random.separate.points.3,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.points.5,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.points.7,Fail
 dEQP-GLES3.functional.transform_feedback.random.separate.points.9,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.1,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.3,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.5,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.7,Fail
-dEQP-GLES3.functional.transform_feedback.random.separate.triangles.9,Fail
 
 # Flaky since running more of GLES31
 dEQP-GLES31.functional.texture.border_clamp.*
index 1d6be3e..8729643 100644 (file)
@@ -10,12 +10,19 @@ dEQP-GLES31.functional.ubo.2_level_struct_array.single_buffer.packed_instance_ar
 
 # unstable results once we enabled SMP -- some state not being reset reliably?
 dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
+dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.mediump_mat2x4
+dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.mediump_vec4
 dEQP-GLES3.functional.transform_feedback.array.interleaved.triangles.lowp_mat3x4
 dEQP-GLES3.functional.transform_feedback.array.separate.triangles.highp_mat2x4
+dEQP-GLES3.functional.transform_feedback.array.separate.triangles.mediump_mat3x4
+dEQP-GLES3.functional.transform_feedback.array.separate.triangles.lowp_mat3
+dEQP-GLES3.functional.transform_feedback.basic_types.interleaved.triangles.lowp_vec4
 dEQP-GLES3.functional.transform_feedback.basic_types.separate.triangles.lowp_float
 dEQP-GLES3.functional.transform_feedback.basic_types.separate.triangles.lowp_vec3
 dEQP-GLES3.functional.transform_feedback.interpolation.smooth.highp_vec4_triangles_separate
 
+dEQP-GLES3.functional.fragment_ops.interaction.basic_shader.70
+
 # These are in the xfails list (they usually do), but the random
 # behavior occasionally results in UnexpectedPass results.
 dEQP-GLES31.functional.separate_shader.random.99
index 955c097..815da33 100644 (file)
@@ -1467,10 +1467,24 @@ emit_intrinsic_barycentric(struct ir3_context *ctx, nir_intrinsic_instr *intr,
        gl_system_value sysval = nir_intrinsic_barycentric_sysval(intr);
 
        if (!ctx->so->key.msaa) {
-               if (sysval == SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE)
+               switch (sysval) {
+               case SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE:
                        sysval = SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL;
-               if (sysval == SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE)
+                       break;
+               case SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID:
+                       if (ctx->compiler->gpu_id < 600)
+                               sysval = SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL;
+                       break;
+               case SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE:
                        sysval = SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL;
+                       break;
+               case SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID:
+                       if (ctx->compiler->gpu_id < 600)
+                               sysval = SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL;
+                       break;
+               default:
+                       break;
+               }
        }
 
        enum ir3_bary bary = sysval - SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL;
index 27f0966..41b553d 100644 (file)
@@ -444,9 +444,13 @@ ir3_setup_used_key(struct ir3_shader *shader)
                }
 
                /* Only used for deciding on behavior of
-                * nir_intrinsic_load_barycentric_sample
+                * nir_intrinsic_load_barycentric_sample, or the centroid demotion
+                * on older HW.
                 */
-               key->msaa = info->fs.uses_sample_qualifier;
+               key->msaa = info->fs.uses_sample_qualifier ||
+                                       (shader->compiler->gpu_id < 600 &&
+                                        (BITSET_TEST(info->system_values_read, SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID) ||
+                                         BITSET_TEST(info->system_values_read, SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID)));
        } else {
                key->tessellation = ~0;
                key->has_gs = true;