On Wed, Jul 22, 2015 at 12:51 AM, Dave Airlie <airl...@gmail.com> wrote: > From: Dave Airlie <airl...@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 <airl...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev