es31fBooleanStateQueryTests.cpp revision 5ed2b23bea6e56762a7aef8c8a086ec724517f26
1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.1 Module 3 * ------------------------------------------------- 4 * 5 * Copyright 2015 The Android Open Source Project 6 * 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 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 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. 18 * 19 *//*! 20 * \file 21 * \brief Boolean State Query tests. 22 *//*--------------------------------------------------------------------*/ 23 24#include "es31fBooleanStateQueryTests.hpp" 25#include "glsStateQueryUtil.hpp" 26#include "gluRenderContext.hpp" 27#include "gluCallLogWrapper.hpp" 28#include "tcuRenderTarget.hpp" 29#include "glwFunctions.hpp" 30#include "glwEnums.hpp" 31 32namespace deqp 33{ 34namespace gles31 35{ 36namespace Functional 37{ 38namespace 39{ 40 41using namespace gls::StateQueryUtil; 42 43static const char* getVerifierSuffix (QueryType type) 44{ 45 switch (type) 46 { 47 case QUERY_ISENABLED: return "isenabled"; 48 case QUERY_BOOLEAN: return "getboolean"; 49 case QUERY_INTEGER: return "getinteger"; 50 case QUERY_INTEGER64: return "getinteger64"; 51 case QUERY_FLOAT: return "getfloat"; 52 default: 53 DE_ASSERT(DE_FALSE); 54 return DE_NULL; 55 } 56} 57 58class IsEnabledStateTestCase : public TestCase, private glu::CallLogWrapper 59{ 60public: 61 IsEnabledStateTestCase (Context& context, QueryType verifier, const char* name, const char* description, glw::GLenum targetName, bool initial, glu::ApiType minimumContextVersion) 62 : TestCase (context, name, description) 63 , glu::CallLogWrapper (context.getRenderContext().getFunctions(), context.getTestContext().getLog()) 64 , m_targetName (targetName) 65 , m_initial (initial) 66 , m_verifier (verifier) 67 , m_minimumVersion (minimumContextVersion) 68 { 69 } 70 71 IterateResult iterate (void) 72 { 73 TCU_CHECK_AND_THROW(NotSupportedError, contextSupports(m_context.getRenderContext().getType(), m_minimumVersion), "This test requires a higher context version."); 74 75 tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: "); 76 enableLogging(true); 77 78 // check inital value 79 verifyStateBoolean(result, *this, m_targetName, m_initial, m_verifier); 80 81 // check toggle 82 83 GLU_CHECK_CALL(glEnable(m_targetName)); 84 85 verifyStateBoolean(result, *this, m_targetName, true, m_verifier); 86 87 GLU_CHECK_CALL(glDisable(m_targetName)); 88 89 verifyStateBoolean(result, *this, m_targetName, false, m_verifier); 90 91 result.setTestContextResult(m_testCtx); 92 return STOP; 93 } 94 95private: 96 const glw::GLenum m_targetName; 97 const bool m_initial; 98 const QueryType m_verifier; 99 const glu::ApiType m_minimumVersion; 100}; 101 102} // anonymous 103 104BooleanStateQueryTests::BooleanStateQueryTests (Context& context) 105 : TestCaseGroup(context, "boolean", "Boolean State Query tests") 106{ 107} 108 109BooleanStateQueryTests::~BooleanStateQueryTests (void) 110{ 111} 112 113void BooleanStateQueryTests::init (void) 114{ 115 const bool isDebugContext = (m_context.getRenderContext().getType().getFlags() & glu::CONTEXT_DEBUG) != 0; 116 117 static const QueryType isEnabledVerifiers[] = 118 { 119 QUERY_ISENABLED, 120 QUERY_BOOLEAN, 121 QUERY_INTEGER, 122 QUERY_INTEGER64, 123 QUERY_FLOAT 124 }; 125 126#define FOR_EACH_VERIFIER(VERIFIERS, X) \ 127 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); ++verifierNdx) \ 128 { \ 129 const char* verifierSuffix = getVerifierSuffix(VERIFIERS[verifierNdx]); \ 130 const QueryType verifier = VERIFIERS[verifierNdx]; \ 131 this->addChild(X); \ 132 } 133 134 struct StateBoolean 135 { 136 const char* name; 137 const char* description; 138 glw::GLenum targetName; 139 bool value; 140 glu::ApiType minimumContext; 141 }; 142 143 { 144 const StateBoolean isEnableds[] = 145 { 146 { "sample_mask", "SAMPLE_MASK", GL_SAMPLE_MASK, false, glu::ApiType::es(3, 1)}, 147 { "sample_shading", "SAMPLE_SHADING", GL_SAMPLE_SHADING, false, glu::ApiType::es(3, 2)}, 148 { "debug_output", "DEBUG_OUTPUT", GL_DEBUG_OUTPUT, isDebugContext, glu::ApiType::es(3, 2)}, 149 { "debug_output_synchronous", "DEBUG_OUTPUT_SYNCHRONOUS", GL_DEBUG_OUTPUT_SYNCHRONOUS, false, glu::ApiType::es(3, 2)}, 150 }; 151 152 for (int testNdx = 0; testNdx < DE_LENGTH_OF_ARRAY(isEnableds); testNdx++) 153 { 154 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)); 155 } 156 } 157 158#undef FOR_EACH_VERIFIER 159} 160 161} // Functional 162} // gles31 163} // deqp 164