<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sat, Aug 25, 2018 at 5:25 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">On Saturday, August 25, 2018 6:05:57 AM PDT Jason Ekstrand wrote:<br>
> On Fri, Aug 24, 2018 at 8:24 PM Kenneth Graunke <<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>><br>
> wrote:<br>
> <br>
> > 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<br>
> > 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<br>
> > 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,<br>
> > 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,<br>
> > 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>
> ><br>
> <br>
> Can samplers be indirected?  If so, we probably want an array of samplers<br>
> instead 32 distinct samplers.<br>
<br>
That would be a frill.  This is ARB_fragment_program.  You get an<br>
integer constant for your texture unit number. :)<br></blockquote><div><br></div><div>Ok.  In that case, this and patch 1 are</div><div><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>></div><div><br></div><div>I'll let someone who knows about the implications for other drivers review patch 3</div><div><br></div><div>--Jason<br></div></div></div>