<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Aug 24, 2018 at 8:24 PM Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is needed for nir_gather_info to actually count the textures,<br>
since it operates solely on variables.<br>
---<br>
 src/mesa/program/prog_to_nir.c | 15 +++++++++++++--<br>
 1 file changed, 13 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c<br>
index 14e57b6c6a1..1f0607542e8 100644<br>
--- a/src/mesa/program/prog_to_nir.c<br>
+++ b/src/mesa/program/prog_to_nir.c<br>
@@ -52,6 +52,7 @@ struct ptn_compile {<br>
    nir_variable *parameters;<br>
    nir_variable *input_vars[VARYING_SLOT_MAX];<br>
    nir_variable *output_vars[VARYING_SLOT_MAX];<br>
+   nir_variable *sampler_vars[32]; /* matches number of bits in TexSrcUnit */<br>
    nir_register **output_regs;<br>
    nir_register **temp_regs;<br>
<br>
@@ -484,9 +485,10 @@ ptn_kil(nir_builder *b, nir_ssa_def **src)<br>
 }<br>
<br>
 static void<br>
-ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src,<br>
+ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,<br>
         struct prog_instruction *prog_inst)<br>
 {<br>
+   nir_builder *b = &c->build;<br>
    nir_tex_instr *instr;<br>
    nir_texop op;<br>
    unsigned num_srcs;<br>
@@ -568,6 +570,15 @@ ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src,<br>
       unreachable("can't reach");<br>
    }<br>
<br>
+   if (!c->sampler_vars[prog_inst->TexSrcUnit]) {<br>
+      const struct glsl_type *type =<br>
+         glsl_sampler_type(instr->sampler_dim, false, false, GLSL_TYPE_FLOAT);<br>
+      nir_variable *var =<br>
+         nir_variable_create(b->shader, nir_var_uniform, type, "sampler");<br>
+      var->data.binding = prog_inst->TexSrcUnit;<br>
+      c->sampler_vars[prog_inst->TexSrcUnit] = var;<br></blockquote><div><br></div><div>Can samplers be indirected?  If so, we probably want an array of samplers instead 32 distinct samplers.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   }<br>
+<br>
    unsigned src_number = 0;<br>
<br>
    instr->src[src_number].src =<br>
@@ -784,7 +795,7 @@ ptn_emit_instruction(struct ptn_compile *c, struct prog_instruction *prog_inst)<br>
    case OPCODE_TXD:<br>
    case OPCODE_TXL:<br>
    case OPCODE_TXP:<br>
-      ptn_tex(b, dest, src, prog_inst);<br>
+      ptn_tex(c, dest, src, prog_inst);<br>
       break;<br>
<br>
    case OPCODE_SWZ:<br>
-- <br>
2.18.0<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>