I didn't double-check all your indices, but I like it. Reviewed-by: Jason Ekstrand <jason.ekstr...@intel.com>
The other four can also have my R-B conditional on the little rework I suggested. --Jason On Thu, Nov 12, 2015 at 4:03 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > With the many variants of IO intrinsics, particular sources are often in > different locations. It's convenient to say "give me the indirect > offset" or "give me the vertex index" and have it just work, without > having to think about exactly which kind of intrinsic you have. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/glsl/nir/nir.h | 3 +++ > src/glsl/nir/nir_lower_io.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 45 insertions(+) > > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h > index 13ebbca..e7ffeee 100644 > --- a/src/glsl/nir/nir.h > +++ b/src/glsl/nir/nir.h > @@ -1933,6 +1933,9 @@ void nir_assign_var_locations(struct exec_list > *var_list, > void nir_lower_io(nir_shader *shader, > nir_variable_mode mode, > int (*type_size)(const struct glsl_type *)); > +nir_src *nir_get_io_indirect_src(nir_intrinsic_instr *instr); > +nir_src *nir_get_io_vertex_index_src(nir_intrinsic_instr *instr); > + > void nir_lower_vars_to_ssa(nir_shader *shader); > > bool nir_remove_dead_variables(nir_shader *shader); > diff --git a/src/glsl/nir/nir_lower_io.c b/src/glsl/nir/nir_lower_io.c > index e81524c..66e8b96 100644 > --- a/src/glsl/nir/nir_lower_io.c > +++ b/src/glsl/nir/nir_lower_io.c > @@ -327,3 +327,45 @@ nir_lower_io(nir_shader *shader, nir_variable_mode mode, > nir_lower_io_impl(overload->impl, mode, type_size); > } > } > + > +/** > + * Return the indirect source for a load/store indirect intrinsic. > + */ > +nir_src * > +nir_get_io_indirect_src(nir_intrinsic_instr *instr) > +{ > + switch (instr->intrinsic) { > + case nir_intrinsic_load_input_indirect: > + case nir_intrinsic_load_output_indirect: > + case nir_intrinsic_load_uniform_indirect: > + return &instr->src[0]; > + case nir_intrinsic_load_per_vertex_input_indirect: > + case nir_intrinsic_load_per_vertex_output_indirect: > + case nir_intrinsic_store_output_indirect: > + return &instr->src[1]; > + case nir_intrinsic_store_per_vertex_output_indirect: > + return &instr->src[2]; > + default: > + return NULL; > + } > +} > + > +/** > + * Return the vertex index source for a load/store per_vertex intrinsic. > + */ > +nir_src * > +nir_get_io_vertex_index_src(nir_intrinsic_instr *instr) > +{ > + switch (instr->intrinsic) { > + case nir_intrinsic_load_per_vertex_input: > + case nir_intrinsic_load_per_vertex_output: > + case nir_intrinsic_load_per_vertex_input_indirect: > + case nir_intrinsic_load_per_vertex_output_indirect: > + return &instr->src[0]; > + case nir_intrinsic_store_per_vertex_output: > + case nir_intrinsic_store_per_vertex_output_indirect: > + return &instr->src[1]; > + default: > + return NULL; > + } > +} > -- > 2.6.2 > > _______________________________________________ > 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