Home | History | Annotate | Download | only in gles3
      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