Mesa (main): freedreno/ir3: Don't lower_gs multiple times

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 8 21:05:38 UTC 2022


Module: Mesa
Branch: main
Commit: 5434de7ab6b051d5a37c2ae908f2bdcc39ce7053
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5434de7ab6b051d5a37c2ae908f2bdcc39ce7053

Author: Rob Clark <robdclark at chromium.org>
Date:   Fri Jul  1 14:44:00 2022 -0700

freedreno/ir3: Don't lower_gs multiple times

At least with gallium, this can be called multiple times via
pipe_screen::finalize_nir().  But it is not designed to be called
multiple times, and can result in vertex_flags getting 'optimized'
away.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6720
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17341>

---

 src/freedreno/ir3/ir3_nir_lower_tess.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c
index db96893aa75..e14df06a194 100644
--- a/src/freedreno/ir3/ir3_nir_lower_tess.c
+++ b/src/freedreno/ir3/ir3_nir_lower_tess.c
@@ -909,6 +909,11 @@ ir3_nir_lower_gs(nir_shader *shader)
 {
    struct state state = {};
 
+   /* Don't lower multiple times: */
+   nir_foreach_shader_out_variable (var, shader)
+      if (var->data.location == VARYING_SLOT_GS_VERTEX_FLAGS_IR3)
+         return;
+
    if (shader_debug_enabled(shader->info.stage)) {
       mesa_logi("NIR (before gs lowering):");
       nir_log_shaderi(shader);



More information about the mesa-commit mailing list