Mesa (master): nir/inline: Also rewrite param derefs for texture instructions

Jason Ekstrand jekstrand at kemper.freedesktop.org
Fri May 27 17:29:01 UTC 2016


Module: Mesa
Branch: master
Commit: 0482efdc93f130a1defa021e5d198bc6ef59af5a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0482efdc93f130a1defa021e5d198bc6ef59af5a

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed May 25 10:51:33 2016 -0700

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 <cwabbott0 at gmail.com>

---

 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 2344537..c36748d 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 */
    }
 }
 




More information about the mesa-commit mailing list