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: fe2ba184d8 ("zink: use descriptor indices in compiler")
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25591>
This commit is contained in:
antonino 2023-10-06 12:42:20 +02:00 committed by Marge Bot
parent 9b0960cfe3
commit 3a33e59596

View file

@ -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))