1 /*------------------------------------------------------------------------- 2 * OpenGL Conformance Test Suite 3 * ----------------------------- 4 * 5 * Copyright (c) 2017 The Khronos Group Inc. 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 22 */ /*-------------------------------------------------------------------*/ 23 24 /** 25 */ /*! 26 * \file glcNoErrorTests.cpp 27 * \brief Conformance tests for the GL_KHR_no_error functionality. 28 */ /*--------------------------------------------------------------------*/ 29 30 #include "glcNoErrorTests.hpp" 31 #include "gluContextInfo.hpp" 32 #include "gluDefs.hpp" 33 #include "glwEnums.hpp" 34 #include "glwFunctions.hpp" 35 #include "tcuCommandLine.hpp" 36 #include "tcuTestLog.hpp" 37 38 using namespace glu; 39 40 namespace glcts 41 { 42 43 /** Constructor. 44 * 45 * @param context Rendering context 46 * @param name Test name 47 * @param description Test description 48 * @param apiType API version 49 */ 50 NoErrorContextTest::NoErrorContextTest(tcu::TestContext& testCtx, glu::ApiType apiType) 51 : tcu::TestCase(testCtx, "create_context", "Test verifies if it is possible to create context with " 52 "CONTEXT_FLAG_NO_ERROR_BIT_KHR flag set in CONTEXT_FLAGS") 53 , m_ApiType(apiType) 54 { 55 /* Left blank intentionally */ 56 } 57 58 /** Tears down any GL objects set up to run the test. */ 59 void NoErrorContextTest::deinit(void) 60 { 61 } 62 63 /** Stub init method */ 64 void NoErrorContextTest::init(void) 65 { 66 } 67 68 /** Veriffy if no error context can be successfully created. 69 * @return True when no error context was successfully created. 70 */ 71 bool NoErrorContextTest::verifyNoErrorContext(void) 72 { 73 RenderConfig renderCfg(glu::ContextType(m_ApiType, glu::CONTEXT_NO_ERROR)); 74 75 const tcu::CommandLine& commandLine = m_testCtx.getCommandLine(); 76 glu::parseRenderConfig(&renderCfg, commandLine); 77 78 if (commandLine.getSurfaceType() != tcu::SURFACETYPE_WINDOW) 79 throw tcu::NotSupportedError("Test not supported in non-windowed context"); 80 81 RenderContext* noErrorContext = createRenderContext(m_testCtx.getPlatform(), commandLine, renderCfg); 82 bool contextCreated = (noErrorContext != NULL); 83 delete noErrorContext; 84 85 return contextCreated; 86 } 87 88 /** Executes test iteration. 89 * 90 * @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. 91 */ 92 tcu::TestNode::IterateResult NoErrorContextTest::iterate(void) 93 { 94 { 95 glu::ContextType contextType(m_ApiType); 96 deqp::Context context(m_testCtx, contextType); 97 98 bool noErrorExtensionExists = glu::contextSupports(contextType, glu::ApiType::core(4, 6)); 99 noErrorExtensionExists |= context.getContextInfo().isExtensionSupported("GL_KHR_no_error"); 100 101 if (!noErrorExtensionExists) 102 { 103 m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "GL_KHR_no_error extension not supported"); 104 return STOP; 105 } 106 } // at this point intermediate context used to query the GL_KHR_no_error extension should be destroyed 107 108 if (verifyNoErrorContext()) 109 { 110 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 111 return STOP; 112 } 113 114 m_testCtx.getLog() << tcu::TestLog::Message << "Failed to create No Error context" << tcu::TestLog::EndMessage; 115 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 116 return STOP; 117 } 118 119 /** Constructor. 120 * 121 * @param context Rendering context. 122 */ 123 NoErrorTests::NoErrorTests(tcu::TestContext& testCtx, glu::ApiType apiType) 124 : tcu::TestCaseGroup(testCtx, "no_error", "Verify conformance of GL_KHR_no_error implementation") 125 , m_ApiType(apiType) 126 { 127 } 128 129 /** Initializes the test group contents. */ 130 void NoErrorTests::init(void) 131 { 132 addChild(new NoErrorContextTest(m_testCtx, m_ApiType)); 133 } 134 } /* glcts namespace */ 135