radeonsi: interpolate varyings at sample when full sample shading is enabled
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 6818106..5f9abe3 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -421,27 +421,27 @@
 					   shader->input[input_index].param_offset);
 
 	switch (decl->Interp.Interpolate) {
-	case TGSI_INTERPOLATE_COLOR:
-		if (si_shader_ctx->shader->key.ps.flatshade) {
-			interp_param = 0;
-		} else {
-			if (decl->Interp.Centroid)
-				interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTROID);
-			else
-				interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTER);
-		}
-		break;
 	case TGSI_INTERPOLATE_CONSTANT:
 		interp_param = 0;
 		break;
 	case TGSI_INTERPOLATE_LINEAR:
-		if (decl->Interp.Centroid)
+		if (si_shader_ctx->shader->key.ps.interp_at_sample)
+			interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_SAMPLE);
+		else if (decl->Interp.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:
+		if (si_shader_ctx->shader->key.ps.flatshade) {
+			interp_param = 0;
+			break;
+		}
+		/* fall through to perspective */
 	case TGSI_INTERPOLATE_PERSPECTIVE:
-		if (decl->Interp.Centroid)
+		if (si_shader_ctx->shader->key.ps.interp_at_sample)
+			interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_SAMPLE);
+		else if (decl->Interp.Centroid)
 			interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTROID);
 		else
 			interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_CENTER);