Mesa (master): freedreno/ir3: Demote centroid usage to pixel on non-msaa.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Mar 18 19:00:16 UTC 2021


Module: Mesa
Branch: master
Commit: 5da520cf3d731486635006425080d28762da2d48
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5da520cf3d731486635006425080d28762da2d48

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Mar 16 12:00:01 2021 -0700

freedreno/ir3: Demote centroid usage to pixel on non-msaa.

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  | 52 -------------------------
 src/freedreno/ci/deqp-freedreno-a307-flakes.txt |  3 --
 src/freedreno/ci/deqp-freedreno-a530-fails.txt  | 30 --------------
 src/freedreno/ci/deqp-freedreno-a530-flakes.txt |  7 ++++
 src/freedreno/ir3/ir3_compiler_nir.c            | 18 ++++++++-
 src/freedreno/ir3/ir3_shader.c                  |  8 +++-
 6 files changed, 29 insertions(+), 89 deletions(-)

diff --git a/src/freedreno/ci/deqp-freedreno-a307-fails.txt b/src/freedreno/ci/deqp-freedreno-a307-fails.txt
index eef89322e1c..2ba5ba6a05e 100644
--- a/src/freedreno/ci/deqp-freedreno-a307-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a307-fails.txt
@@ -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
diff --git a/src/freedreno/ci/deqp-freedreno-a307-flakes.txt b/src/freedreno/ci/deqp-freedreno-a307-flakes.txt
index d320181651f..9f5525b3b5a 100644
--- a/src/freedreno/ci/deqp-freedreno-a307-flakes.txt
+++ b/src/freedreno/ci/deqp-freedreno-a307-flakes.txt
@@ -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.*
diff --git a/src/freedreno/ci/deqp-freedreno-a530-fails.txt b/src/freedreno/ci/deqp-freedreno-a530-fails.txt
index adc99a8239f..29caaca7180 100644
--- a/src/freedreno/ci/deqp-freedreno-a530-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a530-fails.txt
@@ -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.*
diff --git a/src/freedreno/ci/deqp-freedreno-a530-flakes.txt b/src/freedreno/ci/deqp-freedreno-a530-flakes.txt
index 1d6be3ec7f6..872964306ae 100644
--- a/src/freedreno/ci/deqp-freedreno-a530-flakes.txt
+++ b/src/freedreno/ci/deqp-freedreno-a530-flakes.txt
@@ -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
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 955c0970bae..815da33119a 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -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;
diff --git a/src/freedreno/ir3/ir3_shader.c b/src/freedreno/ir3/ir3_shader.c
index 27f0966325c..41b553dd402 100644
--- a/src/freedreno/ir3/ir3_shader.c
+++ b/src/freedreno/ir3/ir3_shader.c
@@ -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;



More information about the mesa-commit mailing list