On Wed, Sep 30, 2015 at 12:58 AM, Kenneth Graunke <kenn...@whitecape.org> wrote: > We may want to use different type_size functions for (e.g.) inputs > vs. uniforms. Passing in -1 for mode ignores this, handling all > modes as before. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/glsl/nir/nir.h | 1 + > src/glsl/nir/nir_lower_io.c | 21 +++++++++++++++++---- > src/mesa/drivers/dri/i965/brw_nir.c | 4 ++-- > 3 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h > index d0c7b04..bf5d41d 100644 > --- a/src/glsl/nir/nir.h > +++ b/src/glsl/nir/nir.h > @@ -1822,6 +1822,7 @@ void nir_assign_var_locations(struct exec_list > *var_list, > int (*type_size)(const struct glsl_type *)); > > void nir_lower_io(nir_shader *shader, > + nir_variable_mode mode, > int (*type_size)(const struct glsl_type *)); > void nir_lower_vars_to_ssa(nir_shader *shader); > > diff --git a/src/glsl/nir/nir_lower_io.c b/src/glsl/nir/nir_lower_io.c > index 9f79c56..6072682 100644 > --- a/src/glsl/nir/nir_lower_io.c > +++ b/src/glsl/nir/nir_lower_io.c > @@ -38,6 +38,7 @@ struct lower_io_state { > nir_builder builder; > void *mem_ctx; > int (*type_size)(const struct glsl_type *type); > + nir_variable_mode mode; > }; > > void > @@ -154,9 +155,17 @@ nir_lower_io_block(nir_block *block, void *void_state) > > nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); > > + if (intrin->intrinsic != nir_intrinsic_load_var && > + intrin->intrinsic != nir_intrinsic_store_var) > + continue; > + > + nir_variable_mode mode = intrin->variables[0]->var->data.mode; > + > + if (state->mode != -1 && state->mode != mode) > + continue; > + > switch (intrin->intrinsic) { > case nir_intrinsic_load_var: { > - nir_variable_mode mode = intrin->variables[0]->var->data.mode; > if (mode != nir_var_shader_in && mode != nir_var_uniform) > continue; > > @@ -239,12 +248,15 @@ nir_lower_io_block(nir_block *block, void *void_state) > } > > static void > -nir_lower_io_impl(nir_function_impl *impl, int(*type_size)(const struct > glsl_type *)) > +nir_lower_io_impl(nir_function_impl *impl, > + nir_variable_mode mode, > + int(*type_size)(const struct glsl_type *))
I see that the original code was like this, but I've always seen a space after the return type in function pointers. > { > struct lower_io_state state; > > nir_builder_init(&state.builder, impl); > state.mem_ctx = ralloc_parent(impl); > + state.mode = mode; > state.type_size = type_size; > > nir_foreach_block(impl, nir_lower_io_block, &state); > @@ -254,10 +266,11 @@ nir_lower_io_impl(nir_function_impl *impl, > int(*type_size)(const struct glsl_typ > } > > void > -nir_lower_io(nir_shader *shader, int(*type_size)(const struct glsl_type *)) > +nir_lower_io(nir_shader *shader, nir_variable_mode mode, > + int(*type_size)(const struct glsl_type *)) Here as well. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev