On Mon, Jan 5, 2015 at 10:45 PM, Connor Abbott <cwabbo...@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 <ja...@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@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev