1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 3.1 Module
3 * -------------------------------------------------
5 * Copyright 2015 The Android Open Source Project
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 * \brief Framebuffer Default State Query tests.
22 *//*--------------------------------------------------------------------*/
24 #include "es31fFramebufferDefaultStateQueryTests.hpp"
25 #include "glsStateQueryUtil.hpp"
26 #include "gluRenderContext.hpp"
27 #include "gluCallLogWrapper.hpp"
28 #include "gluObjectWrapper.hpp"
29 #include "glwFunctions.hpp"
30 #include "glwEnums.hpp"
41 using namespace gls::StateQueryUtil;
43 static const char* getVerifierSuffix (QueryType type)
47 case QUERY_FRAMEBUFFER_INTEGER: return "get_framebuffer_parameteriv";
54 class FramebufferTest : public TestCase
57 FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc);
58 IterateResult iterate (void);
61 virtual void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0;
62 virtual void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0;
64 const QueryType m_verifier;
67 FramebufferTest::FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc)
68 : TestCase (context, name, desc)
69 , m_verifier (verifier)
73 FramebufferTest::IterateResult FramebufferTest::iterate (void)
75 glu::Framebuffer fbo (m_context.getRenderContext());
76 glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
77 tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: ");
79 gl.enableLogging(true);
81 gl.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, *fbo);
82 GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind");
85 const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial");
86 checkInitial(result, gl);
90 const tcu::ScopedLogSection section(m_testCtx.getLog(), "Set", "Set");
94 result.setTestContextResult(m_testCtx);
98 class FramebufferDimensionTest : public FramebufferTest
109 FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc);
110 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
111 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
114 const DimensionType m_dimension;
117 FramebufferDimensionTest::FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc)
118 : FramebufferTest (context, verifier, name, desc)
119 , m_dimension (dimension)
121 DE_ASSERT(dimension < DIMENSION_LAST);
124 void FramebufferDimensionTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
126 const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
127 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 0, m_verifier);
130 void FramebufferDimensionTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
132 const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT);
134 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, pname, 32);
135 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
137 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 32, m_verifier);
140 class FramebufferSamplesTest : public FramebufferTest
143 FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc);
144 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
145 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
148 FramebufferSamplesTest::FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc)
149 : FramebufferTest(context, verifier, name, desc)
153 void FramebufferSamplesTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
155 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
158 void FramebufferSamplesTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
160 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1);
161 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
162 verifyStateFramebufferIntegerMin(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1, m_verifier);
164 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0);
165 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
166 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier);
169 class FramebufferFixedSampleLocationsTest : public FramebufferTest
172 FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc);
173 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
174 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl);
177 FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc)
178 : FramebufferTest(context, verifier, name, desc)
182 void FramebufferFixedSampleLocationsTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
184 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, 0, m_verifier);
187 void FramebufferFixedSampleLocationsTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl)
189 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE);
190 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state");
191 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE, m_verifier);
196 FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests (Context& context)
197 : TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests")
201 FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests (void)
205 void FramebufferDefaultStateQueryTests::init (void)
207 static const QueryType verifiers[] =
209 QUERY_FRAMEBUFFER_INTEGER,
212 #define FOR_EACH_VERIFIER(X) \
213 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \
215 const char* verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]); \
216 const QueryType verifier = verifiers[verifierNdx]; \
220 FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_WIDTH, (std::string("framebuffer_default_width_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_WIDTH"));
221 FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_HEIGHT, (std::string("framebuffer_default_height_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_HEIGHT"));
222 FOR_EACH_VERIFIER(new FramebufferSamplesTest (m_context, verifier, (std::string("framebuffer_default_samples_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_SAMPLES"));
223 FOR_EACH_VERIFIER(new FramebufferFixedSampleLocationsTest (m_context, verifier, (std::string("framebuffer_default_fixed_sample_locations_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"));
225 #undef FOR_EACH_VERIFIER