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

Author: antonino <[email protected]>
Date:   Fri Oct  6 12:42:20 2023 +0200

zink: store bindless var when creating it to avoid creating it again

When bindless variables are created they get used directly and never
stored anywhere so if another bindless instruction is encountered
duplicate variables are created.

Fixes: fe2ba184d8c ("zink: use descriptor indices in compiler")
Reviewed-By: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25591>

---

 src/gallium/drivers/zink/zink_compiler.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_compiler.c 
b/src/gallium/drivers/zink/zink_compiler.c
index 275782c150d..80d0e9acef4 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -4228,8 +4228,13 @@ lower_bindless_instr(nir_builder *b, nir_instr *in, void 
*data)
          return false;
 
       nir_variable *var = tex->sampler_dim == GLSL_SAMPLER_DIM_BUF ? 
bindless->bindless[1] : bindless->bindless[0];
-      if (!var)
+      if (!var) {
          var = create_bindless_texture(b->shader, tex, bindless->bindless_set);
+         if (tex->sampler_dim == GLSL_SAMPLER_DIM_BUF)
+            bindless->bindless[1] = var;
+         else
+            bindless->bindless[0] = var;
+      }
       b->cursor = nir_before_instr(in);
       nir_deref_instr *deref = nir_build_deref_var(b, var);
       if (glsl_type_is_array(var->type))

Reply via email to