Implement flat interpolation qualifier support.

By default vertex shader outputs/fragment shader inputs are
smoothly interpolated. The 'flat' keyword can be used to change
the interpolation to "flat", which basically means that no
interpolation is performed. "flat" is the only interpolation
qualifier accepted for integer types.

This change fixes all shaders/precision dEQP tests as well as a
few fragment output integer format types related tests.

Change-Id: Ic64b0ec40c705d885c255b3b671cf7460965dfee
Reviewed-on: https://swiftshader-review.googlesource.com/5390
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Renderer/PixelProcessor.cpp b/src/Renderer/PixelProcessor.cpp
index e3154b6..a4bf461 100644
--- a/src/Renderer/PixelProcessor.cpp
+++ b/src/Renderer/PixelProcessor.cpp
@@ -1075,14 +1075,16 @@
 			{
 				for(int component = 0; component < 4; component++)
 				{
-					if(context->pixelShader->semantic[interpolant][component].active())
+					const Shader::Semantic &semantic = context->pixelShader->semantic[interpolant][component];
+
+					if(semantic.active())
 					{
 						bool flat = point;
 
-						switch(context->pixelShader->semantic[interpolant][component].usage)
+						switch(semantic.usage)
 						{
-						case Shader::USAGE_TEXCOORD: flat = point && !sprite; break;
-						case Shader::USAGE_COLOR:    flat = flatShading;      break;
+						case Shader::USAGE_TEXCOORD: flat = point && !sprite;             break;
+						case Shader::USAGE_COLOR:    flat = semantic.flat || flatShading; break;
 						}
 
 						state.interpolant[interpolant].component |= 1 << component;