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