[Mesa-dev] [PATCH 2/4] radeonsi: split out interpolation input selection

Marek Olšák maraeo at gmail.com
Thu Jul 23 06:25:53 PDT 2015


On Wed, Jul 22, 2015 at 12:51 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This is prep work for using it in the interpolation code
> later.
>
> Also add storage for the input interpolation mode so we
> can pick it up later.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/drivers/radeonsi/si_shader.c | 62 +++++++++++++++++++-------------
>  src/gallium/drivers/radeonsi/si_shader.h |  2 +-
>  2 files changed, 39 insertions(+), 25 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index 22fb983..f23eaa4 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -401,6 +401,35 @@ static LLVMValueRef fetch_input_gs(
>                                 tgsi2llvmtype(bld_base, type), "");
>  }
>
> +static int lookup_interp_param_index(unsigned interpolate, unsigned location)
> +{
> +       switch (interpolate) {
> +       case TGSI_INTERPOLATE_CONSTANT:
> +               return 0;
> +
> +       case TGSI_INTERPOLATE_LINEAR:
> +               if (location == TGSI_INTERPOLATE_LOC_SAMPLE)
> +                       return SI_PARAM_LINEAR_SAMPLE;
> +               else if (location == TGSI_INTERPOLATE_LOC_CENTROID)
> +                       return SI_PARAM_LINEAR_CENTROID;
> +               else
> +                       return SI_PARAM_LINEAR_CENTER;
> +               break;
> +       case TGSI_INTERPOLATE_COLOR:
> +       case TGSI_INTERPOLATE_PERSPECTIVE:
> +               if (location == TGSI_INTERPOLATE_LOC_SAMPLE)
> +                       return SI_PARAM_PERSP_SAMPLE;
> +               else if (location == TGSI_INTERPOLATE_LOC_CENTROID)
> +                       return SI_PARAM_PERSP_CENTROID;
> +               else
> +                       return SI_PARAM_PERSP_CENTER;
> +               break;
> +       default:
> +               fprintf(stderr, "Warning: Unhandled interpolation mode.\n");
> +               return -1;
> +       }
> +}
> +
>  static void declare_input_fs(
>         struct radeon_llvm_context *radeon_bld,
>         unsigned input_index,
> @@ -415,7 +444,8 @@ static void declare_input_fs(
>         LLVMTypeRef input_type = LLVMFloatTypeInContext(gallivm->context);
>         LLVMValueRef main_fn = radeon_bld->main_fn;
>
> -       LLVMValueRef interp_param;
> +       LLVMValueRef interp_param = NULL;
> +       int interp_param_idx;
>         const char * intr_name;
>
>         /* This value is:
> @@ -464,30 +494,14 @@ static void declare_input_fs(
>         attr_number = lp_build_const_int32(gallivm,
>                                            shader->ps_input_param_offset[input_index]);
>
> -       switch (decl->Interp.Interpolate) {
> -       case TGSI_INTERPOLATE_CONSTANT:
> -               interp_param = 0;
> -               break;
> -       case TGSI_INTERPOLATE_LINEAR:
> -               if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_SAMPLE)
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_SAMPLE);
> -               else if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_CENTROID)
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_CENTROID);
> -               else
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_CENTER);
> -               break;
> -       case TGSI_INTERPOLATE_COLOR:
> -       case TGSI_INTERPOLATE_PERSPECTIVE:
> -               if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_SAMPLE)
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_SAMPLE);
> -               else if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_CENTROID)
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTROID);
> -               else
> -                       interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTER);
> -               break;
> -       default:
> -               fprintf(stderr, "Warning: Unhandled interpolation mode.\n");
> +       shader->ps_input_interpolate[input_index] = decl->Interp.Interpolate;
> +       interp_param_idx = lookup_interp_param_index(decl->Interp.Interpolate,
> +                                                    decl->Interp.Location);
> +       if (interp_param_idx == -1)
>                 return;
> +       else if (interp_param_idx)
> +       {

The opening curly brace should be on the previous line.

Marek


More information about the mesa-dev mailing list