xref: /aosp_15_r20/external/deqp/modules/gles3/performance/es3pRedundantStateChangeTests.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 Redundant state change performance tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es3pRedundantStateChangeTests.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 RedundantStateChangeCase : public gls::StateChangePerformanceCase
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker public:
51*35238bceSAndroid Build Coastguard Worker     RedundantStateChangeCase(Context &context, int drawCallCount, int triangleCount, bool drawArrays,
52*35238bceSAndroid Build Coastguard Worker                              bool useIndexBuffer, const char *name, const char *description);
53*35238bceSAndroid Build Coastguard Worker     ~RedundantStateChangeCase(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     virtual void changeState(const glw::Functions &gl) = 0;
59*35238bceSAndroid Build Coastguard Worker };
60*35238bceSAndroid Build Coastguard Worker 
RedundantStateChangeCase(Context & context,int drawCallCount,int triangleCount,bool drawArrays,bool useIndexBuffer,const char * name,const char * description)61*35238bceSAndroid Build Coastguard Worker RedundantStateChangeCase::RedundantStateChangeCase(Context &context, int drawCallCount, int triangleCount,
62*35238bceSAndroid Build Coastguard Worker                                                    bool drawArrays, bool useIndexBuffer, const char *name,
63*35238bceSAndroid Build Coastguard Worker                                                    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 
~RedundantStateChangeCase(void)73*35238bceSAndroid Build Coastguard Worker RedundantStateChangeCase::~RedundantStateChangeCase(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 RedundantStateChangeCase::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);
82*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
83*35238bceSAndroid Build Coastguard Worker     }
84*35238bceSAndroid Build Coastguard Worker }
85*35238bceSAndroid Build Coastguard Worker 
renderReference(const glw::Functions & gl)86*35238bceSAndroid Build Coastguard Worker void RedundantStateChangeCase::renderReference(const glw::Functions &gl)
87*35238bceSAndroid Build Coastguard Worker {
88*35238bceSAndroid Build Coastguard Worker     changeState(gl);
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker     for (int callNdx = 0; callNdx < m_callCount; callNdx++)
91*35238bceSAndroid Build Coastguard Worker         callDraw(gl);
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker } // namespace
95*35238bceSAndroid Build Coastguard Worker 
RedundantStateChangeTests(Context & context)96*35238bceSAndroid Build Coastguard Worker RedundantStateChangeTests::RedundantStateChangeTests(Context &context)
97*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "redundant_state_change_draw",
98*35238bceSAndroid Build Coastguard Worker                     "Test performance with redundant sate changes between rendering.")
99*35238bceSAndroid Build Coastguard Worker {
100*35238bceSAndroid Build Coastguard Worker }
101*35238bceSAndroid Build Coastguard Worker 
~RedundantStateChangeTests(void)102*35238bceSAndroid Build Coastguard Worker RedundantStateChangeTests::~RedundantStateChangeTests(void)
103*35238bceSAndroid Build Coastguard Worker {
104*35238bceSAndroid Build Coastguard Worker }
105*35238bceSAndroid Build Coastguard Worker 
106*35238bceSAndroid Build Coastguard Worker #define MACRO_BLOCK(...) __VA_ARGS__
107*35238bceSAndroid Build Coastguard Worker 
108*35238bceSAndroid Build Coastguard Worker #define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)                                     \
109*35238bceSAndroid Build Coastguard Worker     do                                                                                                                \
110*35238bceSAndroid Build Coastguard Worker     {                                                                                                                 \
111*35238bceSAndroid Build Coastguard Worker         class RedundantStateChangeCase_##NAME : public RedundantStateChangeCase                                       \
112*35238bceSAndroid Build Coastguard Worker         {                                                                                                             \
113*35238bceSAndroid Build Coastguard Worker         public:                                                                                                       \
114*35238bceSAndroid Build Coastguard Worker             RedundantStateChangeCase_##NAME(Context &context, int drawCallCount, int triangleCount, const char *name, \
115*35238bceSAndroid Build Coastguard Worker                                             const char *description)                                                  \
116*35238bceSAndroid Build Coastguard Worker                 : RedundantStateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name,  \
117*35238bceSAndroid Build Coastguard Worker                                            description)                                                               \
118*35238bceSAndroid Build Coastguard Worker             {                                                                                                         \
119*35238bceSAndroid Build Coastguard Worker             }                                                                                                         \
120*35238bceSAndroid Build Coastguard Worker             virtual void setupInitialState(const glw::Functions &gl)                                                  \
121*35238bceSAndroid Build Coastguard Worker             {                                                                                                         \
122*35238bceSAndroid Build Coastguard Worker                 INIT_FUNC                                                                                             \
123*35238bceSAndroid Build Coastguard Worker             }                                                                                                         \
124*35238bceSAndroid Build Coastguard Worker             virtual void changeState(const glw::Functions &gl)                                                        \
125*35238bceSAndroid Build Coastguard Worker             {                                                                                                         \
126*35238bceSAndroid Build Coastguard Worker                 CHANGE_FUNC                                                                                           \
127*35238bceSAndroid Build Coastguard Worker             }                                                                                                         \
128*35238bceSAndroid Build Coastguard Worker         };                                                                                                            \
129*35238bceSAndroid Build Coastguard Worker         manySmallCallsGroup->addChild(new RedundantStateChangeCase_##NAME(m_context, 1000, 2, #NAME, (DESC)));        \
130*35238bceSAndroid Build Coastguard Worker         fewBigCallsGroup->addChild(new RedundantStateChangeCase_##NAME(m_context, 10, 200, #NAME, (DESC)));           \
131*35238bceSAndroid Build Coastguard Worker     } while (0);
132*35238bceSAndroid Build Coastguard Worker 
init(void)133*35238bceSAndroid Build Coastguard Worker void RedundantStateChangeTests::init(void)
134*35238bceSAndroid Build Coastguard Worker {
135*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *const manySmallCallsGroup =
136*35238bceSAndroid Build Coastguard Worker         new tcu::TestCaseGroup(m_testCtx, "many_small_calls", "1000 calls, 2 triangles in each");
137*35238bceSAndroid Build Coastguard Worker     tcu::TestCaseGroup *const fewBigCallsGroup =
138*35238bceSAndroid Build Coastguard Worker         new tcu::TestCaseGroup(m_testCtx, "few_big_calls", "10 calls, 200 triangles in each");
139*35238bceSAndroid Build Coastguard Worker 
140*35238bceSAndroid Build Coastguard Worker     addChild(manySmallCallsGroup);
141*35238bceSAndroid Build Coastguard Worker     addChild(fewBigCallsGroup);
142*35238bceSAndroid Build Coastguard Worker 
143*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend, "Enable/Disable blending.", true, false, MACRO_BLOCK({
144*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
145*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
146*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
147*35238bceSAndroid Build Coastguard Worker 
148*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
149*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
150*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
151*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
154*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
155*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
156*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
157*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
158*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
161*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
162*35238bceSAndroid Build Coastguard Worker 
163*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
164*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
167*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
168*35238bceSAndroid Build Coastguard Worker 
169*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
170*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
171*35238bceSAndroid Build Coastguard Worker                  }),
172*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_BLEND); }))
173*35238bceSAndroid Build Coastguard Worker 
174*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_test, "Enable/Disable depth test.", true, false, MACRO_BLOCK({
175*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
176*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
177*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
178*35238bceSAndroid Build Coastguard Worker 
179*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
180*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
183*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
184*35238bceSAndroid Build Coastguard Worker 
185*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
186*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
189*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
190*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
191*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
192*35238bceSAndroid Build Coastguard Worker 
193*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
194*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
195*35238bceSAndroid Build Coastguard Worker 
196*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
197*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
198*35238bceSAndroid Build Coastguard Worker 
199*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
200*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
201*35238bceSAndroid Build Coastguard Worker 
202*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
203*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
204*35238bceSAndroid Build Coastguard Worker 
205*35238bceSAndroid Build Coastguard Worker                      gl.depthFunc(GL_LEQUAL);
206*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
207*35238bceSAndroid Build Coastguard Worker                  }),
208*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_DEPTH_TEST); }))
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.", true, false, MACRO_BLOCK({
211*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
212*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
213*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
214*35238bceSAndroid Build Coastguard Worker 
215*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
216*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
217*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
218*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
219*35238bceSAndroid Build Coastguard Worker 
220*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
221*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
222*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
223*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
224*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
225*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
226*35238bceSAndroid Build Coastguard Worker 
227*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
228*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
231*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
232*35238bceSAndroid Build Coastguard Worker 
233*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
234*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
237*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
240*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
241*35238bceSAndroid Build Coastguard Worker 
242*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
243*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
244*35238bceSAndroid Build Coastguard Worker 
245*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
246*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
247*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
248*35238bceSAndroid Build Coastguard Worker 
249*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
250*35238bceSAndroid Build Coastguard Worker                  }),
251*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_STENCIL_TEST); }))
252*35238bceSAndroid Build Coastguard Worker 
253*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.", true, false, MACRO_BLOCK({
254*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
255*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
256*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
257*35238bceSAndroid Build Coastguard Worker 
258*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
259*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
260*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
261*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
262*35238bceSAndroid Build Coastguard Worker 
263*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
264*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
265*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
266*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
267*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
268*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
271*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
272*35238bceSAndroid Build Coastguard Worker 
273*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
274*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
275*35238bceSAndroid Build Coastguard Worker 
276*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
277*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
278*35238bceSAndroid Build Coastguard Worker 
279*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
280*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
281*35238bceSAndroid Build Coastguard Worker 
282*35238bceSAndroid Build Coastguard Worker                      gl.scissor(2, 3, 12, 13);
283*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()");
284*35238bceSAndroid Build Coastguard Worker                  }),
285*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_SCISSOR_TEST); }))
286*35238bceSAndroid Build Coastguard Worker 
287*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(dither, "Enable/Disable dithering.", true, false, MACRO_BLOCK({
288*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
289*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
290*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
291*35238bceSAndroid Build Coastguard Worker 
292*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
293*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
294*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
295*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
296*35238bceSAndroid Build Coastguard Worker 
297*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
298*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
299*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
300*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
301*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
302*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
303*35238bceSAndroid Build Coastguard Worker 
304*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
305*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
306*35238bceSAndroid Build Coastguard Worker 
307*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
308*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
309*35238bceSAndroid Build Coastguard Worker 
310*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
311*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
312*35238bceSAndroid Build Coastguard Worker 
313*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
314*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
315*35238bceSAndroid Build Coastguard Worker                  }),
316*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_DITHER); }))
317*35238bceSAndroid Build Coastguard Worker 
318*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(culling, "Enable/Disable culling.", true, false, MACRO_BLOCK({
319*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
320*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
321*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
322*35238bceSAndroid Build Coastguard Worker 
323*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
324*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
325*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
326*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
327*35238bceSAndroid Build Coastguard Worker 
328*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
329*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
330*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
331*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
332*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
333*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
334*35238bceSAndroid Build Coastguard Worker 
335*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
336*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
337*35238bceSAndroid Build Coastguard Worker 
338*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
339*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
340*35238bceSAndroid Build Coastguard Worker 
341*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
342*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
343*35238bceSAndroid Build Coastguard Worker 
344*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
345*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
346*35238bceSAndroid Build Coastguard Worker 
347*35238bceSAndroid Build Coastguard Worker                      gl.frontFace(GL_CW);
348*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()");
349*35238bceSAndroid Build Coastguard Worker 
350*35238bceSAndroid Build Coastguard Worker                      gl.cullFace(GL_FRONT);
351*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()");
352*35238bceSAndroid Build Coastguard Worker                  }),
353*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_CULL_FACE); }))
354*35238bceSAndroid Build Coastguard Worker 
355*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(rasterizer_discard, "Disable RASTERIZER_DISCARD.", true, false, MACRO_BLOCK({
356*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
357*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
358*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
359*35238bceSAndroid Build Coastguard Worker 
360*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
361*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
362*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
363*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
364*35238bceSAndroid Build Coastguard Worker 
365*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
366*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
367*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
368*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
369*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
370*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
371*35238bceSAndroid Build Coastguard Worker 
372*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
373*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
374*35238bceSAndroid Build Coastguard Worker 
375*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
376*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
377*35238bceSAndroid Build Coastguard Worker 
378*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
379*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
380*35238bceSAndroid Build Coastguard Worker 
381*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
382*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
383*35238bceSAndroid Build Coastguard Worker                  }),
384*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.disable(GL_RASTERIZER_DISCARD); }))
385*35238bceSAndroid Build Coastguard Worker 
386*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(primitive_restart_fixed_index, "Enable PRIMITIVE_RESTART_FIXED_INDEX.", true, false, MACRO_BLOCK({
387*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
388*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
389*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
390*35238bceSAndroid Build Coastguard Worker 
391*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
392*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
393*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
394*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
395*35238bceSAndroid Build Coastguard Worker 
396*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
397*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
398*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
399*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
400*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
401*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
402*35238bceSAndroid Build Coastguard Worker 
403*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
404*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
405*35238bceSAndroid Build Coastguard Worker 
406*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
407*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
408*35238bceSAndroid Build Coastguard Worker 
409*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
410*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
411*35238bceSAndroid Build Coastguard Worker 
412*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
413*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
414*35238bceSAndroid Build Coastguard Worker                  }),
415*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.enable(GL_PRIMITIVE_RESTART_FIXED_INDEX); }))
416*35238bceSAndroid Build Coastguard Worker 
417*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_func, "Change depth func.", true, false, MACRO_BLOCK({
418*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
419*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
420*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
421*35238bceSAndroid Build Coastguard Worker 
422*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
423*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
424*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
425*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
426*35238bceSAndroid Build Coastguard Worker 
427*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
428*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
429*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
430*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
431*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
432*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
433*35238bceSAndroid Build Coastguard Worker 
434*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
435*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
436*35238bceSAndroid Build Coastguard Worker 
437*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
438*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
439*35238bceSAndroid Build Coastguard Worker 
440*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
441*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
442*35238bceSAndroid Build Coastguard Worker 
443*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
444*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
445*35238bceSAndroid Build Coastguard Worker 
446*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_DEPTH_TEST);
447*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
448*35238bceSAndroid Build Coastguard Worker                  }),
449*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.depthFunc(GL_GEQUAL); }))
450*35238bceSAndroid Build Coastguard Worker 
451*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_mask, "Toggle depth mask.", true, false, MACRO_BLOCK({
452*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
453*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
454*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
455*35238bceSAndroid Build Coastguard Worker 
456*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
457*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
458*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
459*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
460*35238bceSAndroid Build Coastguard Worker 
461*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
462*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
463*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
464*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
465*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
466*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
467*35238bceSAndroid Build Coastguard Worker 
468*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
469*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
470*35238bceSAndroid Build Coastguard Worker 
471*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
472*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
473*35238bceSAndroid Build Coastguard Worker 
474*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
475*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
476*35238bceSAndroid Build Coastguard Worker 
477*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
478*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
479*35238bceSAndroid Build Coastguard Worker 
480*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_DEPTH_TEST);
481*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
482*35238bceSAndroid Build Coastguard Worker 
483*35238bceSAndroid Build Coastguard Worker                      gl.depthFunc(GL_LEQUAL);
484*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
485*35238bceSAndroid Build Coastguard Worker                  }),
486*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.depthMask(GL_FALSE); }))
487*35238bceSAndroid Build Coastguard Worker 
488*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(depth_rangef, "Change depth range.", true, false, MACRO_BLOCK({
489*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
490*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
491*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
492*35238bceSAndroid Build Coastguard Worker 
493*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
494*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
495*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
496*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
497*35238bceSAndroid Build Coastguard Worker 
498*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
499*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
500*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
501*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
502*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
503*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
504*35238bceSAndroid Build Coastguard Worker 
505*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
506*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
507*35238bceSAndroid Build Coastguard Worker 
508*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
509*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
510*35238bceSAndroid Build Coastguard Worker 
511*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
512*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
513*35238bceSAndroid Build Coastguard Worker 
514*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
515*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
516*35238bceSAndroid Build Coastguard Worker                  }),
517*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.depthRangef(0.0f, 1.0f); }))
518*35238bceSAndroid Build Coastguard Worker 
519*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_equation, "Change blend equation.", true, false, MACRO_BLOCK({
520*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
521*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
522*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
523*35238bceSAndroid Build Coastguard Worker 
524*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
525*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
526*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
527*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
528*35238bceSAndroid Build Coastguard Worker 
529*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
530*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
531*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
532*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
533*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
534*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
535*35238bceSAndroid Build Coastguard Worker 
536*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
537*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
538*35238bceSAndroid Build Coastguard Worker 
539*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
540*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
541*35238bceSAndroid Build Coastguard Worker 
542*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
543*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
544*35238bceSAndroid Build Coastguard Worker 
545*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
546*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
547*35238bceSAndroid Build Coastguard Worker 
548*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
549*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
550*35238bceSAndroid Build Coastguard Worker                  }),
551*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.blendEquation(GL_FUNC_SUBTRACT); }))
552*35238bceSAndroid Build Coastguard Worker 
553*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_func, "Change blend function.", true, false, MACRO_BLOCK({
554*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
555*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
556*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
557*35238bceSAndroid Build Coastguard Worker 
558*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
559*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
560*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
561*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
562*35238bceSAndroid Build Coastguard Worker 
563*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
564*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
565*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
566*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
567*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
568*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
569*35238bceSAndroid Build Coastguard Worker 
570*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
571*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
572*35238bceSAndroid Build Coastguard Worker 
573*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
574*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
575*35238bceSAndroid Build Coastguard Worker 
576*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
577*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
578*35238bceSAndroid Build Coastguard Worker 
579*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
580*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
581*35238bceSAndroid Build Coastguard Worker 
582*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
583*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
584*35238bceSAndroid Build Coastguard Worker                  }),
585*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }))
586*35238bceSAndroid Build Coastguard Worker 
587*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(polygon_offset, "Change polygon offset.", true, false, MACRO_BLOCK({
588*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
589*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
590*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
593*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
594*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
595*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
596*35238bceSAndroid Build Coastguard Worker 
597*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
598*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
599*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
600*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
601*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
602*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
603*35238bceSAndroid Build Coastguard Worker 
604*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
605*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
606*35238bceSAndroid Build Coastguard Worker 
607*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
608*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
609*35238bceSAndroid Build Coastguard Worker 
610*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
611*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
612*35238bceSAndroid Build Coastguard Worker 
613*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
614*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
615*35238bceSAndroid Build Coastguard Worker 
616*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_POLYGON_OFFSET_FILL);
617*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
618*35238bceSAndroid Build Coastguard Worker                  }),
619*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.polygonOffset(0.0f, 0.0f); }))
620*35238bceSAndroid Build Coastguard Worker 
621*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(sample_coverage, "Sample coverage.", true, false, MACRO_BLOCK({
622*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
623*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
624*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
625*35238bceSAndroid Build Coastguard Worker 
626*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
627*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
628*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
629*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
630*35238bceSAndroid Build Coastguard Worker 
631*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
632*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
633*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
634*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
635*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
636*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
637*35238bceSAndroid Build Coastguard Worker 
638*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
639*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
640*35238bceSAndroid Build Coastguard Worker 
641*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
642*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
643*35238bceSAndroid Build Coastguard Worker 
644*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
645*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
646*35238bceSAndroid Build Coastguard Worker 
647*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
648*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
649*35238bceSAndroid Build Coastguard Worker                  }),
650*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.sampleCoverage(0.25f, GL_TRUE); }))
651*35238bceSAndroid Build Coastguard Worker 
652*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(viewport, "Change viewport.", true, false, MACRO_BLOCK({
653*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
654*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
655*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
656*35238bceSAndroid Build Coastguard Worker 
657*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
658*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
659*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
660*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
661*35238bceSAndroid Build Coastguard Worker 
662*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
663*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
664*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
665*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
666*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
667*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
668*35238bceSAndroid Build Coastguard Worker 
669*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
670*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
671*35238bceSAndroid Build Coastguard Worker 
672*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
673*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
674*35238bceSAndroid Build Coastguard Worker 
675*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
676*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
677*35238bceSAndroid Build Coastguard Worker 
678*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
679*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
680*35238bceSAndroid Build Coastguard Worker                  }),
681*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.viewport(10, 11, 5, 6); }))
682*35238bceSAndroid Build Coastguard Worker 
683*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(scissor, "Change scissor box.", true, false, MACRO_BLOCK({
684*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
685*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
686*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
687*35238bceSAndroid Build Coastguard Worker 
688*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
689*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
690*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
691*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
692*35238bceSAndroid Build Coastguard Worker 
693*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
694*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
695*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
696*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
697*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
698*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
699*35238bceSAndroid Build Coastguard Worker 
700*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
701*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
702*35238bceSAndroid Build Coastguard Worker 
703*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
704*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
705*35238bceSAndroid Build Coastguard Worker 
706*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
707*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
708*35238bceSAndroid Build Coastguard Worker 
709*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
710*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
711*35238bceSAndroid Build Coastguard Worker 
712*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_SCISSOR_TEST);
713*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
714*35238bceSAndroid Build Coastguard Worker                  }),
715*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.scissor(17, 13, 5, 8); }))
716*35238bceSAndroid Build Coastguard Worker 
717*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(color_mask, "Change color mask.", true, false, MACRO_BLOCK({
718*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
719*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
720*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
721*35238bceSAndroid Build Coastguard Worker 
722*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
723*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
724*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
725*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
726*35238bceSAndroid Build Coastguard Worker 
727*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
728*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
729*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
730*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
731*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
732*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
733*35238bceSAndroid Build Coastguard Worker 
734*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
735*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
736*35238bceSAndroid Build Coastguard Worker 
737*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
738*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
739*35238bceSAndroid Build Coastguard Worker 
740*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
741*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
742*35238bceSAndroid Build Coastguard Worker 
743*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
744*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
745*35238bceSAndroid Build Coastguard Worker                  }),
746*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE); }))
747*35238bceSAndroid Build Coastguard Worker 
748*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(cull_face, "Change culling mode.", true, false, MACRO_BLOCK({
749*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
750*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
751*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
752*35238bceSAndroid Build Coastguard Worker 
753*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
754*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
755*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
756*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
757*35238bceSAndroid Build Coastguard Worker 
758*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
759*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
760*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
761*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
762*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
763*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
764*35238bceSAndroid Build Coastguard Worker 
765*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
766*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
767*35238bceSAndroid Build Coastguard Worker 
768*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
769*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
770*35238bceSAndroid Build Coastguard Worker 
771*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
772*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
773*35238bceSAndroid Build Coastguard Worker 
774*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
775*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
776*35238bceSAndroid Build Coastguard Worker 
777*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_CULL_FACE);
778*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
779*35238bceSAndroid Build Coastguard Worker                  }),
780*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.cullFace(GL_FRONT); }))
781*35238bceSAndroid Build Coastguard Worker 
782*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(front_face, "Change front face.", true, false, MACRO_BLOCK({
783*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
784*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
785*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
786*35238bceSAndroid Build Coastguard Worker 
787*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
788*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
789*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
790*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
791*35238bceSAndroid Build Coastguard Worker 
792*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
793*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
794*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
795*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
796*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
797*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
798*35238bceSAndroid Build Coastguard Worker 
799*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
800*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
801*35238bceSAndroid Build Coastguard Worker 
802*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
803*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
804*35238bceSAndroid Build Coastguard Worker 
805*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
806*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
807*35238bceSAndroid Build Coastguard Worker 
808*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
809*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
810*35238bceSAndroid Build Coastguard Worker 
811*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_CULL_FACE);
812*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
813*35238bceSAndroid Build Coastguard Worker                  }),
814*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.frontFace(GL_CCW); }))
815*35238bceSAndroid Build Coastguard Worker 
816*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_mask, "Change stencil mask.", true, false, MACRO_BLOCK({
817*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
818*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
819*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
820*35238bceSAndroid Build Coastguard Worker 
821*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
822*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
823*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
824*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
825*35238bceSAndroid Build Coastguard Worker 
826*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
827*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
828*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
829*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
830*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
831*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
832*35238bceSAndroid Build Coastguard Worker 
833*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
834*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
835*35238bceSAndroid Build Coastguard Worker 
836*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
837*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
838*35238bceSAndroid Build Coastguard Worker 
839*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
840*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
841*35238bceSAndroid Build Coastguard Worker 
842*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
843*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
844*35238bceSAndroid Build Coastguard Worker 
845*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
846*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
847*35238bceSAndroid Build Coastguard Worker 
848*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
849*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
850*35238bceSAndroid Build Coastguard Worker 
851*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
852*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
853*35238bceSAndroid Build Coastguard Worker 
854*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
855*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
856*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
857*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
858*35238bceSAndroid Build Coastguard Worker                  }),
859*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.stencilMask(0xDD); }))
860*35238bceSAndroid Build Coastguard Worker 
861*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_func, "Change stencil func.", true, false, MACRO_BLOCK({
862*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
863*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
864*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
865*35238bceSAndroid Build Coastguard Worker 
866*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
867*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
868*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
869*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
870*35238bceSAndroid Build Coastguard Worker 
871*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
872*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
873*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
874*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
875*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
876*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
877*35238bceSAndroid Build Coastguard Worker 
878*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
879*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
880*35238bceSAndroid Build Coastguard Worker 
881*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
882*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
883*35238bceSAndroid Build Coastguard Worker 
884*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
885*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
886*35238bceSAndroid Build Coastguard Worker 
887*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
888*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
889*35238bceSAndroid Build Coastguard Worker 
890*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
891*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
892*35238bceSAndroid Build Coastguard Worker 
893*35238bceSAndroid Build Coastguard Worker                      gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
894*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
895*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
896*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
897*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
898*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
899*35238bceSAndroid Build Coastguard Worker                  }),
900*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.stencilFunc(GL_LEQUAL, 0, 0xFF); }))
901*35238bceSAndroid Build Coastguard Worker 
902*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(stencil_op, "Change stencil op.", true, false, MACRO_BLOCK({
903*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
904*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
905*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
906*35238bceSAndroid Build Coastguard Worker 
907*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
908*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
909*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
910*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
911*35238bceSAndroid Build Coastguard Worker 
912*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
913*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
914*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
915*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
916*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
917*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
918*35238bceSAndroid Build Coastguard Worker 
919*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
920*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
921*35238bceSAndroid Build Coastguard Worker 
922*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
923*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
924*35238bceSAndroid Build Coastguard Worker 
925*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
926*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
927*35238bceSAndroid Build Coastguard Worker 
928*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
929*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
930*35238bceSAndroid Build Coastguard Worker 
931*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_STENCIL_TEST);
932*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
933*35238bceSAndroid Build Coastguard Worker 
934*35238bceSAndroid Build Coastguard Worker                      gl.stencilFunc(GL_LEQUAL, 0, 0);
935*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
936*35238bceSAndroid Build Coastguard Worker 
937*35238bceSAndroid Build Coastguard Worker                      gl.clearStencil(0);
938*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
939*35238bceSAndroid Build Coastguard Worker 
940*35238bceSAndroid Build Coastguard Worker                      gl.clear(GL_STENCIL_BUFFER_BIT);
941*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
942*35238bceSAndroid Build Coastguard Worker                  }),
943*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); }))
944*35238bceSAndroid Build Coastguard Worker 
945*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.", true, false, MACRO_BLOCK({
946*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
947*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
948*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
949*35238bceSAndroid Build Coastguard Worker 
950*35238bceSAndroid Build Coastguard Worker                      gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
951*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
952*35238bceSAndroid Build Coastguard Worker                      gl.linkProgram(m_programs[0]->getProgram());
953*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
954*35238bceSAndroid Build Coastguard Worker 
955*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
956*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
957*35238bceSAndroid Build Coastguard Worker 
958*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(0);
959*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
960*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
961*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
962*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
963*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
964*35238bceSAndroid Build Coastguard Worker 
965*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
966*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
967*35238bceSAndroid Build Coastguard Worker 
968*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
969*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
970*35238bceSAndroid Build Coastguard Worker 
971*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
972*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
973*35238bceSAndroid Build Coastguard Worker 
974*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
975*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
976*35238bceSAndroid Build Coastguard Worker                  }),
977*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({
978*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
979*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
980*35238bceSAndroid Build Coastguard Worker                  }))
981*35238bceSAndroid Build Coastguard Worker 
982*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(element_array_buffer, "Change element array buffer.", false, true, MACRO_BLOCK({
983*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
984*35238bceSAndroid Build Coastguard Worker                      requireIndexBuffers(1);
985*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
986*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
987*35238bceSAndroid Build Coastguard Worker 
988*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
989*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
990*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
991*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
992*35238bceSAndroid Build Coastguard Worker 
993*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
994*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
995*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
996*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
997*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
998*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
999*35238bceSAndroid Build Coastguard Worker 
1000*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1001*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1002*35238bceSAndroid Build Coastguard Worker 
1003*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1004*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1005*35238bceSAndroid Build Coastguard Worker 
1006*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1007*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1008*35238bceSAndroid Build Coastguard Worker 
1009*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1010*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1011*35238bceSAndroid Build Coastguard Worker 
1012*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1013*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1014*35238bceSAndroid Build Coastguard Worker                  }),
1015*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]); }))
1016*35238bceSAndroid Build Coastguard Worker 
1017*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_texture, "Change texture binding.", true, false, MACRO_BLOCK({
1018*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1019*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1020*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1021*35238bceSAndroid Build Coastguard Worker 
1022*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1023*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1024*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1025*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1026*35238bceSAndroid Build Coastguard Worker 
1027*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1028*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1029*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1030*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1031*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1032*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1033*35238bceSAndroid Build Coastguard Worker 
1034*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1035*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1036*35238bceSAndroid Build Coastguard Worker 
1037*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1038*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1039*35238bceSAndroid Build Coastguard Worker 
1040*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1041*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1042*35238bceSAndroid Build Coastguard Worker 
1043*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1044*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1045*35238bceSAndroid Build Coastguard Worker                  }),
1046*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); }))
1047*35238bceSAndroid Build Coastguard Worker 
1048*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(use_program, "Change used program.", true, false, MACRO_BLOCK({
1049*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1050*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1051*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1052*35238bceSAndroid Build Coastguard Worker 
1053*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1054*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1055*35238bceSAndroid Build Coastguard Worker 
1056*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1057*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1058*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1059*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1060*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1061*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1062*35238bceSAndroid Build Coastguard Worker 
1063*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1064*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1065*35238bceSAndroid Build Coastguard Worker 
1066*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1067*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1068*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1069*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1070*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1071*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1072*35238bceSAndroid Build Coastguard Worker 
1073*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1074*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1075*35238bceSAndroid Build Coastguard Worker                  }),
1076*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.useProgram(m_programs[0]->getProgram()); }))
1077*35238bceSAndroid Build Coastguard Worker 
1078*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.", true, false, MACRO_BLOCK({
1079*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1080*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1081*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1082*35238bceSAndroid Build Coastguard Worker 
1083*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1084*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1085*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1086*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1087*35238bceSAndroid Build Coastguard Worker 
1088*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1089*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1090*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1091*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1092*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1093*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1094*35238bceSAndroid Build Coastguard Worker 
1095*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1096*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1097*35238bceSAndroid Build Coastguard Worker 
1098*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1099*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1100*35238bceSAndroid Build Coastguard Worker 
1101*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1102*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1103*35238bceSAndroid Build Coastguard Worker 
1104*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1105*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1106*35238bceSAndroid Build Coastguard Worker                  }),
1107*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); }))
1108*35238bceSAndroid Build Coastguard Worker 
1109*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.", true, false, MACRO_BLOCK({
1110*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1111*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1112*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1113*35238bceSAndroid Build Coastguard Worker 
1114*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1115*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1116*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1117*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1118*35238bceSAndroid Build Coastguard Worker 
1119*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1120*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1121*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1122*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1123*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1124*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1125*35238bceSAndroid Build Coastguard Worker 
1126*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1127*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1128*35238bceSAndroid Build Coastguard Worker 
1129*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1130*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1131*35238bceSAndroid Build Coastguard Worker 
1132*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1133*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1134*35238bceSAndroid Build Coastguard Worker 
1135*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1136*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1137*35238bceSAndroid Build Coastguard Worker                  }),
1138*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); }))
1139*35238bceSAndroid Build Coastguard Worker 
1140*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.", true, false, MACRO_BLOCK({
1141*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1142*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1143*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1144*35238bceSAndroid Build Coastguard Worker 
1145*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1146*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1147*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1148*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1149*35238bceSAndroid Build Coastguard Worker 
1150*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1151*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1152*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1153*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1154*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1155*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1156*35238bceSAndroid Build Coastguard Worker 
1157*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1158*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1159*35238bceSAndroid Build Coastguard Worker 
1160*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1161*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1162*35238bceSAndroid Build Coastguard Worker 
1163*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1164*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1165*35238bceSAndroid Build Coastguard Worker 
1166*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1167*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1168*35238bceSAndroid Build Coastguard Worker                  }),
1169*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); }))
1170*35238bceSAndroid Build Coastguard Worker 
1171*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_framebuffer, "Change framebuffer.", true, false, MACRO_BLOCK({
1172*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1173*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1174*35238bceSAndroid Build Coastguard Worker                      requireFramebuffers(1);
1175*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1176*35238bceSAndroid Build Coastguard Worker 
1177*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1178*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1179*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1180*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1181*35238bceSAndroid Build Coastguard Worker 
1182*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1183*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1184*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1185*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1186*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1187*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1188*35238bceSAndroid Build Coastguard Worker 
1189*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1190*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1191*35238bceSAndroid Build Coastguard Worker 
1192*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1193*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1194*35238bceSAndroid Build Coastguard Worker 
1195*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1196*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1197*35238bceSAndroid Build Coastguard Worker 
1198*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1199*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1200*35238bceSAndroid Build Coastguard Worker 
1201*35238bceSAndroid Build Coastguard Worker                      gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1202*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()");
1203*35238bceSAndroid Build Coastguard Worker                  }),
1204*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]); }))
1205*35238bceSAndroid Build Coastguard Worker 
1206*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(blend_color, "Change blend color.", true, false, MACRO_BLOCK({
1207*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1208*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1209*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1210*35238bceSAndroid Build Coastguard Worker 
1211*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1212*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1213*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1214*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1215*35238bceSAndroid Build Coastguard Worker 
1216*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1217*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1218*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1219*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1220*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1221*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1222*35238bceSAndroid Build Coastguard Worker 
1223*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1224*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1225*35238bceSAndroid Build Coastguard Worker 
1226*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1227*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1228*35238bceSAndroid Build Coastguard Worker 
1229*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1230*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1231*35238bceSAndroid Build Coastguard Worker 
1232*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1233*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1234*35238bceSAndroid Build Coastguard Worker 
1235*35238bceSAndroid Build Coastguard Worker                      gl.enable(GL_BLEND);
1236*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1237*35238bceSAndroid Build Coastguard Worker 
1238*35238bceSAndroid Build Coastguard Worker                      gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR);
1239*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()");
1240*35238bceSAndroid Build Coastguard Worker                  }),
1241*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f); }))
1242*35238bceSAndroid Build Coastguard Worker 
1243*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(sampler, "Change sampler binding.", true, false, MACRO_BLOCK({
1244*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1245*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1246*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1247*35238bceSAndroid Build Coastguard Worker                      requireSamplers(1);
1248*35238bceSAndroid Build Coastguard Worker 
1249*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1250*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1251*35238bceSAndroid Build Coastguard Worker                      GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1252*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1253*35238bceSAndroid Build Coastguard Worker 
1254*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(coordLoc);
1255*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1256*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1257*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1258*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1259*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1260*35238bceSAndroid Build Coastguard Worker 
1261*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1262*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1263*35238bceSAndroid Build Coastguard Worker 
1264*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1265*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1266*35238bceSAndroid Build Coastguard Worker 
1267*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1268*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1269*35238bceSAndroid Build Coastguard Worker 
1270*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1271*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1272*35238bceSAndroid Build Coastguard Worker 
1273*35238bceSAndroid Build Coastguard Worker                      gl.bindSampler(0, m_samplers[0]);
1274*35238bceSAndroid Build Coastguard Worker                      gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1275*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "Sampler setup");
1276*35238bceSAndroid Build Coastguard Worker                  }),
1277*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.bindSampler(0, m_samplers[0]); }))
1278*35238bceSAndroid Build Coastguard Worker 
1279*35238bceSAndroid Build Coastguard Worker     ADD_TESTCASE(bind_vertex_array, "Change vertex array binding.", true, false, MACRO_BLOCK({
1280*35238bceSAndroid Build Coastguard Worker                      requireCoordBuffers(1);
1281*35238bceSAndroid Build Coastguard Worker                      requireTextures(1);
1282*35238bceSAndroid Build Coastguard Worker                      requirePrograms(1);
1283*35238bceSAndroid Build Coastguard Worker                      requireVertexArrays(1);
1284*35238bceSAndroid Build Coastguard Worker 
1285*35238bceSAndroid Build Coastguard Worker                      gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1286*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1287*35238bceSAndroid Build Coastguard Worker                      gl.linkProgram(m_programs[0]->getProgram());
1288*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1289*35238bceSAndroid Build Coastguard Worker 
1290*35238bceSAndroid Build Coastguard Worker                      gl.useProgram(m_programs[0]->getProgram());
1291*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1292*35238bceSAndroid Build Coastguard Worker 
1293*35238bceSAndroid Build Coastguard Worker                      gl.bindVertexArray(m_vertexArrays[0]);
1294*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray()");
1295*35238bceSAndroid Build Coastguard Worker                      gl.enableVertexAttribArray(0);
1296*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1297*35238bceSAndroid Build Coastguard Worker                      gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1298*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1299*35238bceSAndroid Build Coastguard Worker                      gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1300*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1301*35238bceSAndroid Build Coastguard Worker 
1302*35238bceSAndroid Build Coastguard Worker                      GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1303*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1304*35238bceSAndroid Build Coastguard Worker 
1305*35238bceSAndroid Build Coastguard Worker                      gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1306*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1307*35238bceSAndroid Build Coastguard Worker 
1308*35238bceSAndroid Build Coastguard Worker                      gl.uniform1i(samplerLoc, 0);
1309*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1310*35238bceSAndroid Build Coastguard Worker 
1311*35238bceSAndroid Build Coastguard Worker                      gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1312*35238bceSAndroid Build Coastguard Worker                      GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1313*35238bceSAndroid Build Coastguard Worker                  }),
1314*35238bceSAndroid Build Coastguard Worker                  MACRO_BLOCK({ gl.bindVertexArray(m_vertexArrays[0]); }))
1315*35238bceSAndroid Build Coastguard Worker }
1316*35238bceSAndroid Build Coastguard Worker 
1317*35238bceSAndroid Build Coastguard Worker } // namespace Performance
1318*35238bceSAndroid Build Coastguard Worker } // namespace gles3
1319*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1320