xref: /aosp_15_r20/external/deqp/modules/gles3/performance/es3pStateChangeTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 3.0 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief State change performance tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es3pStateChangeTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsStateChangePerfTestCases.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker namespace deqp
31*35238bceSAndroid Build Coastguard Worker {
32*35238bceSAndroid Build Coastguard Worker namespace gles3
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker namespace Performance
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker 
37*35238bceSAndroid Build Coastguard Worker using namespace glw; // GL types
38*35238bceSAndroid Build Coastguard Worker 
39*35238bceSAndroid Build Coastguard Worker namespace
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker 
42*35238bceSAndroid Build Coastguard Worker enum
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker     VIEWPORT_WIDTH  = 24,
45*35238bceSAndroid Build Coastguard Worker     VIEWPORT_HEIGHT = 24
46*35238bceSAndroid Build Coastguard Worker };
47*35238bceSAndroid Build Coastguard Worker 
48*35238bceSAndroid Build Coastguard Worker class StateChangeCase : public gls::StateChangePerformanceCase
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker public:
51*35238bceSAndroid Build Coastguard Worker     StateChangeCase(Context &context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer,
52*35238bceSAndroid Build Coastguard Worker                     const char *name, const char *description);
53*35238bceSAndroid Build Coastguard Worker     ~StateChangeCase(void);
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker protected:
56*35238bceSAndroid Build Coastguard Worker     virtual void renderTest(const glw::Functions &gl);
57*35238bceSAndroid Build Coastguard Worker     virtual void renderReference(const glw::Functions &gl);
58*35238bceSAndroid Build Coastguard Worker 
59*35238bceSAndroid Build Coastguard Worker     virtual void changeState(const glw::Functions &gl, int stateId) = 0;
60*35238bceSAndroid Build Coastguard Worker };
61*35238bceSAndroid Build Coastguard Worker 
StateChangeCase(Context & context,int drawCallCount,int triangleCount,bool drawArrays,bool useIndexBuffer,const char * name,const char * description)62*35238bceSAndroid Build Coastguard Worker StateChangeCase::StateChangeCase(Context &context, int drawCallCount, int triangleCount, bool drawArrays,
63*35238bceSAndroid Build Coastguard Worker                                  bool useIndexBuffer, const char *name, const char *description)
64*35238bceSAndroid Build Coastguard Worker     : gls::StateChangePerformanceCase(context.getTestContext(), context.getRenderContext(), name, description,
65*35238bceSAndroid Build Coastguard Worker                                       (useIndexBuffer ? DRAWTYPE_INDEXED_BUFFER :
66*35238bceSAndroid Build Coastguard Worker                                        drawArrays     ? DRAWTYPE_NOT_INDEXED :
67*35238bceSAndroid Build Coastguard Worker                                                         DRAWTYPE_INDEXED_USER_PTR),
68*35238bceSAndroid Build Coastguard Worker                                       drawCallCount, triangleCount)
69*35238bceSAndroid Build Coastguard Worker {
70*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(!useIndexBuffer || !drawArrays);
71*35238bceSAndroid Build Coastguard Worker }
72*35238bceSAndroid Build Coastguard Worker 
~StateChangeCase(void)73*35238bceSAndroid Build Coastguard Worker StateChangeCase::~StateChangeCase(void)
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker }
76*35238bceSAndroid Build Coastguard Worker 
renderTest(const glw::Functions & gl)77*35238bceSAndroid Build Coastguard Worker void StateChangeCase::renderTest(const glw::Functions &gl)
78*35238bceSAndroid Build Coastguard Worker {
79*35238bceSAndroid Build Coastguard Worker     for (int callNdx = 0; callNdx < m_callCount; callNdx++)
80*35238bceSAndroid Build Coastguard Worker     {
81*35238bceSAndroid Build Coastguard Worker         changeState(gl, 0);
82*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
83*35238bceSAndroid Build Coastguard Worker 
84*35238bceSAndroid Build Coastguard Worker         changeState(gl, 1);
85*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
86*35238bceSAndroid Build Coastguard Worker     }
87*35238bceSAndroid Build Coastguard Worker }
88*35238bceSAndroid Build Coastguard Worker 
renderReference(const glw::Functions & gl)89*35238bceSAndroid Build Coastguard Worker void StateChangeCase::renderReference(const glw::Functions &gl)
90*35238bceSAndroid Build Coastguard Worker {
91*35238bceSAndroid Build Coastguard Worker     changeState(gl, 0);
92*35238bceSAndroid Build Coastguard Worker 
93*35238bceSAndroid Build Coastguard Worker     for (int callNdx = 0; callNdx < m_callCount; callNdx++)
94*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
95*35238bceSAndroid Build Coastguard Worker 
96*35238bceSAndroid Build Coastguard Worker     changeState(gl, 1);
97*35238bceSAndroid Build Coastguard Worker 
98*35238bceSAndroid Build Coastguard Worker     for (int callNdx = 0; callNdx < m_callCount; callNdx++)
99*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
100*35238bceSAndroid Build Coastguard Worker }
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker } // namespace
103*35238bceSAndroid Build Coastguard Worker 
StateChangeTests(Context & context)104*35238bceSAndroid Build Coastguard Worker StateChangeTests::StateChangeTests(Context &context)
105*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "state_change_draw", "Test state change perfomance with draw calls.")
106*35238bceSAndroid Build Coastguard Worker {
107*35238bceSAndroid Build Coastguard Worker }
108*35238bceSAndroid Build Coastguard Worker 
~StateChangeTests(void)109*35238bceSAndroid Build Coastguard Worker StateChangeTests::~StateChangeTests(void)
110*35238bceSAndroid Build Coastguard Worker {
111*35238bceSAndroid Build Coastguard Worker }
112*35238bceSAndroid Build Coastguard Worker 
113*35238bceSAndroid Build Coastguard Worker #define MACRO_BLOCK(...) __VA_ARGS__
114*35238bceSAndroid Build Coastguard Worker 
115*35238bceSAndroid Build Coastguard Worker #define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)                            \
116*35238bceSAndroid Build Coastguard Worker     do                                                                                                       \
117*35238bceSAndroid Build Coastguard Worker     {                                                                                                        \
118*35238bceSAndroid Build Coastguard Worker         class StateChangeCase_##NAME : public StateChangeCase                                                \
119*35238bceSAndroid Build Coastguard Worker         {                                                                                                    \
120*35238bceSAndroid Build Coastguard Worker         public:                                                                                              \
121*35238bceSAndroid Build Coastguard Worker             StateChangeCase_##NAME(Context &context, int drawCallCount, int triangleCount, const char *name, \
122*35238bceSAndroid Build Coastguard Worker                                    const char *description)                                                  \
123*35238bceSAndroid Build Coastguard Worker                 : StateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name,  \
124*35238bceSAndroid Build Coastguard Worker                                   description)                                                               \
125*35238bceSAndroid Build Coastguard Worker             {                                                                                                \
126*35238bceSAndroid Build Coastguard Worker             }                                                                                                \
127*35238bceSAndroid Build Coastguard Worker             virtual void setupInitialState(const glw::Functions &gl)                                         \
128*35238bceSAndroid Build Coastguard Worker             {                                                                                                \
129*35238bceSAndroid Build Coastguard Worker                 INIT_FUNC                                                                                    \
130*35238bceSAndroid Build Coastguard Worker             }                                                                                                \
131*35238bceSAndroid Build Coastguard Worker             virtual void changeState(const glw::Functions &gl, int stateId)                                  \
132*35238bceSAndroid Build Coastguard Worker             {                                                                                                \
133*35238bceSAndroid Build Coastguard Worker                 CHANGE_FUNC                                                                                  \
134*35238bceSAndroid Build Coastguard Worker             }                                                                                                \
135*35238bceSAndroid Build Coastguard Worker         };                                                                                                   \
136*35238bceSAndroid Build Coastguard Worker         manySmallCallsGroup->addChild(new StateChangeCase_##NAME(m_context, 1000, 2, #NAME, (DESC)));        \
137*35238bceSAndroid Build Coastguard Worker         fewBigCallsGroup->addChild(new StateChangeCase_##NAME(m_context, 10, 200, #NAME, (DESC)));           \
138*35238bceSAndroid Build Coastguard Worker     } while (0);
139*35238bceSAndroid Build Coastguard Worker 
init(void)140*35238bceSAndroid Build Coastguard Worker void StateChangeTests::init(void)
141*35238bceSAndroid Build Coastguard Worker {
142*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *const manySmallCallsGroup =
143*35238bceSAndroid Build Coastguard Worker         new tcu::TestCaseGroup(m_testCtx, "many_small_calls", "1000 calls, 2 triangles in each");
144*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *const fewBigCallsGroup =
145*35238bceSAndroid Build Coastguard Worker         new tcu::TestCaseGroup(m_testCtx, "few_big_calls", "10 calls, 200 triangles in each");
146*35238bceSAndroid Build Coastguard Worker 
147*35238bceSAndroid Build Coastguard Worker     addChild(manySmallCallsGroup);
148*35238bceSAndroid Build Coastguard Worker     addChild(fewBigCallsGroup);
149*35238bceSAndroid Build Coastguard Worker 
150*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend, "Enable/Disable blending.", true, false, MACRO_BLOCK({
151*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
152*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
153*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
154*35238bceSAndroid Build Coastguard Worker 
155*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
156*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
157*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
158*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
161*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
162*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
163*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
164*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
165*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
166*35238bceSAndroid Build Coastguard Worker 
167*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
168*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
169*35238bceSAndroid Build Coastguard Worker 
170*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
171*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
172*35238bceSAndroid Build Coastguard Worker 
173*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
174*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
175*35238bceSAndroid Build Coastguard Worker 
176*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
177*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
178*35238bceSAndroid Build Coastguard Worker                  }),
179*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
180*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
181*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_BLEND);
182*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
183*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_BLEND);
184*35238bceSAndroid Build Coastguard Worker                      else
185*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
186*35238bceSAndroid Build Coastguard Worker                  }))
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_test, "Enable/Disable depth test.", true, false, MACRO_BLOCK({
189*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
190*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
191*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
192*35238bceSAndroid Build Coastguard Worker 
193*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
194*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
195*35238bceSAndroid Build Coastguard Worker 
196*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
197*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
198*35238bceSAndroid Build Coastguard Worker 
199*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
200*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
201*35238bceSAndroid Build Coastguard Worker 
202*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
203*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
204*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
205*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
206*35238bceSAndroid Build Coastguard Worker 
207*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
208*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
211*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
212*35238bceSAndroid Build Coastguard Worker 
213*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
214*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
215*35238bceSAndroid Build Coastguard Worker 
216*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
217*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
218*35238bceSAndroid Build Coastguard Worker 
219*35238bceSAndroid Build Coastguard Worker                      gl.depthFunc(GL_LEQUAL);
220*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
221*35238bceSAndroid Build Coastguard Worker                  }),
222*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
223*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
224*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_DEPTH_TEST);
225*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
226*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_DEPTH_TEST);
227*35238bceSAndroid Build Coastguard Worker                      else
228*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
229*35238bceSAndroid Build Coastguard Worker                  }))
230*35238bceSAndroid Build Coastguard Worker 
231*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.", true, false, MACRO_BLOCK({
232*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
233*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
234*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
237*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
238*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
239*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
240*35238bceSAndroid Build Coastguard Worker 
241*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
242*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
243*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
244*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
245*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
246*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
247*35238bceSAndroid Build Coastguard Worker 
248*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
249*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
250*35238bceSAndroid Build Coastguard Worker 
251*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
252*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
253*35238bceSAndroid Build Coastguard Worker 
254*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
255*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
256*35238bceSAndroid Build Coastguard Worker 
257*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
258*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
259*35238bceSAndroid Build Coastguard Worker 
260*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
261*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
262*35238bceSAndroid Build Coastguard Worker 
263*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
264*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
265*35238bceSAndroid Build Coastguard Worker 
266*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
267*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
268*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
271*35238bceSAndroid Build Coastguard Worker                  }),
272*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
273*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
274*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_STENCIL_TEST);
275*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
276*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_STENCIL_TEST);
277*35238bceSAndroid Build Coastguard Worker                      else
278*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
279*35238bceSAndroid Build Coastguard Worker                  }))
280*35238bceSAndroid Build Coastguard Worker 
281*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.", true, false, MACRO_BLOCK({
282*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
283*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
284*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
285*35238bceSAndroid Build Coastguard Worker 
286*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
287*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
288*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
289*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
290*35238bceSAndroid Build Coastguard Worker 
291*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
292*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
293*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
294*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
295*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
296*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
297*35238bceSAndroid Build Coastguard Worker 
298*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
299*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
300*35238bceSAndroid Build Coastguard Worker 
301*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
302*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
303*35238bceSAndroid Build Coastguard Worker 
304*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
305*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
306*35238bceSAndroid Build Coastguard Worker 
307*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
308*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
309*35238bceSAndroid Build Coastguard Worker 
310*35238bceSAndroid Build Coastguard Worker                      gl.scissor(2, 3, 12, 13);
311*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()");
312*35238bceSAndroid Build Coastguard Worker                  }),
313*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
314*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
315*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_SCISSOR_TEST);
316*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
317*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_SCISSOR_TEST);
318*35238bceSAndroid Build Coastguard Worker                      else
319*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
320*35238bceSAndroid Build Coastguard Worker                  }))
321*35238bceSAndroid Build Coastguard Worker 
322*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(dither, "Enable/Disable dithering.", true, false, MACRO_BLOCK({
323*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
324*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
325*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
326*35238bceSAndroid Build Coastguard Worker 
327*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
328*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
329*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
330*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
331*35238bceSAndroid Build Coastguard Worker 
332*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
333*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
334*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
335*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
336*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
337*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
338*35238bceSAndroid Build Coastguard Worker 
339*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
340*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
341*35238bceSAndroid Build Coastguard Worker 
342*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
343*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
344*35238bceSAndroid Build Coastguard Worker 
345*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
346*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
347*35238bceSAndroid Build Coastguard Worker 
348*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
349*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
350*35238bceSAndroid Build Coastguard Worker                  }),
351*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
352*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
353*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_DITHER);
354*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
355*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_DITHER);
356*35238bceSAndroid Build Coastguard Worker                      else
357*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
358*35238bceSAndroid Build Coastguard Worker                  }))
359*35238bceSAndroid Build Coastguard Worker 
360*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(culling, "Enable/Disable culling.", true, false, MACRO_BLOCK({
361*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
362*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
363*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
364*35238bceSAndroid Build Coastguard Worker 
365*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
366*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
367*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
368*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
369*35238bceSAndroid Build Coastguard Worker 
370*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
371*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
372*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
373*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
374*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
375*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
376*35238bceSAndroid Build Coastguard Worker 
377*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
378*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
379*35238bceSAndroid Build Coastguard Worker 
380*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
381*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
382*35238bceSAndroid Build Coastguard Worker 
383*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
384*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
385*35238bceSAndroid Build Coastguard Worker 
386*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
387*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
388*35238bceSAndroid Build Coastguard Worker 
389*35238bceSAndroid Build Coastguard Worker                      gl.frontFace(GL_CW);
390*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()");
391*35238bceSAndroid Build Coastguard Worker 
392*35238bceSAndroid Build Coastguard Worker                      gl.cullFace(GL_FRONT);
393*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()");
394*35238bceSAndroid Build Coastguard Worker                  }),
395*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
396*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
397*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_CULL_FACE);
398*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
399*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_CULL_FACE);
400*35238bceSAndroid Build Coastguard Worker                      else
401*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
402*35238bceSAndroid Build Coastguard Worker                  }))
403*35238bceSAndroid Build Coastguard Worker 
404*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(rasterizer_discard, "Enable/Disable RASTERIZER_DISCARD.", true, false, MACRO_BLOCK({
405*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
406*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
407*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
408*35238bceSAndroid Build Coastguard Worker 
409*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
410*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
411*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
412*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
413*35238bceSAndroid Build Coastguard Worker 
414*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
415*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
416*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
417*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
418*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
419*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
420*35238bceSAndroid Build Coastguard Worker 
421*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
422*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
423*35238bceSAndroid Build Coastguard Worker 
424*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
425*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
426*35238bceSAndroid Build Coastguard Worker 
427*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
428*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
429*35238bceSAndroid Build Coastguard Worker 
430*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
431*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
432*35238bceSAndroid Build Coastguard Worker                  }),
433*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
434*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
435*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_RASTERIZER_DISCARD);
436*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
437*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_RASTERIZER_DISCARD);
438*35238bceSAndroid Build Coastguard Worker                      else
439*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
440*35238bceSAndroid Build Coastguard Worker                  }))
441*35238bceSAndroid Build Coastguard Worker 
442*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(primitive_restart_fixed_index, "Enable/Disable PRIMITIVE_RESTART_FIXED_INDEX.", true, false,
443*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
444*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
445*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
446*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
447*35238bceSAndroid Build Coastguard Worker 
448*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
449*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
450*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
451*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
452*35238bceSAndroid Build Coastguard Worker 
453*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
454*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
455*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
456*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
457*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
458*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
459*35238bceSAndroid Build Coastguard Worker 
460*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
461*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
462*35238bceSAndroid Build Coastguard Worker 
463*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
464*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
465*35238bceSAndroid Build Coastguard Worker 
466*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
467*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
468*35238bceSAndroid Build Coastguard Worker 
469*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
470*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
471*35238bceSAndroid Build Coastguard Worker                  }),
472*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
473*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
474*35238bceSAndroid Build Coastguard Worker                          gl.enable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
475*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
476*35238bceSAndroid Build Coastguard Worker                          gl.disable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
477*35238bceSAndroid Build Coastguard Worker                      else
478*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
479*35238bceSAndroid Build Coastguard Worker                  }))
480*35238bceSAndroid Build Coastguard Worker 
481*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_func, "Change depth func.", true, false, MACRO_BLOCK({
482*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
483*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
484*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
485*35238bceSAndroid Build Coastguard Worker 
486*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
487*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
488*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
489*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
490*35238bceSAndroid Build Coastguard Worker 
491*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
492*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
493*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
494*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
495*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
496*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
497*35238bceSAndroid Build Coastguard Worker 
498*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
499*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
500*35238bceSAndroid Build Coastguard Worker 
501*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
502*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
503*35238bceSAndroid Build Coastguard Worker 
504*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
505*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
506*35238bceSAndroid Build Coastguard Worker 
507*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
508*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
509*35238bceSAndroid Build Coastguard Worker 
510*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_DEPTH_TEST);
511*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
512*35238bceSAndroid Build Coastguard Worker                  }),
513*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
514*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
515*35238bceSAndroid Build Coastguard Worker                          gl.depthFunc(GL_GEQUAL);
516*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
517*35238bceSAndroid Build Coastguard Worker                          gl.depthFunc(GL_LEQUAL);
518*35238bceSAndroid Build Coastguard Worker                      else
519*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
520*35238bceSAndroid Build Coastguard Worker                  }))
521*35238bceSAndroid Build Coastguard Worker 
522*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_mask, "Toggle depth mask.", true, false, MACRO_BLOCK({
523*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
524*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
525*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
526*35238bceSAndroid Build Coastguard Worker 
527*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
528*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
529*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
530*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
531*35238bceSAndroid Build Coastguard Worker 
532*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
533*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
534*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
535*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
536*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
537*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
538*35238bceSAndroid Build Coastguard Worker 
539*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
540*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
541*35238bceSAndroid Build Coastguard Worker 
542*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
543*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
544*35238bceSAndroid Build Coastguard Worker 
545*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
546*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
547*35238bceSAndroid Build Coastguard Worker 
548*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
549*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
550*35238bceSAndroid Build Coastguard Worker 
551*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_DEPTH_TEST);
552*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
553*35238bceSAndroid Build Coastguard Worker 
554*35238bceSAndroid Build Coastguard Worker                      gl.depthFunc(GL_LEQUAL);
555*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
556*35238bceSAndroid Build Coastguard Worker                  }),
557*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
558*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
559*35238bceSAndroid Build Coastguard Worker                          gl.depthMask(GL_FALSE);
560*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
561*35238bceSAndroid Build Coastguard Worker                          gl.depthMask(GL_TRUE);
562*35238bceSAndroid Build Coastguard Worker                      else
563*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
564*35238bceSAndroid Build Coastguard Worker                  }))
565*35238bceSAndroid Build Coastguard Worker 
566*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_rangef, "Change depth range.", true, false, MACRO_BLOCK({
567*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
568*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
569*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
570*35238bceSAndroid Build Coastguard Worker 
571*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
572*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
573*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
574*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
575*35238bceSAndroid Build Coastguard Worker 
576*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
577*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
578*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
579*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
580*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
581*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
582*35238bceSAndroid Build Coastguard Worker 
583*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
584*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
585*35238bceSAndroid Build Coastguard Worker 
586*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
587*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
588*35238bceSAndroid Build Coastguard Worker 
589*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
590*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
593*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
594*35238bceSAndroid Build Coastguard Worker                  }),
595*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
596*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
597*35238bceSAndroid Build Coastguard Worker                          gl.depthRangef(0.0f, 1.0f);
598*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
599*35238bceSAndroid Build Coastguard Worker                          gl.depthRangef(0.25f, 0.75f);
600*35238bceSAndroid Build Coastguard Worker                      else
601*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
602*35238bceSAndroid Build Coastguard Worker                  }))
603*35238bceSAndroid Build Coastguard Worker 
604*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_equation, "Change blend equation.", true, false, MACRO_BLOCK({
605*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
606*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
607*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
608*35238bceSAndroid Build Coastguard Worker 
609*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
610*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
611*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
612*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
613*35238bceSAndroid Build Coastguard Worker 
614*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
615*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
616*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
617*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
618*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
619*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
620*35238bceSAndroid Build Coastguard Worker 
621*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
622*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
623*35238bceSAndroid Build Coastguard Worker 
624*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
625*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
626*35238bceSAndroid Build Coastguard Worker 
627*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
628*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
629*35238bceSAndroid Build Coastguard Worker 
630*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
631*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
632*35238bceSAndroid Build Coastguard Worker 
633*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
634*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
635*35238bceSAndroid Build Coastguard Worker                  }),
636*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
637*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
638*35238bceSAndroid Build Coastguard Worker                          gl.blendEquation(GL_FUNC_SUBTRACT);
639*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
640*35238bceSAndroid Build Coastguard Worker                          gl.blendEquation(GL_FUNC_ADD);
641*35238bceSAndroid Build Coastguard Worker                      else
642*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
643*35238bceSAndroid Build Coastguard Worker                  }))
644*35238bceSAndroid Build Coastguard Worker 
645*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_func, "Change blend function.", true, false, MACRO_BLOCK({
646*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
647*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
648*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
649*35238bceSAndroid Build Coastguard Worker 
650*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
651*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
652*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
653*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
654*35238bceSAndroid Build Coastguard Worker 
655*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
656*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
657*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
658*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
659*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
660*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
661*35238bceSAndroid Build Coastguard Worker 
662*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
663*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
664*35238bceSAndroid Build Coastguard Worker 
665*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
666*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
667*35238bceSAndroid Build Coastguard Worker 
668*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
669*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
670*35238bceSAndroid Build Coastguard Worker 
671*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
672*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
673*35238bceSAndroid Build Coastguard Worker 
674*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
675*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
676*35238bceSAndroid Build Coastguard Worker                  }),
677*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
678*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
679*35238bceSAndroid Build Coastguard Worker                          gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
680*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
681*35238bceSAndroid Build Coastguard Worker                          gl.blendFunc(GL_ONE, GL_ONE);
682*35238bceSAndroid Build Coastguard Worker                      else
683*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
684*35238bceSAndroid Build Coastguard Worker                  }))
685*35238bceSAndroid Build Coastguard Worker 
686*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(polygon_offset, "Change polygon offset.", true, false, MACRO_BLOCK({
687*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
688*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
689*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
690*35238bceSAndroid Build Coastguard Worker 
691*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
692*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
693*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
694*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
695*35238bceSAndroid Build Coastguard Worker 
696*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
697*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
698*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
699*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
700*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
701*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
702*35238bceSAndroid Build Coastguard Worker 
703*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
704*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
705*35238bceSAndroid Build Coastguard Worker 
706*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
707*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
708*35238bceSAndroid Build Coastguard Worker 
709*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
710*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
711*35238bceSAndroid Build Coastguard Worker 
712*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
713*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
714*35238bceSAndroid Build Coastguard Worker 
715*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_POLYGON_OFFSET_FILL);
716*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
717*35238bceSAndroid Build Coastguard Worker                  }),
718*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
719*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
720*35238bceSAndroid Build Coastguard Worker                          gl.polygonOffset(0.0f, 0.0f);
721*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
722*35238bceSAndroid Build Coastguard Worker                          gl.polygonOffset(0.1f, 0.1f);
723*35238bceSAndroid Build Coastguard Worker                      else
724*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
725*35238bceSAndroid Build Coastguard Worker                  }))
726*35238bceSAndroid Build Coastguard Worker 
727*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(sample_coverage, "Sample coverage.", true, false, MACRO_BLOCK({
728*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
729*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
730*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
731*35238bceSAndroid Build Coastguard Worker 
732*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
733*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
734*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
735*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
736*35238bceSAndroid Build Coastguard Worker 
737*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
738*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
739*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
740*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
741*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
742*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
743*35238bceSAndroid Build Coastguard Worker 
744*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
745*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
746*35238bceSAndroid Build Coastguard Worker 
747*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
748*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
749*35238bceSAndroid Build Coastguard Worker 
750*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
751*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
752*35238bceSAndroid Build Coastguard Worker 
753*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
754*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
755*35238bceSAndroid Build Coastguard Worker                  }),
756*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
757*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
758*35238bceSAndroid Build Coastguard Worker                          gl.sampleCoverage(0.25f, GL_TRUE);
759*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
760*35238bceSAndroid Build Coastguard Worker                          gl.sampleCoverage(0.75f, GL_FALSE);
761*35238bceSAndroid Build Coastguard Worker                      else
762*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
763*35238bceSAndroid Build Coastguard Worker                  }))
764*35238bceSAndroid Build Coastguard Worker 
765*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(viewport, "Change viewport.", true, false, MACRO_BLOCK({
766*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
767*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
768*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
769*35238bceSAndroid Build Coastguard Worker 
770*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
771*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
772*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
773*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
774*35238bceSAndroid Build Coastguard Worker 
775*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
776*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
777*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
778*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
779*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
780*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
781*35238bceSAndroid Build Coastguard Worker 
782*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
783*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
784*35238bceSAndroid Build Coastguard Worker 
785*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
786*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
787*35238bceSAndroid Build Coastguard Worker 
788*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
789*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
790*35238bceSAndroid Build Coastguard Worker 
791*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
792*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
793*35238bceSAndroid Build Coastguard Worker                  }),
794*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
795*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
796*35238bceSAndroid Build Coastguard Worker                          gl.viewport(10, 11, 5, 6);
797*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
798*35238bceSAndroid Build Coastguard Worker                          gl.viewport(2, 3, 17, 14);
799*35238bceSAndroid Build Coastguard Worker                      else
800*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
801*35238bceSAndroid Build Coastguard Worker                  }))
802*35238bceSAndroid Build Coastguard Worker 
803*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(scissor, "Change scissor box.", true, false, MACRO_BLOCK({
804*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
805*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
806*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
807*35238bceSAndroid Build Coastguard Worker 
808*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
809*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
810*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
811*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
812*35238bceSAndroid Build Coastguard Worker 
813*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
814*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
815*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
816*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
817*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
818*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
819*35238bceSAndroid Build Coastguard Worker 
820*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
821*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
822*35238bceSAndroid Build Coastguard Worker 
823*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
824*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
825*35238bceSAndroid Build Coastguard Worker 
826*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
827*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
828*35238bceSAndroid Build Coastguard Worker 
829*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
830*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
831*35238bceSAndroid Build Coastguard Worker 
832*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_SCISSOR_TEST);
833*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
834*35238bceSAndroid Build Coastguard Worker                  }),
835*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
836*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
837*35238bceSAndroid Build Coastguard Worker                          gl.scissor(17, 13, 5, 8);
838*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
839*35238bceSAndroid Build Coastguard Worker                          gl.scissor(7, 3, 13, 13);
840*35238bceSAndroid Build Coastguard Worker                      else
841*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
842*35238bceSAndroid Build Coastguard Worker                  }))
843*35238bceSAndroid Build Coastguard Worker 
844*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(color_mask, "Change color mask.", true, false, MACRO_BLOCK({
845*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
846*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
847*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
848*35238bceSAndroid Build Coastguard Worker 
849*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
850*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
851*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
852*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
853*35238bceSAndroid Build Coastguard Worker 
854*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
855*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
856*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
857*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
858*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
859*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
860*35238bceSAndroid Build Coastguard Worker 
861*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
862*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
863*35238bceSAndroid Build Coastguard Worker 
864*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
865*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
866*35238bceSAndroid Build Coastguard Worker 
867*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
868*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
869*35238bceSAndroid Build Coastguard Worker 
870*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
871*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
872*35238bceSAndroid Build Coastguard Worker                  }),
873*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
874*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
875*35238bceSAndroid Build Coastguard Worker                          gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE);
876*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
877*35238bceSAndroid Build Coastguard Worker                          gl.colorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE);
878*35238bceSAndroid Build Coastguard Worker                      else
879*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
880*35238bceSAndroid Build Coastguard Worker                  }))
881*35238bceSAndroid Build Coastguard Worker 
882*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(cull_face, "Change culling mode.", true, false, MACRO_BLOCK({
883*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
884*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
885*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
886*35238bceSAndroid Build Coastguard Worker 
887*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
888*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
889*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
890*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
891*35238bceSAndroid Build Coastguard Worker 
892*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
893*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
894*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
895*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
896*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
897*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
898*35238bceSAndroid Build Coastguard Worker 
899*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
900*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
901*35238bceSAndroid Build Coastguard Worker 
902*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
903*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
904*35238bceSAndroid Build Coastguard Worker 
905*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
906*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
907*35238bceSAndroid Build Coastguard Worker 
908*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
909*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
910*35238bceSAndroid Build Coastguard Worker 
911*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_CULL_FACE);
912*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
913*35238bceSAndroid Build Coastguard Worker                  }),
914*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
915*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
916*35238bceSAndroid Build Coastguard Worker                          gl.cullFace(GL_FRONT);
917*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
918*35238bceSAndroid Build Coastguard Worker                          gl.cullFace(GL_BACK);
919*35238bceSAndroid Build Coastguard Worker                      else
920*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
921*35238bceSAndroid Build Coastguard Worker                  }))
922*35238bceSAndroid Build Coastguard Worker 
923*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(front_face, "Change front face.", true, false, MACRO_BLOCK({
924*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
925*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
926*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
927*35238bceSAndroid Build Coastguard Worker 
928*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
929*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
930*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
931*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
932*35238bceSAndroid Build Coastguard Worker 
933*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
934*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
935*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
936*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
937*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
938*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
939*35238bceSAndroid Build Coastguard Worker 
940*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
941*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
942*35238bceSAndroid Build Coastguard Worker 
943*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
944*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
945*35238bceSAndroid Build Coastguard Worker 
946*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
947*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
948*35238bceSAndroid Build Coastguard Worker 
949*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
950*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
951*35238bceSAndroid Build Coastguard Worker 
952*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_CULL_FACE);
953*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
954*35238bceSAndroid Build Coastguard Worker                  }),
955*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
956*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
957*35238bceSAndroid Build Coastguard Worker                          gl.frontFace(GL_CCW);
958*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
959*35238bceSAndroid Build Coastguard Worker                          gl.frontFace(GL_CW);
960*35238bceSAndroid Build Coastguard Worker                      else
961*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
962*35238bceSAndroid Build Coastguard Worker                  }))
963*35238bceSAndroid Build Coastguard Worker 
964*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_mask, "Change stencil mask.", true, false, MACRO_BLOCK({
965*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
966*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
967*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
968*35238bceSAndroid Build Coastguard Worker 
969*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
970*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
971*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
972*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
973*35238bceSAndroid Build Coastguard Worker 
974*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
975*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
976*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
977*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
978*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
979*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
980*35238bceSAndroid Build Coastguard Worker 
981*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
982*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
983*35238bceSAndroid Build Coastguard Worker 
984*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
985*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
986*35238bceSAndroid Build Coastguard Worker 
987*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
988*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
989*35238bceSAndroid Build Coastguard Worker 
990*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
991*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
992*35238bceSAndroid Build Coastguard Worker 
993*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
994*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
995*35238bceSAndroid Build Coastguard Worker 
996*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
997*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
998*35238bceSAndroid Build Coastguard Worker 
999*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1000*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
1001*35238bceSAndroid Build Coastguard Worker 
1002*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
1003*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1004*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
1005*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1006*35238bceSAndroid Build Coastguard Worker                  }),
1007*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1008*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1009*35238bceSAndroid Build Coastguard Worker                          gl.stencilMask(0xDD);
1010*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1011*35238bceSAndroid Build Coastguard Worker                          gl.stencilMask(~0xDD);
1012*35238bceSAndroid Build Coastguard Worker                      else
1013*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1014*35238bceSAndroid Build Coastguard Worker                  }))
1015*35238bceSAndroid Build Coastguard Worker 
1016*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_func, "Change stencil func.", true, false, MACRO_BLOCK({
1017*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1018*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1019*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1020*35238bceSAndroid Build Coastguard Worker 
1021*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1022*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1023*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1024*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1025*35238bceSAndroid Build Coastguard Worker 
1026*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1027*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1028*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1029*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1030*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1031*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1032*35238bceSAndroid Build Coastguard Worker 
1033*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1034*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1035*35238bceSAndroid Build Coastguard Worker 
1036*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1037*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1038*35238bceSAndroid Build Coastguard Worker 
1039*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1040*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1041*35238bceSAndroid Build Coastguard Worker 
1042*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1043*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1044*35238bceSAndroid Build Coastguard Worker 
1045*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
1046*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1047*35238bceSAndroid Build Coastguard Worker 
1048*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1049*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
1050*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
1051*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1052*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
1053*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1054*35238bceSAndroid Build Coastguard Worker                  }),
1055*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1056*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1057*35238bceSAndroid Build Coastguard Worker                          gl.stencilFunc(GL_LEQUAL, 0, 0xFF);
1058*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1059*35238bceSAndroid Build Coastguard Worker                          gl.stencilFunc(GL_GEQUAL, 0, 0x00);
1060*35238bceSAndroid Build Coastguard Worker                      else
1061*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1062*35238bceSAndroid Build Coastguard Worker                  }))
1063*35238bceSAndroid Build Coastguard Worker 
1064*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_op, "Change stencil op.", true, false, MACRO_BLOCK({
1065*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1066*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1067*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1068*35238bceSAndroid Build Coastguard Worker 
1069*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1070*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1071*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1072*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1073*35238bceSAndroid Build Coastguard Worker 
1074*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1075*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1076*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1077*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1078*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1079*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1080*35238bceSAndroid Build Coastguard Worker 
1081*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1082*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1083*35238bceSAndroid Build Coastguard Worker 
1084*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1085*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1086*35238bceSAndroid Build Coastguard Worker 
1087*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1088*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1089*35238bceSAndroid Build Coastguard Worker 
1090*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1091*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1092*35238bceSAndroid Build Coastguard Worker 
1093*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
1094*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1095*35238bceSAndroid Build Coastguard Worker 
1096*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
1097*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
1098*35238bceSAndroid Build Coastguard Worker 
1099*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
1100*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1101*35238bceSAndroid Build Coastguard Worker 
1102*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
1103*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1104*35238bceSAndroid Build Coastguard Worker                  }),
1105*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1106*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1107*35238bceSAndroid Build Coastguard Worker                          gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1108*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1109*35238bceSAndroid Build Coastguard Worker                          gl.stencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
1110*35238bceSAndroid Build Coastguard Worker                      else
1111*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1112*35238bceSAndroid Build Coastguard Worker                  }))
1113*35238bceSAndroid Build Coastguard Worker 
1114*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.", true, false, MACRO_BLOCK({
1115*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(2);
1116*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1117*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1118*35238bceSAndroid Build Coastguard Worker 
1119*35238bceSAndroid Build Coastguard Worker                      gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1120*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1121*35238bceSAndroid Build Coastguard Worker                      gl.linkProgram(m_programs[0]->getProgram());
1122*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1123*35238bceSAndroid Build Coastguard Worker 
1124*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1125*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1126*35238bceSAndroid Build Coastguard Worker 
1127*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(0);
1128*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1129*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1130*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1131*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1132*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1133*35238bceSAndroid Build Coastguard Worker 
1134*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1135*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1136*35238bceSAndroid Build Coastguard Worker 
1137*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1138*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1139*35238bceSAndroid Build Coastguard Worker 
1140*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1141*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1142*35238bceSAndroid Build Coastguard Worker 
1143*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1144*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1145*35238bceSAndroid Build Coastguard Worker                  }),
1146*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1147*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1148*35238bceSAndroid Build Coastguard Worker                      {
1149*35238bceSAndroid Build Coastguard Worker                          gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1150*35238bceSAndroid Build Coastguard Worker                          gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1151*35238bceSAndroid Build Coastguard Worker                      }
1152*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1153*35238bceSAndroid Build Coastguard Worker                      {
1154*35238bceSAndroid Build Coastguard Worker                          gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[1]);
1155*35238bceSAndroid Build Coastguard Worker                          gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1156*35238bceSAndroid Build Coastguard Worker                      }
1157*35238bceSAndroid Build Coastguard Worker                      else
1158*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1159*35238bceSAndroid Build Coastguard Worker                  }))
1160*35238bceSAndroid Build Coastguard Worker 
1161*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(element_array_buffer, "Change element array buffer.", false, true, MACRO_BLOCK({
1162*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1163*35238bceSAndroid Build Coastguard Worker                      requireIndexBuffers(2);
1164*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1165*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1166*35238bceSAndroid Build Coastguard Worker 
1167*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1168*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1169*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1170*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1171*35238bceSAndroid Build Coastguard Worker 
1172*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1173*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1174*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1175*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1176*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1177*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1178*35238bceSAndroid Build Coastguard Worker 
1179*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1180*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1181*35238bceSAndroid Build Coastguard Worker 
1182*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1183*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1184*35238bceSAndroid Build Coastguard Worker 
1185*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1186*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1187*35238bceSAndroid Build Coastguard Worker 
1188*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1189*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1190*35238bceSAndroid Build Coastguard Worker 
1191*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1192*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1193*35238bceSAndroid Build Coastguard Worker                  }),
1194*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1195*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1196*35238bceSAndroid Build Coastguard Worker                          gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1197*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1198*35238bceSAndroid Build Coastguard Worker                          gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[1]);
1199*35238bceSAndroid Build Coastguard Worker                      else
1200*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1201*35238bceSAndroid Build Coastguard Worker                  }))
1202*35238bceSAndroid Build Coastguard Worker 
1203*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_texture, "Change texture binding.", true, false, MACRO_BLOCK({
1204*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1205*35238bceSAndroid Build Coastguard Worker                      requireTextures(2);
1206*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1207*35238bceSAndroid Build Coastguard Worker 
1208*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1209*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1210*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1211*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1212*35238bceSAndroid Build Coastguard Worker 
1213*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1214*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1215*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1216*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1217*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1218*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1219*35238bceSAndroid Build Coastguard Worker 
1220*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1221*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1222*35238bceSAndroid Build Coastguard Worker 
1223*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1224*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1225*35238bceSAndroid Build Coastguard Worker 
1226*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1227*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1228*35238bceSAndroid Build Coastguard Worker 
1229*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1230*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1231*35238bceSAndroid Build Coastguard Worker                  }),
1232*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1233*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1234*35238bceSAndroid Build Coastguard Worker                          gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1235*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1236*35238bceSAndroid Build Coastguard Worker                          gl.bindTexture(GL_TEXTURE_2D, m_textures[1]);
1237*35238bceSAndroid Build Coastguard Worker                      else
1238*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1239*35238bceSAndroid Build Coastguard Worker                  }))
1240*35238bceSAndroid Build Coastguard Worker 
1241*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(use_program, "Change used program.", true, false, MACRO_BLOCK({
1242*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1243*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1244*35238bceSAndroid Build Coastguard Worker                      requirePrograms(2);
1245*35238bceSAndroid Build Coastguard Worker 
1246*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1247*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1248*35238bceSAndroid Build Coastguard Worker 
1249*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1250*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1251*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1252*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1253*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1254*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1255*35238bceSAndroid Build Coastguard Worker 
1256*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1257*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1258*35238bceSAndroid Build Coastguard Worker 
1259*35238bceSAndroid Build Coastguard Worker                      {
1260*35238bceSAndroid Build Coastguard Worker                          GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1261*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1262*35238bceSAndroid Build Coastguard Worker                          gl.useProgram(m_programs[0]->getProgram());
1263*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1264*35238bceSAndroid Build Coastguard Worker                          gl.uniform1i(samplerLoc, 0);
1265*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1266*35238bceSAndroid Build Coastguard Worker                      }
1267*35238bceSAndroid Build Coastguard Worker 
1268*35238bceSAndroid Build Coastguard Worker                      {
1269*35238bceSAndroid Build Coastguard Worker                          GLint samplerLoc = gl.getUniformLocation(m_programs[1]->getProgram(), "u_sampler");
1270*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1271*35238bceSAndroid Build Coastguard Worker                          gl.useProgram(m_programs[1]->getProgram());
1272*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1273*35238bceSAndroid Build Coastguard Worker                          gl.uniform1i(samplerLoc, 0);
1274*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1275*35238bceSAndroid Build Coastguard Worker                      }
1276*35238bceSAndroid Build Coastguard Worker 
1277*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1278*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1279*35238bceSAndroid Build Coastguard Worker                  }),
1280*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1281*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1282*35238bceSAndroid Build Coastguard Worker                          gl.useProgram(m_programs[0]->getProgram());
1283*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1284*35238bceSAndroid Build Coastguard Worker                          gl.useProgram(m_programs[1]->getProgram());
1285*35238bceSAndroid Build Coastguard Worker                      else
1286*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1287*35238bceSAndroid Build Coastguard Worker                  }))
1288*35238bceSAndroid Build Coastguard Worker 
1289*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.", true, false, MACRO_BLOCK({
1290*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1291*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1292*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1293*35238bceSAndroid Build Coastguard Worker 
1294*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1295*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1296*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1297*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1298*35238bceSAndroid Build Coastguard Worker 
1299*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1300*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1301*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1302*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1303*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1304*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1305*35238bceSAndroid Build Coastguard Worker 
1306*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1307*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1308*35238bceSAndroid Build Coastguard Worker 
1309*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1310*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1311*35238bceSAndroid Build Coastguard Worker 
1312*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1313*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1314*35238bceSAndroid Build Coastguard Worker 
1315*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1316*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1317*35238bceSAndroid Build Coastguard Worker                  }),
1318*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1319*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1320*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1321*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1322*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1323*35238bceSAndroid Build Coastguard Worker                      else
1324*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1325*35238bceSAndroid Build Coastguard Worker                  }))
1326*35238bceSAndroid Build Coastguard Worker 
1327*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.", true, false, MACRO_BLOCK({
1328*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1329*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1330*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1331*35238bceSAndroid Build Coastguard Worker 
1332*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1333*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1334*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1335*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1336*35238bceSAndroid Build Coastguard Worker 
1337*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1338*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1339*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1340*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1341*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1342*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1343*35238bceSAndroid Build Coastguard Worker 
1344*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1345*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1346*35238bceSAndroid Build Coastguard Worker 
1347*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1348*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1349*35238bceSAndroid Build Coastguard Worker 
1350*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1351*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1352*35238bceSAndroid Build Coastguard Worker 
1353*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1354*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1355*35238bceSAndroid Build Coastguard Worker                  }),
1356*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1357*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1358*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1359*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1360*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
1361*35238bceSAndroid Build Coastguard Worker                      else
1362*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1363*35238bceSAndroid Build Coastguard Worker                  }))
1364*35238bceSAndroid Build Coastguard Worker 
1365*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.", true, false, MACRO_BLOCK({
1366*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1367*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1368*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1369*35238bceSAndroid Build Coastguard Worker 
1370*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1371*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1372*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1373*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1374*35238bceSAndroid Build Coastguard Worker 
1375*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1376*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1377*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1378*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1379*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1380*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1381*35238bceSAndroid Build Coastguard Worker 
1382*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1383*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1384*35238bceSAndroid Build Coastguard Worker 
1385*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1386*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1387*35238bceSAndroid Build Coastguard Worker 
1388*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1389*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1390*35238bceSAndroid Build Coastguard Worker 
1391*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1392*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1393*35238bceSAndroid Build Coastguard Worker                  }),
1394*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1395*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1396*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
1397*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1398*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
1399*35238bceSAndroid Build Coastguard Worker                      else
1400*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1401*35238bceSAndroid Build Coastguard Worker                  }))
1402*35238bceSAndroid Build Coastguard Worker 
1403*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_framebuffer, "Change framebuffer.", true, false, MACRO_BLOCK({
1404*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1405*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1406*35238bceSAndroid Build Coastguard Worker                      requireFramebuffers(2);
1407*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1408*35238bceSAndroid Build Coastguard Worker 
1409*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1410*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1411*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1412*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1413*35238bceSAndroid Build Coastguard Worker 
1414*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1415*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1416*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1417*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1418*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1419*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1420*35238bceSAndroid Build Coastguard Worker 
1421*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1422*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1423*35238bceSAndroid Build Coastguard Worker 
1424*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1425*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1426*35238bceSAndroid Build Coastguard Worker 
1427*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1428*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1429*35238bceSAndroid Build Coastguard Worker 
1430*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1431*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1432*35238bceSAndroid Build Coastguard Worker 
1433*35238bceSAndroid Build Coastguard Worker                      gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1434*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()");
1435*35238bceSAndroid Build Coastguard Worker                  }),
1436*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1437*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1438*35238bceSAndroid Build Coastguard Worker                          gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1439*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1440*35238bceSAndroid Build Coastguard Worker                          gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[1]);
1441*35238bceSAndroid Build Coastguard Worker                      else
1442*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1443*35238bceSAndroid Build Coastguard Worker                  }))
1444*35238bceSAndroid Build Coastguard Worker 
1445*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_color, "Change blend color.", true, false, MACRO_BLOCK({
1446*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1447*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1448*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1449*35238bceSAndroid Build Coastguard Worker 
1450*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1451*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1452*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1453*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1454*35238bceSAndroid Build Coastguard Worker 
1455*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1456*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1457*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1458*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1459*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1460*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1461*35238bceSAndroid Build Coastguard Worker 
1462*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1463*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1464*35238bceSAndroid Build Coastguard Worker 
1465*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1466*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1467*35238bceSAndroid Build Coastguard Worker 
1468*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1469*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1470*35238bceSAndroid Build Coastguard Worker 
1471*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1472*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1473*35238bceSAndroid Build Coastguard Worker 
1474*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
1475*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1476*35238bceSAndroid Build Coastguard Worker 
1477*35238bceSAndroid Build Coastguard Worker                      gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR);
1478*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()");
1479*35238bceSAndroid Build Coastguard Worker                  }),
1480*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1481*35238bceSAndroid Build Coastguard Worker                      if (stateId == 0)
1482*35238bceSAndroid Build Coastguard Worker                          gl.blendColor(0.25f, 0.25f, 0.25f, 0.25f);
1483*35238bceSAndroid Build Coastguard Worker                      else if (stateId == 1)
1484*35238bceSAndroid Build Coastguard Worker                          gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f);
1485*35238bceSAndroid Build Coastguard Worker                      else
1486*35238bceSAndroid Build Coastguard Worker                          DE_ASSERT(false);
1487*35238bceSAndroid Build Coastguard Worker                  }))
1488*35238bceSAndroid Build Coastguard Worker 
1489*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(sampler, "Change sampler binding.", true, false, MACRO_BLOCK({
1490*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1491*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1492*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1493*35238bceSAndroid Build Coastguard Worker                      requireSamplers(2);
1494*35238bceSAndroid Build Coastguard Worker 
1495*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1496*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1497*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1498*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1499*35238bceSAndroid Build Coastguard Worker 
1500*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1501*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1502*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1503*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1504*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1505*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1506*35238bceSAndroid Build Coastguard Worker 
1507*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1508*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1509*35238bceSAndroid Build Coastguard Worker 
1510*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1511*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1512*35238bceSAndroid Build Coastguard Worker 
1513*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1514*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1515*35238bceSAndroid Build Coastguard Worker 
1516*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1517*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1518*35238bceSAndroid Build Coastguard Worker 
1519*35238bceSAndroid Build Coastguard Worker                      for (int ndx = 0; ndx < 2; ndx++)
1520*35238bceSAndroid Build Coastguard Worker                      {
1521*35238bceSAndroid Build Coastguard Worker                          gl.bindSampler(0, m_samplers[ndx]);
1522*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ndx == 0 ? GL_NEAREST : GL_LINEAR);
1523*35238bceSAndroid Build Coastguard Worker                          gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ndx == 0 ? GL_LINEAR : GL_NEAREST);
1524*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "Sampler setup");
1525*35238bceSAndroid Build Coastguard Worker                      }
1526*35238bceSAndroid Build Coastguard Worker                  }),
1527*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1528*35238bceSAndroid Build Coastguard Worker                      DE_ASSERT(de::inBounds(stateId, 0, 2));
1529*35238bceSAndroid Build Coastguard Worker                      gl.bindSampler(0, m_samplers[stateId]);
1530*35238bceSAndroid Build Coastguard Worker                  }))
1531*35238bceSAndroid Build Coastguard Worker 
1532*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_vertex_array, "Change vertex array binding.", true, false, MACRO_BLOCK({
1533*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(2);
1534*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1535*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1536*35238bceSAndroid Build Coastguard Worker                      requireVertexArrays(2);
1537*35238bceSAndroid Build Coastguard Worker 
1538*35238bceSAndroid Build Coastguard Worker                      gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1539*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1540*35238bceSAndroid Build Coastguard Worker                      gl.linkProgram(m_programs[0]->getProgram());
1541*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1542*35238bceSAndroid Build Coastguard Worker 
1543*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1544*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1545*35238bceSAndroid Build Coastguard Worker 
1546*35238bceSAndroid Build Coastguard Worker                      for (int ndx = 0; ndx < 2; ndx++)
1547*35238bceSAndroid Build Coastguard Worker                      {
1548*35238bceSAndroid Build Coastguard Worker                          gl.bindVertexArray(m_vertexArrays[ndx]);
1549*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray()");
1550*35238bceSAndroid Build Coastguard Worker                          gl.enableVertexAttribArray(0);
1551*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1552*35238bceSAndroid Build Coastguard Worker                          gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[ndx]);
1553*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1554*35238bceSAndroid Build Coastguard Worker                          gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1555*35238bceSAndroid Build Coastguard Worker                          GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1556*35238bceSAndroid Build Coastguard Worker                      }
1557*35238bceSAndroid Build Coastguard Worker 
1558*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1559*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1560*35238bceSAndroid Build Coastguard Worker 
1561*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1562*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1563*35238bceSAndroid Build Coastguard Worker 
1564*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1565*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1566*35238bceSAndroid Build Coastguard Worker 
1567*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1568*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1569*35238bceSAndroid Build Coastguard Worker                  }),
1570*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
1571*35238bceSAndroid Build Coastguard Worker                      DE_ASSERT(de::inRange(stateId, 0, 2));
1572*35238bceSAndroid Build Coastguard Worker                      gl.bindVertexArray(m_vertexArrays[stateId]);
1573*35238bceSAndroid Build Coastguard Worker                  }))
1574*35238bceSAndroid Build Coastguard Worker }
1575*35238bceSAndroid Build Coastguard Worker 
1576*35238bceSAndroid Build Coastguard Worker } // namespace Performance
1577*35238bceSAndroid Build Coastguard Worker } // namespace gles3
1578*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1579