From: Marek Olšák Date: Sun, 4 Jan 2015 19:09:51 +0000 (+0100) Subject: radeonsi: remove special handling of TGSI_INTERPOLATE_COLOR in shader codegen X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13de9475fc237dd000bb0ef1d7784b86bee54b39;p=mesa.git radeonsi: remove special handling of TGSI_INTERPOLATE_COLOR in shader codegen It doesn't do anything useful. And colors are floating-point, so we can use fs.interp, remove "flatshade" from the shader key, and rely on the FLAT_SHADE state only (in the next patch). Reviewed-by: Michel Dänzer --- diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 42febe22cf8..5d61a549fe6 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -453,11 +453,6 @@ static void declare_input_fs( interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_CENTER); break; case TGSI_INTERPOLATE_COLOR: - if (si_shader_ctx->shader->key.ps.flatshade) { - interp_param = 0; - break; - } - /* fall through to perspective */ case TGSI_INTERPOLATE_PERSPECTIVE: if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_SAMPLE) interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_SAMPLE); @@ -471,9 +466,18 @@ static void declare_input_fs( return; } + /* fs.constant returns the param from the middle vertex, so it's not + * really useful for flat shading. It's meant to be used for custom + * interpolation (but the intrinsic can't fetch from the other two + * vertices). + * + * Luckily, it doesn't matter, because we rely on the FLAT_SHADE state + * to do the right thing. The only reason we use fs.constant is that + * fs.interp cannot be used on integers, because they can be equal + * to NaN. + */ intr_name = interp_param ? "llvm.SI.fs.interp" : "llvm.SI.fs.constant"; - /* XXX: Could there be more than TGSI_NUM_CHANNELS (4) ? */ if (decl->Semantic.Name == TGSI_SEMANTIC_COLOR && si_shader_ctx->shader->key.ps.color_two_side) { LLVMValueRef args[4];