From: Paul Berry Date: Fri, 21 Oct 2011 14:56:08 +0000 (-0700) Subject: i965/fs: use determine_interpolation_mode(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f8386a29f07c6a41c4afb99fc3ecd9f18e9151e8;p=mesa.git i965/fs: use determine_interpolation_mode(). This patch changes how fs_visitor::emit_general_interpolation() decides what kind of interpolation to do. Previously, it used the shade model to determine how to interpolate colors, and used smooth interpolation on everything else. Now it uses ir_variable::determine_interpolation_mode(), so that it respects GLSL 1.30 interpolation qualifiers. Fixes piglit tests interpolation-flat-*-smooth-{distance,fixed,vertex} and interpolation-flat-other-flat-{distance,fixed,vertex}. Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index b3ad505b71e..185e00d5a28 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -442,6 +442,9 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) type = ir->type; } + glsl_interp_qualifier interpolation_mode = + ir->determine_interpolation_mode(c->key.flat_shade); + int location = ir->location; for (unsigned int i = 0; i < array_elements; i++) { for (unsigned int j = 0; j < type->matrix_columns; j++) { @@ -454,10 +457,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) continue; } - bool is_gl_Color = - location == FRAG_ATTRIB_COL0 || location == FRAG_ATTRIB_COL1; - - if (c->key.flat_shade && is_gl_Color) { + if (interpolation_mode == INTERP_QUALIFIER_FLAT) { /* Constant interpolation (flat shading) case. The SF has * handed us defined values in only the constant offset * field of the setup reg.