1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.1 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2015 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Boolean State Query tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es31fBooleanStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluCallLogWrapper.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuRenderTarget.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
31*35238bceSAndroid Build Coastguard Worker
32*35238bceSAndroid Build Coastguard Worker namespace deqp
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker namespace gles31
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker namespace Functional
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker namespace
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker using namespace gls::StateQueryUtil;
42*35238bceSAndroid Build Coastguard Worker
getVerifierSuffix(QueryType type)43*35238bceSAndroid Build Coastguard Worker static const char *getVerifierSuffix(QueryType type)
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker switch (type)
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker case QUERY_ISENABLED:
48*35238bceSAndroid Build Coastguard Worker return "isenabled";
49*35238bceSAndroid Build Coastguard Worker case QUERY_BOOLEAN:
50*35238bceSAndroid Build Coastguard Worker return "getboolean";
51*35238bceSAndroid Build Coastguard Worker case QUERY_INTEGER:
52*35238bceSAndroid Build Coastguard Worker return "getinteger";
53*35238bceSAndroid Build Coastguard Worker case QUERY_INTEGER64:
54*35238bceSAndroid Build Coastguard Worker return "getinteger64";
55*35238bceSAndroid Build Coastguard Worker case QUERY_FLOAT:
56*35238bceSAndroid Build Coastguard Worker return "getfloat";
57*35238bceSAndroid Build Coastguard Worker default:
58*35238bceSAndroid Build Coastguard Worker DE_ASSERT(false);
59*35238bceSAndroid Build Coastguard Worker return DE_NULL;
60*35238bceSAndroid Build Coastguard Worker }
61*35238bceSAndroid Build Coastguard Worker }
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker class IsEnabledStateTestCase : public TestCase, private glu::CallLogWrapper
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker public:
IsEnabledStateTestCase(Context & context,QueryType verifier,const char * name,const char * description,glw::GLenum targetName,bool initial,glu::ApiType minimumContextVersion)66*35238bceSAndroid Build Coastguard Worker IsEnabledStateTestCase(Context &context, QueryType verifier, const char *name, const char *description,
67*35238bceSAndroid Build Coastguard Worker glw::GLenum targetName, bool initial, glu::ApiType minimumContextVersion)
68*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, description)
69*35238bceSAndroid Build Coastguard Worker , glu::CallLogWrapper(context.getRenderContext().getFunctions(), context.getTestContext().getLog())
70*35238bceSAndroid Build Coastguard Worker , m_targetName(targetName)
71*35238bceSAndroid Build Coastguard Worker , m_initial(initial)
72*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
73*35238bceSAndroid Build Coastguard Worker , m_minimumVersion(minimumContextVersion)
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker }
76*35238bceSAndroid Build Coastguard Worker
iterate(void)77*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
78*35238bceSAndroid Build Coastguard Worker {
79*35238bceSAndroid Build Coastguard Worker if (!contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5)))
80*35238bceSAndroid Build Coastguard Worker TCU_CHECK_AND_THROW(NotSupportedError,
81*35238bceSAndroid Build Coastguard Worker contextSupports(m_context.getRenderContext().getType(), m_minimumVersion),
82*35238bceSAndroid Build Coastguard Worker "This test requires a higher context version.");
83*35238bceSAndroid Build Coastguard Worker
84*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
85*35238bceSAndroid Build Coastguard Worker enableLogging(true);
86*35238bceSAndroid Build Coastguard Worker
87*35238bceSAndroid Build Coastguard Worker // check inital value
88*35238bceSAndroid Build Coastguard Worker verifyStateBoolean(result, *this, m_targetName, m_initial, m_verifier);
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Worker // check toggle
91*35238bceSAndroid Build Coastguard Worker
92*35238bceSAndroid Build Coastguard Worker GLU_CHECK_CALL(glEnable(m_targetName));
93*35238bceSAndroid Build Coastguard Worker
94*35238bceSAndroid Build Coastguard Worker verifyStateBoolean(result, *this, m_targetName, true, m_verifier);
95*35238bceSAndroid Build Coastguard Worker
96*35238bceSAndroid Build Coastguard Worker GLU_CHECK_CALL(glDisable(m_targetName));
97*35238bceSAndroid Build Coastguard Worker
98*35238bceSAndroid Build Coastguard Worker verifyStateBoolean(result, *this, m_targetName, false, m_verifier);
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
101*35238bceSAndroid Build Coastguard Worker return STOP;
102*35238bceSAndroid Build Coastguard Worker }
103*35238bceSAndroid Build Coastguard Worker
104*35238bceSAndroid Build Coastguard Worker private:
105*35238bceSAndroid Build Coastguard Worker const glw::GLenum m_targetName;
106*35238bceSAndroid Build Coastguard Worker const bool m_initial;
107*35238bceSAndroid Build Coastguard Worker const QueryType m_verifier;
108*35238bceSAndroid Build Coastguard Worker const glu::ApiType m_minimumVersion;
109*35238bceSAndroid Build Coastguard Worker };
110*35238bceSAndroid Build Coastguard Worker
111*35238bceSAndroid Build Coastguard Worker } // namespace
112*35238bceSAndroid Build Coastguard Worker
BooleanStateQueryTests(Context & context)113*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::BooleanStateQueryTests(Context &context)
114*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "boolean", "Boolean State Query tests")
115*35238bceSAndroid Build Coastguard Worker {
116*35238bceSAndroid Build Coastguard Worker }
117*35238bceSAndroid Build Coastguard Worker
~BooleanStateQueryTests(void)118*35238bceSAndroid Build Coastguard Worker BooleanStateQueryTests::~BooleanStateQueryTests(void)
119*35238bceSAndroid Build Coastguard Worker {
120*35238bceSAndroid Build Coastguard Worker }
121*35238bceSAndroid Build Coastguard Worker
init(void)122*35238bceSAndroid Build Coastguard Worker void BooleanStateQueryTests::init(void)
123*35238bceSAndroid Build Coastguard Worker {
124*35238bceSAndroid Build Coastguard Worker const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0;
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker static const QueryType isEnabledVerifiers[] = {QUERY_ISENABLED, QUERY_BOOLEAN, QUERY_INTEGER, QUERY_INTEGER64,
127*35238bceSAndroid Build Coastguard Worker QUERY_FLOAT};
128*35238bceSAndroid Build Coastguard Worker
129*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, X) \
130*35238bceSAndroid Build Coastguard Worker do \
131*35238bceSAndroid Build Coastguard Worker { \
132*35238bceSAndroid Build Coastguard Worker for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); ++verifierNdx) \
133*35238bceSAndroid Build Coastguard Worker { \
134*35238bceSAndroid Build Coastguard Worker const char *verifierSuffix = getVerifierSuffix((VERIFIERS)[verifierNdx]); \
135*35238bceSAndroid Build Coastguard Worker const QueryType verifier = (VERIFIERS)[verifierNdx]; \
136*35238bceSAndroid Build Coastguard Worker this->addChild(X); \
137*35238bceSAndroid Build Coastguard Worker } \
138*35238bceSAndroid Build Coastguard Worker } while (0)
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker struct StateBoolean
141*35238bceSAndroid Build Coastguard Worker {
142*35238bceSAndroid Build Coastguard Worker const char *name;
143*35238bceSAndroid Build Coastguard Worker const char *description;
144*35238bceSAndroid Build Coastguard Worker glw::GLenum targetName;
145*35238bceSAndroid Build Coastguard Worker bool value;
146*35238bceSAndroid Build Coastguard Worker glu::ApiType minimumContext;
147*35238bceSAndroid Build Coastguard Worker };
148*35238bceSAndroid Build Coastguard Worker
149*35238bceSAndroid Build Coastguard Worker {
150*35238bceSAndroid Build Coastguard Worker const StateBoolean isEnableds[] = {
151*35238bceSAndroid Build Coastguard Worker {"sample_mask", "SAMPLE_MASK", GL_SAMPLE_MASK, false, glu::ApiType::es(3, 1)},
152*35238bceSAndroid Build Coastguard Worker {"sample_shading", "SAMPLE_SHADING", GL_SAMPLE_SHADING, false, glu::ApiType::es(3, 2)},
153*35238bceSAndroid Build Coastguard Worker {"debug_output", "DEBUG_OUTPUT", GL_DEBUG_OUTPUT, isDebugContext, glu::ApiType::es(3, 2)},
154*35238bceSAndroid Build Coastguard Worker {"debug_output_synchronous", "DEBUG_OUTPUT_SYNCHRONOUS", GL_DEBUG_OUTPUT_SYNCHRONOUS, false,
155*35238bceSAndroid Build Coastguard Worker glu::ApiType::es(3, 2)},
156*35238bceSAndroid Build Coastguard Worker };
157*35238bceSAndroid Build Coastguard Worker
158*35238bceSAndroid Build Coastguard Worker for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++)
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(
161*35238bceSAndroid Build Coastguard Worker isEnabledVerifiers,
162*35238bceSAndroid Build Coastguard Worker new IsEnabledStateTestCase(m_context, verifier,
163*35238bceSAndroid Build Coastguard Worker (std::string(isEnableds[testNdx].name) + "_" + verifierSuffix).c_str(),
164*35238bceSAndroid Build Coastguard Worker isEnableds[testNdx].description, isEnableds[testNdx].targetName,
165*35238bceSAndroid Build Coastguard Worker isEnableds[testNdx].value, isEnableds[testNdx].minimumContext));
166*35238bceSAndroid Build Coastguard Worker }
167*35238bceSAndroid Build Coastguard Worker }
168*35238bceSAndroid Build Coastguard Worker
169*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VERIFIER
170*35238bceSAndroid Build Coastguard Worker }
171*35238bceSAndroid Build Coastguard Worker
172*35238bceSAndroid Build Coastguard Worker } // namespace Functional
173*35238bceSAndroid Build Coastguard Worker } // namespace gles31
174*35238bceSAndroid Build Coastguard Worker } // namespace deqp
175