diff options
author | Jason Ekstrand <[email protected]> | 2016-05-25 10:51:33 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-05-27 10:28:27 -0700 |
commit | 0482efdc93f130a1defa021e5d198bc6ef59af5a (patch) | |
tree | 1fb5a5abc74f1def9718a79b2776b782cd077b1d /src/compiler/nir | |
parent | 2522180845247e36c998eb9c92a6c283b09bb182 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/compiler/nir')
-rw-r--r-- | src/compiler/nir/nir_inline_functions.c | 26 |
1 files 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 */ } } |