[Mesa-dev] [PATCH 101/133] nir: Add gpu_shader5 interpolation intrinsics

Connor Abbott cwabbott0 at gmail.com
Sun Jan 4 21:19:02 PST 2015


On Tue, Dec 16, 2014 at 1:12 AM, Jason Ekstrand <jason at jlekstrand.net>
wrote:

> ---
>  src/glsl/nir/nir_intrinsics.h | 32 +++++++++++++++-----------------
>  src/glsl/nir/nir_lower_io.c   | 16 ++++++----------
>  2 files changed, 21 insertions(+), 27 deletions(-)
>
> diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h
> index 75bd12f..e66273d 100644
> --- a/src/glsl/nir/nir_intrinsics.h
> +++ b/src/glsl/nir/nir_intrinsics.h
> @@ -47,6 +47,21 @@ INTRINSIC(store_var, 1, ARR(0), false, 0, 1, 0, 0)
>  INTRINSIC(copy_var, 0, ARR(), false, 0, 2, 0, 0)
>
>  /*
> + * Interpolation of input.  The interp_var_at* intrinsics are similar to
> the
> + * load_var intrinsic acting an a shader input except that they
> interpolate
> + * the input differently.  The at_sample and at_offset intrinsics take an
> + * aditional source that is a integer sample id or a vec2 position offset
> + * respectively.
> + */
> +
> +INTRINSIC(interp_var_at_centroid, 0, ARR(0), true, 0, 1, 0,
> +          NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
> +INTRINSIC(interp_var_at_sample, 1, ARR(1), true, 0, 1, 0,
> +          NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
> +INTRINSIC(interp_var_at_offset, 1, ARR(2), true, 0, 1, 0,
> +          NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
> +
> +/*
>   * a barrier is an intrinsic with no inputs/outputs but which can't be
> moved
>   * around/optimized in general
>   */
> @@ -110,23 +125,6 @@ LOAD(input, 2, NIR_INTRINSIC_CAN_REORDER)
>  /* LOAD(ssbo, 2, 0) */
>
>  /*
> - * Interpolation of input.  These are similar to the load_input*
> intrinsics
> - * except they interpolate differently.  The interp_at_offset* and
> - * interp_at_offset* intrinsics take a second source that is either a
> - * sample id or a vec2 position offset.
> - */
> -
> -#define INTERP(name, num_srcs, src_comps) \
> -   INTRINSIC(interp_##name, num_srcs, ARR(src_comps), true, \
> -             0, 0, 2, NIR_INTRINSIC_CAN_ELIMINATE |
> NIR_INTRINSIC_CAN_REORDER) \
> -   INTRINSIC(interp_##name##_indirect, 1 + num_srcs, ARR(1, src_comps),
> true, \
> -             0, 0, 2, NIR_INTRINSIC_CAN_ELIMINATE |
> NIR_INTRINSIC_CAN_REORDER)
> -
> -INTERP(at_centroid, 0, 0)
> -INTERP(at_sample, 1, 1)
> -INTERP(at_offset, 1, 1)
> -
> -/*
>   * Stores work the same way as loads, except now the first register input
> is
>   * the value or array to store and the optional second input is the
> indirect
>   * offset.
> diff --git a/src/glsl/nir/nir_lower_io.c b/src/glsl/nir/nir_lower_io.c
> index ed3ce81..1ab0400 100644
> --- a/src/glsl/nir/nir_lower_io.c
> +++ b/src/glsl/nir/nir_lower_io.c
>

The changes here are unrelated, so they should get separated out and
probably squashed into the vectorizing intrinsics commit.


> @@ -205,25 +205,21 @@ nir_lower_io_block(nir_block *block, void
> *void_state)
>
>           bool has_indirect = deref_has_indirect(intrin->variables[0]);
>
> +         /* Figure out the opcode */
>           nir_intrinsic_op load_op;
>           switch (mode) {
>           case nir_var_shader_in:
> -            if (has_indirect) {
> -               load_op = nir_intrinsic_load_input_indirect;
> -            } else {
> -               load_op = nir_intrinsic_load_input;
> -            }
> +            load_op = has_indirect ? nir_intrinsic_load_input_indirect :
> +                                     nir_intrinsic_load_input;
>              break;
>           case nir_var_uniform:
> -            if (has_indirect) {
> -               load_op = nir_intrinsic_load_uniform_indirect;
> -            } else {
> -               load_op = nir_intrinsic_load_uniform;
> -            }
> +            load_op = has_indirect ? nir_intrinsic_load_uniform_indirect :
> +                                     nir_intrinsic_load_uniform;
>              break;
>           default:
>              unreachable("Unknown variable mode");
>           }
> +
>           nir_intrinsic_instr *load =
> nir_intrinsic_instr_create(state->mem_ctx,
>                                                                  load_op);
>           load->num_components = intrin->num_components;
> --
> 2.2.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150105/adf68679/attachment-0001.html>


More information about the mesa-dev mailing list