xref: /aosp_15_r20/external/deqp/modules/gles2/functional/es2fBooleanStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 2.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 "es2fBooleanStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "es2fApiCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.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 gles2
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     virtual void verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name)         = DE_NULL;
57*35238bceSAndroid Build Coastguard Worker 
58*35238bceSAndroid Build Coastguard Worker private:
59*35238bceSAndroid Build Coastguard Worker     const char *const m_testNamePostfix;
60*35238bceSAndroid Build Coastguard Worker };
61*35238bceSAndroid Build Coastguard Worker 
StateVerifier(const glw::Functions & gl,tcu::TestLog & log,const char * testNamePostfix)62*35238bceSAndroid Build Coastguard Worker StateVerifier::StateVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix)
63*35238bceSAndroid Build Coastguard Worker     : glu::CallLogWrapper(gl, log)
64*35238bceSAndroid Build Coastguard Worker     , m_testNamePostfix(testNamePostfix)
65*35238bceSAndroid Build Coastguard Worker {
66*35238bceSAndroid Build Coastguard Worker     enableLogging(true);
67*35238bceSAndroid Build Coastguard Worker }
68*35238bceSAndroid Build Coastguard Worker 
~StateVerifier()69*35238bceSAndroid Build Coastguard Worker StateVerifier::~StateVerifier()
70*35238bceSAndroid Build Coastguard Worker {
71*35238bceSAndroid Build Coastguard Worker }
72*35238bceSAndroid Build Coastguard Worker 
getTestNamePostfix(void) const73*35238bceSAndroid Build Coastguard Worker const char *StateVerifier::getTestNamePostfix(void) const
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker     return m_testNamePostfix;
76*35238bceSAndroid Build Coastguard Worker }
77*35238bceSAndroid Build Coastguard Worker 
78*35238bceSAndroid Build Coastguard Worker // IsEnabledVerifier
79*35238bceSAndroid Build Coastguard Worker 
80*35238bceSAndroid Build Coastguard Worker class IsEnabledVerifier : public StateVerifier
81*35238bceSAndroid Build Coastguard Worker {
82*35238bceSAndroid Build Coastguard Worker public:
83*35238bceSAndroid Build Coastguard Worker     IsEnabledVerifier(const glw::Functions &gl, tcu::TestLog &log);
84*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
85*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
86*35238bceSAndroid Build Coastguard Worker                         bool reference3);
87*35238bceSAndroid Build Coastguard Worker     void verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name);
88*35238bceSAndroid Build Coastguard Worker };
89*35238bceSAndroid Build Coastguard Worker 
IsEnabledVerifier(const glw::Functions & gl,tcu::TestLog & log)90*35238bceSAndroid Build Coastguard Worker IsEnabledVerifier::IsEnabledVerifier(const glw::Functions &gl, tcu::TestLog &log) : StateVerifier(gl, log, "_isenabled")
91*35238bceSAndroid Build Coastguard Worker {
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)94*35238bceSAndroid Build Coastguard Worker void IsEnabledVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
95*35238bceSAndroid Build Coastguard Worker {
96*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
97*35238bceSAndroid Build Coastguard Worker 
98*35238bceSAndroid Build Coastguard Worker     const GLboolean state           = glIsEnabled(name);
99*35238bceSAndroid Build Coastguard Worker     const GLboolean expectedGLState = reference ? (GLboolean)GL_TRUE : (GLboolean)GL_FALSE;
100*35238bceSAndroid Build Coastguard Worker 
101*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
102*35238bceSAndroid Build Coastguard Worker     {
103*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (reference ? "GL_TRUE" : "GL_FALSE")
104*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
105*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
106*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
107*35238bceSAndroid Build Coastguard Worker     }
108*35238bceSAndroid Build Coastguard Worker }
109*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)110*35238bceSAndroid Build Coastguard Worker void IsEnabledVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
111*35238bceSAndroid Build Coastguard Worker                                        bool reference2, bool reference3)
112*35238bceSAndroid Build Coastguard Worker {
113*35238bceSAndroid Build Coastguard Worker     DE_UNREF(testCtx);
114*35238bceSAndroid Build Coastguard Worker     DE_UNREF(name);
115*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference0);
116*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference1);
117*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference2);
118*35238bceSAndroid Build Coastguard Worker     DE_UNREF(reference3);
119*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(false && "not supported");
120*35238bceSAndroid Build Coastguard Worker }
121*35238bceSAndroid Build Coastguard Worker 
verifyBooleanAnything(tcu::TestContext & testCtx,GLenum name)122*35238bceSAndroid Build Coastguard Worker void IsEnabledVerifier::verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name)
123*35238bceSAndroid Build Coastguard Worker {
124*35238bceSAndroid Build Coastguard Worker     DE_UNREF(testCtx);
125*35238bceSAndroid Build Coastguard Worker     DE_UNREF(name);
126*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(false && "not supported");
127*35238bceSAndroid Build Coastguard Worker }
128*35238bceSAndroid Build Coastguard Worker // GetBooleanVerifier
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker class GetBooleanVerifier : public StateVerifier
131*35238bceSAndroid Build Coastguard Worker {
132*35238bceSAndroid Build Coastguard Worker public:
133*35238bceSAndroid Build Coastguard Worker     GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log);
134*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
135*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
136*35238bceSAndroid Build Coastguard Worker                         bool reference3);
137*35238bceSAndroid Build Coastguard Worker     void verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name);
138*35238bceSAndroid Build Coastguard Worker };
139*35238bceSAndroid Build Coastguard Worker 
GetBooleanVerifier(const glw::Functions & gl,tcu::TestLog & log)140*35238bceSAndroid Build Coastguard Worker GetBooleanVerifier::GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log)
141*35238bceSAndroid Build Coastguard Worker     : StateVerifier(gl, log, "_getboolean")
142*35238bceSAndroid Build Coastguard Worker {
143*35238bceSAndroid Build Coastguard Worker }
144*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)145*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
148*35238bceSAndroid Build Coastguard Worker 
149*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLboolean> state;
150*35238bceSAndroid Build Coastguard Worker     glGetBooleanv(name, &state);
151*35238bceSAndroid Build Coastguard Worker 
152*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
153*35238bceSAndroid Build Coastguard Worker         return;
154*35238bceSAndroid Build Coastguard Worker 
155*35238bceSAndroid Build Coastguard Worker     const GLboolean expectedGLState = reference ? GL_TRUE : GL_FALSE;
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
158*35238bceSAndroid Build Coastguard Worker     {
159*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (reference ? "GL_TRUE" : "GL_FALSE")
160*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
161*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
162*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
163*35238bceSAndroid Build Coastguard Worker     }
164*35238bceSAndroid Build Coastguard Worker }
165*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)166*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
167*35238bceSAndroid Build Coastguard Worker                                         bool reference2, bool reference3)
168*35238bceSAndroid Build Coastguard Worker {
169*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
170*35238bceSAndroid Build Coastguard Worker 
171*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLboolean[4]> boolVector4;
172*35238bceSAndroid Build Coastguard Worker     glGetBooleanv(name, boolVector4);
173*35238bceSAndroid Build Coastguard Worker 
174*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
175*35238bceSAndroid Build Coastguard Worker         return;
176*35238bceSAndroid Build Coastguard Worker 
177*35238bceSAndroid Build Coastguard Worker     const GLboolean referenceAsGLBoolean[] = {
178*35238bceSAndroid Build Coastguard Worker         reference0 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
179*35238bceSAndroid Build Coastguard Worker         reference1 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
180*35238bceSAndroid Build Coastguard Worker         reference2 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
181*35238bceSAndroid Build Coastguard Worker         reference3 ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
182*35238bceSAndroid Build Coastguard Worker     };
183*35238bceSAndroid Build Coastguard Worker 
184*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLBoolean[0] || boolVector4[1] != referenceAsGLBoolean[1] ||
185*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLBoolean[2] || boolVector4[3] != referenceAsGLBoolean[3])
186*35238bceSAndroid Build Coastguard Worker     {
187*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected "
188*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[0] ? "GL_TRUE" : "GL_FALSE") << " "
189*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[1] ? "GL_TRUE" : "GL_FALSE") << " "
190*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[2] ? "GL_TRUE" : "GL_FALSE") << " "
191*35238bceSAndroid Build Coastguard Worker                          << (referenceAsGLBoolean[3] ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
192*35238bceSAndroid Build Coastguard Worker 
193*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
194*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
195*35238bceSAndroid Build Coastguard Worker     }
196*35238bceSAndroid Build Coastguard Worker }
197*35238bceSAndroid Build Coastguard Worker 
verifyBooleanAnything(tcu::TestContext & testCtx,GLenum name)198*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name)
199*35238bceSAndroid Build Coastguard Worker {
200*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
201*35238bceSAndroid Build Coastguard Worker 
202*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLboolean> state;
203*35238bceSAndroid Build Coastguard Worker     glGetBooleanv(name, &state);
204*35238bceSAndroid Build Coastguard Worker 
205*35238bceSAndroid Build Coastguard Worker     state.verifyValidity(testCtx);
206*35238bceSAndroid Build Coastguard Worker }
207*35238bceSAndroid Build Coastguard Worker 
208*35238bceSAndroid Build Coastguard Worker //GetIntegerVerifier
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker class GetIntegerVerifier : public StateVerifier
211*35238bceSAndroid Build Coastguard Worker {
212*35238bceSAndroid Build Coastguard Worker public:
213*35238bceSAndroid Build Coastguard Worker     GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log);
214*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
215*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
216*35238bceSAndroid Build Coastguard Worker                         bool reference3);
217*35238bceSAndroid Build Coastguard Worker     void verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name);
218*35238bceSAndroid Build Coastguard Worker };
219*35238bceSAndroid Build Coastguard Worker 
GetIntegerVerifier(const glw::Functions & gl,tcu::TestLog & log)220*35238bceSAndroid Build Coastguard Worker GetIntegerVerifier::GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log)
221*35238bceSAndroid Build Coastguard Worker     : StateVerifier(gl, log, "_getinteger")
222*35238bceSAndroid Build Coastguard Worker {
223*35238bceSAndroid Build Coastguard Worker }
224*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)225*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
226*35238bceSAndroid Build Coastguard Worker {
227*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint> state;
230*35238bceSAndroid Build Coastguard Worker     glGetIntegerv(name, &state);
231*35238bceSAndroid Build Coastguard Worker 
232*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
233*35238bceSAndroid Build Coastguard Worker         return;
234*35238bceSAndroid Build Coastguard Worker 
235*35238bceSAndroid Build Coastguard Worker     const GLint expectedGLState = reference ? 1 : 0;
236*35238bceSAndroid Build Coastguard Worker 
237*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
238*35238bceSAndroid Build Coastguard Worker     {
239*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << expectedGLState << TestLog::EndMessage;
240*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
241*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
242*35238bceSAndroid Build Coastguard Worker     }
243*35238bceSAndroid Build Coastguard Worker }
244*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)245*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
246*35238bceSAndroid Build Coastguard Worker                                         bool reference2, bool reference3)
247*35238bceSAndroid Build Coastguard Worker {
248*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
249*35238bceSAndroid Build Coastguard Worker 
250*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint[4]> boolVector4;
251*35238bceSAndroid Build Coastguard Worker     glGetIntegerv(name, boolVector4);
252*35238bceSAndroid Build Coastguard Worker 
253*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
254*35238bceSAndroid Build Coastguard Worker         return;
255*35238bceSAndroid Build Coastguard Worker 
256*35238bceSAndroid Build Coastguard Worker     const GLint referenceAsGLint[] = {
257*35238bceSAndroid Build Coastguard Worker         reference0 ? 1 : 0,
258*35238bceSAndroid Build Coastguard Worker         reference1 ? 1 : 0,
259*35238bceSAndroid Build Coastguard Worker         reference2 ? 1 : 0,
260*35238bceSAndroid Build Coastguard Worker         reference3 ? 1 : 0,
261*35238bceSAndroid Build Coastguard Worker     };
262*35238bceSAndroid Build Coastguard Worker 
263*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLint[0] || boolVector4[1] != referenceAsGLint[1] ||
264*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLint[2] || boolVector4[3] != referenceAsGLint[3])
265*35238bceSAndroid Build Coastguard Worker     {
266*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsGLint[0] << " "
267*35238bceSAndroid Build Coastguard Worker                          << referenceAsGLint[1] << " " << referenceAsGLint[2] << " " << referenceAsGLint[3] << " "
268*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
271*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
272*35238bceSAndroid Build Coastguard Worker     }
273*35238bceSAndroid Build Coastguard Worker }
274*35238bceSAndroid Build Coastguard Worker 
verifyBooleanAnything(tcu::TestContext & testCtx,GLenum name)275*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name)
276*35238bceSAndroid Build Coastguard Worker {
277*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
278*35238bceSAndroid Build Coastguard Worker 
279*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLint> state;
280*35238bceSAndroid Build Coastguard Worker     glGetIntegerv(name, &state);
281*35238bceSAndroid Build Coastguard Worker 
282*35238bceSAndroid Build Coastguard Worker     state.verifyValidity(testCtx);
283*35238bceSAndroid Build Coastguard Worker }
284*35238bceSAndroid Build Coastguard Worker 
285*35238bceSAndroid Build Coastguard Worker //GetFloatVerifier
286*35238bceSAndroid Build Coastguard Worker 
287*35238bceSAndroid Build Coastguard Worker class GetFloatVerifier : public StateVerifier
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker public:
290*35238bceSAndroid Build Coastguard Worker     GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log);
291*35238bceSAndroid Build Coastguard Worker     void verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference);
292*35238bceSAndroid Build Coastguard Worker     void verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1, bool reference2,
293*35238bceSAndroid Build Coastguard Worker                         bool reference3);
294*35238bceSAndroid Build Coastguard Worker     void verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name);
295*35238bceSAndroid Build Coastguard Worker };
296*35238bceSAndroid Build Coastguard Worker 
GetFloatVerifier(const glw::Functions & gl,tcu::TestLog & log)297*35238bceSAndroid Build Coastguard Worker GetFloatVerifier::GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log) : StateVerifier(gl, log, "_getfloat")
298*35238bceSAndroid Build Coastguard Worker {
299*35238bceSAndroid Build Coastguard Worker }
300*35238bceSAndroid Build Coastguard Worker 
verifyBoolean(tcu::TestContext & testCtx,GLenum name,bool reference)301*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyBoolean(tcu::TestContext &testCtx, GLenum name, bool reference)
302*35238bceSAndroid Build Coastguard Worker {
303*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
304*35238bceSAndroid Build Coastguard Worker 
305*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLfloat> state;
306*35238bceSAndroid Build Coastguard Worker     glGetFloatv(name, &state);
307*35238bceSAndroid Build Coastguard Worker 
308*35238bceSAndroid Build Coastguard Worker     if (!state.verifyValidity(testCtx))
309*35238bceSAndroid Build Coastguard Worker         return;
310*35238bceSAndroid Build Coastguard Worker 
311*35238bceSAndroid Build Coastguard Worker     const GLfloat expectedGLState = reference ? 1.0f : 0.0f;
312*35238bceSAndroid Build Coastguard Worker 
313*35238bceSAndroid Build Coastguard Worker     if (state != expectedGLState)
314*35238bceSAndroid Build Coastguard Worker     {
315*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << expectedGLState << "; got " << state
316*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
317*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
318*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
319*35238bceSAndroid Build Coastguard Worker     }
320*35238bceSAndroid Build Coastguard Worker }
321*35238bceSAndroid Build Coastguard Worker 
verifyBoolean4(tcu::TestContext & testCtx,GLenum name,bool reference0,bool reference1,bool reference2,bool reference3)322*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyBoolean4(tcu::TestContext &testCtx, GLenum name, bool reference0, bool reference1,
323*35238bceSAndroid Build Coastguard Worker                                       bool reference2, bool reference3)
324*35238bceSAndroid Build Coastguard Worker {
325*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
326*35238bceSAndroid Build Coastguard Worker 
327*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLfloat[4]> boolVector4;
328*35238bceSAndroid Build Coastguard Worker     glGetFloatv(name, boolVector4);
329*35238bceSAndroid Build Coastguard Worker 
330*35238bceSAndroid Build Coastguard Worker     if (!boolVector4.verifyValidity(testCtx))
331*35238bceSAndroid Build Coastguard Worker         return;
332*35238bceSAndroid Build Coastguard Worker 
333*35238bceSAndroid Build Coastguard Worker     const GLfloat referenceAsGLfloat[] = {
334*35238bceSAndroid Build Coastguard Worker         reference0 ? 1.0f : 0.0f,
335*35238bceSAndroid Build Coastguard Worker         reference1 ? 1.0f : 0.0f,
336*35238bceSAndroid Build Coastguard Worker         reference2 ? 1.0f : 0.0f,
337*35238bceSAndroid Build Coastguard Worker         reference3 ? 1.0f : 0.0f,
338*35238bceSAndroid Build Coastguard Worker     };
339*35238bceSAndroid Build Coastguard Worker 
340*35238bceSAndroid Build Coastguard Worker     if (boolVector4[0] != referenceAsGLfloat[0] || boolVector4[1] != referenceAsGLfloat[1] ||
341*35238bceSAndroid Build Coastguard Worker         boolVector4[2] != referenceAsGLfloat[2] || boolVector4[3] != referenceAsGLfloat[3])
342*35238bceSAndroid Build Coastguard Worker     {
343*35238bceSAndroid Build Coastguard Worker         testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsGLfloat[0] << " "
344*35238bceSAndroid Build Coastguard Worker                          << referenceAsGLfloat[1] << " " << referenceAsGLfloat[2] << " " << referenceAsGLfloat[3] << " "
345*35238bceSAndroid Build Coastguard Worker                          << TestLog::EndMessage;
346*35238bceSAndroid Build Coastguard Worker 
347*35238bceSAndroid Build Coastguard Worker         if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
348*35238bceSAndroid Build Coastguard Worker             testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
349*35238bceSAndroid Build Coastguard Worker     }
350*35238bceSAndroid Build Coastguard Worker }
351*35238bceSAndroid Build Coastguard Worker 
verifyBooleanAnything(tcu::TestContext & testCtx,GLenum name)352*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyBooleanAnything(tcu::TestContext &testCtx, GLenum name)
353*35238bceSAndroid Build Coastguard Worker {
354*35238bceSAndroid Build Coastguard Worker     using tcu::TestLog;
355*35238bceSAndroid Build Coastguard Worker 
356*35238bceSAndroid Build Coastguard Worker     StateQueryMemoryWriteGuard<GLfloat> state;
357*35238bceSAndroid Build Coastguard Worker     glGetFloatv(name, &state);
358*35238bceSAndroid Build Coastguard Worker 
359*35238bceSAndroid Build Coastguard Worker     state.verifyValidity(testCtx);
360*35238bceSAndroid Build Coastguard Worker }
361*35238bceSAndroid Build Coastguard Worker 
362*35238bceSAndroid Build Coastguard Worker } // namespace BooleanStateQueryVerifiers
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker namespace
365*35238bceSAndroid Build Coastguard Worker {
366*35238bceSAndroid Build Coastguard Worker 
367*35238bceSAndroid Build Coastguard Worker using namespace BooleanStateQueryVerifiers;
368*35238bceSAndroid Build Coastguard Worker 
369*35238bceSAndroid Build Coastguard Worker class IsEnabledStateTestCase : public ApiCase
370*35238bceSAndroid Build Coastguard Worker {
371*35238bceSAndroid Build Coastguard Worker public:
IsEnabledStateTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description,GLenum targetName,bool initial)372*35238bceSAndroid Build Coastguard Worker     IsEnabledStateTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description,
373*35238bceSAndroid Build Coastguard Worker                            GLenum targetName, bool initial)
374*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
375*35238bceSAndroid Build Coastguard Worker         , m_targetName(targetName)
376*35238bceSAndroid Build Coastguard Worker         , m_initial(initial)
377*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
378*35238bceSAndroid Build Coastguard Worker     {
379*35238bceSAndroid Build Coastguard Worker     }
380*35238bceSAndroid Build Coastguard Worker 
test(void)381*35238bceSAndroid Build Coastguard Worker     void test(void)
382*35238bceSAndroid Build Coastguard Worker     {
383*35238bceSAndroid Build Coastguard Worker         // check inital value
384*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, m_initial);
385*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
386*35238bceSAndroid Build Coastguard Worker 
387*35238bceSAndroid Build Coastguard Worker         // check toggle
388*35238bceSAndroid Build Coastguard Worker 
389*35238bceSAndroid Build Coastguard Worker         glEnable(m_targetName);
390*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
391*35238bceSAndroid Build Coastguard Worker 
392*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, true);
393*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
394*35238bceSAndroid Build Coastguard Worker 
395*35238bceSAndroid Build Coastguard Worker         glDisable(m_targetName);
396*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
397*35238bceSAndroid Build Coastguard Worker 
398*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, m_targetName, false);
399*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
400*35238bceSAndroid Build Coastguard Worker     }
401*35238bceSAndroid Build Coastguard Worker 
402*35238bceSAndroid Build Coastguard Worker private:
403*35238bceSAndroid Build Coastguard Worker     GLenum m_targetName;
404*35238bceSAndroid Build Coastguard Worker     bool m_initial;
405*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
406*35238bceSAndroid Build Coastguard Worker };
407*35238bceSAndroid Build Coastguard Worker 
408*35238bceSAndroid Build Coastguard Worker class DepthWriteMaskTestCase : public ApiCase
409*35238bceSAndroid Build Coastguard Worker {
410*35238bceSAndroid Build Coastguard Worker public:
DepthWriteMaskTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)411*35238bceSAndroid Build Coastguard Worker     DepthWriteMaskTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
412*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
413*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
414*35238bceSAndroid Build Coastguard Worker     {
415*35238bceSAndroid Build Coastguard Worker     }
416*35238bceSAndroid Build Coastguard Worker 
test(void)417*35238bceSAndroid Build Coastguard Worker     void test(void)
418*35238bceSAndroid Build Coastguard Worker     {
419*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, true);
420*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
421*35238bceSAndroid Build Coastguard Worker 
422*35238bceSAndroid Build Coastguard Worker         glDepthMask(GL_FALSE);
423*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, false);
424*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
425*35238bceSAndroid Build Coastguard Worker 
426*35238bceSAndroid Build Coastguard Worker         glDepthMask(GL_TRUE);
427*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_DEPTH_WRITEMASK, true);
428*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
429*35238bceSAndroid Build Coastguard Worker     }
430*35238bceSAndroid Build Coastguard Worker 
431*35238bceSAndroid Build Coastguard Worker private:
432*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
433*35238bceSAndroid Build Coastguard Worker };
434*35238bceSAndroid Build Coastguard Worker 
435*35238bceSAndroid Build Coastguard Worker class SampleCoverageInvertTestCase : public ApiCase
436*35238bceSAndroid Build Coastguard Worker {
437*35238bceSAndroid Build Coastguard Worker public:
SampleCoverageInvertTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)438*35238bceSAndroid Build Coastguard Worker     SampleCoverageInvertTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
439*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
440*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
441*35238bceSAndroid Build Coastguard Worker     {
442*35238bceSAndroid Build Coastguard Worker     }
443*35238bceSAndroid Build Coastguard Worker 
test(void)444*35238bceSAndroid Build Coastguard Worker     void test(void)
445*35238bceSAndroid Build Coastguard Worker     {
446*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, false);
447*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
448*35238bceSAndroid Build Coastguard Worker 
449*35238bceSAndroid Build Coastguard Worker         glSampleCoverage(1.0f, GL_TRUE);
450*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, true);
451*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
452*35238bceSAndroid Build Coastguard Worker 
453*35238bceSAndroid Build Coastguard Worker         glSampleCoverage(1.0f, GL_FALSE);
454*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean(m_testCtx, GL_SAMPLE_COVERAGE_INVERT, false);
455*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
456*35238bceSAndroid Build Coastguard Worker     }
457*35238bceSAndroid Build Coastguard Worker 
458*35238bceSAndroid Build Coastguard Worker private:
459*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
460*35238bceSAndroid Build Coastguard Worker };
461*35238bceSAndroid Build Coastguard Worker 
462*35238bceSAndroid Build Coastguard Worker class ShaderCompilerTestCase : public ApiCase
463*35238bceSAndroid Build Coastguard Worker {
464*35238bceSAndroid Build Coastguard Worker public:
ShaderCompilerTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)465*35238bceSAndroid Build Coastguard Worker     ShaderCompilerTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
466*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
467*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
468*35238bceSAndroid Build Coastguard Worker     {
469*35238bceSAndroid Build Coastguard Worker     }
470*35238bceSAndroid Build Coastguard Worker 
test(void)471*35238bceSAndroid Build Coastguard Worker     void test(void)
472*35238bceSAndroid Build Coastguard Worker     {
473*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBooleanAnything(m_testCtx, GL_SHADER_COMPILER);
474*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
475*35238bceSAndroid Build Coastguard Worker     }
476*35238bceSAndroid Build Coastguard Worker 
477*35238bceSAndroid Build Coastguard Worker private:
478*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
479*35238bceSAndroid Build Coastguard Worker };
480*35238bceSAndroid Build Coastguard Worker 
481*35238bceSAndroid Build Coastguard Worker class ColorMaskTestCase : public ApiCase
482*35238bceSAndroid Build Coastguard Worker {
483*35238bceSAndroid Build Coastguard Worker public:
ColorMaskTestCase(Context & context,StateVerifier * verifier,const char * name,const char * description)484*35238bceSAndroid Build Coastguard Worker     ColorMaskTestCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
485*35238bceSAndroid Build Coastguard Worker         : ApiCase(context, name, description)
486*35238bceSAndroid Build Coastguard Worker         , m_verifier(verifier)
487*35238bceSAndroid Build Coastguard Worker     {
488*35238bceSAndroid Build Coastguard Worker     }
test(void)489*35238bceSAndroid Build Coastguard Worker     void test(void)
490*35238bceSAndroid Build Coastguard Worker     {
491*35238bceSAndroid Build Coastguard Worker         m_verifier->verifyBoolean4(m_testCtx, GL_COLOR_WRITEMASK, true, true, true, true);
492*35238bceSAndroid Build Coastguard Worker         expectError(GL_NO_ERROR);
493*35238bceSAndroid Build Coastguard Worker 
494*35238bceSAndroid Build Coastguard Worker         const struct ColorMask
495*35238bceSAndroid Build Coastguard Worker         {
496*35238bceSAndroid Build Coastguard Worker             GLboolean r, g, b, a;
497*35238bceSAndroid Build Coastguard Worker         } testMasks[] = {
498*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE},    {GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE},
499*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE},   {GL_TRUE, GL_TRUE, GL_FALSE, GL_FALSE},
500*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE},   {GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE},
501*35238bceSAndroid Build Coastguard Worker             {GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE},  {GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE},
502*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE},   {GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE},
503*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE},  {GL_FALSE, GL_TRUE, GL_FALSE, GL_FALSE},
504*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE},  {GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE},
505*35238bceSAndroid Build Coastguard Worker             {GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE}, {GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE},
506*35238bceSAndroid Build Coastguard Worker         };
507*35238bceSAndroid Build Coastguard Worker 
508*35238bceSAndroid Build Coastguard Worker         for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(testMasks); ndx++)
509*35238bceSAndroid Build Coastguard Worker         {
510*35238bceSAndroid Build Coastguard Worker             glColorMask(testMasks[ndx].r, testMasks[ndx].g, testMasks[ndx].b, testMasks[ndx].a);
511*35238bceSAndroid Build Coastguard Worker             m_verifier->verifyBoolean4(m_testCtx, GL_COLOR_WRITEMASK, testMasks[ndx].r == GL_TRUE,
512*35238bceSAndroid Build Coastguard Worker                                        testMasks[ndx].g == GL_TRUE, testMasks[ndx].b == GL_TRUE,
513*35238bceSAndroid Build Coastguard Worker                                        testMasks[ndx].a == GL_TRUE);
514*35238bceSAndroid Build Coastguard Worker             expectError(GL_NO_ERROR);
515*35238bceSAndroid Build Coastguard Worker         }
516*35238bceSAndroid Build Coastguard Worker     }
517*35238bceSAndroid Build Coastguard Worker 
518*35238bceSAndroid Build Coastguard Worker private:
519*35238bceSAndroid Build Coastguard Worker     StateVerifier *m_verifier;
520*35238bceSAndroid Build Coastguard Worker };
521*35238bceSAndroid Build Coastguard Worker 
522*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK)                                                 \
523*35238bceSAndroid Build Coastguard Worker     do                                                                                           \
524*35238bceSAndroid Build Coastguard Worker     {                                                                                            \
525*35238bceSAndroid Build Coastguard Worker         for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \
526*35238bceSAndroid Build Coastguard Worker         {                                                                                        \
527*35238bceSAndroid Build Coastguard Worker             StateVerifier *verifier = (VERIFIERS)[_verifierNdx];                                 \
528*35238bceSAndroid Build Coastguard Worker             CODE_BLOCK;                                                                          \
529*35238bceSAndroid Build Coastguard Worker         }                                                                                        \
530*35238bceSAndroid Build Coastguard Worker     } while (0)
531*35238bceSAndroid Build Coastguard Worker 
532*35238bceSAndroid Build Coastguard Worker } // namespace
533*35238bceSAndroid Build Coastguard Worker 
BooleanStateQueryTests(Context & context)534*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::BooleanStateQueryTests(Context &context)
535*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "boolean", "Boolean State Query tests")
536*35238bceSAndroid Build Coastguard Worker     , m_verifierIsEnabled(DE_NULL)
537*35238bceSAndroid Build Coastguard Worker     , m_verifierBoolean(DE_NULL)
538*35238bceSAndroid Build Coastguard Worker     , m_verifierInteger(DE_NULL)
539*35238bceSAndroid Build Coastguard Worker     , m_verifierFloat(DE_NULL)
540*35238bceSAndroid Build Coastguard Worker {
541*35238bceSAndroid Build Coastguard Worker }
542*35238bceSAndroid Build Coastguard Worker 
~BooleanStateQueryTests(void)543*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::~BooleanStateQueryTests(void)
544*35238bceSAndroid Build Coastguard Worker {
545*35238bceSAndroid Build Coastguard Worker     deinit();
546*35238bceSAndroid Build Coastguard Worker }
547*35238bceSAndroid Build Coastguard Worker 
init(void)548*35238bceSAndroid Build Coastguard Worker void BooleanStateQueryTests::init(void)
549*35238bceSAndroid Build Coastguard Worker {
550*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierIsEnabled == DE_NULL);
551*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierBoolean == DE_NULL);
552*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierInteger == DE_NULL);
553*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(m_verifierFloat == DE_NULL);
554*35238bceSAndroid Build Coastguard Worker 
555*35238bceSAndroid Build Coastguard Worker     m_verifierIsEnabled =
556*35238bceSAndroid Build Coastguard Worker         new IsEnabledVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
557*35238bceSAndroid Build Coastguard Worker     m_verifierBoolean =
558*35238bceSAndroid Build Coastguard Worker         new GetBooleanVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
559*35238bceSAndroid Build Coastguard Worker     m_verifierInteger =
560*35238bceSAndroid Build Coastguard Worker         new GetIntegerVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
561*35238bceSAndroid Build Coastguard Worker     m_verifierFloat =
562*35238bceSAndroid Build Coastguard Worker         new GetFloatVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
563*35238bceSAndroid Build Coastguard Worker 
564*35238bceSAndroid Build Coastguard Worker     StateVerifier *isEnabledVerifiers[] = {m_verifierIsEnabled, m_verifierBoolean, m_verifierInteger, m_verifierFloat};
565*35238bceSAndroid Build Coastguard Worker     StateVerifier *normalVerifiers[]    = {m_verifierBoolean, m_verifierInteger, m_verifierFloat};
566*35238bceSAndroid Build Coastguard Worker 
567*35238bceSAndroid Build Coastguard Worker     struct StateBoolean
568*35238bceSAndroid Build Coastguard Worker     {
569*35238bceSAndroid Build Coastguard Worker         const char *name;
570*35238bceSAndroid Build Coastguard Worker         const char *description;
571*35238bceSAndroid Build Coastguard Worker         GLenum targetName;
572*35238bceSAndroid Build Coastguard Worker         bool value;
573*35238bceSAndroid Build Coastguard Worker     };
574*35238bceSAndroid Build Coastguard Worker     const StateBoolean isEnableds[] = {
575*35238bceSAndroid Build Coastguard Worker         {"cull_face", "CULL_FACE", GL_CULL_FACE, false},
576*35238bceSAndroid Build Coastguard Worker         {"polygon_offset_fill", "POLYGON_OFFSET_FILL", GL_POLYGON_OFFSET_FILL, false},
577*35238bceSAndroid Build Coastguard Worker         {"sample_alpha_to_coverage", "SAMPLE_ALPHA_TO_COVERAGE", GL_SAMPLE_ALPHA_TO_COVERAGE, false},
578*35238bceSAndroid Build Coastguard Worker         {"sample_coverage", "SAMPLE_COVERAGE", GL_SAMPLE_COVERAGE, false},
579*35238bceSAndroid Build Coastguard Worker         {"scissor_test", "SCISSOR_TEST", GL_SCISSOR_TEST, false},
580*35238bceSAndroid Build Coastguard Worker         {"stencil_test", "STENCIL_TEST", GL_STENCIL_TEST, false},
581*35238bceSAndroid Build Coastguard Worker         {"depth_test", "DEPTH_TEST", GL_DEPTH_TEST, false},
582*35238bceSAndroid Build Coastguard Worker         {"blend", "BLEND", GL_BLEND, false},
583*35238bceSAndroid Build Coastguard Worker         {"dither", "DITHER", GL_DITHER, true},
584*35238bceSAndroid Build Coastguard Worker     };
585*35238bceSAndroid Build Coastguard Worker     for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
586*35238bceSAndroid Build Coastguard Worker         FOR_EACH_VERIFIER(
587*35238bceSAndroid Build Coastguard Worker             isEnabledVerifiers,
588*35238bceSAndroid Build Coastguard Worker             addChild(new IsEnabledStateTestCase(
589*35238bceSAndroid Build Coastguard Worker                 m_context, verifier, (std::string(isEnableds[testNdx].name) + verifier->getTestNamePostfix()).c_str(),
590*35238bceSAndroid Build Coastguard Worker                 isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value)));
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(
593*35238bceSAndroid Build Coastguard Worker         normalVerifiers,
594*35238bceSAndroid Build Coastguard Worker         addChild(new SampleCoverageInvertTestCase(
595*35238bceSAndroid Build Coastguard Worker             m_context, verifier, (std::string("sample_coverage_invert") + verifier->getTestNamePostfix()).c_str(),
596*35238bceSAndroid Build Coastguard Worker             "SAMPLE_COVERAGE_INVERT")));
597*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new ColorMaskTestCase(
598*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
599*35238bceSAndroid Build Coastguard Worker                                            (std::string("color_writemask") + verifier->getTestNamePostfix()).c_str(),
600*35238bceSAndroid Build Coastguard Worker                                            "COLOR_WRITEMASK")));
601*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new DepthWriteMaskTestCase(
602*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
603*35238bceSAndroid Build Coastguard Worker                                            (std::string("depth_writemask") + verifier->getTestNamePostfix()).c_str(),
604*35238bceSAndroid Build Coastguard Worker                                            "DEPTH_WRITEMASK")));
605*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(normalVerifiers, addChild(new ShaderCompilerTestCase(
606*35238bceSAndroid Build Coastguard Worker                                            m_context, verifier,
607*35238bceSAndroid Build Coastguard Worker                                            (std::string("shader_compiler") + verifier->getTestNamePostfix()).c_str(),
608*35238bceSAndroid Build Coastguard Worker                                            "SHADER_COMPILER")));
609*35238bceSAndroid Build Coastguard Worker }
610*35238bceSAndroid Build Coastguard Worker 
deinit(void)611*35238bceSAndroid Build Coastguard Worker void BooleanStateQueryTests::deinit(void)
612*35238bceSAndroid Build Coastguard Worker {
613*35238bceSAndroid Build Coastguard Worker     if (m_verifierIsEnabled)
614*35238bceSAndroid Build Coastguard Worker     {
615*35238bceSAndroid Build Coastguard Worker         delete m_verifierIsEnabled;
616*35238bceSAndroid Build Coastguard Worker         m_verifierIsEnabled = DE_NULL;
617*35238bceSAndroid Build Coastguard Worker     }
618*35238bceSAndroid Build Coastguard Worker     if (m_verifierBoolean)
619*35238bceSAndroid Build Coastguard Worker     {
620*35238bceSAndroid Build Coastguard Worker         delete m_verifierBoolean;
621*35238bceSAndroid Build Coastguard Worker         m_verifierBoolean = DE_NULL;
622*35238bceSAndroid Build Coastguard Worker     }
623*35238bceSAndroid Build Coastguard Worker     if (m_verifierInteger)
624*35238bceSAndroid Build Coastguard Worker     {
625*35238bceSAndroid Build Coastguard Worker         delete m_verifierInteger;
626*35238bceSAndroid Build Coastguard Worker         m_verifierInteger = DE_NULL;
627*35238bceSAndroid Build Coastguard Worker     }
628*35238bceSAndroid Build Coastguard Worker     if (m_verifierFloat)
629*35238bceSAndroid Build Coastguard Worker     {
630*35238bceSAndroid Build Coastguard Worker         delete m_verifierFloat;
631*35238bceSAndroid Build Coastguard Worker         m_verifierFloat = DE_NULL;
632*35238bceSAndroid Build Coastguard Worker     }
633*35238bceSAndroid Build Coastguard Worker 
634*35238bceSAndroid Build Coastguard Worker     this->TestCaseGroup::deinit();
635*35238bceSAndroid Build Coastguard Worker }
636*35238bceSAndroid Build Coastguard Worker 
637*35238bceSAndroid Build Coastguard Worker } // namespace Functional
638*35238bceSAndroid Build Coastguard Worker } // namespace gles2
639*35238bceSAndroid Build Coastguard Worker } // namespace deqp
640