Module: Mesa Branch: staging/22.0 Commit: 59959aab3d53ff8ce280b32c56579b71cbe717bb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=59959aab3d53ff8ce280b32c56579b71cbe717bb
Author: Emma Anholt <e...@anholt.net> Date: Thu Jan 6 09:43:49 2022 -0800 r600: Disable SB in the presence of indirection on temp arrays. Prevents several regressions when NIR-to-TGSI is enabled where it was allocating arrays on top of each other. Fixes vec3 fails on RV770, dEQP-GLES3.functional.shaders.metamorphic.bubblesort_flag.variant_1 and 2 in general, and fixes another piglit but breaks two others. Still, this seems to be a win. Cc: mesa-stable Reviewed-by: Gert Wollny <gert.wol...@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14429> (cherry picked from commit f315ea9eff6d8479b995355647ec297d5d9a5651) Conflicts: src/gallium/drivers/r600/ci/r600-rv770-fails.txt src/gallium/drivers/r600/ci/r600-turks-fails.txt --- .pick_status.json | 2 +- src/gallium/drivers/r600/r600_shader.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index eeead9d618c..aa8854a7aff 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -7564,7 +7564,7 @@ "description": "r600: Disable SB in the presence of indirection on temp arrays.", "nominated": true, "nomination_type": 0, - "resolution": 5, + "resolution": 1, "because_sha": null }, { diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index aa3e71fc551..d42d3d925dd 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -258,6 +258,12 @@ int r600_pipe_shader_create(struct pipe_context *ctx, use_sb &= !shader->shader.uses_images; use_sb &= !shader->shader.uses_helper_invocation; + /* sb has bugs in array reg allocation + * (dEQP-GLES2.functional.shaders.struct.local.struct_array_dynamic_index_fragment + * with NTT) + */ + use_sb &= !(shader->shader.indirect_files & (1 << TGSI_FILE_TEMPORARY)); + /* Check if the bytecode has already been built. */ if (!shader->shader.bc.bytecode) { r = r600_bytecode_build(&shader->shader.bc);