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