/*------------------------------------------------------------------------- * OpenGL Conformance Test Suite * ----------------------------- * * Copyright (c) 2017 The Khronos Group Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /*! * \file * \brief */ /*-------------------------------------------------------------------*/ /** */ /*! * \file glcNoErrorTests.cpp * \brief Conformance tests for the GL_KHR_no_error functionality. */ /*--------------------------------------------------------------------*/ #include "glcNoErrorTests.hpp" #include "gluContextInfo.hpp" #include "gluDefs.hpp" #include "glwEnums.hpp" #include "glwFunctions.hpp" #include "tcuCommandLine.hpp" #include "tcuTestLog.hpp" using namespace glu; namespace glcts { /** Constructor. * * @param context Rendering context * @param name Test name * @param description Test description * @param apiType API version */ NoErrorContextTest::NoErrorContextTest(tcu::TestContext& testCtx, glu::ApiType apiType) : tcu::TestCase(testCtx, "create_context", "Test verifies if it is possible to create context with " "CONTEXT_FLAG_NO_ERROR_BIT_KHR flag set in CONTEXT_FLAGS") , m_ApiType(apiType) { /* Left blank intentionally */ } /** Tears down any GL objects set up to run the test. */ void NoErrorContextTest::deinit(void) { } /** Stub init method */ void NoErrorContextTest::init(void) { } /** Veriffy if no error context can be successfully created. * @return True when no error context was successfully created. */ bool NoErrorContextTest::verifyNoErrorContext(void) { RenderConfig renderCfg(glu::ContextType(m_ApiType, glu::CONTEXT_NO_ERROR)); const tcu::CommandLine& commandLine = m_testCtx.getCommandLine(); glu::parseRenderConfig(&renderCfg, commandLine); if (commandLine.getSurfaceType() != tcu::SURFACETYPE_WINDOW) throw tcu::NotSupportedError("Test not supported in non-windowed context"); RenderContext* noErrorContext = createRenderContext(m_testCtx.getPlatform(), commandLine, renderCfg); bool contextCreated = (noErrorContext != NULL); delete noErrorContext; return contextCreated; } /** Executes test iteration. * * @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. */ tcu::TestNode::IterateResult NoErrorContextTest::iterate(void) { { glu::ContextType contextType(m_ApiType); deqp::Context context(m_testCtx, contextType); bool noErrorExtensionExists = glu::contextSupports(contextType, glu::ApiType::core(4, 6)); noErrorExtensionExists |= context.getContextInfo().isExtensionSupported("GL_KHR_no_error"); if (!noErrorExtensionExists) { m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "GL_KHR_no_error extension not supported"); return STOP; } } // at this point intermediate context used to query the GL_KHR_no_error extension should be destroyed if (verifyNoErrorContext()) { m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); return STOP; } m_testCtx.getLog() << tcu::TestLog::Message << "Failed to create No Error context" << tcu::TestLog::EndMessage; m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); return STOP; } /** Constructor. * * @param context Rendering context. */ NoErrorTests::NoErrorTests(tcu::TestContext& testCtx, glu::ApiType apiType) : tcu::TestCaseGroup(testCtx, "no_error", "Verify conformance of GL_KHR_no_error implementation") , m_ApiType(apiType) { } /** Initializes the test group contents. */ void NoErrorTests::init(void) { addChild(new NoErrorContextTest(m_testCtx, m_ApiType)); } } /* glcts namespace */