1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.0 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 OpenGL ES 3.0 Test Package 22 *//*--------------------------------------------------------------------*/ 23 24 #include "tes3TestPackage.hpp" 25 #include "tes3InfoTests.hpp" 26 #include "es3fFunctionalTests.hpp" 27 #include "es3aAccuracyTests.hpp" 28 #include "es3sStressTests.hpp" 29 #include "es3pPerformanceTests.hpp" 30 #include "tcuTestLog.hpp" 31 #include "gluRenderContext.hpp" 32 #include "gluStateReset.hpp" 33 #include "glwFunctions.hpp" 34 #include "glwEnums.hpp" 35 36 namespace deqp 37 { 38 namespace gles3 39 { 40 41 class TestCaseWrapper : public tcu::TestCaseExecutor 42 { 43 public: 44 TestCaseWrapper (TestPackage& package); 45 ~TestCaseWrapper (void); 46 47 void init (tcu::TestCase* testCase, const std::string& path); 48 void deinit (tcu::TestCase* testCase); 49 tcu::TestNode::IterateResult iterate (tcu::TestCase* testCase); 50 51 private: 52 TestPackage& m_testPackage; 53 }; 54 55 TestCaseWrapper::TestCaseWrapper (TestPackage& package) 56 : m_testPackage(package) 57 { 58 } 59 60 TestCaseWrapper::~TestCaseWrapper (void) 61 { 62 } 63 64 void TestCaseWrapper::init (tcu::TestCase* testCase, const std::string&) 65 { 66 testCase->init(); 67 } 68 69 void TestCaseWrapper::deinit (tcu::TestCase* testCase) 70 { 71 testCase->deinit(); 72 73 DE_ASSERT(m_testPackage.getContext()); 74 glu::resetState(m_testPackage.getContext()->getRenderContext(), m_testPackage.getContext()->getContextInfo()); 75 } 76 77 tcu::TestNode::IterateResult TestCaseWrapper::iterate (tcu::TestCase* testCase) 78 { 79 tcu::TestContext& testCtx = m_testPackage.getContext()->getTestContext(); 80 glu::RenderContext& renderCtx = m_testPackage.getContext()->getRenderContext(); 81 tcu::TestCase::IterateResult result; 82 83 // Clear to surrender-blue 84 { 85 const glw::Functions& gl = renderCtx.getFunctions(); 86 gl.clearColor(0.125f, 0.25f, 0.5f, 1.f); 87 gl.clear(GL_COLOR_BUFFER_BIT); 88 } 89 90 result = testCase->iterate(); 91 92 // Call implementation specific post-iterate routine (usually handles native events and swaps buffers) 93 try 94 { 95 renderCtx.postIterate(); 96 return result; 97 } 98 catch (const tcu::ResourceError& e) 99 { 100 testCtx.getLog() << e; 101 testCtx.setTestResult(QP_TEST_RESULT_RESOURCE_ERROR, "Resource error in context post-iteration routine"); 102 testCtx.setTerminateAfter(true); 103 return tcu::TestNode::STOP; 104 } 105 catch (const std::exception& e) 106 { 107 testCtx.getLog() << e; 108 testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error in context post-iteration routine"); 109 return tcu::TestNode::STOP; 110 } 111 } 112 113 TestPackage::TestPackage (tcu::TestContext& testCtx) 114 : tcu::TestPackage (testCtx, "dEQP-GLES3", "dEQP OpenGL ES 3.0 Tests") 115 , m_archive (testCtx.getRootArchive(), "gles3/") 116 , m_context (DE_NULL) 117 { 118 } 119 120 TestPackage::~TestPackage (void) 121 { 122 // Destroy children first since destructors may access context. 123 TestNode::deinit(); 124 delete m_context; 125 } 126 127 void TestPackage::init (void) 128 { 129 try 130 { 131 // Create context 132 m_context = new Context(m_testCtx); 133 134 // Add main test groups 135 addChild(new InfoTests (*m_context)); 136 addChild(new Functional::FunctionalTests (*m_context)); 137 addChild(new Accuracy::AccuracyTests (*m_context)); 138 addChild(new Performance::PerformanceTests (*m_context)); 139 addChild(new Stress::StressTests (*m_context)); 140 } 141 catch (...) 142 { 143 delete m_context; 144 m_context = DE_NULL; 145 146 throw; 147 } 148 } 149 150 void TestPackage::deinit (void) 151 { 152 TestNode::deinit(); 153 delete m_context; 154 m_context = DE_NULL; 155 } 156 157 tcu::TestCaseExecutor* TestPackage::createExecutor (void) const 158 { 159 return new TestCaseWrapper(const_cast<TestPackage&>(*this)); 160 } 161 162 } // gles3 163 } // deqp 164