13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.0 Module
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * -------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief State change performance tests.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3pStateChangeTests.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsStateChangePerfTestCases.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles3
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Performance
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; // GL types
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	VIEWPORT_WIDTH	= 24,
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	VIEWPORT_HEIGHT	= 24
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StateChangeCase : public gls::StateChangePerformanceCase
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					StateChangeCase			(Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description);
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					~StateChangeCase		(void);
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected:
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void	renderTest				(const glw::Functions& gl);
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void	renderReference			(const glw::Functions& gl);
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void	changeState				(const glw::Functions& gl, int stateId) = 0;
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeCase::StateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description)
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: gls::StateChangePerformanceCase(context.getTestContext(), context.getRenderContext(), name, description,
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry									  (useIndexBuffer	? DRAWTYPE_INDEXED_BUFFER	:
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry									   drawArrays		? DRAWTYPE_NOT_INDEXED		:
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry														  DRAWTYPE_INDEXED_USER_PTR), drawCallCount, triangleCount)
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(!useIndexBuffer || !drawArrays);
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeCase::~StateChangeCase (void)
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeCase::renderTest (const glw::Functions& gl)
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int callNdx = 0; callNdx < m_callCount; callNdx++)
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		changeState(gl, 0);
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		callDraw(gl);
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		changeState(gl, 1);
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		callDraw(gl);
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeCase::renderReference (const glw::Functions& gl)
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	changeState(gl, 0);
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int callNdx = 0; callNdx < m_callCount; callNdx++)
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		callDraw(gl);
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	changeState(gl, 1);
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int callNdx = 0; callNdx < m_callCount; callNdx++)
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		callDraw(gl);
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1013c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeTests::StateChangeTests (Context& context)
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCaseGroup(context, "state_change_draw", "Test state change perfomance with draw calls.")
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1063c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeTests::~StateChangeTests (void)
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define MACRO_BLOCK(...) __VA_ARGS__
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)\
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydo {\
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	class StateChangeCase_ ## NAME : public StateChangeCase\
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{\
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	public:\
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			StateChangeCase_ ## NAME (Context& context, int drawCallCount, int triangleCount, const char* name, const char* description)\
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				: StateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name, description)\
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{}\
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		virtual void setupInitialState (const glw::Functions& gl)\
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{\
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			INIT_FUNC\
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}\
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		virtual void changeState (const glw::Functions& gl, int stateId)\
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{\
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			CHANGE_FUNC\
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}\
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};\
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	manySmallCallsGroup->addChild	(new StateChangeCase_ ## NAME (m_context,1000,2,#NAME,(DESC)));\
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fewBigCallsGroup->addChild		(new StateChangeCase_ ## NAME (m_context,10,200,#NAME,(DESC)));\
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} while (0);
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeTests::init (void)
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::TestCaseGroup* const	manySmallCallsGroup	= new tcu::TestCaseGroup(m_testCtx, "many_small_calls",	"1000 calls, 2 triangles in each");
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::TestCaseGroup* const	fewBigCallsGroup	= new tcu::TestCaseGroup(m_testCtx, "few_big_calls",	"10 calls, 200 triangles in each");
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	addChild(manySmallCallsGroup);
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	addChild(fewBigCallsGroup);
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(blend, "Enable/Disable blending.",
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_BLEND);
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_BLEND);
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(depth_test, "Enable/Disable depth test.",
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.depthFunc(GL_LEQUAL);
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_DEPTH_TEST);
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_DEPTH_TEST);
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.",
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilFunc(GL_LEQUAL, 0, 0);
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clearStencil(0);
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clear(GL_STENCIL_BUFFER_BIT);
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_STENCIL_TEST);
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_STENCIL_TEST);
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.",
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.scissor(2, 3, 12, 13);
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()");
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_SCISSOR_TEST);
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_SCISSOR_TEST);
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(dither, "Enable/Disable dithering.",
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_DITHER);
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_DITHER);
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(culling, "Enable/Disable culling.",
3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.frontFace(GL_CW);
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()");
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.cullFace(GL_FRONT);
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()");
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_CULL_FACE);
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_CULL_FACE);
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(rasterizer_discard, "Enable/Disable RASTERIZER_DISCARD.",
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_RASTERIZER_DISCARD);
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_RASTERIZER_DISCARD);
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(primitive_restart_fixed_index, "Enable/Disable PRIMITIVE_RESTART_FIXED_INDEX.",
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.disable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(depth_func, "Change depth func.",
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_DEPTH_TEST);
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthFunc(GL_GEQUAL);
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthFunc(GL_LEQUAL);
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(depth_mask, "Toggle depth mask.",
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_DEPTH_TEST);
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.depthFunc(GL_LEQUAL);
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthMask(GL_FALSE);
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthMask(GL_TRUE);
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(depth_rangef, "Change depth range.",
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthRangef(0.0f, 1.0f);
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.depthRangef(0.25f, 0.75f);
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(blend_equation, "Change blend equation.",
6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_BLEND);
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendEquation(GL_FUNC_SUBTRACT);
6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendEquation(GL_FUNC_ADD);
6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(blend_func, "Change blend function.",
6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_BLEND);
7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendFunc(GL_ONE, GL_ONE);
7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(polygon_offset, "Change polygon offset.",
7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_POLYGON_OFFSET_FILL);
7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.polygonOffset(0.0f, 0.0f);
7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.polygonOffset(0.1f, 0.1f);
7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(sample_coverage, "Sample coverage.",
7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.sampleCoverage(0.25f, GL_TRUE);
8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.sampleCoverage(0.75f, GL_FALSE);
8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(viewport, "Change viewport.",
8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.viewport(10, 11, 5, 6);
8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.viewport(2, 3, 17, 14);
8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(scissor, "Change scissor box.",
8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_SCISSOR_TEST);
8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.scissor(17, 13, 5, 8);
8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.scissor(7, 3, 13, 13);
8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(color_mask, "Change color mask.",
9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE);
9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.colorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE);
9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(cull_face, "Change culling mode.",
9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_CULL_FACE);
9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.cullFace(GL_FRONT);
9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.cullFace(GL_BACK);
9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(front_face, "Change front face.",
9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_CULL_FACE);
10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.frontFace(GL_CCW);
10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.frontFace(GL_CW);
10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(stencil_mask, "Change stencil mask.",
10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_STENCIL_TEST);
10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilFunc(GL_LEQUAL, 0, 0);
10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clearStencil(0);
10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clear(GL_STENCIL_BUFFER_BIT);
10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilMask(0xDD);
10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilMask(~0xDD);
10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(stencil_func, "Change stencil func.",
10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_STENCIL_TEST);
11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clearStencil(0);
11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clear(GL_STENCIL_BUFFER_BIT);
11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilFunc(GL_LEQUAL, 0, 0xFF);
11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilFunc(GL_GEQUAL, 0, 0x00);
11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(stencil_op, "Change stencil op.",
11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_STENCIL_TEST);
11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.stencilFunc(GL_LEQUAL, 0, 0);
11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clearStencil(0);
11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.clear(GL_STENCIL_BUFFER_BIT);
11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.stencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.",
11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(2);
12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.linkProgram(m_programs[0]->getProgram());
12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(0);
12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[1]);
12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(element_array_buffer, "Change element array buffer.",
12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireIndexBuffers(2);
12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[1]);
12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(bind_texture, "Change texture binding.",
12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(2);
13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindTexture(GL_TEXTURE_2D, m_textures[1]);
13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(use_program, "Change used program.",
13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(2);
13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.useProgram(m_programs[0]->getProgram());
13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.uniform1i(samplerLoc, 0);
13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLint samplerLoc = gl.getUniformLocation(m_programs[1]->getProgram(), "u_sampler");
13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.useProgram(m_programs[1]->getProgram());
13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.uniform1i(samplerLoc, 0);
13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.useProgram(m_programs[0]->getProgram());
13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.useProgram(m_programs[1]->getProgram());
13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.",
13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.",
14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.",
14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(bind_framebuffer, "Change framebuffer.",
15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireFramebuffers(2);
15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
15323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()");
15493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[1]);
15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(blend_color, "Change blend color.",
15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enable(GL_BLEND);
15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR);
15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()");
15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (stateId == 0)
16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendColor(0.25f, 0.25f, 0.25f, 0.25f);
16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else if (stateId == 1)
16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f);
16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(false);
16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(sampler, "Change sampler binding.",
16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(1);
16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
16153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireSamplers(2);
16163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
16203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.enableVertexAttribArray(coordLoc);
16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (int ndx = 0; ndx < 2; ndx++)
16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindSampler(0, m_samplers[ndx]);
16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ndx == 0 ? GL_NEAREST : GL_LINEAR);
16453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ndx == 0 ? GL_LINEAR  : GL_NEAREST);
16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "Sampler setup");
16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(de::inBounds(stateId, 0, 2));
16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindSampler(0, m_samplers[stateId]);
16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
16533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ADD_TESTCASE(bind_vertex_array, "Change vertex array binding.",
16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		true,
16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		false,
16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
16593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireCoordBuffers(2);
16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireTextures(1);
16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requirePrograms(1);
16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			requireVertexArrays(2);
16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.linkProgram(m_programs[0]->getProgram());
16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.useProgram(m_programs[0]->getProgram());
16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (int ndx = 0; ndx < 2; ndx++)
16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindVertexArray(m_vertexArrays[ndx]);
16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray()");
16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.enableVertexAttribArray(0);
16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[ndx]);
16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
16833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
16853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.uniform1i(samplerLoc, 0);
16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}),
16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		MACRO_BLOCK({
16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(de::inRange(stateId, 0, 2));
16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl.bindVertexArray(m_vertexArrays[stateId]);
16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		})
17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	)
17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Performance
17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3
17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
1706