[Mesa-dev] [PATCH 118/133] nir: Add a sampler index indirect to nir_tex_instr
Jason Ekstrand
jason at jlekstrand.net
Tue Jan 6 15:36:53 PST 2015
On Mon, Jan 5, 2015 at 10:45 PM, Connor Abbott <cwabbott0 at gmail.com> wrote:
> I created nir_tex_src_sampler_index for exactly this purpose, which
> fits in with the "stick all the sources in an array so we can easily
> iterate over them" philosophy. If you decide to keep with this
> solution, though, at least remove that.
>
Sorry, I completely missed that. My only gripe is that it doesn't really
follow the rest of our base_offset + indirect philosophy. Is that the way
you were intending to use it? i.e. direct just has sampler_index and
indirect is sampler_index + nir_tex_src_sampler_index. If so, maybe we
should rename it to nir_tex_src_sampler_indirect.
I'm 100% ok with that, It just isn't at all clear how the two work together.
--Jason
>
> On Tue, Dec 16, 2014 at 1:13 AM, Jason Ekstrand <jason at jlekstrand.net>
> wrote:
> > ---
> > src/glsl/nir/nir.c | 11 +++++++++++
> > src/glsl/nir/nir.h | 10 ++++++++++
> > src/glsl/nir/nir_print.c | 4 ++++
> > src/glsl/nir/nir_validate.c | 3 +++
> > 4 files changed, 28 insertions(+)
> >
> > diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
> > index 60c9cff..8bcc64a 100644
> > --- a/src/glsl/nir/nir.c
> > +++ b/src/glsl/nir/nir.c
> > @@ -461,6 +461,13 @@ nir_tex_instr_create(void *mem_ctx, unsigned
> num_srcs)
> > instr->has_predicate = false;
> > src_init(&instr->predicate);
> >
> > + instr->sampler_index = 0;
> > + instr->has_sampler_indirect = false;
> > + src_init(&instr->sampler_indirect);
> > + instr->sampler_indirect_max = 0;
> > +
> > + instr->sampler = NULL;
> > +
> > return instr;
> > }
> >
> > @@ -1529,6 +1536,10 @@ visit_tex_src(nir_tex_instr *instr,
> nir_foreach_src_cb cb, void *state)
> > if (!visit_src(&instr->predicate, cb, state))
> > return false;
> >
> > + if (instr->has_sampler_indirect)
> > + if (!visit_src(&instr->sampler_indirect, cb, state))
> > + return false;
> > +
> > if (instr->sampler != NULL)
> > if (!visit_deref_src(instr->sampler, cb, state))
> > return false;
> > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
> > index 32bf634..bc7a226 100644
> > --- a/src/glsl/nir/nir.h
> > +++ b/src/glsl/nir/nir.h
> > @@ -838,7 +838,17 @@ typedef struct {
> > /* gather component selector */
> > unsigned component : 2;
> >
> > + /** The sampler index
> > + *
> > + * If has_indirect is true, then the sampler index is given by
> > + * sampler_index + sampler_indirect where sampler_indirect has a
> maximum
> > + * possible value of sampler_indirect_max.
> > + */
> > unsigned sampler_index;
> > + bool has_sampler_indirect;
> > + nir_src sampler_indirect;
> > + unsigned sampler_indirect_max;
> > +
> > nir_deref_var *sampler; /* if this is NULL, use sampler_index
> instead */
> > } nir_tex_instr;
> >
> > diff --git a/src/glsl/nir/nir_print.c b/src/glsl/nir/nir_print.c
> > index 962e408..67df9a5 100644
> > --- a/src/glsl/nir/nir_print.c
> > +++ b/src/glsl/nir/nir_print.c
> > @@ -498,6 +498,10 @@ print_tex_instr(nir_tex_instr *instr,
> print_var_state *state, FILE *fp)
> > print_deref(instr->sampler, state, fp);
> > } else {
> > fprintf(fp, "%u", instr->sampler_index);
> > + if (instr->has_sampler_indirect) {
> > + fprintf(fp, " + ");
> > + print_src(&instr->sampler_indirect, fp);
> > + }
> > }
> >
> > fprintf(fp, " (sampler)");
> > diff --git a/src/glsl/nir/nir_validate.c b/src/glsl/nir/nir_validate.c
> > index e565b3c..ed6e482 100644
> > --- a/src/glsl/nir/nir_validate.c
> > +++ b/src/glsl/nir/nir_validate.c
> > @@ -399,6 +399,9 @@ validate_tex_instr(nir_tex_instr *instr,
> validate_state *state)
> > validate_src(&instr->src[i], state);
> > }
> >
> > + if (instr->has_sampler_indirect)
> > + validate_src(&instr->sampler_indirect, state);
> > +
> > if (instr->sampler != NULL)
> > validate_deref_var(instr->sampler, state);
> > }
> > --
> > 2.2.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150106/08bb251f/attachment-0001.html>
More information about the mesa-dev
mailing list