/*------------------------------------------------------------------------- * drawElements Quality Program OpenGL ES 3.1 Module * ------------------------------------------------- * * Copyright 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief Framebuffer Default State Query tests. *//*--------------------------------------------------------------------*/ #include "es31fFramebufferDefaultStateQueryTests.hpp" #include "glsStateQueryUtil.hpp" #include "gluRenderContext.hpp" #include "gluCallLogWrapper.hpp" #include "gluObjectWrapper.hpp" #include "glwFunctions.hpp" #include "glwEnums.hpp" namespace deqp { namespace gles31 { namespace Functional { namespace { using namespace gls::StateQueryUtil; static const char* getVerifierSuffix (QueryType type) { switch (type) { case QUERY_FRAMEBUFFER_INTEGER: return "get_framebuffer_parameteriv"; default: DE_ASSERT(DE_FALSE); return DE_NULL; } } class FramebufferTest : public TestCase { public: FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc); IterateResult iterate (void); protected: virtual void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0; virtual void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0; const QueryType m_verifier; }; FramebufferTest::FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc) : TestCase (context, name, desc) , m_verifier (verifier) { } FramebufferTest::IterateResult FramebufferTest::iterate (void) { glu::Framebuffer fbo (m_context.getRenderContext()); glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); gl.enableLogging(true); gl.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, *fbo); GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind"); { const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial"); checkInitial(result, gl); } { const tcu::ScopedLogSection section(m_testCtx.getLog(), "Set", "Set"); checkSet(result, gl); } result.setTestContextResult(m_testCtx); return STOP; } class FramebufferDimensionTest : public FramebufferTest { public: enum DimensionType { DIMENSION_WIDTH = 0, DIMENSION_HEIGHT, DIMENSION_LAST }; FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc); void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); private: const DimensionType m_dimension; }; FramebufferDimensionTest::FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc) : FramebufferTest (context, verifier, name, desc) , m_dimension (dimension) { DE_ASSERT(dimension < DIMENSION_LAST); } void FramebufferDimensionTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT); verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 0, m_verifier); } void FramebufferDimensionTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT); gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, pname, 32); GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 32, m_verifier); } class FramebufferSamplesTest : public FramebufferTest { public: FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc); void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); }; FramebufferSamplesTest::FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc) : FramebufferTest(context, verifier, name, desc) { } void FramebufferSamplesTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier); } void FramebufferSamplesTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1); GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); verifyStateFramebufferIntegerMin(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1, m_verifier); gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0); GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier); } class FramebufferFixedSampleLocationsTest : public FramebufferTest { public: FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc); void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); }; FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc) : FramebufferTest(context, verifier, name, desc) { } void FramebufferFixedSampleLocationsTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, 0, m_verifier); } void FramebufferFixedSampleLocationsTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) { gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE); GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE, m_verifier); } } // anonymous FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests (Context& context) : TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests") { } FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests (void) { } void FramebufferDefaultStateQueryTests::init (void) { static const QueryType verifiers[] = { QUERY_FRAMEBUFFER_INTEGER, }; #define FOR_EACH_VERIFIER(X) \ for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \ { \ const char* verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]); \ const QueryType verifier = verifiers[verifierNdx]; \ this->addChild(X); \ } FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_WIDTH, (std::string("framebuffer_default_width_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_WIDTH")); FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_HEIGHT, (std::string("framebuffer_default_height_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_HEIGHT")); FOR_EACH_VERIFIER(new FramebufferSamplesTest (m_context, verifier, (std::string("framebuffer_default_samples_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_SAMPLES")); FOR_EACH_VERIFIER(new FramebufferFixedSampleLocationsTest (m_context, verifier, (std::string("framebuffer_default_fixed_sample_locations_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS")); #undef FOR_EACH_VERIFIER } } // Functional } // gles31 } // deqp