148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/*-------------------------------------------------------------------------
248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * OpenGL Conformance Test Suite
348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * -----------------------------
448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2016 Google Inc.
648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2016 The Khronos Group Inc.
748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * you may not use this file except in compliance with the License.
1048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * You may obtain a copy of the License at
1148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
1348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Unless required by applicable law or agreed to in writing, software
1548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
1648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * See the License for the specific language governing permissions and
1848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * limitations under the License.
1948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
2084322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*!
2148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file
2248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief OpenGL ES 2 Test Package.
2384322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*-------------------------------------------------------------------*/
2448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
2548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "es2cTestPackage.hpp"
2648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glcInfoTests.hpp"
2748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glcShaderNegativeTests.hpp"
2848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluRenderContext.hpp"
2948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluStateReset.hpp"
3048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glwEnums.hpp"
3148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glwFunctions.hpp"
3248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "tcuTestLog.hpp"
3348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
3448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosnamespace es2cts
3548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
3748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass TestCaseWrapper : public tcu::TestCaseExecutor
3848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
4048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	TestCaseWrapper(TestPackage& package);
4148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	~TestCaseWrapper(void);
4248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
4348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	void init(tcu::TestCase* testCase, const std::string& path);
4448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	void deinit(tcu::TestCase* testCase);
4548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	tcu::TestNode::IterateResult iterate(tcu::TestCase* testCase);
4648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
4748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprivate:
4848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	es2cts::TestPackage& m_testPackage;
4948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
5048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5148087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosTestCaseWrapper::TestCaseWrapper(TestPackage& package) : m_testPackage(package)
5248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
5348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
5448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5548087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosTestCaseWrapper::~TestCaseWrapper(void)
5648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
5748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
5848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid TestCaseWrapper::init(tcu::TestCase* testCase, const std::string&)
6048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
6148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glu::resetState(m_testPackage.getContext().getRenderContext(), m_testPackage.getContext().getContextInfo());
6248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	testCase->init();
6448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
6548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid TestCaseWrapper::deinit(tcu::TestCase* testCase)
6748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
6848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	testCase->deinit();
6948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glu::resetState(m_testPackage.getContext().getRenderContext(), m_testPackage.getContext().getContextInfo());
7148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
7248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulostcu::TestNode::IterateResult TestCaseWrapper::iterate(tcu::TestCase* testCase)
7448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
7548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	tcu::TestContext&			 testCtx   = m_testPackage.getContext().getTestContext();
7648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glu::RenderContext&			 renderCtx = m_testPackage.getContext().getRenderContext();
7748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	tcu::TestCase::IterateResult result;
7848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	// Clear to black
8048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
8148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		const glw::Functions& gl = renderCtx.getFunctions();
8248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		gl.clearColor(0.0f, 0.0f, 0.0f, 1.f);
8348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		gl.clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
8448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
8548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	result = testCase->iterate();
8748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	// Call implementation specific post-iterate routine (usually handles native events and swaps buffers)
8948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	try
9048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
9148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		renderCtx.postIterate();
9248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return result;
9348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
9448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	catch (const tcu::ResourceError& e)
9548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
9648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		testCtx.getLog() << e;
9748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		testCtx.setTestResult(QP_TEST_RESULT_RESOURCE_ERROR, "Resource error in context post-iteration routine");
9848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		testCtx.setTerminateAfter(true);
9948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return tcu::TestNode::STOP;
10048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
10148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	catch (const std::exception& e)
10248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
10348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		testCtx.getLog() << e;
10448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Error in context post-iteration routine");
10548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		return tcu::TestNode::STOP;
10648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
10748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
10848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
10948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass ShaderTests : public deqp::TestCaseGroup
11048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
11148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
11248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	ShaderTests(deqp::Context& context) : TestCaseGroup(context, "shaders", "Shading Language Tests")
11348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
11448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
11548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
11648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	void init(void)
11748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
11848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		addChild(new deqp::ShaderNegativeTests(m_context, glu::GLSL_VERSION_100_ES));
11948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
12048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
12148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
12248087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosTestPackage::TestPackage(tcu::TestContext& testCtx, const char* packageName)
12348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	: deqp::TestPackage(testCtx, packageName, "OpenGL ES 2 Conformance Tests", glu::ContextType(glu::ApiType::es(2, 0)),
12448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos						"gl_cts/data/gles2/")
12548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
12648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
12748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
12848087f5f0eb08759ee763f98daf3b34becb74559Pyry HaulosTestPackage::~TestPackage(void)
12948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
13048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
13148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
13248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid TestPackage::init(void)
13348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
13448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	// Call init() in parent - this creates context.
13548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	deqp::TestPackage::init();
13648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
13748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	try
13848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
13948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		addChild(new ShaderTests(getContext()));
14048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
14148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	catch (...)
14248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
14348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		// Destroy context.
14448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		deqp::TestPackage::deinit();
14548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos		throw;
14648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
14748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
14848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
14948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulostcu::TestCaseExecutor* TestPackage::createExecutor(void) const
15048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
15148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	return new TestCaseWrapper(const_cast<TestPackage&>(*this));
15248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}
15348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
15448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} // es2cts
155