es31fBooleanStateQueryTests.cpp revision 5ed2b23bea6e56762a7aef8c8a086ec724517f26
1/*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 3.1 Module
3 * -------------------------------------------------
4 *
5 * Copyright 2015 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 "es31fBooleanStateQueryTests.hpp"
25#include "glsStateQueryUtil.hpp"
26#include "gluRenderContext.hpp"
27#include "gluCallLogWrapper.hpp"
28#include "tcuRenderTarget.hpp"
29#include "glwFunctions.hpp"
30#include "glwEnums.hpp"
31
32namespace deqp
33{
34namespace gles31
35{
36namespace Functional
37{
38namespace
39{
40
41using namespace gls::StateQueryUtil;
42
43static const char* getVerifierSuffix (QueryType type)
44{
45	switch (type)
46	{
47		case QUERY_ISENABLED:	return "isenabled";
48		case QUERY_BOOLEAN:		return "getboolean";
49		case QUERY_INTEGER:		return "getinteger";
50		case QUERY_INTEGER64:	return "getinteger64";
51		case QUERY_FLOAT:		return "getfloat";
52		default:
53			DE_ASSERT(DE_FALSE);
54			return DE_NULL;
55	}
56}
57
58class IsEnabledStateTestCase : public TestCase, private glu::CallLogWrapper
59{
60public:
61	IsEnabledStateTestCase (Context& context, QueryType verifier, const char* name, const char* description, glw::GLenum targetName, bool initial, glu::ApiType minimumContextVersion)
62		: TestCase				(context, name, description)
63		, glu::CallLogWrapper	(context.getRenderContext().getFunctions(), context.getTestContext().getLog())
64		, m_targetName			(targetName)
65		, m_initial				(initial)
66		, m_verifier			(verifier)
67		, m_minimumVersion		(minimumContextVersion)
68	{
69	}
70
71	IterateResult iterate (void)
72	{
73		TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version.");
74
75		tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
76		enableLogging(true);
77
78		// check inital value
79		verifyStateBoolean(result, *this, m_targetName, m_initial, m_verifier);
80
81		// check toggle
82
83		GLU_CHECK_CALL(glEnable(m_targetName));
84
85		verifyStateBoolean(result, *this, m_targetName, true, m_verifier);
86
87		GLU_CHECK_CALL(glDisable(m_targetName));
88
89		verifyStateBoolean(result, *this, m_targetName, false, m_verifier);
90
91		result.setTestContextResult(m_testCtx);
92		return STOP;
93	}
94
95private:
96	const glw::GLenum		m_targetName;
97	const bool				m_initial;
98	const QueryType			m_verifier;
99	const glu::ApiType		m_minimumVersion;
100};
101
102} // anonymous
103
104BooleanStateQueryTests::BooleanStateQueryTests (Context& context)
105	: TestCaseGroup(context, "boolean", "Boolean State Query tests")
106{
107}
108
109BooleanStateQueryTests::~BooleanStateQueryTests (void)
110{
111}
112
113void BooleanStateQueryTests::init (void)
114{
115	const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0;
116
117	static const QueryType isEnabledVerifiers[] =
118	{
119		QUERY_ISENABLED,
120		QUERY_BOOLEAN,
121		QUERY_INTEGER,
122		QUERY_INTEGER64,
123		QUERY_FLOAT
124	};
125
126#define FOR_EACH_VERIFIER(VERIFIERS, X) \
127	for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); ++verifierNdx)	\
128	{																						\
129		const char* verifierSuffix = getVerifierSuffix(VERIFIERS[verifierNdx]);				\
130		const QueryType verifier = VERIFIERS[verifierNdx];									\
131		this->addChild(X);																	\
132	}
133
134	struct StateBoolean
135	{
136		const char*		name;
137		const char*		description;
138		glw::GLenum		targetName;
139		bool			value;
140		glu::ApiType	minimumContext;
141	};
142
143	{
144		const StateBoolean isEnableds[] =
145		{
146			{ "sample_mask",				"SAMPLE_MASK",				GL_SAMPLE_MASK,					false,			glu::ApiType::es(3, 1)},
147			{ "sample_shading",				"SAMPLE_SHADING",			GL_SAMPLE_SHADING,				false,			glu::ApiType::es(3, 2)},
148			{ "debug_output",				"DEBUG_OUTPUT",				GL_DEBUG_OUTPUT,				isDebugContext,	glu::ApiType::es(3, 2)},
149			{ "debug_output_synchronous",	"DEBUG_OUTPUT_SYNCHRONOUS",	GL_DEBUG_OUTPUT_SYNCHRONOUS,	false,			glu::ApiType::es(3, 2)},
150		};
151
152		for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
153		{
154			FOR_EACH_VERIFIER(isEnabledVerifiers, new IsEnabledStateTestCase(m_context, verifier, (std::string(isEnableds[testNdx].name) + "_" + verifierSuffix).c_str(), isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value, isEnableds[testNdx].minimumContext));
155		}
156	}
157
158#undef FOR_EACH_VERIFIER
159}
160
161} // Functional
162} // gles31
163} // deqp
164