/*------------------------------------------------------------------------- * 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 Boolean State Query tests. *//*--------------------------------------------------------------------*/ #include "es31fBooleanStateQueryTests.hpp" #include "glsStateQueryUtil.hpp" #include "gluRenderContext.hpp" #include "gluCallLogWrapper.hpp" #include "tcuRenderTarget.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_ISENABLED: return "isenabled"; case QUERY_BOOLEAN: return "getboolean"; case QUERY_INTEGER: return "getinteger"; case QUERY_INTEGER64: return "getinteger64"; case QUERY_FLOAT: return "getfloat"; default: DE_ASSERT(DE_FALSE); return DE_NULL; } } class IsEnabledStateTestCase : public TestCase, private glu::CallLogWrapper { public: IsEnabledStateTestCase (Context& context, QueryType verifier, const char* name, const char* description, glw::GLenum targetName, bool initial, glu::ApiType minimumContextVersion) : TestCase (context, name, description) , glu::CallLogWrapper (context.getRenderContext().getFunctions(), context.getTestContext().getLog()) , m_targetName (targetName) , m_initial (initial) , m_verifier (verifier) , m_minimumVersion (minimumContextVersion) { } IterateResult iterate (void) { TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version."); tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: "); enableLogging(true); // check inital value verifyStateBoolean(result, *this, m_targetName, m_initial, m_verifier); // check toggle GLU_CHECK_CALL(glEnable(m_targetName)); verifyStateBoolean(result, *this, m_targetName, true, m_verifier); GLU_CHECK_CALL(glDisable(m_targetName)); verifyStateBoolean(result, *this, m_targetName, false, m_verifier); result.setTestContextResult(m_testCtx); return STOP; } private: const glw::GLenum m_targetName; const bool m_initial; const QueryType m_verifier; const glu::ApiType m_minimumVersion; }; } // anonymous BooleanStateQueryTests::BooleanStateQueryTests (Context& context) : TestCaseGroup(context, "boolean", "Boolean State Query tests") { } BooleanStateQueryTests::~BooleanStateQueryTests (void) { } void BooleanStateQueryTests::init (void) { const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0; static const QueryType isEnabledVerifiers[] = { QUERY_ISENABLED, QUERY_BOOLEAN, QUERY_INTEGER, QUERY_INTEGER64, QUERY_FLOAT }; #define FOR_EACH_VERIFIER(VERIFIERS, 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); \ } struct StateBoolean { const char* name; const char* description; glw::GLenum targetName; bool value; glu::ApiType minimumContext; }; { const StateBoolean isEnableds[] = { { "sample_mask", "SAMPLE_MASK", GL_SAMPLE_MASK, false, glu::ApiType::es(3, 1)}, { "sample_shading", "SAMPLE_SHADING", GL_SAMPLE_SHADING, false, glu::ApiType::es(3, 2)}, { "debug_output", "DEBUG_OUTPUT", GL_DEBUG_OUTPUT, isDebugContext, glu::ApiType::es(3, 2)}, { "debug_output_synchronous", "DEBUG_OUTPUT_SYNCHRONOUS", GL_DEBUG_OUTPUT_SYNCHRONOUS, false, glu::ApiType::es(3, 2)}, }; for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++) { FOR_EACH_VERIFIER(isEnabledVerifiers, new IsEnabledStateTestCase(m_context, verifier, (std::string(isEnableds[testNdx].name) + "_" + verifierSuffix).c_str(), isEnableds[testNdx].description, isEnableds[testNdx].targetName, isEnableds[testNdx].value, isEnableds[testNdx].minimumContext)); } } #undef FOR_EACH_VERIFIER } } // Functional } // gles31 } // deqp