[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