From: Jason Ekstrand Date: Wed, 25 May 2016 17:51:33 +0000 (-0700) Subject: nir/inline: Also rewrite param derefs for texture instructions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0482efdc93f130a1defa021e5d198bc6ef59af5a;p=mesa.git 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 --- 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 */ } }