On Wed, Jan 7, 2015 at 9:58 AM, Jason Ekstrand <ja...@jlekstrand.net> wrote:
> > > On Wed, Jan 7, 2015 at 7:55 AM, Connor Abbott <cwabbo...@gmail.com> wrote: > >> 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. >> > > I think I'll go ahead and rename it. It's more consistent with the rest > of the texture instruction stuff to have it in the list and it's more > consistent with other things to have it be an offset applied to the index. > It's going to generate the same backend code either way. > Also, it allows backends to do something more interesting if they know that the index is always the base of the array. > --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