Enabling Transform Feedback

This cl enables transform feedback in Context by calling
Program::applyTransformFeedback(). It also adds the code
required to compute vertex offsets between different draw
calls, when multiple successive draw calls write into the
same transform feedback buffer(s).

Change-Id: Ib3bc4bdd1308486642f233f425d0088a55cb1333
Reviewed-on: https://swiftshader-review.googlesource.com/5301
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 09e5975..1143546 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -1422,37 +1422,44 @@
 		}
 	}
 
-	bool ConvertPrimitiveType(GLenum primitiveType, GLsizei elementCount, GLenum elementType,  sw::DrawType &drawType, int &primitiveCount)
+	bool ConvertPrimitiveType(GLenum primitiveType, GLsizei elementCount, GLenum elementType, sw::DrawType &drawType, int &primitiveCount, int &verticesPerPrimitive)
 	{
 		switch(primitiveType)
 		{
 		case GL_POINTS:
 			drawType = sw::DRAW_POINTLIST;
 			primitiveCount = elementCount;
+			verticesPerPrimitive = 1;
 			break;
 		case GL_LINES:
 			drawType = sw::DRAW_LINELIST;
 			primitiveCount = elementCount / 2;
+			verticesPerPrimitive = 2;
 			break;
 		case GL_LINE_LOOP:
 			drawType = sw::DRAW_LINELOOP;
 			primitiveCount = elementCount;
+			verticesPerPrimitive = 2;
 			break;
 		case GL_LINE_STRIP:
 			drawType = sw::DRAW_LINESTRIP;
 			primitiveCount = elementCount - 1;
+			verticesPerPrimitive = 2;
 			break;
 		case GL_TRIANGLES:
 			drawType = sw::DRAW_TRIANGLELIST;
 			primitiveCount = elementCount / 3;
+			verticesPerPrimitive = 3;
 			break;
 		case GL_TRIANGLE_STRIP:
 			drawType = sw::DRAW_TRIANGLESTRIP;
 			primitiveCount = elementCount - 2;
+			verticesPerPrimitive = 3;
 			break;
 		case GL_TRIANGLE_FAN:
 			drawType = sw::DRAW_TRIANGLEFAN;
 			primitiveCount = elementCount - 2;
+			verticesPerPrimitive = 3;
 			break;
 		default:
 			return false;