Home | History | Annotate | Download | only in gles31
      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 OpenGL ES 3.1 Test Package
     22  *//*--------------------------------------------------------------------*/
     23 
     24 #include "tes31TestPackage.hpp"
     25 #include "tes31InfoTests.hpp"
     26 #include "es31fFunctionalTests.hpp"
     27 #include "es31sStressTests.hpp"
     28 #include "gluStateReset.hpp"
     29 #include "gluRenderContext.hpp"
     30 #include "tcuTestLog.hpp"
     31 
     32 namespace deqp
     33 {
     34 namespace gles31
     35 {
     36 
     37 class TestCaseWrapper : public tcu::TestCaseExecutor
     38 {
     39 public:
     40 									TestCaseWrapper		(TestPackage& package);
     41 									~TestCaseWrapper	(void);
     42 
     43 	void							init				(tcu::TestCase* testCase, const std::string& path);
     44 	void							deinit				(tcu::TestCase* testCase);
     45 	tcu::TestNode::IterateResult	iterate				(tcu::TestCase* testCase);
     46 
     47 private:
     48 	TestPackage&					m_testPackage;
     49 };
     50 
     51 TestCaseWrapper::TestCaseWrapper (TestPackage& package)
     52 	: m_testPackage(package)
     53 {
     54 }
     55 
     56 TestCaseWrapper::~TestCaseWrapper (void)
     57 {
     58 }
     59 
     60 void TestCaseWrapper::init (tcu::TestCase* testCase, const std::string&)
     61 {
     62 	testCase->init();
     63 }
     64 
     65 void TestCaseWrapper::deinit (tcu::TestCase* testCase)
     66 {
     67 	testCase->deinit();
     68 
     69 	DE_ASSERT(m_testPackage.getContext());
     70 	glu::resetState(m_testPackage.getContext()->getRenderContext(), m_testPackage.getContext()->getContextInfo());
     71 }
     72 
     73 tcu::TestNode::IterateResult TestCaseWrapper::iterate (tcu::TestCase* testCase)
     74 {
     75 	tcu::TestContext&					testCtx	= m_testPackage.getContext()->getTestContext();
     76 	const tcu::TestCase::IterateResult	result	= testCase->iterate();
     77 
     78 	// Call implementation specific post-iterate routine (usually handles native events and swaps buffers)
     79 	try
     80 	{
     81 		m_testPackage.getContext()->getRenderContext().postIterate();
     82 		return result;
     83 	}
     84 	catch (const tcu::ResourceError& e)
     85 	{
     86 		testCtx.getLog() << e;
     87 		testCtx.setTestResult(QP_TEST_RESULT_RESOURCE_ERROR, "Resource error in context post-iteration routine");
     88 		testCtx.setTerminateAfter(true);
     89 		return tcu::TestNode::STOP;
     90 	}
     91 	catch (const std::exception& e)
     92 	{
     93 		testCtx.getLog() << e;
     94 		testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error in context post-iteration routine");
     95 		return tcu::TestNode::STOP;
     96 	}
     97 }
     98 
     99 TestPackage::TestPackage (tcu::TestContext& testCtx)
    100 	: tcu::TestPackage	(testCtx, "dEQP-GLES31", "dEQP OpenGL ES 3.1 Tests")
    101 	, m_archive			(testCtx.getRootArchive(), "gles31/")
    102 	, m_context			(DE_NULL)
    103 {
    104 }
    105 
    106 TestPackage::~TestPackage (void)
    107 {
    108 	// Destroy children first since destructors may access context.
    109 	TestNode::deinit();
    110 	delete m_context;
    111 }
    112 
    113 void TestPackage::init (void)
    114 {
    115 	try
    116 	{
    117 		// Create context
    118 		m_context = new Context(m_testCtx);
    119 
    120 		// Add main test groups
    121 		addChild(new InfoTests						(*m_context));
    122 		addChild(new Functional::FunctionalTests	(*m_context));
    123 		addChild(new Stress::StressTests			(*m_context));
    124 	}
    125 	catch (...)
    126 	{
    127 		delete m_context;
    128 		m_context = DE_NULL;
    129 
    130 		throw;
    131 	}
    132 }
    133 
    134 void TestPackage::deinit (void)
    135 {
    136 	TestNode::deinit();
    137 	delete m_context;
    138 	m_context = DE_NULL;
    139 }
    140 
    141 tcu::TestCaseExecutor* TestPackage::createExecutor (void) const
    142 {
    143 	return new TestCaseWrapper(const_cast<TestPackage&>(*this));
    144 }
    145 
    146 } // gles31
    147 } // deqp
    148