xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fBooleanStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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