From 5da520cf3d731486635006425080d28762da2d48 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 16 Mar 2021 12:00:01 -0700 Subject: [PATCH] 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: --- .../ci/deqp-freedreno-a307-fails.txt | 52 ------------------- .../ci/deqp-freedreno-a307-flakes.txt | 3 -- .../ci/deqp-freedreno-a530-fails.txt | 30 ----------- .../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;