[Mesa-dev] [PATCH 01/23] nir: Allow nir_lower_io() to only lower one type of variable.
Matt Turner
mattst88 at gmail.com
Wed Sep 30 10:13:25 PDT 2015
On Wed, Sep 30, 2015 at 12:58 AM, Kenneth Graunke <kenneth at 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 <kenneth at 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.
More information about the mesa-dev
mailing list