xref: /aosp_15_r20/external/deqp/external/openglcts/modules/common/glcContextFlagsTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 /*-------------------------------------------------------------------------
2  * OpenGL Conformance Test Suite
3  * -----------------------------
4  *
5  * Copyright (c) 2017 The Khronos Group Inc.
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 glcContextFlagsTests.cpp
21  * \brief Tests veryfing glGetIntegerv(GL_CONTEXT_FLAGS).
22  */ /*-------------------------------------------------------------------*/
23 
24 #include "glcContextFlagsTests.hpp"
25 #include "gluRenderContext.hpp"
26 #include "glwEnums.hpp"
27 #include "glwFunctions.hpp"
28 #include "tcuCommandLine.hpp"
29 #include "tcuTestLog.hpp"
30 
31 namespace glcts
32 {
33 
34 class ContextFlagsCase : public tcu::TestCase
35 {
36 private:
37     glu::RenderContext *m_caseContext;
38     glu::ContextFlags m_passedFlags;
39     glw::GLint m_expectedResult;
40     glu::ApiType m_ApiType;
41 
42     void createContext();
43 
44 public:
ContextFlagsCase(tcu::TestContext & testCtx,glu::ContextFlags passedFlags,glw::GLint expectedResult,const char * name,const char * description,glu::ApiType apiType)45     ContextFlagsCase(tcu::TestContext &testCtx, glu::ContextFlags passedFlags, glw::GLint expectedResult,
46                      const char *name, const char *description, glu::ApiType apiType)
47         : tcu::TestCase(testCtx, name, description)
48         , m_caseContext(NULL)
49         , m_passedFlags(passedFlags)
50         , m_expectedResult(expectedResult)
51         , m_ApiType(apiType)
52     {
53     }
54 
55     void releaseContext(void);
56 
57     virtual void deinit(void);
58     virtual IterateResult iterate(void);
59 };
60 
createContext()61 void ContextFlagsCase::createContext()
62 {
63     glu::RenderConfig renderCfg(glu::ContextType(m_ApiType, m_passedFlags));
64 
65     const tcu::CommandLine &commandLine = m_testCtx.getCommandLine();
66     glu::parseRenderConfig(&renderCfg, commandLine);
67 
68     if (commandLine.getSurfaceType() != tcu::SURFACETYPE_WINDOW)
69         throw tcu::NotSupportedError("Test not supported in non-windowed context");
70 
71     m_caseContext = glu::createRenderContext(m_testCtx.getPlatform(), commandLine, renderCfg);
72 }
73 
releaseContext(void)74 void ContextFlagsCase::releaseContext(void)
75 {
76     if (m_caseContext)
77     {
78         delete m_caseContext;
79         m_caseContext = NULL;
80     }
81 }
82 
deinit(void)83 void ContextFlagsCase::deinit(void)
84 {
85     releaseContext();
86 }
87 
iterate(void)88 tcu::TestNode::IterateResult ContextFlagsCase::iterate(void)
89 {
90     createContext();
91 
92     glw::GLint flags         = 0;
93     const glw::Functions &gl = m_caseContext->getFunctions();
94     gl.getIntegerv(GL_CONTEXT_FLAGS, &flags);
95     GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv");
96 
97     if (flags != m_expectedResult)
98     {
99         m_testCtx.getLog() << tcu::TestLog::Message << "Test failed! glGet returned wrong  value " << flags
100                            << ", expected " << m_expectedResult << "]." << tcu::TestLog::EndMessage;
101 
102         m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
103     }
104     else
105         m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
106 
107     releaseContext();
108     return STOP;
109 }
110 
ContextFlagsTests(tcu::TestContext & testCtx,glu::ApiType apiType)111 ContextFlagsTests::ContextFlagsTests(tcu::TestContext &testCtx, glu::ApiType apiType)
112     : tcu::TestCaseGroup(testCtx, "context_flags", "Verifies if context flags query results are as expected.")
113     , m_ApiType(apiType)
114 {
115 }
116 
init()117 void ContextFlagsTests::init()
118 {
119     tcu::TestCaseGroup::init();
120 
121     try
122     {
123         addChild(new ContextFlagsCase(m_testCtx, glu::ContextFlags(0), 0, "no_flags_set_case",
124                                       "Verifies no flags case.", m_ApiType));
125         addChild(new ContextFlagsCase(m_testCtx, glu::CONTEXT_DEBUG, GL_CONTEXT_FLAG_DEBUG_BIT, "debug_flag_set_case",
126                                       "Verifies debug flag case..", m_ApiType));
127         addChild(new ContextFlagsCase(m_testCtx, glu::CONTEXT_ROBUST, GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT,
128                                       "robust_flag_set_case", "Verifies robust access flag case.", m_ApiType));
129 
130         addChild(new ContextFlagsCase(m_testCtx, glu::CONTEXT_DEBUG | glu::CONTEXT_ROBUST,
131                                       GL_CONTEXT_FLAG_DEBUG_BIT | GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT,
132                                       "all_flags_set_case", "Verifies both debug and robust access flags case.",
133                                       m_ApiType));
134     }
135     catch (...)
136     {
137         // Destroy context.
138         tcu::TestCaseGroup::deinit();
139         throw;
140     }
141 }
142 
143 } // namespace glcts
144