On Tue, Jan 6, 2015 at 6:36 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > > > 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
Well, when I added nir_tex_src_sampler_index, it was more of a "I know we'll need something like this eventually so I'll stick it here to remind myself/other people when the time comes" thing, and I wasn't sure which option would be better. So you can keep it and always set sampler_index to 0 when it's indirect, or rename it - whatever's easier to do, so long as it's consistent. > >> >> >> 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