From 0482efdc93f130a1defa021e5d198bc6ef59af5a Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 25 May 2016 10:51:33 -0700 Subject: [PATCH] nir/inline: Also rewrite param derefs for texture instructions Without this, samplers get left hanging as derefs to variables that don't actually exist. Reviewed-by: Connor Abbott --- src/compiler/nir/nir_inline_functions.c | 26 +++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/compiler/nir/nir_inline_functions.c b/src/compiler/nir/nir_inline_functions.c index 234453720a9..c36748d6cf5 100644 --- a/src/compiler/nir/nir_inline_functions.c +++ b/src/compiler/nir/nir_inline_functions.c @@ -59,14 +59,28 @@ convert_deref_to_param_deref(nir_instr *instr, nir_deref_var **deref, static void rewrite_param_derefs(nir_instr *instr, nir_call_instr *call) { - if (instr->type != nir_instr_type_intrinsic) - return; + switch (instr->type) { + case nir_instr_type_intrinsic: { + nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); + + for (unsigned i = 0; + i < nir_intrinsic_infos[intrin->intrinsic].num_variables; i++) { + convert_deref_to_param_deref(instr, &intrin->variables[i], call); + } + break; + } - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); + case nir_instr_type_tex: { + nir_tex_instr *tex = nir_instr_as_tex(instr); + if (tex->texture) + convert_deref_to_param_deref(&tex->instr, &tex->texture, call); + if (tex->sampler) + convert_deref_to_param_deref(&tex->instr, &tex->sampler, call); + break; + } - for (unsigned i = 0; - i < nir_intrinsic_infos[intrin->intrinsic].num_variables; i++) { - convert_deref_to_param_deref(instr, &intrin->variables[i], call); + default: + break; /* Nothing else has derefs */ } } -- 2.30.2