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? _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev