/*-------------------------------------------------------------------------
 * drawElements Quality Program OpenGL ES 2.0 Module
 * -------------------------------------------------
 *
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief State change call performance tests.
 *//*--------------------------------------------------------------------*/

#include "es2pStateChangeCallTests.hpp"
#include "glsStateChangePerfTestCases.hpp"
#include "glwFunctions.hpp"
#include "glwEnums.hpp"

namespace deqp
{
namespace gles2
{
namespace Performance
{

using namespace glw;

StateChangeCallTests::StateChangeCallTests (Context& context)
	: TestCaseGroup(context, "state_change_only", "Test cost of state change calls without rendering anything")
{
}

StateChangeCallTests::~StateChangeCallTests (void)
{
}

#define ARG_LIST(...) __VA_ARGS__

#define ADD_ARG_CASE1(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0)\
do {\
	class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\
	{\
	public:\
		StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\
			: gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\
		{\
		}\
		virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\
		{\
			const TYPE0 args0[] = ARGS0;\
			for (int callNdx = 0; callNdx < callCount; callNdx++)\
			{\
				const int		baseNdx		= iterNdx*callCount + callNdx;\
				const TYPE0		arg0		= args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\
				gl.FUNCNAME(arg0);\
			}\
		}\
	};\
	addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\
}while (0);

#define ADD_ARG_CASE2(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1)\
do {\
	class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\
	{\
	public:\
		StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\
			: gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\
		{\
		}\
		virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\
		{\
			const TYPE0 args0[] = ARGS0;\
			const TYPE1 args1[] = ARGS1;\
			for (int callNdx = 0; callNdx < callCount; callNdx++)\
			{\
				const int		baseNdx		= iterNdx*callCount + callNdx;\
				const TYPE0		arg0		= args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\
				const TYPE1		arg1		= args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\
				gl.FUNCNAME(arg0, arg1);\
			}\
		}\
	};\
	addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\
}while (0);

#define ADD_ARG_CASE3(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2)\
do {\
	class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\
	{\
	public:\
		StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\
			: gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\
		{\
		}\
		virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\
		{\
			const TYPE0 args0[] = ARGS0;\
			const TYPE1 args1[] = ARGS1;\
			const TYPE2 args2[] = ARGS2;\
			for (int callNdx = 0; callNdx < callCount; callNdx++)\
			{\
				const int		baseNdx		= iterNdx*callCount + callNdx;\
				const TYPE0		arg0		= args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\
				const TYPE1		arg1		= args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\
				const TYPE2		arg2		= args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\
				gl.FUNCNAME(arg0, arg1, arg2);\
			}\
		}\
	};\
	addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\
}while (0);

#define ADD_ARG_CASE4(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3)\
do {\
	class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\
	{\
	public:\
		StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\
			: gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\
		{\
		}\
		virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\
		{\
			const TYPE0 args0[] = ARGS0;\
			const TYPE1 args1[] = ARGS1;\
			const TYPE2 args2[] = ARGS2;\
			const TYPE3 args3[] = ARGS3;\
			for (int callNdx = 0; callNdx < callCount; callNdx++)\
			{\
				const int		baseNdx		= iterNdx*callCount + callNdx;\
				const TYPE0		arg0		= args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\
				const TYPE1		arg1		= args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\
				const TYPE2		arg2		= args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\
				const TYPE3		arg3		= args3[baseNdx%DE_LENGTH_OF_ARRAY(args3)];\
				gl.FUNCNAME(arg0, arg1, arg2, arg3);\
			}\
		}\
	};\
	addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\
}while (0);

#define ADD_ARG_CASE6(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3, TYPE4, ARGS4, TYPE5, ARGS5)\
do {\
	class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\
	{\
	public:\
		StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\
			: gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\
		{\
		}\
		virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\
		{\
			const TYPE0 args0[] = ARGS0;\
			const TYPE1 args1[] = ARGS1;\
			const TYPE2 args2[] = ARGS2;\
			const TYPE3 args3[] = ARGS3;\
			const TYPE4 args4[] = ARGS4;\
			const TYPE5 args5[] = ARGS5;\
			for (int callNdx = 0; callNdx < callCount; callNdx++)\
			{\
				const int		baseNdx		= iterNdx*callCount + callNdx;\
				const TYPE0		arg0		= args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\
				const TYPE1		arg1		= args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\
				const TYPE2		arg2		= args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\
				const TYPE3		arg3		= args3[baseNdx%DE_LENGTH_OF_ARRAY(args3)];\
				const TYPE4		arg4		= args4[baseNdx%DE_LENGTH_OF_ARRAY(args4)];\
				const TYPE5		arg5		= args5[baseNdx%DE_LENGTH_OF_ARRAY(args5)];\
				gl.FUNCNAME(arg0, arg1, arg2, arg3, arg4, arg5);\
			}\
		}\
	};\
	addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\
}while (0);

void StateChangeCallTests::init (void)
{
	ADD_ARG_CASE1(enable, "Test cost of glEnable() calls",
		enable,
		GLenum,
		ARG_LIST({
			GL_CULL_FACE,
			GL_POLYGON_OFFSET_FILL,
			GL_SAMPLE_ALPHA_TO_COVERAGE,
			GL_SAMPLE_COVERAGE,
			GL_SCISSOR_TEST,
			GL_STENCIL_TEST,
			GL_DEPTH_TEST,
			GL_BLEND,
			GL_DITHER
		})
	)

	ADD_ARG_CASE1(disable, "Test cost of glDisable() calls",
		disable,
		GLenum,
		ARG_LIST({
			GL_CULL_FACE,
			GL_POLYGON_OFFSET_FILL,
			GL_SAMPLE_ALPHA_TO_COVERAGE,
			GL_SAMPLE_COVERAGE,
			GL_SCISSOR_TEST,
			GL_STENCIL_TEST,
			GL_DEPTH_TEST,
			GL_BLEND,
			GL_DITHER
		})
	)

	ADD_ARG_CASE1(depth_func, "Test cost of glDepthFunc() calls",
		depthFunc,
		GLenum,
		ARG_LIST({
			GL_NEVER,
			GL_ALWAYS,
			GL_LESS,
			GL_LEQUAL,
			GL_EQUAL,
			GL_GREATER,
			GL_GEQUAL,
			GL_NOTEQUAL
		})
	)

	ADD_ARG_CASE1(depth_mask, "Test cost of glDepthMask() calls",
		depthMask,
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		})
	)

	ADD_ARG_CASE1(stencil_mask, "Test cost of glStencilMask() calls",
		stencilMask,
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		})
	)

	ADD_ARG_CASE1(clear_depth, "Test cost of glClearDepth() calls",
		clearDepthf,
		GLclampf,
		ARG_LIST({
			0.0f,
			0.5f,
			1.0f
		})
	)

	ADD_ARG_CASE1(clear_stencil, "Test cost of glClearStencil() calls",
		clearStencil,
		GLint,
		ARG_LIST({
			0,
			128,
			28
		})
	)

	ADD_ARG_CASE1(line_width, "Test cost of glLineWidth() calls",
		lineWidth,
		GLfloat,
		ARG_LIST({
			1.0f,
			0.5f,
			10.0f
		})
	)

	ADD_ARG_CASE1(cull_face, "Test cost of glCullFace() calls",
		cullFace,
		GLenum,
		ARG_LIST({
			GL_FRONT,
			GL_BACK,
			GL_FRONT_AND_BACK
		})
	)

	ADD_ARG_CASE1(front_face, "Test cost of glFrontFace() calls",
		frontFace,
		GLenum,
		ARG_LIST({
			GL_CCW,
			GL_CW
		})
	)

	ADD_ARG_CASE1(blend_equation, "Test cost of glBlendEquation() calls",
		blendEquation,
		GLenum,
		ARG_LIST({
			GL_FUNC_ADD,
			GL_FUNC_SUBTRACT,
			GL_FUNC_REVERSE_SUBTRACT
		})
	)

	ADD_ARG_CASE1(enable_vertex_attrib_array, "Test cost of glEnableVertexAttribArray() calls",
		enableVertexAttribArray,
		GLuint,
		ARG_LIST({
			0,
			1,
			2,
			3,
			4,
			5,
			6,
			7,
		})
	)

	ADD_ARG_CASE1(disable_vertex_attrib_array, "Test cost of glDisableVertexAttribArray() calls",
		disableVertexAttribArray,
		GLuint,
		ARG_LIST({
			0,
			1,
			2,
			3,
			4,
			5,
			6,
			7,
		})
	)

	ADD_ARG_CASE1(use_program, "Test cost of glUseProgram() calls. Note: Uses only program 0.",
		useProgram,
		GLuint,
		ARG_LIST({
			0,
		})
	)

	ADD_ARG_CASE1(active_texture, "Test cost of glActiveTexture() calls",
		activeTexture,
		GLenum,
		ARG_LIST({
			GL_TEXTURE0,
			GL_TEXTURE1,
			GL_TEXTURE2,
			GL_TEXTURE3,
			GL_TEXTURE4,
			GL_TEXTURE5,
			GL_TEXTURE6,
			GL_TEXTURE7
		})
	)

	ADD_ARG_CASE2(depth_range, "Test cost of glDepthRangef() calls",
		depthRangef,
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f
		}),
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f
		})
	)

	ADD_ARG_CASE2(polygon_offset, "Test cost of glPolygonOffset() calls",
		polygonOffset,
		GLfloat,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			10.0f
		}),
		GLfloat,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			1000.0f
		})
	)

	ADD_ARG_CASE2(sample_coverage, "Test cost of glSampleCoverage() calls",
		sampleCoverage,
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			0.67f
		}),
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		})
	)

	ADD_ARG_CASE2(blend_func, "Test cost of glBlendFunc() calls",
		blendFunc,
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		}),
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		})
	)

	ADD_ARG_CASE2(blend_equation_separate, "Test cost of glBlendEquationSeparate() calls",
		blendEquationSeparate,
		GLenum,
		ARG_LIST({
			GL_FUNC_ADD,
			GL_FUNC_SUBTRACT,
			GL_FUNC_REVERSE_SUBTRACT
		}),
		GLenum,
		ARG_LIST({
			GL_FUNC_ADD,
			GL_FUNC_SUBTRACT,
			GL_FUNC_REVERSE_SUBTRACT
		})
	)

	ADD_ARG_CASE2(stencil_mask_separate, "Test cost of glStencilMaskSeparate() calls",
		stencilMaskSeparate,
		GLenum,
		ARG_LIST({
			GL_FRONT,
			GL_BACK,
			GL_FRONT_AND_BACK
		}),
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		})
	)

	ADD_ARG_CASE2(bind_buffer, "Test cost of glBindBuffer() calls. Note: Uses only buffer 0",
		bindBuffer,
		GLenum,
		ARG_LIST({
			GL_ELEMENT_ARRAY_BUFFER,
			GL_ARRAY_BUFFER
		}),
		GLuint,
		ARG_LIST({
			0
		})
	)

	ADD_ARG_CASE2(bind_texture, "Test cost of glBindTexture() calls. Note: Uses only texture 0",
		bindTexture,
		GLenum,
		ARG_LIST({
			GL_TEXTURE_2D,
			GL_TEXTURE_CUBE_MAP
		}),
		GLuint,
		ARG_LIST({
			0
		})
	)

	ADD_ARG_CASE2(hint, "Test cost of glHint() calls",
		hint,
		GLenum,
		ARG_LIST({
			GL_GENERATE_MIPMAP_HINT
		}),
		GLenum,
		ARG_LIST({
			GL_FASTEST,
			GL_NICEST,
			GL_DONT_CARE
		})
	)

	ADD_ARG_CASE3(stencil_func, "Test cost of glStencilFunc() calls",
		stencilFunc,
		GLenum,
		ARG_LIST({
			GL_NEVER,
			GL_ALWAYS,
			GL_LESS,
			GL_LEQUAL,
			GL_EQUAL,
			GL_GEQUAL,
			GL_GREATER,
			GL_NOTEQUAL
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			255,
			128,
			7
		}),
		GLuint,
		ARG_LIST({
			0,
			1,
			255,
			128,
			7,
			0xFFFFFFFF
		})
	)

	ADD_ARG_CASE3(stencil_op, "Test cost of glStencilOp() calls",
		stencilOp,
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		}),
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		}),
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		})
	)

	ADD_ARG_CASE4(viewport, "Test cost of glViewport() calls",
		viewport,
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		})
	)

	ADD_ARG_CASE4(scissor, "Test cost of glScissor() calls",
		scissor,
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			100,
			1145235
		})
	)

	ADD_ARG_CASE4(stencil_func_separate, "Test cost of glStencilFuncSeparate() calls",
		stencilFuncSeparate,
		GLenum,
		ARG_LIST({
			GL_FRONT,
			GL_BACK,
			GL_FRONT_AND_BACK
		}),
		GLenum,
		ARG_LIST({
			GL_NEVER,
			GL_ALWAYS,
			GL_LESS,
			GL_LEQUAL,
			GL_EQUAL,
			GL_GEQUAL,
			GL_GREATER,
			GL_NOTEQUAL
		}),
		GLint,
		ARG_LIST({
			0,
			1,
			255,
			128,
			7
		}),
		GLuint,
		ARG_LIST({
			0,
			1,
			255,
			128,
			7,
			0xFFFFFFFF
		})
	)

	ADD_ARG_CASE4(stencil_op_separatae, "Test cost of glStencilOpSeparate() calls",
		stencilOpSeparate,
		GLenum,
		ARG_LIST({
			GL_FRONT,
			GL_BACK,
			GL_FRONT_AND_BACK
		}),
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		}),
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		}),
		GLenum,
		ARG_LIST({
			GL_KEEP,
			GL_ZERO,
			GL_REPLACE,
			GL_INCR,
			GL_DECR,
			GL_INVERT,
			GL_INCR_WRAP,
			GL_DECR_WRAP
		})
	)

	ADD_ARG_CASE4(blend_func_separate, "Test cost of glBlendFuncSeparate() calls",
		blendFuncSeparate,
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		}),
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		}),
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		}),
		GLenum,
		ARG_LIST({
			GL_ZERO,
			GL_ONE,
			GL_SRC_COLOR,
			GL_ONE_MINUS_SRC_COLOR,
			GL_DST_COLOR,
			GL_ONE_MINUS_DST_COLOR,
			GL_SRC_ALPHA,
			GL_ONE_MINUS_SRC_ALPHA,
			GL_DST_ALPHA,
			GL_ONE_MINUS_DST_ALPHA,
			GL_CONSTANT_COLOR,
			GL_ONE_MINUS_CONSTANT_COLOR,
			GL_CONSTANT_ALPHA,
			GL_ONE_MINUS_CONSTANT_ALPHA
		})
	)

	ADD_ARG_CASE4(color_mask, "Test cost of glColorMask() calls",
		colorMask,
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		}),
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		}),
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		}),
		GLboolean,
		ARG_LIST({
			GL_TRUE,
			GL_FALSE
		})
	)

	ADD_ARG_CASE4(clear_color, "Test cost of glClearColor() calls",
		clearColor,
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			0.33f
		}),
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			0.33f
		}),
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			0.33f
		}),
		GLclampf,
		ARG_LIST({
			0.0f,
			1.0f,
			0.5f,
			0.33f
		})
	)

	ADD_ARG_CASE6(vertex_attrib_pointer, "Test cost of glVertexAttribPointer() calls",
		vertexAttribPointer,
		GLuint,
		ARG_LIST({
			0,
			1,
			2,
			3,
			4,
			5,
			6,
			7
		}),
		GLint,
		ARG_LIST({
			1,
			2,
			3,
			4
		}),
		GLenum,
		ARG_LIST({
			GL_UNSIGNED_BYTE,
			GL_BYTE,
			GL_UNSIGNED_SHORT,
			GL_SHORT,
			GL_FLOAT
		}),
		GLboolean,
		ARG_LIST({
			GL_FALSE,
			GL_TRUE
		}),
		GLsizei,
		ARG_LIST({
			0,
			2,
			4
		}),
		void*,
		ARG_LIST({
			(void*)(deUintptr)(0x0FF),
			(void*)(deUintptr)(0x0EF)
		})
	)
}

} // Performance
} // gles2
} // deqp
