xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fFramebufferDefaultStateQueryTests.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 Framebuffer Default State Query tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es31fFramebufferDefaultStateQueryTests.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 "gluObjectWrapper.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_FRAMEBUFFER_INTEGER:
48*35238bceSAndroid Build Coastguard Worker         return "get_framebuffer_parameteriv";
49*35238bceSAndroid Build Coastguard Worker     default:
50*35238bceSAndroid Build Coastguard Worker         DE_ASSERT(false);
51*35238bceSAndroid Build Coastguard Worker         return DE_NULL;
52*35238bceSAndroid Build Coastguard Worker     }
53*35238bceSAndroid Build Coastguard Worker }
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker class FramebufferTest : public TestCase
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker public:
58*35238bceSAndroid Build Coastguard Worker     FramebufferTest(Context &context, QueryType verifier, const char *name, const char *desc);
59*35238bceSAndroid Build Coastguard Worker     IterateResult iterate(void);
60*35238bceSAndroid Build Coastguard Worker 
61*35238bceSAndroid Build Coastguard Worker protected:
62*35238bceSAndroid Build Coastguard Worker     virtual void checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl) = 0;
63*35238bceSAndroid Build Coastguard Worker     virtual void checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl)     = 0;
64*35238bceSAndroid Build Coastguard Worker 
65*35238bceSAndroid Build Coastguard Worker     const QueryType m_verifier;
66*35238bceSAndroid Build Coastguard Worker };
67*35238bceSAndroid Build Coastguard Worker 
FramebufferTest(Context & context,QueryType verifier,const char * name,const char * desc)68*35238bceSAndroid Build Coastguard Worker FramebufferTest::FramebufferTest(Context &context, QueryType verifier, const char *name, const char *desc)
69*35238bceSAndroid Build Coastguard Worker     : TestCase(context, name, desc)
70*35238bceSAndroid Build Coastguard Worker     , m_verifier(verifier)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker }
73*35238bceSAndroid Build Coastguard Worker 
iterate(void)74*35238bceSAndroid Build Coastguard Worker FramebufferTest::IterateResult FramebufferTest::iterate(void)
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker     glu::Framebuffer fbo(m_context.getRenderContext());
77*35238bceSAndroid Build Coastguard Worker     glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
78*35238bceSAndroid Build Coastguard Worker     tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
79*35238bceSAndroid Build Coastguard Worker 
80*35238bceSAndroid Build Coastguard Worker     gl.enableLogging(true);
81*35238bceSAndroid Build Coastguard Worker 
82*35238bceSAndroid Build Coastguard Worker     gl.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, *fbo);
83*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind");
84*35238bceSAndroid Build Coastguard Worker 
85*35238bceSAndroid Build Coastguard Worker     {
86*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial");
87*35238bceSAndroid Build Coastguard Worker         checkInitial(result, gl);
88*35238bceSAndroid Build Coastguard Worker     }
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker     {
91*35238bceSAndroid Build Coastguard Worker         const tcu::ScopedLogSection section(m_testCtx.getLog(), "Set", "Set");
92*35238bceSAndroid Build Coastguard Worker         checkSet(result, gl);
93*35238bceSAndroid Build Coastguard Worker     }
94*35238bceSAndroid Build Coastguard Worker 
95*35238bceSAndroid Build Coastguard Worker     result.setTestContextResult(m_testCtx);
96*35238bceSAndroid Build Coastguard Worker     return STOP;
97*35238bceSAndroid Build Coastguard Worker }
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker class FramebufferDimensionTest : public FramebufferTest
100*35238bceSAndroid Build Coastguard Worker {
101*35238bceSAndroid Build Coastguard Worker public:
102*35238bceSAndroid Build Coastguard Worker     enum DimensionType
103*35238bceSAndroid Build Coastguard Worker     {
104*35238bceSAndroid Build Coastguard Worker         DIMENSION_WIDTH = 0,
105*35238bceSAndroid Build Coastguard Worker         DIMENSION_HEIGHT,
106*35238bceSAndroid Build Coastguard Worker 
107*35238bceSAndroid Build Coastguard Worker         DIMENSION_LAST
108*35238bceSAndroid Build Coastguard Worker     };
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker     FramebufferDimensionTest(Context &context, QueryType verifier, DimensionType dimension, const char *name,
111*35238bceSAndroid Build Coastguard Worker                              const char *desc);
112*35238bceSAndroid Build Coastguard Worker     void checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
113*35238bceSAndroid Build Coastguard Worker     void checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
114*35238bceSAndroid Build Coastguard Worker 
115*35238bceSAndroid Build Coastguard Worker private:
116*35238bceSAndroid Build Coastguard Worker     const DimensionType m_dimension;
117*35238bceSAndroid Build Coastguard Worker };
118*35238bceSAndroid Build Coastguard Worker 
FramebufferDimensionTest(Context & context,QueryType verifier,DimensionType dimension,const char * name,const char * desc)119*35238bceSAndroid Build Coastguard Worker FramebufferDimensionTest::FramebufferDimensionTest(Context &context, QueryType verifier, DimensionType dimension,
120*35238bceSAndroid Build Coastguard Worker                                                    const char *name, const char *desc)
121*35238bceSAndroid Build Coastguard Worker     : FramebufferTest(context, verifier, name, desc)
122*35238bceSAndroid Build Coastguard Worker     , m_dimension(dimension)
123*35238bceSAndroid Build Coastguard Worker {
124*35238bceSAndroid Build Coastguard Worker     DE_ASSERT(dimension < DIMENSION_LAST);
125*35238bceSAndroid Build Coastguard Worker }
126*35238bceSAndroid Build Coastguard Worker 
checkInitial(tcu::ResultCollector & result,glu::CallLogWrapper & gl)127*35238bceSAndroid Build Coastguard Worker void FramebufferDimensionTest::checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
128*35238bceSAndroid Build Coastguard Worker {
129*35238bceSAndroid Build Coastguard Worker     const glw::GLenum pname =
130*35238bceSAndroid Build Coastguard Worker         (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
131*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 0, m_verifier);
132*35238bceSAndroid Build Coastguard Worker }
133*35238bceSAndroid Build Coastguard Worker 
checkSet(tcu::ResultCollector & result,glu::CallLogWrapper & gl)134*35238bceSAndroid Build Coastguard Worker void FramebufferDimensionTest::checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
135*35238bceSAndroid Build Coastguard Worker {
136*35238bceSAndroid Build Coastguard Worker     const glw::GLenum pname =
137*35238bceSAndroid Build Coastguard Worker         (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
138*35238bceSAndroid Build Coastguard Worker 
139*35238bceSAndroid Build Coastguard Worker     gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, pname, 32);
140*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 32, m_verifier);
143*35238bceSAndroid Build Coastguard Worker }
144*35238bceSAndroid Build Coastguard Worker 
145*35238bceSAndroid Build Coastguard Worker class FramebufferSamplesTest : public FramebufferTest
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker public:
148*35238bceSAndroid Build Coastguard Worker     FramebufferSamplesTest(Context &context, QueryType verifier, const char *name, const char *desc);
149*35238bceSAndroid Build Coastguard Worker     void checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
150*35238bceSAndroid Build Coastguard Worker     void checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
151*35238bceSAndroid Build Coastguard Worker };
152*35238bceSAndroid Build Coastguard Worker 
FramebufferSamplesTest(Context & context,QueryType verifier,const char * name,const char * desc)153*35238bceSAndroid Build Coastguard Worker FramebufferSamplesTest::FramebufferSamplesTest(Context &context, QueryType verifier, const char *name, const char *desc)
154*35238bceSAndroid Build Coastguard Worker     : FramebufferTest(context, verifier, name, desc)
155*35238bceSAndroid Build Coastguard Worker {
156*35238bceSAndroid Build Coastguard Worker }
157*35238bceSAndroid Build Coastguard Worker 
checkInitial(tcu::ResultCollector & result,glu::CallLogWrapper & gl)158*35238bceSAndroid Build Coastguard Worker void FramebufferSamplesTest::checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
161*35238bceSAndroid Build Coastguard Worker }
162*35238bceSAndroid Build Coastguard Worker 
checkSet(tcu::ResultCollector & result,glu::CallLogWrapper & gl)163*35238bceSAndroid Build Coastguard Worker void FramebufferSamplesTest::checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
164*35238bceSAndroid Build Coastguard Worker {
165*35238bceSAndroid Build Coastguard Worker     gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1);
166*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
167*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferIntegerMin(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1, m_verifier);
168*35238bceSAndroid Build Coastguard Worker 
169*35238bceSAndroid Build Coastguard Worker     gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0);
170*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
171*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
172*35238bceSAndroid Build Coastguard Worker }
173*35238bceSAndroid Build Coastguard Worker 
174*35238bceSAndroid Build Coastguard Worker class FramebufferFixedSampleLocationsTest : public FramebufferTest
175*35238bceSAndroid Build Coastguard Worker {
176*35238bceSAndroid Build Coastguard Worker public:
177*35238bceSAndroid Build Coastguard Worker     FramebufferFixedSampleLocationsTest(Context &context, QueryType verifier, const char *name, const char *desc);
178*35238bceSAndroid Build Coastguard Worker     void checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
179*35238bceSAndroid Build Coastguard Worker     void checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl);
180*35238bceSAndroid Build Coastguard Worker };
181*35238bceSAndroid Build Coastguard Worker 
FramebufferFixedSampleLocationsTest(Context & context,QueryType verifier,const char * name,const char * desc)182*35238bceSAndroid Build Coastguard Worker FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest(Context &context, QueryType verifier,
183*35238bceSAndroid Build Coastguard Worker                                                                          const char *name, const char *desc)
184*35238bceSAndroid Build Coastguard Worker     : FramebufferTest(context, verifier, name, desc)
185*35238bceSAndroid Build Coastguard Worker {
186*35238bceSAndroid Build Coastguard Worker }
187*35238bceSAndroid Build Coastguard Worker 
checkInitial(tcu::ResultCollector & result,glu::CallLogWrapper & gl)188*35238bceSAndroid Build Coastguard Worker void FramebufferFixedSampleLocationsTest::checkInitial(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
189*35238bceSAndroid Build Coastguard Worker {
190*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, 0,
191*35238bceSAndroid Build Coastguard Worker                                   m_verifier);
192*35238bceSAndroid Build Coastguard Worker }
193*35238bceSAndroid Build Coastguard Worker 
checkSet(tcu::ResultCollector & result,glu::CallLogWrapper & gl)194*35238bceSAndroid Build Coastguard Worker void FramebufferFixedSampleLocationsTest::checkSet(tcu::ResultCollector &result, glu::CallLogWrapper &gl)
195*35238bceSAndroid Build Coastguard Worker {
196*35238bceSAndroid Build Coastguard Worker     gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE);
197*35238bceSAndroid Build Coastguard Worker     GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
198*35238bceSAndroid Build Coastguard Worker     verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS,
199*35238bceSAndroid Build Coastguard Worker                                   GL_TRUE, m_verifier);
200*35238bceSAndroid Build Coastguard Worker }
201*35238bceSAndroid Build Coastguard Worker 
202*35238bceSAndroid Build Coastguard Worker } // namespace
203*35238bceSAndroid Build Coastguard Worker 
FramebufferDefaultStateQueryTests(Context & context)204*35238bceSAndroid Build Coastguard Worker FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests(Context &context)
205*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests")
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker }
208*35238bceSAndroid Build Coastguard Worker 
~FramebufferDefaultStateQueryTests(void)209*35238bceSAndroid Build Coastguard Worker FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests(void)
210*35238bceSAndroid Build Coastguard Worker {
211*35238bceSAndroid Build Coastguard Worker }
212*35238bceSAndroid Build Coastguard Worker 
init(void)213*35238bceSAndroid Build Coastguard Worker void FramebufferDefaultStateQueryTests::init(void)
214*35238bceSAndroid Build Coastguard Worker {
215*35238bceSAndroid Build Coastguard Worker     static const QueryType verifiers[] = {
216*35238bceSAndroid Build Coastguard Worker         QUERY_FRAMEBUFFER_INTEGER,
217*35238bceSAndroid Build Coastguard Worker     };
218*35238bceSAndroid Build Coastguard Worker 
219*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(X)                                                                  \
220*35238bceSAndroid Build Coastguard Worker     do                                                                                        \
221*35238bceSAndroid Build Coastguard Worker     {                                                                                         \
222*35238bceSAndroid Build Coastguard Worker         for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \
223*35238bceSAndroid Build Coastguard Worker         {                                                                                     \
224*35238bceSAndroid Build Coastguard Worker             const char *verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]);           \
225*35238bceSAndroid Build Coastguard Worker             const QueryType verifier   = verifiers[verifierNdx];                              \
226*35238bceSAndroid Build Coastguard Worker             this->addChild(X);                                                                \
227*35238bceSAndroid Build Coastguard Worker         }                                                                                     \
228*35238bceSAndroid Build Coastguard Worker     } while (0)
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferDimensionTest(m_context, verifier, FramebufferDimensionTest::DIMENSION_WIDTH,
231*35238bceSAndroid Build Coastguard Worker                                                    (std::string("framebuffer_default_width_") + verifierSuffix).c_str(),
232*35238bceSAndroid Build Coastguard Worker                                                    "Test FRAMEBUFFER_DEFAULT_WIDTH"));
233*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferDimensionTest(
234*35238bceSAndroid Build Coastguard Worker         m_context, verifier, FramebufferDimensionTest::DIMENSION_HEIGHT,
235*35238bceSAndroid Build Coastguard Worker         (std::string("framebuffer_default_height_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_HEIGHT"));
236*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferSamplesTest(m_context, verifier,
237*35238bceSAndroid Build Coastguard Worker                                                  (std::string("framebuffer_default_samples_") + verifierSuffix).c_str(),
238*35238bceSAndroid Build Coastguard Worker                                                  "Test FRAMEBUFFER_DEFAULT_SAMPLES"));
239*35238bceSAndroid Build Coastguard Worker     FOR_EACH_VERIFIER(new FramebufferFixedSampleLocationsTest(
240*35238bceSAndroid Build Coastguard Worker         m_context, verifier, (std::string("framebuffer_default_fixed_sample_locations_") + verifierSuffix).c_str(),
241*35238bceSAndroid Build Coastguard Worker         "Test FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"));
242*35238bceSAndroid Build Coastguard Worker 
243*35238bceSAndroid Build Coastguard Worker #undef FOR_EACH_VERIFIER
244*35238bceSAndroid Build Coastguard Worker }
245*35238bceSAndroid Build Coastguard Worker 
246*35238bceSAndroid Build Coastguard Worker } // namespace Functional
247*35238bceSAndroid Build Coastguard Worker } // namespace gles31
248*35238bceSAndroid Build Coastguard Worker } // namespace deqp
249