Rasterizer discard implementation

Implemented rasterizer discard by not using the SetupRoutine
and always returning 0 when rasterizer discard is enabled.
Also guarded all clear calls with a check for rasterizer
discard. Passes all rasterizer discard related dEQP tests.

Change-Id: I1e5c107e3dba550f7a5b01eb302ff51bdac303dc
Reviewed-on: https://swiftshader-review.googlesource.com/4876
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp
index ca5e67a..cc95546 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -821,7 +821,7 @@
 					startTick = time;
 				#endif
 
-				int visible = setupPrimitives(this, unit, count);
+				int visible = draw->setupState.rasterizerDiscard ? 0 : setupPrimitives(this, unit, count);
 
 				primitiveProgress[unit].visible = visible;
 				primitiveProgress[unit].references = clusterCount;
@@ -2315,6 +2315,11 @@
 		slopeDepthBias = slopeBias;
 	}
 
+	void Renderer::setRasterizerDiscard(bool rasterizerDiscard)
+	{
+		context->rasterizerDiscard = rasterizerDiscard;
+	}
+
 	void Renderer::setPixelShader(const PixelShader *shader)
 	{
 		context->pixelShader = shader;