xref: /aosp_15_r20/external/deqp/modules/gles3/functional/es3fBooleanStateQueryTests.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 Boolean State Query tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es3fBooleanStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "es3fApiCase.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuRenderTarget.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker using namespace glw; // GLint and other GL types
32*35238bceSAndroid Build Coastguard Worker using deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard;
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker namespace deqp
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker namespace gles3
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker namespace Functional
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker namespace BooleanStateQueryVerifiers
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker 
43*35238bceSAndroid Build Coastguard Worker // StateVerifier
44*35238bceSAndroid Build Coastguard Worker 
45*35238bceSAndroid Build Coastguard Worker class StateVerifier : protected glu::CallLogWrapper
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker public:
48*35238bceSAndroid Build Coastguard Worker     StateVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix);
49*35238bceSAndroid Build Coastguard Worker     virtual ~StateVerifier(); // make GCC happy
50*35238bceSAndroid Build Coastguard Worker 
51*35238bceSAndroid Build Coastguard Worker     const char *getTestNamePostfix(void) const;
52*35238bceSAndroid Build Coastguard Worker 
53*35238bceSAndroid Build Coastguard Worker     virtual void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference) = DE_NULL;
54*35238bceSAndroid Build Coastguard Worker     virtual void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
55*35238bceSAndroid Build Coastguard Worker                                 bool reference2, bool reference3)                      = DE_NULL;
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker private:
58*35238bceSAndroid Build Coastguard Worker     const char *const m_testNamePostfix;
59*35238bceSAndroid Build Coastguard Worker };
60*35238bceSAndroid Build Coastguard Worker 
StateVerifier(const glw::Functions & gl,tcu::TestLog & log,const char * testNamePostfix)61*35238bceSAndroid Build Coastguard Worker StateVerifier::StateVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix)
62*35238bceSAndroid Build Coastguard Worker     : glu::CallLogWrapper(gl, log)
63*35238bceSAndroid Build Coastguard Worker     , m_testNamePostfix(testNamePostfix)
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker     enableLogging(true);
66*35238bceSAndroid Build Coastguard Worker }
67*35238bceSAndroid Build Coastguard Worker 
~StateVerifier()68*35238bceSAndroid Build Coastguard Worker StateVerifier::~StateVerifier()
69*35238bceSAndroid Build Coastguard Worker {
70*35238bceSAndroid Build Coastguard Worker }
71*35238bceSAndroid Build Coastguard Worker 
getTestNamePostfix(void) const72*35238bceSAndroid Build Coastguard Worker const char *StateVerifier::getTestNamePostfix(void) const
73*35238bceSAndroid Build Coastguard Worker {
74*35238bceSAndroid Build Coastguard Worker     return m_testNamePostfix;
75*35238bceSAndroid Build Coastguard Worker }
76*35238bceSAndroid Build Coastguard Worker 
77*35238bceSAndroid Build Coastguard Worker // IsEnabledVerifier
78*35238bceSAndroid Build Coastguard Worker 
79*35238bceSAndroid Build Coastguard Worker class IsEnabledVerifier : public StateVerifier
80*35238bceSAndroid Build Coastguard Worker {
81*35238bceSAndroid Build Coastguard Worker public:
82*35238bceSAndroid Build Coastguard Worker     IsEnabledVerifier(const glw::Functions &gl, tcu::TestLog &log);
83*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
84*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
85*35238bceSAndroid Build Coastguard Worker                         bool reference3);
86*35238bceSAndroid Build Coastguard Worker };
87*35238bceSAndroid Build Coastguard Worker 
IsEnabledVerifier(const glw::Functions & gl,tcu::TestLog & log)88*35238bceSAndroid Build Coastguard Worker IsEnabledVerifier::IsEnabledVerifier(const glw::Functions &gl, tcu::TestLog &log) : StateVerifier(gl, log, "_isenabled")
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker }
91*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)92*35238bceSAndroid Build Coastguard Worker void IsEnabledVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
93*35238bceSAndroid Build Coastguard Worker {
94*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
95*35238bceSAndroid Build Coastguard Worker 
96*35238bceSAndroid Build Coastguard Worker     const GLboolean state           = glIsEnabled(name);
97*35238bceSAndroid Build Coastguard Worker     const GLboolean expectedGLState = reference ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE;
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
100*35238bceSAndroid Build Coastguard Worker     {
101*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (reference ? "GL_TRUE" : "GL_FALSE")
102*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
103*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
104*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
105*35238bceSAndroid Build Coastguard Worker     }
106*35238bceSAndroid Build Coastguard Worker }
107*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)108*35238bceSAndroid Build Coastguard Worker void IsEnabledVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
109*35238bceSAndroid Build Coastguard Worker                                        bool reference2, bool reference3)
110*35238bceSAndroid Build Coastguard Worker {
111*35238bceSAndroid Build Coastguard Worker     DE_UNREF(testCtx);
112*35238bceSAndroid Build Coastguard Worker     DE_UNREF(name);
113*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference0);
114*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference1);
115*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference2);
116*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference3);
117*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(false && "not supported");
118*35238bceSAndroid Build Coastguard Worker }
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker // GetBooleanVerifier
121*35238bceSAndroid Build Coastguard Worker 
122*35238bceSAndroid Build Coastguard Worker class GetBooleanVerifier : public StateVerifier
123*35238bceSAndroid Build Coastguard Worker {
124*35238bceSAndroid Build Coastguard Worker public:
125*35238bceSAndroid Build Coastguard Worker     GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log);
126*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
127*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
128*35238bceSAndroid Build Coastguard Worker                         bool reference3);
129*35238bceSAndroid Build Coastguard Worker };
130*35238bceSAndroid Build Coastguard Worker 
GetBooleanVerifier(const glw::Functions & gl,tcu::TestLog & log)131*35238bceSAndroid Build Coastguard Worker GetBooleanVerifier::GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log)
132*35238bceSAndroid Build Coastguard Worker     : StateVerifier(gl, log, "_getboolean")
133*35238bceSAndroid Build Coastguard Worker {
134*35238bceSAndroid Build Coastguard Worker }
135*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)136*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
137*35238bceSAndroid Build Coastguard Worker {
138*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
139*35238bceSAndroid Build Coastguard Worker 
140*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLboolean> state;
141*35238bceSAndroid Build Coastguard Worker     glGetBooleanv(name, &state);
142*35238bceSAndroid Build Coastguard Worker 
143*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
144*35238bceSAndroid Build Coastguard Worker         return;
145*35238bceSAndroid Build Coastguard Worker 
146*35238bceSAndroid Build Coastguard Worker     const GLboolean expectedGLState = reference ? GL_TRUE : GL_FALSE;
147*35238bceSAndroid Build Coastguard Worker 
148*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
149*35238bceSAndroid Build Coastguard Worker     {
150*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (reference ? "GL_TRUE" : "GL_FALSE")
151*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
152*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
153*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
154*35238bceSAndroid Build Coastguard Worker     }
155*35238bceSAndroid Build Coastguard Worker }
156*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)157*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
158*35238bceSAndroid Build Coastguard Worker                                         bool reference2, bool reference3)
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
161*35238bceSAndroid Build Coastguard Worker 
162*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLboolean[4]> boolVector4;
163*35238bceSAndroid Build Coastguard Worker     glGetBooleanv(name, boolVector4);
164*35238bceSAndroid Build Coastguard Worker 
165*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
166*35238bceSAndroid Build Coastguard Worker         return;
167*35238bceSAndroid Build Coastguard Worker 
168*35238bceSAndroid Build Coastguard Worker     const GLboolean referenceAsGLBoolean[] = {
169*35238bceSAndroid Build Coastguard Worker         reference0 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
170*35238bceSAndroid Build Coastguard Worker         reference1 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
171*35238bceSAndroid Build Coastguard Worker         reference2 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
172*35238bceSAndroid Build Coastguard Worker         reference3 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
173*35238bceSAndroid Build Coastguard Worker     };
174*35238bceSAndroid Build Coastguard Worker 
175*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLBoolean[0] || boolVector4[1] != referenceAsGLBoolean[1] ||
176*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLBoolean[2] || boolVector4[3] != referenceAsGLBoolean[3])
177*35238bceSAndroid Build Coastguard Worker     {
178*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected "
179*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[0] ? "GL_TRUE" : "GL_FALSE") << " "
180*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[1] ? "GL_TRUE" : "GL_FALSE") << " "
181*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[2] ? "GL_TRUE" : "GL_FALSE") << " "
182*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[3] ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
183*35238bceSAndroid Build Coastguard Worker 
184*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
185*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
186*35238bceSAndroid Build Coastguard Worker     }
187*35238bceSAndroid Build Coastguard Worker }
188*35238bceSAndroid Build Coastguard Worker 
189*35238bceSAndroid Build Coastguard Worker //GetIntegerVerifier
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker class GetIntegerVerifier : public StateVerifier
192*35238bceSAndroid Build Coastguard Worker {
193*35238bceSAndroid Build Coastguard Worker public:
194*35238bceSAndroid Build Coastguard Worker     GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log);
195*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
196*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
197*35238bceSAndroid Build Coastguard Worker                         bool reference3);
198*35238bceSAndroid Build Coastguard Worker };
199*35238bceSAndroid Build Coastguard Worker 
GetIntegerVerifier(const glw::Functions & gl,tcu::TestLog & log)200*35238bceSAndroid Build Coastguard Worker GetIntegerVerifier::GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log)
201*35238bceSAndroid Build Coastguard Worker     : StateVerifier(gl, log, "_getinteger")
202*35238bceSAndroid Build Coastguard Worker {
203*35238bceSAndroid Build Coastguard Worker }
204*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)205*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
208*35238bceSAndroid Build Coastguard Worker 
209*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint> state;
210*35238bceSAndroid Build Coastguard Worker     glGetIntegerv(name, &state);
211*35238bceSAndroid Build Coastguard Worker 
212*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
213*35238bceSAndroid Build Coastguard Worker         return;
214*35238bceSAndroid Build Coastguard Worker 
215*35238bceSAndroid Build Coastguard Worker     const GLint expectedGLState = reference ? 1 : 0;
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
218*35238bceSAndroid Build Coastguard Worker     {
219*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << expectedGLState << TestLog::EndMessage;
220*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
221*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
222*35238bceSAndroid Build Coastguard Worker     }
223*35238bceSAndroid Build Coastguard Worker }
224*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)225*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
226*35238bceSAndroid Build Coastguard Worker                                         bool reference2, bool reference3)
227*35238bceSAndroid Build Coastguard Worker {
228*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint[4]> boolVector4;
231*35238bceSAndroid Build Coastguard Worker     glGetIntegerv(name, boolVector4);
232*35238bceSAndroid Build Coastguard Worker 
233*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
234*35238bceSAndroid Build Coastguard Worker         return;
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker     const GLint referenceAsGLint[] = {
237*35238bceSAndroid Build Coastguard Worker         reference0 ? 1 : 0,
238*35238bceSAndroid Build Coastguard Worker         reference1 ? 1 : 0,
239*35238bceSAndroid Build Coastguard Worker         reference2 ? 1 : 0,
240*35238bceSAndroid Build Coastguard Worker         reference3 ? 1 : 0,
241*35238bceSAndroid Build Coastguard Worker     };
242*35238bceSAndroid Build Coastguard Worker 
243*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLint[0] || boolVector4[1] != referenceAsGLint[1] ||
244*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLint[2] || boolVector4[3] != referenceAsGLint[3])
245*35238bceSAndroid Build Coastguard Worker     {
246*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsGLint[0] << " "
247*35238bceSAndroid Build Coastguard Worker                          << referenceAsGLint[1] << " " << referenceAsGLint[2] << " " << referenceAsGLint[3] << " "
248*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
249*35238bceSAndroid Build Coastguard Worker 
250*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
251*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
252*35238bceSAndroid Build Coastguard Worker     }
253*35238bceSAndroid Build Coastguard Worker }
254*35238bceSAndroid Build Coastguard Worker 
255*35238bceSAndroid Build Coastguard Worker //GetInteger64Verifier
256*35238bceSAndroid Build Coastguard Worker 
257*35238bceSAndroid Build Coastguard Worker class GetInteger64Verifier : public StateVerifier
258*35238bceSAndroid Build Coastguard Worker {
259*35238bceSAndroid Build Coastguard Worker public:
260*35238bceSAndroid Build Coastguard Worker     GetInteger64Verifier(const glw::Functions &gl, tcu::TestLog &log);
261*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
262*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
263*35238bceSAndroid Build Coastguard Worker                         bool reference3);
264*35238bceSAndroid Build Coastguard Worker };
265*35238bceSAndroid Build Coastguard Worker 
GetInteger64Verifier(const glw::Functions & gl,tcu::TestLog & log)266*35238bceSAndroid Build Coastguard Worker GetInteger64Verifier::GetInteger64Verifier(const glw::Functions &gl, tcu::TestLog &log)
267*35238bceSAndroid Build Coastguard Worker     : StateVerifier(gl, log, "_getinteger64")
268*35238bceSAndroid Build Coastguard Worker {
269*35238bceSAndroid Build Coastguard Worker }
270*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)271*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
272*35238bceSAndroid Build Coastguard Worker {
273*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
274*35238bceSAndroid Build Coastguard Worker 
275*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint64> state;
276*35238bceSAndroid Build Coastguard Worker     glGetInteger64v(name, &state);
277*35238bceSAndroid Build Coastguard Worker 
278*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
279*35238bceSAndroid Build Coastguard Worker         return;
280*35238bceSAndroid Build Coastguard Worker 
281*35238bceSAndroid Build Coastguard Worker     const GLint64 expectedGLState = reference ? 1 : 0;
282*35238bceSAndroid Build Coastguard Worker 
283*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
284*35238bceSAndroid Build Coastguard Worker     {
285*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << expectedGLState << TestLog::EndMessage;
286*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
287*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
288*35238bceSAndroid Build Coastguard Worker     }
289*35238bceSAndroid Build Coastguard Worker }
290*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)291*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
292*35238bceSAndroid Build Coastguard Worker                                           bool reference2, bool reference3)
293*35238bceSAndroid Build Coastguard Worker {
294*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
295*35238bceSAndroid Build Coastguard Worker 
296*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint64[4]> boolVector4;
297*35238bceSAndroid Build Coastguard Worker     glGetInteger64v(name, boolVector4);
298*35238bceSAndroid Build Coastguard Worker 
299*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
300*35238bceSAndroid Build Coastguard Worker         return;
301*35238bceSAndroid Build Coastguard Worker 
302*35238bceSAndroid Build Coastguard Worker     const GLint64 referenceAsGLint64[] = {
303*35238bceSAndroid Build Coastguard Worker         reference0 ? 1 : 0,
304*35238bceSAndroid Build Coastguard Worker         reference1 ? 1 : 0,
305*35238bceSAndroid Build Coastguard Worker         reference2 ? 1 : 0,
306*35238bceSAndroid Build Coastguard Worker         reference3 ? 1 : 0,
307*35238bceSAndroid Build Coastguard Worker     };
308*35238bceSAndroid Build Coastguard Worker 
309*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLint64[0] || boolVector4[1] != referenceAsGLint64[1] ||
310*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLint64[2] || boolVector4[3] != referenceAsGLint64[3])
311*35238bceSAndroid Build Coastguard Worker     {
312*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsGLint64[0] << " "
313*35238bceSAndroid Build Coastguard Worker                          << referenceAsGLint64[1] << " " << referenceAsGLint64[2] << " " << referenceAsGLint64[3] << " "
314*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
315*35238bceSAndroid Build Coastguard Worker 
316*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
317*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
318*35238bceSAndroid Build Coastguard Worker     }
319*35238bceSAndroid Build Coastguard Worker }
320*35238bceSAndroid Build Coastguard Worker 
321*35238bceSAndroid Build Coastguard Worker //GetFloatVerifier
322*35238bceSAndroid Build Coastguard Worker 
323*35238bceSAndroid Build Coastguard Worker class GetFloatVerifier : public StateVerifier
324*35238bceSAndroid Build Coastguard Worker {
325*35238bceSAndroid Build Coastguard Worker public:
326*35238bceSAndroid Build Coastguard Worker     GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log);
327*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
328*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
329*35238bceSAndroid Build Coastguard Worker                         bool reference3);
330*35238bceSAndroid Build Coastguard Worker };
331*35238bceSAndroid Build Coastguard Worker 
GetFloatVerifier(const glw::Functions & gl,tcu::TestLog & log)332*35238bceSAndroid Build Coastguard Worker GetFloatVerifier::GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log) : StateVerifier(gl, log, "_getfloat")
333*35238bceSAndroid Build Coastguard Worker {
334*35238bceSAndroid Build Coastguard Worker }
335*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)336*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
337*35238bceSAndroid Build Coastguard Worker {
338*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
339*35238bceSAndroid Build Coastguard Worker 
340*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLfloat> state;
341*35238bceSAndroid Build Coastguard Worker     glGetFloatv(name, &state);
342*35238bceSAndroid Build Coastguard Worker 
343*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
344*35238bceSAndroid Build Coastguard Worker         return;
345*35238bceSAndroid Build Coastguard Worker 
346*35238bceSAndroid Build Coastguard Worker     const GLfloat expectedGLState = reference ? 1.0f : 0.0f;
347*35238bceSAndroid Build Coastguard Worker 
348*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
349*35238bceSAndroid Build Coastguard Worker     {
350*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << expectedGLState << "; got " << state
351*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
352*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
353*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
354*35238bceSAndroid Build Coastguard Worker     }
355*35238bceSAndroid Build Coastguard Worker }
356*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)357*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
358*35238bceSAndroid Build Coastguard Worker                                       bool reference2, bool reference3)
359*35238bceSAndroid Build Coastguard Worker {
360*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
361*35238bceSAndroid Build Coastguard Worker 
362*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLfloat[4]> boolVector4;
363*35238bceSAndroid Build Coastguard Worker     glGetFloatv(name, boolVector4);
364*35238bceSAndroid Build Coastguard Worker 
365*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
366*35238bceSAndroid Build Coastguard Worker         return;
367*35238bceSAndroid Build Coastguard Worker 
368*35238bceSAndroid Build Coastguard Worker     const GLfloat referenceAsGLfloat[] = {
369*35238bceSAndroid Build Coastguard Worker         reference0 ? 1.0f : 0.0f,
370*35238bceSAndroid Build Coastguard Worker         reference1 ? 1.0f : 0.0f,
371*35238bceSAndroid Build Coastguard Worker         reference2 ? 1.0f : 0.0f,
372*35238bceSAndroid Build Coastguard Worker         reference3 ? 1.0f : 0.0f,
373*35238bceSAndroid Build Coastguard Worker     };
374*35238bceSAndroid Build Coastguard Worker 
375*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLfloat[0] || boolVector4[1] != referenceAsGLfloat[1] ||
376*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLfloat[2] || boolVector4[3] != referenceAsGLfloat[3])
377*35238bceSAndroid Build Coastguard Worker     {
378*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsGLfloat[0] << " "
379*35238bceSAndroid Build Coastguard Worker                          << referenceAsGLfloat[1] << " " << referenceAsGLfloat[2] << " " << referenceAsGLfloat[3] << " "
380*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
381*35238bceSAndroid Build Coastguard Worker 
382*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
383*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
384*35238bceSAndroid Build Coastguard Worker     }
385*35238bceSAndroid Build Coastguard Worker }
386*35238bceSAndroid Build Coastguard Worker 
387*35238bceSAndroid Build Coastguard Worker } // namespace BooleanStateQueryVerifiers
388*35238bceSAndroid Build Coastguard Worker 
389*35238bceSAndroid Build Coastguard Worker namespace
390*35238bceSAndroid Build Coastguard Worker {
391*35238bceSAndroid Build Coastguard Worker 
392*35238bceSAndroid Build Coastguard Worker using namespace BooleanStateQueryVerifiers;
393*35238bceSAndroid Build Coastguard Worker 
394*35238bceSAndroid Build Coastguard Worker static const char *transformFeedbackTestVertSource = "#version 300 es\n"
395*35238bceSAndroid Build Coastguard Worker                                                      "void main (void)\n"
396*35238bceSAndroid Build Coastguard Worker                                                      "{\n"
397*35238bceSAndroid Build Coastguard Worker                                                      "    gl_Position = vec4(0.0);\n"
398*35238bceSAndroid Build Coastguard Worker                                                      "}\n\0";
399*35238bceSAndroid Build Coastguard Worker static const char *transformFeedbackTestFragSource = "#version 300 es\n"
400*35238bceSAndroid Build Coastguard Worker                                                      "layout(location = 0) out mediump vec4 fragColor;"
401*35238bceSAndroid Build Coastguard Worker                                                      "void main (void)\n"
402*35238bceSAndroid Build Coastguard Worker                                                      "{\n"
403*35238bceSAndroid Build Coastguard Worker                                                      "    fragColor = vec4(0.0);\n"
404*35238bceSAndroid Build Coastguard Worker                                                      "}\n\0";
405*35238bceSAndroid Build Coastguard Worker 
406*35238bceSAndroid Build Coastguard Worker class IsEnabledStateTestCase : public ApiCase
407*35238bceSAndroid Build Coastguard Worker {
408*35238bceSAndroid Build Coastguard Worker public:
IsEnabledStateTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description,GLenum targetName,bool initial)409*35238bceSAndroid Build Coastguard Worker     IsEnabledStateTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description,
410*35238bceSAndroid Build Coastguard Worker                            GLenum targetName, bool initial)
411*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
412*35238bceSAndroid Build Coastguard Worker         , m_targetName(targetName)
413*35238bceSAndroid Build Coastguard Worker         , m_initial(initial)
414*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
415*35238bceSAndroid Build Coastguard Worker     {
416*35238bceSAndroid Build Coastguard Worker     }
417*35238bceSAndroid Build Coastguard Worker 
test(void)418*35238bceSAndroid Build Coastguard Worker     void test(void)
419*35238bceSAndroid Build Coastguard Worker     {
420*35238bceSAndroid Build Coastguard Worker         // check inital value
421*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, m_initial);
422*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
423*35238bceSAndroid Build Coastguard Worker 
424*35238bceSAndroid Build Coastguard Worker         // check toggle
425*35238bceSAndroid Build Coastguard Worker 
426*35238bceSAndroid Build Coastguard Worker         glEnable(m_targetName);
427*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
428*35238bceSAndroid Build Coastguard Worker 
429*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, true);
430*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
431*35238bceSAndroid Build Coastguard Worker 
432*35238bceSAndroid Build Coastguard Worker         glDisable(m_targetName);
433*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
434*35238bceSAndroid Build Coastguard Worker 
435*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, false);
436*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
437*35238bceSAndroid Build Coastguard Worker     }
438*35238bceSAndroid Build Coastguard Worker 
439*35238bceSAndroid Build Coastguard Worker private:
440*35238bceSAndroid Build Coastguard Worker     GLenum m_targetName;
441*35238bceSAndroid Build Coastguard Worker     bool m_initial;
442*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
443*35238bceSAndroid Build Coastguard Worker };
444*35238bceSAndroid Build Coastguard Worker 
445*35238bceSAndroid Build Coastguard Worker class DepthWriteMaskTestCase : public ApiCase
446*35238bceSAndroid Build Coastguard Worker {
447*35238bceSAndroid Build Coastguard Worker public:
DepthWriteMaskTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)448*35238bceSAndroid Build Coastguard Worker     DepthWriteMaskTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
449*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
450*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
451*35238bceSAndroid Build Coastguard Worker     {
452*35238bceSAndroid Build Coastguard Worker     }
453*35238bceSAndroid Build Coastguard Worker 
test(void)454*35238bceSAndroid Build Coastguard Worker     void test(void)
455*35238bceSAndroid Build Coastguard Worker     {
456*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, true);
457*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
458*35238bceSAndroid Build Coastguard Worker 
459*35238bceSAndroid Build Coastguard Worker         glDepthMask(GL_FALSE);
460*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, false);
461*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
462*35238bceSAndroid Build Coastguard Worker 
463*35238bceSAndroid Build Coastguard Worker         glDepthMask(GL_TRUE);
464*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, true);
465*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
466*35238bceSAndroid Build Coastguard Worker     }
467*35238bceSAndroid Build Coastguard Worker 
468*35238bceSAndroid Build Coastguard Worker private:
469*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
470*35238bceSAndroid Build Coastguard Worker };
471*35238bceSAndroid Build Coastguard Worker 
472*35238bceSAndroid Build Coastguard Worker class SampleCoverageInvertTestCase : public ApiCase
473*35238bceSAndroid Build Coastguard Worker {
474*35238bceSAndroid Build Coastguard Worker public:
SampleCoverageInvertTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)475*35238bceSAndroid Build Coastguard Worker     SampleCoverageInvertTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
476*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
477*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
478*35238bceSAndroid Build Coastguard Worker     {
479*35238bceSAndroid Build Coastguard Worker     }
480*35238bceSAndroid Build Coastguard Worker 
test(void)481*35238bceSAndroid Build Coastguard Worker     void test(void)
482*35238bceSAndroid Build Coastguard Worker     {
483*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, false);
484*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
485*35238bceSAndroid Build Coastguard Worker 
486*35238bceSAndroid Build Coastguard Worker         glSampleCoverage(1.0f, GL_TRUE);
487*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, true);
488*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
489*35238bceSAndroid Build Coastguard Worker 
490*35238bceSAndroid Build Coastguard Worker         glSampleCoverage(1.0f, GL_FALSE);
491*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, false);
492*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
493*35238bceSAndroid Build Coastguard Worker     }
494*35238bceSAndroid Build Coastguard Worker 
495*35238bceSAndroid Build Coastguard Worker private:
496*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
497*35238bceSAndroid Build Coastguard Worker };
498*35238bceSAndroid Build Coastguard Worker 
499*35238bceSAndroid Build Coastguard Worker class InitialBooleanTestCase : public ApiCase
500*35238bceSAndroid Build Coastguard Worker {
501*35238bceSAndroid Build Coastguard Worker public:
InitialBooleanTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description,GLenum target,bool reference)502*35238bceSAndroid Build Coastguard Worker     InitialBooleanTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description,
503*35238bceSAndroid Build Coastguard Worker                            GLenum target, bool reference)
504*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
505*35238bceSAndroid Build Coastguard Worker         , m_target(target)
506*35238bceSAndroid Build Coastguard Worker         , m_reference(reference)
507*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
508*35238bceSAndroid Build Coastguard Worker     {
509*35238bceSAndroid Build Coastguard Worker     }
510*35238bceSAndroid Build Coastguard Worker 
test(void)511*35238bceSAndroid Build Coastguard Worker     void test(void)
512*35238bceSAndroid Build Coastguard Worker     {
513*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_target, m_reference);
514*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
515*35238bceSAndroid Build Coastguard Worker     }
516*35238bceSAndroid Build Coastguard Worker 
517*35238bceSAndroid Build Coastguard Worker private:
518*35238bceSAndroid Build Coastguard Worker     GLenum m_target;
519*35238bceSAndroid Build Coastguard Worker     bool m_reference;
520*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
521*35238bceSAndroid Build Coastguard Worker };
522*35238bceSAndroid Build Coastguard Worker 
523*35238bceSAndroid Build Coastguard Worker class ColorMaskTestCase : public ApiCase
524*35238bceSAndroid Build Coastguard Worker {
525*35238bceSAndroid Build Coastguard Worker public:
ColorMaskTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)526*35238bceSAndroid Build Coastguard Worker     ColorMaskTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
527*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
528*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
529*35238bceSAndroid Build Coastguard Worker     {
530*35238bceSAndroid Build Coastguard Worker     }
test(void)531*35238bceSAndroid Build Coastguard Worker     void test(void)
532*35238bceSAndroid Build Coastguard Worker     {
533*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean4(m_testCtx, GL_COLOR_WRITEMASK, true, true, true, true);
534*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
535*35238bceSAndroid Build Coastguard Worker 
536*35238bceSAndroid Build Coastguard Worker         const struct ColorMask
537*35238bceSAndroid Build Coastguard Worker         {
538*35238bceSAndroid Build Coastguard Worker             GLboolean r, g, b, a;
539*35238bceSAndroid Build Coastguard Worker         } testMasks[] = {
540*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE},    {GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE},
541*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE},   {GL_TRUE, GL_TRUE, GL_FALSE, GL_FALSE},
542*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE},   {GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE},
543*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE},  {GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE},
544*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE},   {GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE},
545*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE},  {GL_FALSE, GL_TRUE, GL_FALSE, GL_FALSE},
546*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE},  {GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE},
547*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE}, {GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE},
548*35238bceSAndroid Build Coastguard Worker         };
549*35238bceSAndroid Build Coastguard Worker 
550*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(testMasks); ndx++)
551*35238bceSAndroid Build Coastguard Worker         {
552*35238bceSAndroid Build Coastguard Worker             glColorMask(testMasks[ndx].r, testMasks[ndx].g, testMasks[ndx].b, testMasks[ndx].a);
553*35238bceSAndroid Build Coastguard Worker             m_verifier->verifyBoolean4(m_testCtx, GL_COLOR_WRITEMASK, testMasks[ndx].r == GL_TRUE,
554*35238bceSAndroid Build Coastguard Worker                                        testMasks[ndx].g == GL_TRUE, testMasks[ndx].b == GL_TRUE,
555*35238bceSAndroid Build Coastguard Worker                                        testMasks[ndx].a == GL_TRUE);
556*35238bceSAndroid Build Coastguard Worker             expectError(GL_NO_ERROR);
557*35238bceSAndroid Build Coastguard Worker         }
558*35238bceSAndroid Build Coastguard Worker     }
559*35238bceSAndroid Build Coastguard Worker 
560*35238bceSAndroid Build Coastguard Worker private:
561*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
562*35238bceSAndroid Build Coastguard Worker };
563*35238bceSAndroid Build Coastguard Worker 
564*35238bceSAndroid Build Coastguard Worker class TransformFeedbackTestCase : public ApiCase
565*35238bceSAndroid Build Coastguard Worker {
566*35238bceSAndroid Build Coastguard Worker public:
TransformFeedbackTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)567*35238bceSAndroid Build Coastguard Worker     TransformFeedbackTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
568*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
569*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
570*35238bceSAndroid Build Coastguard Worker         , m_transformfeedback(0)
571*35238bceSAndroid Build Coastguard Worker     {
572*35238bceSAndroid Build Coastguard Worker     }
573*35238bceSAndroid Build Coastguard Worker 
test(void)574*35238bceSAndroid Build Coastguard Worker     void test(void)
575*35238bceSAndroid Build Coastguard Worker     {
576*35238bceSAndroid Build Coastguard Worker         glGenTransformFeedbacks(1, &m_transformfeedback);
577*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
578*35238bceSAndroid Build Coastguard Worker 
579*35238bceSAndroid Build Coastguard Worker         GLuint shaderVert = glCreateShader(GL_VERTEX_SHADER);
580*35238bceSAndroid Build Coastguard Worker         glShaderSource(shaderVert, 1, &transformFeedbackTestVertSource, DE_NULL);
581*35238bceSAndroid Build Coastguard Worker         glCompileShader(shaderVert);
582*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
583*35238bceSAndroid Build Coastguard Worker         GLint compileStatus;
584*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shaderVert, GL_COMPILE_STATUS, &compileStatus);
585*35238bceSAndroid Build Coastguard Worker         checkBooleans(compileStatus, GL_TRUE);
586*35238bceSAndroid Build Coastguard Worker 
587*35238bceSAndroid Build Coastguard Worker         GLuint shaderFrag = glCreateShader(GL_FRAGMENT_SHADER);
588*35238bceSAndroid Build Coastguard Worker         glShaderSource(shaderFrag, 1, &transformFeedbackTestFragSource, DE_NULL);
589*35238bceSAndroid Build Coastguard Worker         glCompileShader(shaderFrag);
590*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
591*35238bceSAndroid Build Coastguard Worker         glGetShaderiv(shaderFrag, GL_COMPILE_STATUS, &compileStatus);
592*35238bceSAndroid Build Coastguard Worker         checkBooleans(compileStatus, GL_TRUE);
593*35238bceSAndroid Build Coastguard Worker 
594*35238bceSAndroid Build Coastguard Worker         GLuint shaderProg = glCreateProgram();
595*35238bceSAndroid Build Coastguard Worker         glAttachShader(shaderProg, shaderVert);
596*35238bceSAndroid Build Coastguard Worker         glAttachShader(shaderProg, shaderFrag);
597*35238bceSAndroid Build Coastguard Worker         const char *transform_feedback_outputs = "gl_Position";
598*35238bceSAndroid Build Coastguard Worker         glTransformFeedbackVaryings(shaderProg, 1, &transform_feedback_outputs, GL_INTERLEAVED_ATTRIBS);
599*35238bceSAndroid Build Coastguard Worker         glLinkProgram(shaderProg);
600*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
601*35238bceSAndroid Build Coastguard Worker         GLint linkStatus;
602*35238bceSAndroid Build Coastguard Worker         glGetProgramiv(shaderProg, GL_LINK_STATUS, &linkStatus);
603*35238bceSAndroid Build Coastguard Worker         checkBooleans(linkStatus, GL_TRUE);
604*35238bceSAndroid Build Coastguard Worker 
605*35238bceSAndroid Build Coastguard Worker         glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, m_transformfeedback);
606*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
607*35238bceSAndroid Build Coastguard Worker 
608*35238bceSAndroid Build Coastguard Worker         GLuint feedbackBufferId;
609*35238bceSAndroid Build Coastguard Worker         glGenBuffers(1, &feedbackBufferId);
610*35238bceSAndroid Build Coastguard Worker         glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, feedbackBufferId);
611*35238bceSAndroid Build Coastguard Worker         glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, 16, NULL, GL_DYNAMIC_READ);
612*35238bceSAndroid Build Coastguard Worker         glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, feedbackBufferId);
613*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
614*35238bceSAndroid Build Coastguard Worker 
615*35238bceSAndroid Build Coastguard Worker         glUseProgram(shaderProg);
616*35238bceSAndroid Build Coastguard Worker 
617*35238bceSAndroid Build Coastguard Worker         testTransformFeedback();
618*35238bceSAndroid Build Coastguard Worker 
619*35238bceSAndroid Build Coastguard Worker         glUseProgram(0);
620*35238bceSAndroid Build Coastguard Worker         glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0);
621*35238bceSAndroid Build Coastguard Worker         glDeleteTransformFeedbacks(1, &m_transformfeedback);
622*35238bceSAndroid Build Coastguard Worker         glDeleteBuffers(1, &feedbackBufferId);
623*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shaderVert);
624*35238bceSAndroid Build Coastguard Worker         glDeleteShader(shaderFrag);
625*35238bceSAndroid Build Coastguard Worker         glDeleteProgram(shaderProg);
626*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
627*35238bceSAndroid Build Coastguard Worker     }
628*35238bceSAndroid Build Coastguard Worker 
629*35238bceSAndroid Build Coastguard Worker     virtual void testTransformFeedback(void) = DE_NULL;
630*35238bceSAndroid Build Coastguard Worker 
631*35238bceSAndroid Build Coastguard Worker protected:
632*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
633*35238bceSAndroid Build Coastguard Worker     GLuint m_transformfeedback;
634*35238bceSAndroid Build Coastguard Worker };
635*35238bceSAndroid Build Coastguard Worker 
636*35238bceSAndroid Build Coastguard Worker class TransformFeedbackBasicTestCase : public TransformFeedbackTestCase
637*35238bceSAndroid Build Coastguard Worker {
638*35238bceSAndroid Build Coastguard Worker public:
TransformFeedbackBasicTestCase(Context & context,StateVerifier * verifier,const char * name)639*35238bceSAndroid Build Coastguard Worker     TransformFeedbackBasicTestCase(Context &context, StateVerifier *verifier, const char *name)
640*35238bceSAndroid Build Coastguard Worker         : TransformFeedbackTestCase(context, verifier, name,
641*35238bceSAndroid Build Coastguard Worker                                     "Test TRANSFORM_FEEDBACK_ACTIVE and TRANSFORM_FEEDBACK_PAUSED")
642*35238bceSAndroid Build Coastguard Worker     {
643*35238bceSAndroid Build Coastguard Worker     }
644*35238bceSAndroid Build Coastguard Worker 
testTransformFeedback(void)645*35238bceSAndroid Build Coastguard Worker     void testTransformFeedback(void)
646*35238bceSAndroid Build Coastguard Worker     {
647*35238bceSAndroid Build Coastguard Worker         glBeginTransformFeedback(GL_POINTS);
648*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
649*35238bceSAndroid Build Coastguard Worker 
650*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, true);
651*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, false);
652*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
653*35238bceSAndroid Build Coastguard Worker 
654*35238bceSAndroid Build Coastguard Worker         glPauseTransformFeedback();
655*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
656*35238bceSAndroid Build Coastguard Worker 
657*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, true);
658*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, true);
659*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
660*35238bceSAndroid Build Coastguard Worker 
661*35238bceSAndroid Build Coastguard Worker         glResumeTransformFeedback();
662*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
663*35238bceSAndroid Build Coastguard Worker 
664*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, true);
665*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, false);
666*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
667*35238bceSAndroid Build Coastguard Worker 
668*35238bceSAndroid Build Coastguard Worker         glEndTransformFeedback();
669*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
670*35238bceSAndroid Build Coastguard Worker 
671*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, false);
672*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, false);
673*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
674*35238bceSAndroid Build Coastguard Worker     }
675*35238bceSAndroid Build Coastguard Worker };
676*35238bceSAndroid Build Coastguard Worker 
677*35238bceSAndroid Build Coastguard Worker class TransformFeedbackImplicitResumeTestCase : public TransformFeedbackTestCase
678*35238bceSAndroid Build Coastguard Worker {
679*35238bceSAndroid Build Coastguard Worker public:
TransformFeedbackImplicitResumeTestCase(Context & context,StateVerifier * verifier,const char * name)680*35238bceSAndroid Build Coastguard Worker     TransformFeedbackImplicitResumeTestCase(Context &context, StateVerifier *verifier, const char *name)
681*35238bceSAndroid Build Coastguard Worker         : TransformFeedbackTestCase(context, verifier, name,
682*35238bceSAndroid Build Coastguard Worker                                     "EndTransformFeedback performs an implicit ResumeTransformFeedback.")
683*35238bceSAndroid Build Coastguard Worker     {
684*35238bceSAndroid Build Coastguard Worker     }
685*35238bceSAndroid Build Coastguard Worker 
testTransformFeedback(void)686*35238bceSAndroid Build Coastguard Worker     void testTransformFeedback(void)
687*35238bceSAndroid Build Coastguard Worker     {
688*35238bceSAndroid Build Coastguard Worker         glBeginTransformFeedback(GL_POINTS);
689*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
690*35238bceSAndroid Build Coastguard Worker 
691*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, true);
692*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, false);
693*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
694*35238bceSAndroid Build Coastguard Worker 
695*35238bceSAndroid Build Coastguard Worker         glPauseTransformFeedback();
696*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
697*35238bceSAndroid Build Coastguard Worker 
698*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, true);
699*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, true);
700*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
701*35238bceSAndroid Build Coastguard Worker 
702*35238bceSAndroid Build Coastguard Worker         glEndTransformFeedback();
703*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
704*35238bceSAndroid Build Coastguard Worker 
705*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_ACTIVE, false);
706*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_TRANSFORM_FEEDBACK_PAUSED, false);
707*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
708*35238bceSAndroid Build Coastguard Worker     }
709*35238bceSAndroid Build Coastguard Worker };
710*35238bceSAndroid Build Coastguard Worker 
711*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK)                                                 \
712*35238bceSAndroid Build Coastguard Worker     do                                                                                           \
713*35238bceSAndroid Build Coastguard Worker     {                                                                                            \
714*35238bceSAndroid Build Coastguard Worker         for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \
715*35238bceSAndroid Build Coastguard Worker         {                                                                                        \
716*35238bceSAndroid Build Coastguard Worker             StateVerifier *verifier = (VERIFIERS)[_verifierNdx];                                 \
717*35238bceSAndroid Build Coastguard Worker             CODE_BLOCK;                                                                          \
718*35238bceSAndroid Build Coastguard Worker         }                                                                                        \
719*35238bceSAndroid Build Coastguard Worker     } while (0)
720*35238bceSAndroid Build Coastguard Worker 
721*35238bceSAndroid Build Coastguard Worker } // namespace
722*35238bceSAndroid Build Coastguard Worker 
BooleanStateQueryTests(Context & context)723*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::BooleanStateQueryTests(Context &context)
724*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "boolean", "Boolean State Query tests")
725*35238bceSAndroid Build Coastguard Worker     , m_verifierIsEnabled(DE_NULL)
726*35238bceSAndroid Build Coastguard Worker     , m_verifierBoolean(DE_NULL)
727*35238bceSAndroid Build Coastguard Worker     , m_verifierInteger(DE_NULL)
728*35238bceSAndroid Build Coastguard Worker     , m_verifierInteger64(DE_NULL)
729*35238bceSAndroid Build Coastguard Worker     , m_verifierFloat(DE_NULL)
730*35238bceSAndroid Build Coastguard Worker {
731*35238bceSAndroid Build Coastguard Worker }
732*35238bceSAndroid Build Coastguard Worker 
~BooleanStateQueryTests(void)733*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::~BooleanStateQueryTests(void)
734*35238bceSAndroid Build Coastguard Worker {
735*35238bceSAndroid Build Coastguard Worker     deinit();
736*35238bceSAndroid Build Coastguard Worker }
737*35238bceSAndroid Build Coastguard Worker 
init(void)738*35238bceSAndroid Build Coastguard Worker void BooleanStateQueryTests::init(void)
739*35238bceSAndroid Build Coastguard Worker {
740*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierIsEnabled == DE_NULL);
741*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierBoolean == DE_NULL);
742*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierInteger == DE_NULL);
743*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierInteger64 == DE_NULL);
744*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierFloat == DE_NULL);
745*35238bceSAndroid Build Coastguard Worker 
746*35238bceSAndroid Build Coastguard Worker     m_verifierIsEnabled =
747*35238bceSAndroid Build Coastguard Worker         new IsEnabledVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
748*35238bceSAndroid Build Coastguard Worker     m_verifierBoolean =
749*35238bceSAndroid Build Coastguard Worker         new GetBooleanVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
750*35238bceSAndroid Build Coastguard Worker     m_verifierInteger =
751*35238bceSAndroid Build Coastguard Worker         new GetIntegerVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
752*35238bceSAndroid Build Coastguard Worker     m_verifierInteger64 =
753*35238bceSAndroid Build Coastguard Worker         new GetInteger64Verifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
754*35238bceSAndroid Build Coastguard Worker     m_verifierFloat =
755*35238bceSAndroid Build Coastguard Worker         new GetFloatVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
756*35238bceSAndroid Build Coastguard Worker 
757*35238bceSAndroid Build Coastguard Worker     StateVerifier *isEnabledVerifiers[] = {m_verifierIsEnabled, m_verifierBoolean, m_verifierInteger,
758*35238bceSAndroid Build Coastguard Worker                                            m_verifierInteger64, m_verifierFloat};
759*35238bceSAndroid Build Coastguard Worker     StateVerifier *normalVerifiers[]    = {m_verifierBoolean, m_verifierInteger, m_verifierInteger64, m_verifierFloat};
760*35238bceSAndroid Build Coastguard Worker 
761*35238bceSAndroid Build Coastguard Worker     struct StateBoolean
762*35238bceSAndroid Build Coastguard Worker     {
763*35238bceSAndroid Build Coastguard Worker         const char *name;
764*35238bceSAndroid Build Coastguard Worker         const char *description;
765*35238bceSAndroid Build Coastguard Worker         GLenum targetName;
766*35238bceSAndroid Build Coastguard Worker         bool value;
767*35238bceSAndroid Build Coastguard Worker     };
768*35238bceSAndroid Build Coastguard Worker     const StateBoolean isEnableds[] = {
769*35238bceSAndroid Build Coastguard Worker         {"primitive_restart_fixed_index", "PRIMITIVE_RESTART_FIXED_INDEX", GL_PRIMITIVE_RESTART_FIXED_INDEX, false},
770*35238bceSAndroid Build Coastguard Worker         {"rasterizer_discard", "RASTERIZER_DISCARD", GL_RASTERIZER_DISCARD, false},
771*35238bceSAndroid Build Coastguard Worker         {"cull_face", "CULL_FACE", GL_CULL_FACE, false},
772*35238bceSAndroid Build Coastguard Worker         {"polygon_offset_fill", "POLYGON_OFFSET_FILL", GL_POLYGON_OFFSET_FILL, false},
773*35238bceSAndroid Build Coastguard Worker         {"sample_alpha_to_coverage", "SAMPLE_ALPHA_TO_COVERAGE", GL_SAMPLE_ALPHA_TO_COVERAGE, false},
774*35238bceSAndroid Build Coastguard Worker         {"sample_coverage", "SAMPLE_COVERAGE", GL_SAMPLE_COVERAGE, false},
775*35238bceSAndroid Build Coastguard Worker         {"scissor_test", "SCISSOR_TEST", GL_SCISSOR_TEST, false},
776*35238bceSAndroid Build Coastguard Worker         {"stencil_test", "STENCIL_TEST", GL_STENCIL_TEST, false},
777*35238bceSAndroid Build Coastguard Worker         {"depth_test", "DEPTH_TEST", GL_DEPTH_TEST, false},
778*35238bceSAndroid Build Coastguard Worker         {"blend", "BLEND", GL_BLEND, false},
779*35238bceSAndroid Build Coastguard Worker         {"dither", "DITHER", GL_DITHER, true},
780*35238bceSAndroid Build Coastguard Worker     };
781*35238bceSAndroid Build Coastguard Worker     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
782*35238bceSAndroid Build Coastguard Worker     {
783*35238bceSAndroid Build Coastguard Worker         FOR_EACH_VERIFIER(
784*35238bceSAndroid Build Coastguard Worker             isEnabledVerifiers,
785*35238bceSAndroid Build Coastguard Worker             addChild(new IsEnabledStateTestCase(
786*35238bceSAndroid Build Coastguard Worker                 m_context, verifier, (std::string(isEnableds[testNdx].name) + verifier->getTestNamePostfix()).c_str(),
787*35238bceSAndroid Build Coastguard Worker                 isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value)));
788*35238bceSAndroid Build Coastguard Worker     }
789*35238bceSAndroid Build Coastguard Worker 
790*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new ColorMaskTestCase(
791*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
792*35238bceSAndroid Build Coastguard Worker                                            (std::string("color_writemask") + verifier->getTestNamePostfix()).c_str(),
793*35238bceSAndroid Build Coastguard Worker                                            "COLOR_WRITEMASK")));
794*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new DepthWriteMaskTestCase(
795*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
796*35238bceSAndroid Build Coastguard Worker                                            (std::string("depth_writemask") + verifier->getTestNamePostfix()).c_str(),
797*35238bceSAndroid Build Coastguard Worker                                            "DEPTH_WRITEMASK")));
798*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
799*35238bceSAndroid Build Coastguard Worker         normalVerifiers,
800*35238bceSAndroid Build Coastguard Worker         addChild(new SampleCoverageInvertTestCase(
801*35238bceSAndroid Build Coastguard Worker             m_context, verifier, (std::string("sample_coverage_invert") + verifier->getTestNamePostfix()).c_str(),
802*35238bceSAndroid Build Coastguard Worker             "SAMPLE_COVERAGE_INVERT")));
803*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new InitialBooleanTestCase(
804*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
805*35238bceSAndroid Build Coastguard Worker                                            (std::string("shader_compiler") + verifier->getTestNamePostfix()).c_str(),
806*35238bceSAndroid Build Coastguard Worker                                            "SHADER_COMPILER", GL_SHADER_COMPILER, true)));
807*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers,
808*35238bceSAndroid Build Coastguard Worker                       addChild(new InitialBooleanTestCase(
809*35238bceSAndroid Build Coastguard Worker                           m_context, verifier,
810*35238bceSAndroid Build Coastguard Worker                           (std::string("transform_feedback_active_initial") + verifier->getTestNamePostfix()).c_str(),
811*35238bceSAndroid Build Coastguard Worker                           "initial TRANSFORM_FEEDBACK_ACTIVE", GL_TRANSFORM_FEEDBACK_ACTIVE, false)));
812*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers,
813*35238bceSAndroid Build Coastguard Worker                       addChild(new InitialBooleanTestCase(
814*35238bceSAndroid Build Coastguard Worker                           m_context, verifier,
815*35238bceSAndroid Build Coastguard Worker                           (std::string("transform_feedback_paused_initial") + verifier->getTestNamePostfix()).c_str(),
816*35238bceSAndroid Build Coastguard Worker                           "initial TRANSFORM_FEEDBACK_PAUSED", GL_TRANSFORM_FEEDBACK_PAUSED, false)));
817*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
818*35238bceSAndroid Build Coastguard Worker         normalVerifiers,
819*35238bceSAndroid Build Coastguard Worker         addChild(new TransformFeedbackBasicTestCase(
820*35238bceSAndroid Build Coastguard Worker             m_context, verifier, (std::string("transform_feedback") + verifier->getTestNamePostfix()).c_str())));
821*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
822*35238bceSAndroid Build Coastguard Worker         normalVerifiers,
823*35238bceSAndroid Build Coastguard Worker         addChild(new TransformFeedbackImplicitResumeTestCase(
824*35238bceSAndroid Build Coastguard Worker             m_context, verifier,
825*35238bceSAndroid Build Coastguard Worker             (std::string("transform_feedback_implicit_resume") + verifier->getTestNamePostfix()).c_str())));
826*35238bceSAndroid Build Coastguard Worker }
827*35238bceSAndroid Build Coastguard Worker 
deinit(void)828*35238bceSAndroid Build Coastguard Worker void BooleanStateQueryTests::deinit(void)
829*35238bceSAndroid Build Coastguard Worker {
830*35238bceSAndroid Build Coastguard Worker     if (m_verifierIsEnabled)
831*35238bceSAndroid Build Coastguard Worker     {
832*35238bceSAndroid Build Coastguard Worker         delete m_verifierIsEnabled;
833*35238bceSAndroid Build Coastguard Worker         m_verifierIsEnabled = DE_NULL;
834*35238bceSAndroid Build Coastguard Worker     }
835*35238bceSAndroid Build Coastguard Worker     if (m_verifierBoolean)
836*35238bceSAndroid Build Coastguard Worker     {
837*35238bceSAndroid Build Coastguard Worker         delete m_verifierBoolean;
838*35238bceSAndroid Build Coastguard Worker         m_verifierBoolean = DE_NULL;
839*35238bceSAndroid Build Coastguard Worker     }
840*35238bceSAndroid Build Coastguard Worker     if (m_verifierInteger)
841*35238bceSAndroid Build Coastguard Worker     {
842*35238bceSAndroid Build Coastguard Worker         delete m_verifierInteger;
843*35238bceSAndroid Build Coastguard Worker         m_verifierInteger = DE_NULL;
844*35238bceSAndroid Build Coastguard Worker     }
845*35238bceSAndroid Build Coastguard Worker     if (m_verifierInteger64)
846*35238bceSAndroid Build Coastguard Worker     {
847*35238bceSAndroid Build Coastguard Worker         delete m_verifierInteger64;
848*35238bceSAndroid Build Coastguard Worker         m_verifierInteger64 = DE_NULL;
849*35238bceSAndroid Build Coastguard Worker     }
850*35238bceSAndroid Build Coastguard Worker     if (m_verifierFloat)
851*35238bceSAndroid Build Coastguard Worker     {
852*35238bceSAndroid Build Coastguard Worker         delete m_verifierFloat;
853*35238bceSAndroid Build Coastguard Worker         m_verifierFloat = DE_NULL;
854*35238bceSAndroid Build Coastguard Worker     }
855*35238bceSAndroid Build Coastguard Worker 
856*35238bceSAndroid Build Coastguard Worker     this->TestCaseGroup::deinit();
857*35238bceSAndroid Build Coastguard Worker }
858*35238bceSAndroid Build Coastguard Worker 
859*35238bceSAndroid Build Coastguard Worker } // namespace Functional
860*35238bceSAndroid Build Coastguard Worker } // namespace gles3
861*35238bceSAndroid Build Coastguard Worker } // namespace deqp
862