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