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 31using namespace glw; // GLint and other GL types 32using deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard; 33 34namespace deqp 35{ 36namespace gles2 37{ 38namespace Functional 39{ 40namespace BooleanStateQueryVerifiers 41{ 42 43// StateVerifier 44 45class StateVerifier : protected glu::CallLogWrapper 46{ 47public: 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; 56private: 57 const char* const m_testNamePostfix; 58}; 59 60StateVerifier::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 67StateVerifier::~StateVerifier () 68{ 69} 70 71const char* StateVerifier::getTestNamePostfix (void) const 72{ 73 return m_testNamePostfix; 74} 75 76// IsEnabledVerifier 77 78class IsEnabledVerifier : public StateVerifier 79{ 80public: 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 87IsEnabledVerifier::IsEnabledVerifier (const glw::Functions& gl, tcu::TestLog& log) 88 : StateVerifier(gl, log, "_isenabled") 89{ 90} 91 92void 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 107void 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 118void 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 126class GetBooleanVerifier : public StateVerifier 127{ 128public: 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 135GetBooleanVerifier::GetBooleanVerifier (const glw::Functions& gl, tcu::TestLog& log) 136 : StateVerifier(gl, log, "_getboolean") 137{ 138} 139 140void 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 160void 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 194void 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 206class GetIntegerVerifier : public StateVerifier 207{ 208public: 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 216GetIntegerVerifier::GetIntegerVerifier (const glw::Functions& gl, tcu::TestLog& log) 217 : StateVerifier(gl, log, "_getinteger") 218{ 219} 220 221void 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 241void 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 275void 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 287class GetFloatVerifier : public StateVerifier 288{ 289public: 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 296GetFloatVerifier::GetFloatVerifier (const glw::Functions& gl, tcu::TestLog& log) 297 : StateVerifier(gl, log, "_getfloat") 298{ 299} 300 301void 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 321void 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 355void 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 367namespace 368{ 369 370using namespace BooleanStateQueryVerifiers; 371 372class IsEnabledStateTestCase : public ApiCase 373{ 374public: 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 404private: 405 GLenum m_targetName; 406 bool m_initial; 407 StateVerifier* m_verifier; 408}; 409 410class DepthWriteMaskTestCase : public ApiCase 411{ 412public: 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 } 432private: 433 StateVerifier* m_verifier; 434}; 435 436class SampleCoverageInvertTestCase : public ApiCase 437{ 438public: 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 } 458private: 459 StateVerifier* m_verifier; 460}; 461 462class ShaderCompilerTestCase : public ApiCase 463{ 464public: 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 477private: 478 StateVerifier* m_verifier; 479}; 480 481class ColorMaskTestCase : public ApiCase 482{ 483public: 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 } 524private: 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 537BooleanStateQueryTests::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 546BooleanStateQueryTests::~BooleanStateQueryTests (void) 547{ 548 deinit(); 549} 550 551void 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 594void 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 623