es31fShaderMultisampleInterpolationStateQueryTests.cpp revision cb82ed72dcbbfd8a6d07736c3259605227bc984f
1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.1 Module 3 * ------------------------------------------------- 4 * 5 * Copyright 2014 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 Multisample interpolation state query tests 22 *//*--------------------------------------------------------------------*/ 23 24#include "es31fShaderMultisampleInterpolationStateQueryTests.hpp" 25#include "tcuTestLog.hpp" 26#include "gluCallLogWrapper.hpp" 27#include "gluContextInfo.hpp" 28#include "gluRenderContext.hpp" 29#include "glsStateQueryUtil.hpp" 30#include "glwEnums.hpp" 31#include "glwFunctions.hpp" 32 33 34namespace deqp 35{ 36namespace gles31 37{ 38namespace Functional 39{ 40namespace 41{ 42 43using namespace gls::StateQueryUtil; 44 45class InterpolationOffsetCase : public TestCase 46{ 47public: 48 enum TestType 49 { 50 TEST_MIN_OFFSET = 0, 51 TEST_MAX_OFFSET, 52 53 TEST_LAST 54 }; 55 56 InterpolationOffsetCase (Context& context, const char* name, const char* desc, QueryType verifier, TestType testType); 57 ~InterpolationOffsetCase (void); 58 59 void init (void); 60 IterateResult iterate (void); 61 62private: 63 const QueryType m_verifier; 64 const TestType m_testType; 65}; 66 67InterpolationOffsetCase::InterpolationOffsetCase (Context& context, const char* name, const char* desc, QueryType verifier, TestType testType) 68 : TestCase (context, name, desc) 69 , m_verifier (verifier) 70 , m_testType (testType) 71{ 72 DE_ASSERT(m_testType < TEST_LAST); 73} 74 75InterpolationOffsetCase::~InterpolationOffsetCase (void) 76{ 77} 78 79void InterpolationOffsetCase::init (void) 80{ 81 if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation")) 82 throw tcu::NotSupportedError("Test requires GL_OES_shader_multisample_interpolation extension"); 83} 84 85InterpolationOffsetCase::IterateResult InterpolationOffsetCase::iterate (void) 86{ 87 glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 88 tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 89 gl.enableLogging(true); 90 91 if (m_testType == TEST_MAX_OFFSET) 92 verifyStateFloatMin(result, gl, GL_MAX_FRAGMENT_INTERPOLATION_OFFSET, 0.5, m_verifier); 93 else if (m_testType == TEST_MIN_OFFSET) 94 verifyStateFloatMax(result, gl, GL_MIN_FRAGMENT_INTERPOLATION_OFFSET, -0.5, m_verifier); 95 else 96 DE_ASSERT(false); 97 98 result.setTestContextResult(m_testCtx); 99 return STOP; 100} 101 102class FragmentInterpolationOffsetBitsCase : public TestCase 103{ 104public: 105 FragmentInterpolationOffsetBitsCase (Context& context, const char* name, const char* desc, QueryType verifier); 106 ~FragmentInterpolationOffsetBitsCase (void); 107 108 void init (void); 109 IterateResult iterate (void); 110 111private: 112 const QueryType m_verifier; 113}; 114 115FragmentInterpolationOffsetBitsCase::FragmentInterpolationOffsetBitsCase (Context& context, const char* name, const char* desc, QueryType verifier) 116 : TestCase (context, name, desc) 117 , m_verifier (verifier) 118{ 119} 120 121FragmentInterpolationOffsetBitsCase::~FragmentInterpolationOffsetBitsCase (void) 122{ 123} 124 125void FragmentInterpolationOffsetBitsCase::init (void) 126{ 127 if (!m_context.getContextInfo().isExtensionSupported("GL_OES_shader_multisample_interpolation")) 128 throw tcu::NotSupportedError("Test requires GL_OES_shader_multisample_interpolation extension"); 129} 130 131FragmentInterpolationOffsetBitsCase::IterateResult FragmentInterpolationOffsetBitsCase::iterate (void) 132{ 133 glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 134 tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 135 gl.enableLogging(true); 136 137 verifyStateIntegerMin(result, gl, GL_FRAGMENT_INTERPOLATION_OFFSET_BITS, 4, m_verifier); 138 139 result.setTestContextResult(m_testCtx); 140 return STOP; 141} 142 143} // anonymous 144 145ShaderMultisampleInterpolationStateQueryTests::ShaderMultisampleInterpolationStateQueryTests (Context& context) 146 : TestCaseGroup(context, "multisample_interpolation", "Test multisample interpolation states") 147{ 148} 149 150ShaderMultisampleInterpolationStateQueryTests::~ShaderMultisampleInterpolationStateQueryTests (void) 151{ 152} 153 154void ShaderMultisampleInterpolationStateQueryTests::init (void) 155{ 156 static const struct Verifier 157 { 158 QueryType verifier; 159 const char* name; 160 const char* desc; 161 } verifiers[] = 162 { 163 { QUERY_BOOLEAN, "get_boolean", "Test using getBoolean" }, 164 { QUERY_INTEGER, "get_integer", "Test using getInteger" }, 165 { QUERY_FLOAT, "get_float", "Test using getFloat" }, 166 { QUERY_INTEGER64, "get_integer64", "Test using getInteger64" }, 167 }; 168 169 // .min_fragment_interpolation_offset 170 { 171 tcu::TestCaseGroup* const group = new tcu::TestCaseGroup(m_testCtx, "min_fragment_interpolation_offset", "Test MIN_FRAGMENT_INTERPOLATION_OFFSET"); 172 addChild(group); 173 174 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) 175 group->addChild(new InterpolationOffsetCase(m_context, verifiers[verifierNdx].name, verifiers[verifierNdx].desc, verifiers[verifierNdx].verifier, InterpolationOffsetCase::TEST_MIN_OFFSET)); 176 } 177 178 // .max_fragment_interpolation_offset 179 { 180 tcu::TestCaseGroup* const group = new tcu::TestCaseGroup(m_testCtx, "max_fragment_interpolation_offset", "Test MAX_FRAGMENT_INTERPOLATION_OFFSET"); 181 addChild(group); 182 183 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) 184 group->addChild(new InterpolationOffsetCase(m_context, verifiers[verifierNdx].name, verifiers[verifierNdx].desc, verifiers[verifierNdx].verifier, InterpolationOffsetCase::TEST_MAX_OFFSET)); 185 } 186 187 // .fragment_interpolation_offset_bits 188 { 189 tcu::TestCaseGroup* const group = new tcu::TestCaseGroup(m_testCtx, "fragment_interpolation_offset_bits", "Test FRAGMENT_INTERPOLATION_OFFSET_BITS"); 190 addChild(group); 191 192 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) 193 group->addChild(new FragmentInterpolationOffsetBitsCase(m_context, verifiers[verifierNdx].name, verifiers[verifierNdx].desc, verifiers[verifierNdx].verifier)); 194 } 195} 196 197} // Functional 198} // gles31 199} // deqp 200