[Mesa-dev] [PATCH] nir: Add helpers for getting input/output intrinsic sources.
Jason Ekstrand
jason at jlekstrand.net
Thu Nov 12 17:18:02 PST 2015
I didn't double-check all your indices, but I like it.
Reviewed-by: Jason Ekstrand <jason.ekstrand at 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 <kenneth at 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 <kenneth at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list