| /*------------------------------------------------------------------------- |
| * 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 |