On Oct 1, 2015 12:18 PM, "Matt Turner" <matts...@gmail.com> wrote:
>
> On Fri, Aug 7, 2015 at 9:31 AM, Neil Roberts <n...@linux.intel.com> wrote:
> > Adds nir_src_is_dynamically_uniform which returns true if the source
> > is known to be dynamically uniform. This will be used in a later patch
> > to add a workaround for cases that only work with dynamically uniform
> > sources. Note that the function is not definitive, it can return false
> > negatives (but not false positives). Currently it only detects
> > constants and uniform accesses. It could easily be extended to include
> > more cases.
> > ---
> >  src/glsl/nir/nir.c | 29 +++++++++++++++++++++++++++++
> >  src/glsl/nir/nir.h |  1 +
> >  2 files changed, 30 insertions(+)
> >
> > diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
> > index 78ff886..242f0b4 100644
> > --- a/src/glsl/nir/nir.c
> > +++ b/src/glsl/nir/nir.c
> > @@ -1784,6 +1784,35 @@ nir_src_as_const_value(nir_src src)
> >     return &load->value;
> >  }
> >
> > +/**
> > + * Returns true if the source is known to be dynamically uniform.
Otherwise it
> > + * returns false which means it may or may not be dynamically uniform
but it
> > + * can't be determined.
> > + */
> > +bool
> > +nir_src_is_dynamically_uniform(nir_src src)
> > +{
> > +   if (!src.is_ssa)
> > +      return false;
> > +
> > +   /* Constants are trivially dynamically uniform */
> > +   if (src.ssa->parent_instr->type == nir_instr_type_load_const)
> > +      return true;
> > +
> > +   /* As are uniform variables */
> > +   if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) {
> > +      nir_intrinsic_instr *intr =
nir_instr_as_intrinsic(src.ssa->parent_instr);
> > +
> > +      if (intr->intrinsic == nir_intrinsic_load_uniform)
> > +         return true;
> > +   }
> > +
> > +   /* XXX: this could have many more tests, such as when a sampler
function is
> > +    * called with dynamically uniform arguments.
> > +    */
> > +   return false;
> > +}
>
> This functions seems correct as-is, so it gets a
>
> Reviewed-by: Matt Turner <matts...@gmail.com>
>
> On top of being useful for fixing the nonconst/nonuniform piglit
> tests, knowing which values are uniform can allow better optimization
> and knowing which branches are uniform would allow us to enable Single
> Program Flow.
>
> Cc'ing Jason for a discussion about how we'd like to handle this kind
> of information in NIR. Add a bool is_uniform or something to
> nir_ssa_def and hook into the metadata system?

That was more-or-less my plan. We should probably have a proper pass that
handles things like phi nodes and ALU operations.

--Jason
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to