[Mesa-dev] [PATCH 2/3] nir: Create sampler variables in prog_to_nir.

Kenneth Graunke kenneth at whitecape.org
Sat Aug 25 22:25:53 UTC 2018


On Saturday, August 25, 2018 6:05:57 AM PDT Jason Ekstrand wrote:
> On Fri, Aug 24, 2018 at 8:24 PM Kenneth Graunke <kenneth at whitecape.org>
> wrote:
> 
> > This is needed for nir_gather_info to actually count the textures,
> > since it operates solely on variables.
> > ---
> >  src/mesa/program/prog_to_nir.c | 15 +++++++++++++--
> >  1 file changed, 13 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/mesa/program/prog_to_nir.c
> > b/src/mesa/program/prog_to_nir.c
> > index 14e57b6c6a1..1f0607542e8 100644
> > --- a/src/mesa/program/prog_to_nir.c
> > +++ b/src/mesa/program/prog_to_nir.c
> > @@ -52,6 +52,7 @@ struct ptn_compile {
> >     nir_variable *parameters;
> >     nir_variable *input_vars[VARYING_SLOT_MAX];
> >     nir_variable *output_vars[VARYING_SLOT_MAX];
> > +   nir_variable *sampler_vars[32]; /* matches number of bits in
> > TexSrcUnit */
> >     nir_register **output_regs;
> >     nir_register **temp_regs;
> >
> > @@ -484,9 +485,10 @@ ptn_kil(nir_builder *b, nir_ssa_def **src)
> >  }
> >
> >  static void
> > -ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src,
> > +ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,
> >          struct prog_instruction *prog_inst)
> >  {
> > +   nir_builder *b = &c->build;
> >     nir_tex_instr *instr;
> >     nir_texop op;
> >     unsigned num_srcs;
> > @@ -568,6 +570,15 @@ ptn_tex(nir_builder *b, nir_alu_dest dest,
> > nir_ssa_def **src,
> >        unreachable("can't reach");
> >     }
> >
> > +   if (!c->sampler_vars[prog_inst->TexSrcUnit]) {
> > +      const struct glsl_type *type =
> > +         glsl_sampler_type(instr->sampler_dim, false, false,
> > GLSL_TYPE_FLOAT);
> > +      nir_variable *var =
> > +         nir_variable_create(b->shader, nir_var_uniform, type, "sampler");
> > +      var->data.binding = prog_inst->TexSrcUnit;
> > +      c->sampler_vars[prog_inst->TexSrcUnit] = var;
> >
> 
> Can samplers be indirected?  If so, we probably want an array of samplers
> instead 32 distinct samplers.

That would be a frill.  This is ARB_fragment_program.  You get an
integer constant for your texture unit number. :)

--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180825/80abc392/attachment.sig>


More information about the mesa-dev mailing list