[Mesa-dev] [PATCH] nir/build: add nir_vec() helper

Ilia Mirkin imirkin at alum.mit.edu
Fri Sep 18 10:25:39 PDT 2015


On Fri, Sep 18, 2015 at 1:24 PM, Rob Clark <robdclark at gmail.com> wrote:
> From: Rob Clark <robclark at freedesktop.org>
>
> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
>  src/glsl/nir/nir_builder.h                    | 18 ++++++++++++++++++
>  src/glsl/nir/nir_lower_load_const_to_scalar.c | 15 +--------------
>  src/glsl/nir/nir_lower_tex.c                  | 18 +-----------------
>  3 files changed, 20 insertions(+), 31 deletions(-)
>
> diff --git a/src/glsl/nir/nir_builder.h b/src/glsl/nir/nir_builder.h
> index 4753330..dff2d3c 100644
> --- a/src/glsl/nir/nir_builder.h
> +++ b/src/glsl/nir/nir_builder.h
> @@ -173,6 +173,24 @@ nir_##op(nir_builder *build, nir_ssa_def *src0,                           \
>
>  #include "nir_builder_opcodes.h"
>
> +static inline nir_ssa_def *
> +nir_vec(nir_builder *build, nir_ssa_def **comp, unsigned num_components)
> +{
> +   switch (num_components) {
> +   case 4:
> +      return nir_vec4(build, comp[0], comp[1], comp[2], comp[3]);
> +   case 3:
> +      return nir_vec3(build, comp[0], comp[1], comp[2]);
> +   case 2:
> +      return nir_vec2(build, comp[0], comp[1]);
> +   case 1:
> +      return comp[0];
> +   default:
> +      unreachable("bad coord count");

component

> +      return NULL;
> +   }
> +}
> +
>  /**
>   * Similar to nir_fmov, but takes a nir_alu_src instead of a nir_ssa_def.
>   */
> diff --git a/src/glsl/nir/nir_lower_load_const_to_scalar.c b/src/glsl/nir/nir_lower_load_const_to_scalar.c
> index 704f8ce..84d0c14 100644
> --- a/src/glsl/nir/nir_lower_load_const_to_scalar.c
> +++ b/src/glsl/nir/nir_lower_load_const_to_scalar.c
> @@ -55,20 +55,7 @@ lower_load_const_instr_scalar(nir_load_const_instr *lower)
>     }
>
>     /* Batch things back together into a vector. */
> -   nir_ssa_def *vec;
> -   switch (lower->def.num_components) {
> -   case 2:
> -      vec = nir_vec2(&b, loads[0], loads[1]);
> -      break;
> -   case 3:
> -      vec = nir_vec3(&b, loads[0], loads[1], loads[2]);
> -      break;
> -   case 4:
> -      vec = nir_vec4(&b, loads[0], loads[1], loads[2], loads[3]);
> -      break;
> -   default:
> -      unreachable("Unknown load_const component count.");
> -   }
> +   nir_ssa_def *vec = nir_vec(&b, loads, lower->def.num_components);
>
>     /* Replace the old load with a reference to our reconstructed vector. */
>     nir_ssa_def_rewrite_uses(&lower->def, nir_src_for_ssa(vec));
> diff --git a/src/glsl/nir/nir_lower_tex.c b/src/glsl/nir/nir_lower_tex.c
> index e2f095a..8aaa48a 100644
> --- a/src/glsl/nir/nir_lower_tex.c
> +++ b/src/glsl/nir/nir_lower_tex.c
> @@ -205,23 +205,7 @@ saturate_src(nir_builder *b, nir_tex_instr *tex, unsigned sat_mask)
>        }
>
>        /* and move the result back into a single vecN: */
> -      switch (tex->coord_components) {
> -      case 4:
> -         src = nir_vec4(b, comp[0], comp[1], comp[2], comp[3]);
> -         break;
> -      case 3:
> -         src = nir_vec3(b, comp[0], comp[1], comp[2]);
> -         break;
> -      case 2:
> -         src = nir_vec2(b, comp[0], comp[1]);
> -         break;
> -      case 1:
> -         src = comp[0];
> -         break;
> -      default:
> -         unreachable("bad texture coord count");
> -         break;
> -      }
> +      src = nir_vec(b, comp, tex->coord_components);
>
>        nir_instr_rewrite_src(&tex->instr,
>                              &tex->src[i].src,
> --
> 2.4.3
>
> _______________________________________________
> 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