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