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