Refactor primitive setup functions.

Use a pointer to member function to not explicitly pass the renderer pointer.

Change-Id: Iaccc1d7a1833fbdb433c56063c89b6178e9e2333
Reviewed-on: https://swiftshader-review.googlesource.com/5422
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/Renderer.cpp b/src/Renderer/Renderer.cpp
index 8be8093..2123e08 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -251,21 +251,21 @@
 
 			int batch = batchSize / ms;
 
-			int (*setupPrimitives)(Renderer *renderer, int batch, int count);
+			int (Renderer::*setupPrimitives)(int batch, int count);
 
 			if(context->isDrawTriangle())
 			{
 				switch(context->fillMode)
 				{
 				case FILL_SOLID:
-					setupPrimitives = setupSolidTriangles;
+					setupPrimitives = &Renderer::setupSolidTriangles;
 					break;
 				case FILL_WIREFRAME:
-					setupPrimitives = setupWireframeTriangle;
+					setupPrimitives = &Renderer::setupWireframeTriangle;
 					batch = 1;
 					break;
 				case FILL_VERTEX:
-					setupPrimitives = setupVertexTriangle;
+					setupPrimitives = &Renderer::setupVertexTriangle;
 					batch = 1;
 					break;
 				default: ASSERT(false);
@@ -273,11 +273,11 @@
 			}
 			else if(context->isDrawLine())
 			{
-				setupPrimitives = setupLines;
+				setupPrimitives = &Renderer::setupLines;
 			}
 			else   // Point draw
 			{
-				setupPrimitives = setupPoints;
+				setupPrimitives = &Renderer::setupPoints;
 			}
 
 			DrawCall *draw = 0;
@@ -841,7 +841,7 @@
 				int input = primitiveProgress[unit].firstPrimitive;
 				int count = primitiveProgress[unit].primitiveCount;
 				DrawCall *draw = drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
-				int (*setupPrimitives)(Renderer *renderer, int batch, int count) = draw->setupPrimitives;
+				int (Renderer::*setupPrimitives)(int batch, int count) = draw->setupPrimitives;
 
 				processPrimitiveVertices(unit, input, count, draw->count, threadIndex);
 
@@ -851,7 +851,12 @@
 					startTick = time;
 				#endif
 
-				int visible = draw->setupState.rasterizerDiscard ? 0 : setupPrimitives(this, unit, count);
+				int visible = 0;
+
+				if(!draw->setupState.rasterizerDiscard)
+				{
+					visible = (this->*setupPrimitives)(unit, count);
+				}
 
 				primitiveProgress[unit].visible = visible;
 				primitiveProgress[unit].references = clusterCount;
@@ -1465,12 +1470,12 @@
 		vertexRoutine(&triangle->v0, (unsigned int*)&batch, task, data);
 	}
 
-	int Renderer::setupSolidTriangles(Renderer *renderer, int unit, int count)
+	int Renderer::setupSolidTriangles(int unit, int count)
 	{
-		Triangle *triangle = renderer->triangleBatch[unit];
-		Primitive *primitive = renderer->primitiveBatch[unit];
+		Triangle *triangle = triangleBatch[unit];
+		Primitive *primitive = primitiveBatch[unit];
 
-		DrawCall &draw = *renderer->drawList[renderer->primitiveProgress[unit].drawCall % DRAW_COUNT];
+		DrawCall &draw = *drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
 		SetupProcessor::State &state = draw.setupState;
 		const SetupProcessor::RoutinePointer &setupRoutine = draw.setupPointer;
 
@@ -1493,7 +1498,7 @@
 
 				if(clipFlagsOr != Clipper::CLIP_FINITE)
 				{
-					if(!renderer->clipper->clip(polygon, clipFlagsOr, draw))
+					if(!clipper->clip(polygon, clipFlagsOr, draw))
 					{
 						continue;
 					}
@@ -1510,13 +1515,13 @@
 		return visible;
 	}
 
-	int Renderer::setupWireframeTriangle(Renderer *renderer, int unit, int count)
+	int Renderer::setupWireframeTriangle(int unit, int count)
 	{
-		Triangle *triangle = renderer->triangleBatch[unit];
-		Primitive *primitive = renderer->primitiveBatch[unit];
+		Triangle *triangle = triangleBatch[unit];
+		Primitive *primitive = primitiveBatch[unit];
 		int visible = 0;
 
-		DrawCall &draw = *renderer->drawList[renderer->primitiveProgress[unit].drawCall % DRAW_COUNT];
+		DrawCall &draw = *drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
 		SetupProcessor::State &state = draw.setupState;
 		SetupProcessor::RoutinePointer setupRoutine = draw.setupPointer;
 
@@ -1554,7 +1559,7 @@
 
 		for(int i = 0; i < 3; i++)
 		{
-			if(setupLine(renderer, *primitive, *triangle, draw))
+			if(setupLine(*primitive, *triangle, draw))
 			{
 				primitive->area = 0.5f * d;
 
@@ -1568,13 +1573,13 @@
 		return visible;
 	}
 
-	int Renderer::setupVertexTriangle(Renderer *renderer, int unit, int count)
+	int Renderer::setupVertexTriangle(int unit, int count)
 	{
-		Triangle *triangle = renderer->triangleBatch[unit];
-		Primitive *primitive = renderer->primitiveBatch[unit];
+		Triangle *triangle = triangleBatch[unit];
+		Primitive *primitive = primitiveBatch[unit];
 		int visible = 0;
 
-		DrawCall &draw = *renderer->drawList[renderer->primitiveProgress[unit].drawCall % DRAW_COUNT];
+		DrawCall &draw = *drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
 		SetupProcessor::State &state = draw.setupState;
 
 		const Vertex &v0 = triangle[0].v0;
@@ -1598,7 +1603,7 @@
 
 		for(int i = 0; i < 3; i++)
 		{
-			if(setupPoint(renderer, *primitive, *triangle, draw))
+			if(setupPoint(*primitive, *triangle, draw))
 			{
 				primitive->area = 0.5f * d;
 
@@ -1612,20 +1617,20 @@
 		return visible;
 	}
 
-	int Renderer::setupLines(Renderer *renderer, int unit, int count)
+	int Renderer::setupLines(int unit, int count)
 	{
-		Triangle *triangle = renderer->triangleBatch[unit];
-		Primitive *primitive = renderer->primitiveBatch[unit];
+		Triangle *triangle = triangleBatch[unit];
+		Primitive *primitive = primitiveBatch[unit];
 		int visible = 0;
 
-		DrawCall &draw = *renderer->drawList[renderer->primitiveProgress[unit].drawCall % DRAW_COUNT];
+		DrawCall &draw = *drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
 		SetupProcessor::State &state = draw.setupState;
 
 		int ms = state.multiSample;
 
 		for(int i = 0; i < count; i++)
 		{
-			if(setupLine(renderer, *primitive, *triangle, draw))
+			if(setupLine(*primitive, *triangle, draw))
 			{
 				primitive += ms;
 				visible++;
@@ -1637,20 +1642,20 @@
 		return visible;
 	}
 
-	int Renderer::setupPoints(Renderer *renderer, int unit, int count)
+	int Renderer::setupPoints(int unit, int count)
 	{
-		Triangle *triangle = renderer->triangleBatch[unit];
-		Primitive *primitive = renderer->primitiveBatch[unit];
+		Triangle *triangle = triangleBatch[unit];
+		Primitive *primitive = primitiveBatch[unit];
 		int visible = 0;
 
-		DrawCall &draw = *renderer->drawList[renderer->primitiveProgress[unit].drawCall % DRAW_COUNT];
+		DrawCall &draw = *drawList[primitiveProgress[unit].drawCall % DRAW_COUNT];
 		SetupProcessor::State &state = draw.setupState;
 
 		int ms = state.multiSample;
 
 		for(int i = 0; i < count; i++)
 		{
-			if(setupPoint(renderer, *primitive, *triangle, draw))
+			if(setupPoint(*primitive, *triangle, draw))
 			{
 				primitive += ms;
 				visible++;
@@ -1662,7 +1667,7 @@
 		return visible;
 	}
 
-	bool Renderer::setupLine(Renderer *renderer, Primitive &primitive, Triangle &triangle, const DrawCall &draw)
+	bool Renderer::setupLine(Primitive &primitive, Triangle &triangle, const DrawCall &draw)
 	{
 		const SetupProcessor::RoutinePointer &setupRoutine = draw.setupPointer;
 		const SetupProcessor::State &state = draw.setupState;
@@ -1743,7 +1748,7 @@
 
 				if(clipFlagsOr != Clipper::CLIP_FINITE)
 				{
-					if(!renderer->clipper->clip(polygon, clipFlagsOr, draw))
+					if(!clipper->clip(polygon, clipFlagsOr, draw))
 					{
 						return false;
 					}
@@ -1849,7 +1854,7 @@
 
 				if(clipFlagsOr != Clipper::CLIP_FINITE)
 				{
-					if(!renderer->clipper->clip(polygon, clipFlagsOr, draw))
+					if(!clipper->clip(polygon, clipFlagsOr, draw))
 					{
 						return false;
 					}
@@ -1862,7 +1867,7 @@
 		return false;
 	}
 
-	bool Renderer::setupPoint(Renderer *renderer, Primitive &primitive, Triangle &triangle, const DrawCall &draw)
+	bool Renderer::setupPoint(Primitive &primitive, Triangle &triangle, const DrawCall &draw)
 	{
 		const SetupProcessor::RoutinePointer &setupRoutine = draw.setupPointer;
 		const SetupProcessor::State &state = draw.setupState;
@@ -1928,7 +1933,7 @@
 
 			if(clipFlagsOr != Clipper::CLIP_FINITE)
 			{
-				if(!renderer->clipper->clip(polygon, clipFlagsOr, draw))
+				if(!clipper->clip(polygon, clipFlagsOr, draw))
 				{
 					return false;
 				}
diff --git a/src/Renderer/Renderer.hpp b/src/Renderer/Renderer.hpp
index cf3cbc1..0d66211 100644
--- a/src/Renderer/Renderer.hpp
+++ b/src/Renderer/Renderer.hpp
@@ -221,7 +221,7 @@
 		SetupProcessor::RoutinePointer setupPointer;
 		PixelProcessor::RoutinePointer pixelPointer;
 
-		int (*setupPrimitives)(Renderer *renderer, int batch, int count);
+		int (Renderer::*setupPrimitives)(int batch, int count);
 		SetupProcessor::State setupState;
 
 		Resource *vertexStream[MAX_VERTEX_INPUTS];
@@ -404,14 +404,14 @@
 
 		void processPrimitiveVertices(int unit, unsigned int start, unsigned int count, unsigned int loop, int thread);
 
-		static int setupSolidTriangles(Renderer *renderer, int batch, int count);
-		static int setupWireframeTriangle(Renderer *renderer, int batch, int count);
-		static int setupVertexTriangle(Renderer *renderer, int batch, int count);
-		static int setupLines(Renderer *renderer, int batch, int count);
-		static int setupPoints(Renderer *renderer, int batch, int count);
+		int setupSolidTriangles(int batch, int count);
+		int setupWireframeTriangle(int batch, int count);
+		int setupVertexTriangle(int batch, int count);
+		int setupLines(int batch, int count);
+		int setupPoints(int batch, int count);
 
-		static bool setupLine(Renderer *renderer, Primitive &primitive, Triangle &triangle, const DrawCall &draw);
-		static bool setupPoint(Renderer *renderer, Primitive &primitive, Triangle &triangle, const DrawCall &draw);
+		bool setupLine(Primitive &primitive, Triangle &triangle, const DrawCall &draw);
+		bool setupPoint(Primitive &primitive, Triangle &triangle, const DrawCall &draw);
 
 		bool isReadWriteTexture(int sampler);
 		void updateClipper();