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