[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