This is CTS_KHR_no_error implementation commit.
CONTEXT_NO_ERROR flag is added into framework.
Affects:
KHR-NoContext.*.no_error.*
Components: Framework, OpenGL
VK-GL-CTS issue: 5
Change-Id: Ie37d37ad974bbf5e8687f56f774c85498847299c
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Mustpass version="4.5.5.x">
+ <!--/* Copyright (C) 2016-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.
+*/-->
+ <!--/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */-->
+ <TestPackage name="Khronos Mustpass GL NoContext">
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ </TestPackage>
+</Mustpass>
--- /dev/null
+KHR-NoContext.gl30.no_error.create_context
--- /dev/null
+KHR-NoContext.gl*
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Mustpass version="3.2.4.x">
+ <!--/* Copyright (C) 2016-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.
+*/-->
+ <!--/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */-->
+ <TestPackage name="Khronos Mustpass ES NoContext">
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ </TestPackage>
+</Mustpass>
--- /dev/null
+KHR-NoContext.es2.no_error.create_context
--- /dev/null
+KHR-NoContext.es*
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Mustpass version="master">
+ <!--/* Copyright (C) 2016-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.
+*/-->
+ <!--/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */-->
+ <TestPackage name="Khronos Mustpass ES NoContext">
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=64 --deqp-surface-height=64 --deqp-base-seed=1 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ <Configuration caseListFile="noctx-khr-master.txt" commandLine="--deqp-screen-rotation=unspecified --deqp-surface-width=113 --deqp-surface-height=47 --deqp-base-seed=2 --deqp-watchdog=disable" name="khr-master" os="any" useForFirstEGLConfig="True"/>
+ </TestPackage>
+</Mustpass>
--- /dev/null
+KHR-NoContext.es2.no_error.create_context
--- /dev/null
+KHR-NoContext.es*
)
set(GLCTS_LIBS
+ glcts-common-nocontext-package
glcts-gl
glcts-es2
glcts-es3
glcFragDepthTests.hpp
glcInfoTests.cpp
glcInfoTests.hpp
- glcNoDefaultContextPackage.cpp
- glcNoDefaultContextPackage.hpp
+ glcNoErrorTests.cpp
+ glcNoErrorTests.hpp
glcRobustBufferAccessBehaviorTests.cpp
glcRobustBufferAccessBehaviorTests.hpp
glcShaderIndexingTests.cpp
add_library(glcts-common STATIC ${GLCTS_COMMON_SRCS})
target_link_libraries(glcts-common ${GLCTS_COMMON_LIBS})
+
+set(GLCTS_COMMON_NOCONTEXTPACKAGE_SRCS
+ glcNoDefaultContextPackage.cpp
+ glcNoDefaultContextPackage.hpp
+ )
+add_library(glcts-common-nocontext-package STATIC ${GLCTS_COMMON_NOCONTEXTPACKAGE_SRCS})
*/ /*-------------------------------------------------------------------*/
#include "glcNoDefaultContextPackage.hpp"
+#include "glcNoErrorTests.hpp"
#include "gluRenderContext.hpp"
namespace glcts
return new nodefaultcontext::TestCaseWrapper();
}
+void NoDefaultContextPackage::init(void)
+{
+ tcu::TestCaseGroup* gl30Group = new tcu::TestCaseGroup(getTestContext(), "gl30", "");
+ gl30Group->addChild(new glcts::NoErrorTests(getTestContext(), glu::ApiType::core(3, 0)));
+ addChild(gl30Group);
+ tcu::TestCaseGroup* es2Group = new tcu::TestCaseGroup(getTestContext(), "es2", "");
+ es2Group->addChild(new glcts::NoErrorTests(getTestContext(), glu::ApiType::es(2, 0)));
+ addChild(es2Group);
+}
+
} // glcts
NoDefaultContextPackage(tcu::TestContext& testCtx, const char* name);
virtual ~NoDefaultContextPackage(void);
- virtual void init(void)
- {
- }
+ void init(void);
tcu::Archive* getArchive(void)
{
--- /dev/null
+/*-------------------------------------------------------------------------
+ * 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)
+{
+ {
+ deqp::Context context(m_testCtx, glu::ContextType(m_ApiType));
+
+ bool 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 */
--- /dev/null
+#ifndef _GLCNOERRORTESTS_HPP
+#define _GLCNOERRORTESTS_HPP
+/*-------------------------------------------------------------------------
+ * 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.hpp
+ * \brief Conformance tests for the GL_KHR_no_error functionality.
+ */ /*--------------------------------------------------------------------*/
+
+#include "glcTestCase.hpp"
+#include "glwDefs.hpp"
+#include "tcuDefs.hpp"
+
+namespace glcts
+{
+/** Test verifies if it is possible to create context with
+ * CONTEXT_FLAG_NO_ERROR_BIT_KHR flag set in CONTEXT_FLAGS.
+ */
+class NoErrorContextTest : public tcu::TestCase
+{
+public:
+ /* Public methods */
+ NoErrorContextTest(tcu::TestContext& testCtx, glu::ApiType apiType);
+
+ void deinit(void);
+ void init(void);
+ tcu::TestNode::IterateResult iterate(void);
+
+private:
+ /* Private methods */
+ bool verifyNoErrorContext(void);
+ /* Private members */
+ glu::ApiType m_ApiType;
+};
+
+/** Test group which encapsulates all sparse buffer conformance tests */
+class NoErrorTests : public tcu::TestCaseGroup
+{
+public:
+ /* Public methods */
+ NoErrorTests(tcu::TestContext& testCtx, glu::ApiType apiType);
+
+ void init(void);
+
+private:
+ NoErrorTests(const NoErrorTests& other);
+ NoErrorTests& operator=(const NoErrorTests& other);
+
+ /* Private members */
+ glu::ApiType m_ApiType;
+};
+} /* glcts namespace */
+
+#endif // _GLCNOERRORTESTS_HPP
#include "gl3cTestPackages.hpp"
#include "gl4cTestPackages.hpp"
+#include "glcNoDefaultContextPackage.hpp"
+
#if defined(DEQP_GTF_AVAILABLE)
#include "gtfGL30TestPackage.hpp"
#include "gtfGL31TestPackage.hpp"
return new es32cts::ES32TestPackage(testCtx, "KHR-GLES32");
}
+static tcu::TestPackage* createNoDefaultCustomContextPackage(tcu::TestContext& testCtx)
+{
+ return new glcts::NoDefaultContextPackage(testCtx, "KHR-NoContext");
+}
+
static tcu::TestPackage* createGL30Package(tcu::TestContext& testCtx)
{
return new gl3cts::GL30TestPackage(testCtx, "KHR-GL30");
registry->registerPackage("KHR-GLES32", createES32Package);
+ registry->registerPackage("KHR-NoContext", createNoDefaultCustomContextPackage);
+
registry->registerPackage("KHR-GL30", createGL30Package);
registry->registerPackage("KHR-GL31", createGL31Package);
registry->registerPackage("KHR-GL32", createGL32Package);
* be lost! Modify the generating script instead.
*/
-const string mustpassDir = "gl_cts/data/mustpass/egl/aosp_mustpass/3.2.4.x/";
-
-struct RunParams
-{
- glu::ApiType apiType;
- const string configName;
- const char* glConfigName;
- const string screenRotation;
- int baseSeed;
- const char* fboConfig;
- int surfaceWidth;
- int surfaceHeight;
-};
+const char* mustpassDir = "gl_cts/data/mustpass/egl/aosp_mustpass/3.2.4.x/";
static const RunParams aosp_mustpass_egl_first_cfg[] = {
{ glu::ApiType(), "master", "rgba8888d24s8ms0", "unspecified", -1, DE_NULL, 256, 256 },
* be lost! Modify the generating script instead.
*/
-const string mustpassDir = "gl_cts/data/mustpass/gles/aosp_mustpass/3.2.4.x/";
-
-struct RunParams
-{
- glu::ApiType apiType;
- const string configName;
- const char* glConfigName;
- const string screenRotation;
- int baseSeed;
- const char* fboConfig;
- int surfaceWidth;
- int surfaceHeight;
-};
+const char* mustpassDir = "gl_cts/data/mustpass/gles/aosp_mustpass/3.2.4.x/";
static const RunParams aosp_mustpass_es_first_cfg[] = {
{ glu::ApiType::es(2, 0), "master", "rgba8888d24s8ms0", "unspecified", -1, DE_NULL, 256, 256 },
* be lost! Modify the generating script instead.
*/
-const string mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass/3.2.4.x/";
-
-struct RunParams
-{
- glu::ApiType apiType;
- const string configName;
- const char* glConfigName;
- const string screenRotation;
- int baseSeed;
- const char* fboConfig;
- int surfaceWidth;
- int surfaceHeight;
-};
+const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass/3.2.4.x/";
static const RunParams khronos_mustpass_es_first_cfg[] = {
{ glu::ApiType::es(2, 0), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
--- /dev/null
+#ifndef _GLCKHRONOSMUSTPASSESNOCONTEXT_HPP
+#define _GLCKHRONOSMUSTPASSESNOCONTEXT_HPP
+/* Copyright (C) 2016-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.
+*/
+
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+const char* mustpassDir = "gl_cts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/";
+
+static const RunParams khronos_mustpass_es_nocontext_first_cfg[] = {
+ { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
+ { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 2, DE_NULL, 113, 47 },
+};
+
+#endif // _GLCKHRONOSMUSTPASSESNOCONTEXT_HPP
* be lost! Modify the generating script instead.
*/
-const string mustpassDir = "gl_cts/data/mustpass/gl/khronos_mustpass/4.5.5.x/";
-
-struct RunParams
-{
- glu::ApiType apiType;
- const string configName;
- const char* glConfigName;
- const string screenRotation;
- int baseSeed;
- const char* fboConfig;
- int surfaceWidth;
- int surfaceHeight;
-};
+const char* mustpassDir = "gl_cts/data/mustpass/gl/khronos_mustpass/4.5.5.x/";
static const RunParams khronos_mustpass_gl_first_cfg[] = {
{ glu::ApiType::core(4, 5), "master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
--- /dev/null
+#ifndef _GLCKHRONOSMUSTPASSGLNOCONTEXT_HPP
+#define _GLCKHRONOSMUSTPASSGLNOCONTEXT_HPP
+/* Copyright (C) 2016-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.
+*/
+
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+const char* mustpassDir = "gl_cts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/";
+
+static const RunParams khronos_mustpass_gl_nocontext_first_cfg[] = {
+ { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 1, DE_NULL, 64, 64 },
+ { glu::ApiType(), "khr-master", DE_NULL, "unspecified", 2, DE_NULL, 113, 47 },
+};
+
+#endif // _GLCKHRONOSMUSTPASSGLNOCONTEXT_HPP
return cfgInfo;
}
-static string getApiName(glu::ApiType apiType)
+static const char* getApiName(glu::ApiType apiType)
{
if (apiType == glu::ApiType::es(2, 0))
return "gles2";
throw std::runtime_error("Unknown context type");
}
-static const string getCaseListFileOption(const string mustpassDir, const string apiName, const string mustpassName)
+static const string getCaseListFileOption(const char* mustpassDir, const char* apiName, const char* mustpassName)
{
#if DE_OS == DE_OS_ANDROID
const string case_list_option = "--deqp-caselist-resource=";
return case_list_option + mustpassDir + apiName + "-" + mustpassName + ".txt";
}
-static const string getLogFileName(const string apiName, const string configName, const int iterId, const int runId,
+static const string getLogFileName(const char* apiName, const char* configName, const int iterId, const int runId,
const int width, const int height, const int seed)
{
string res = string("config-") + apiName + "-" + configName + "-cfg-" + de::toString(iterId) + "-run-" +
return res;
}
-static void getBaseOptions(std::vector<std::string>& args, const string mustpassDir, const string apiName,
- const string configName, const string screenRotation, int width, int height)
+static void getBaseOptions(std::vector<std::string>& args, const char* mustpassDir, const char* apiName,
+ const char* configName, const char* screenRotation, int width, int height)
{
args.push_back(getCaseListFileOption(mustpassDir, apiName, configName));
args.push_back(string("--deqp-screen-rotation=") + screenRotation);
continue;
}
- string apiName = "egl";
+ const char* apiName = "egl";
+
const int width = aosp_mustpass_egl_first_cfg[i].surfaceWidth;
const int height = aosp_mustpass_egl_first_cfg[i].surfaceHeight;
return;
}
- string apiName = getApiName(aosp_mustpass_es_first_cfg[i].apiType);
+ const char* apiName = getApiName(aosp_mustpass_es_first_cfg[i].apiType);
+
const int width = aosp_mustpass_es_first_cfg[i].surfaceWidth;
const int height = aosp_mustpass_es_first_cfg[i].surfaceHeight;
}
}
+static void getTestRunsForNoContext(vector<TestRunParams>& runs, const ConfigList& configs, const RunParams* runParams,
+ const int numRunParams, const char* mustpassDir)
+{
+ vector<Config>::const_iterator cfgIter = configs.configs.begin();
+
+ for (int i = 0; i < numRunParams; ++i)
+ {
+ const char* apiName = "noctx";
+
+ const int width = runParams[i].surfaceWidth;
+ const int height = runParams[i].surfaceHeight;
+ const int seed = runParams[i].baseSeed;
+
+ TestRunParams params;
+ params.logFilename = getLogFileName(apiName, runParams[i].configName, 1, i, width, height, seed);
+
+ getBaseOptions(params.args, mustpassDir, apiName, runParams[i].configName, runParams[i].screenRotation, width,
+ height);
+
+ params.args.push_back(string("--deqp-base-seed=") + de::toString(seed));
+
+ appendConfigArgs(*cfgIter, params.args, runParams[i].fboConfig);
+
+ runs.push_back(params);
+ }
+}
+
+static void getTestRunsForNoContextES(vector<TestRunParams>& runs, const ConfigList& configs)
+{
+#include "glcKhronosMustpassEsNocontext.hpp"
+ getTestRunsForNoContext(runs, configs, khronos_mustpass_es_nocontext_first_cfg,
+ DE_LENGTH_OF_ARRAY(khronos_mustpass_es_nocontext_first_cfg), mustpassDir);
+}
+
static void getTestRunsForES(glu::ApiType type, const ConfigList& configs, vector<TestRunParams>& runs)
{
getTestRunsForAOSPEGL(runs, configs);
getTestRunsForAOSPES(runs, configs, type);
+ getTestRunsForNoContextES(runs, configs);
#include "glcKhronosMustpassEs.hpp"
if (!glu::contextSupports(glu::ContextType(type), runParams[runNdx].apiType))
continue;
- string apiName = getApiName(runParams[runNdx].apiType);
+ const char* apiName = getApiName(runParams[runNdx].apiType);
+
const int width = runParams[runNdx].surfaceWidth;
const int height = runParams[runNdx].surfaceHeight;
const int seed = runParams[runNdx].baseSeed;
}
}
+static void getTestRunsForNoContextGL(vector<TestRunParams>& runs, const ConfigList& configs)
+{
+#include "glcKhronosMustpassGlNocontext.hpp"
+ getTestRunsForNoContext(runs, configs, khronos_mustpass_gl_nocontext_first_cfg,
+ DE_LENGTH_OF_ARRAY(khronos_mustpass_gl_nocontext_first_cfg), mustpassDir);
+}
+
static void getTestRunsForGL(glu::ApiType type, const ConfigList& configs, vector<TestRunParams>& runs)
{
+ getTestRunsForNoContextGL(runs, configs);
#include "glcKhronosMustpassGl.hpp"
for (vector<Config>::const_iterator cfgIter = configs.configs.begin(); cfgIter != configs.configs.end(); ++cfgIter)
if (type != runParams[runNdx].apiType)
continue;
- string apiName = getApiName(runParams[runNdx].apiType);
+ const char* apiName = getApiName(runParams[runNdx].apiType);
+
const int width = runParams[runNdx].surfaceWidth;
const int height = runParams[runNdx].surfaceHeight;
const int seed = runParams[runNdx].baseSeed;
struct Config;
+struct RunParams
+{
+ glu::ApiType apiType;
+ const char* configName;
+ const char* glConfigName;
+ const char* screenRotation;
+ int baseSeed;
+ const char* fboConfig;
+ int surfaceWidth;
+ int surfaceHeight;
+};
+
struct TestRunParams
{
std::vector<std::string> args;
Module("GTF-GLES2", "GLES2" ),
Module("GTF-GLES3", "GLES3" ),
Module("GTF-GLES31", "GLES31"),
+ Module("KHR-NoContext", "NOCTX"),
Module("KHR-GL45", "GL45"),
Module("KHR-GL44", "GL44"),
Module("KHR-GL43", "GL43"),
CTS_AOSP_MP_EGL_PROJECT = Project(name = "AOSP Mustpass EGL", path = CTS_AOSP_MP_EGL_DATA_DIR, incpath = CTS_MP_INC_DIR, devicepath = CTS_AOSP_MP_EGL_DEVICE_DIR, copyright = COPYRIGHT_DECLARATION)
+CTS_KHR_MP_NOCTX_DATA_DIR = os.path.join(DEQP_DIR, "external", "openglcts", "data", "mustpass", "gles", "khronos_mustpass_noctx")
+
+CTS_KHR_MP_NOCTX_DEVICE_DIR = "gl_cts/data/mustpass/gles/khronos_mustpass_noctx"
+
+CTS_KHR_MP_NOCTX_ES_PROJECT = Project(name = "Khronos Mustpass ES NoContext", path = CTS_KHR_MP_NOCTX_DATA_DIR, incpath = CTS_MP_INC_DIR, devicepath = CTS_KHR_MP_NOCTX_DEVICE_DIR, copyright = COPYRIGHT_DECLARATION)
+
EGL_MODULE = getModuleByName("dEQP-EGL")
ES2CTS_MODULE = getModuleByName("dEQP-GLES2")
ES3CTS_MODULE = getModuleByName("dEQP-GLES3")
ES3KHR_MODULE = getModuleByName("KHR-GLES3")
ES31KHR_MODULE = getModuleByName("KHR-GLES31")
ES32KHR_MODULE = getModuleByName("KHR-GLES32")
+NOCTXKHR_MODULE = getModuleByName("KHR-NoContext")
ES2GTF_MODULE = getModuleByName("GTF-GLES2")
ES3GTF_MODULE = getModuleByName("GTF-GLES3")
filters = [include("gles32-khr-master.txt")]),
])
+GLCTS_NOCTX_KHR_PKG_1CFG = Package(module = NOCTXKHR_MODULE, configurations = [
+ # Master
+ Configuration(name = "khr-master",
+ surfacewidth = "64",
+ surfaceheight = "64",
+ baseseed = "1",
+ filters = [include("noctx-khr-master.txt")]),
+ Configuration(name = "khr-master",
+ surfacewidth = "113",
+ surfaceheight = "47",
+ baseseed = "2",
+ filters = [include("noctx-khr-master.txt")]),
+ ])
+
ES_MUSTPASS_LISTS = [
# 3.2.2.x
Mustpass(project = CTS_KHR_MP_ES_PROJECT, version = "3.2.2.x", isCurrent=False,
GLCTS_3_2_3_GLES32_KHR_PKG_N1CFG,
]),
+
+ Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "3.2.4.x", isCurrent=True,
+ packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+
Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "3.2.4.x", isCurrent=True,
packages = [GLCTS_3_2_3_GLES2_PKG, GLCTS_3_2_3_GLES3_PKG, GLCTS_3_2_3_GLES31_PKG]),
GLCTS_GLES32_KHR_PKG_N1CFG,
]),
+ Mustpass(project = CTS_KHR_MP_NOCTX_ES_PROJECT, version = "master", isCurrent=False,
+ packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+
Mustpass(project = CTS_AOSP_MP_ES_PROJECT, version = "master", isCurrent=False,
packages = [MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG]),
GL_CTS_KHR_MP_PROJECT = Project(name = "Khronos Mustpass GL", path = GL_CTS_KHR_MP_DATA_DIR, incpath = GL_CTS_MP_INC_DIR, devicepath = GL_CTS_KHR_MP_DEVICE_DIR, copyright = COPYRIGHT_DECLARATION)
+GL_CTS_KHR_MP_NOCTX_DATA_DIR = os.path.join(DEQP_DIR, "external", "openglcts", "data", "mustpass", "gl", "khronos_mustpass_noctx")
+
+GL_CTS_KHR_MP_NOCTX_DEVICE_DIR = "gl_cts/data/mustpass/gl/khronos_mustpass_noctx"
+
+GL_CTS_NOCTX_PROJECT = Project(name = "Khronos Mustpass GL NoContext", path = GL_CTS_KHR_MP_NOCTX_DATA_DIR, incpath = GL_CTS_MP_INC_DIR, devicepath = GL_CTS_KHR_MP_NOCTX_DEVICE_DIR, copyright = COPYRIGHT_DECLARATION)
+
GL_MODULES = OrderedDict([
- ('KHR-GL45', ['master', [include('gl45-master.txt')]]),
- ('KHR-GL44', ['master', [include('gl44-master.txt')]]),
- ('KHR-GL43', ['master', [include('gl43-master.txt')]]),
- ('KHR-GL42', ['master', [include('gl42-master.txt')]]),
- ('KHR-GL41', ['master', [include('gl41-master.txt')]]),
- ('KHR-GL40', ['master', [include('gl40-master.txt')]]),
- ('KHR-GL33', ['master', [include('gl33-master.txt')]]),
- ('KHR-GL32', ['master', [include('gl32-master.txt')]]),
- ('KHR-GL31', ['master', [include('gl31-master.txt')]]),
- ('KHR-GL30', ['master', [include('gl30-master.txt')]]),
- ('GTF-GL45', ['gtf-master', [include('gl45-gtf-master.txt')]]),
- ('GTF-GL44', ['gtf-master', [include('gl44-gtf-master.txt')]]),
- ('GTF-GL43', ['gtf-master', [include('gl43-gtf-master.txt')]]),
- ('GTF-GL42', ['gtf-master', [include('gl42-gtf-master.txt')]]),
- ('GTF-GL41', ['gtf-master', [include('gl41-gtf-master.txt')]]),
- ('GTF-GL40', ['gtf-master', [include('gl40-gtf-master.txt')]]),
- ('GTF-GL33', ['gtf-master', [include('gl33-gtf-master.txt')]]),
- ('GTF-GL32', ['gtf-master', [include('gl32-gtf-master.txt')]]),
- ('GTF-GL31', ['gtf-master', [include('gl31-gtf-master.txt')]]),
- ('GTF-GL30', ['gtf-master', [include('gl30-gtf-master.txt')]])
+ ('KHR-GL45', ['master', [include('gl45-master.txt')]]),
+ ('KHR-GL44', ['master', [include('gl44-master.txt')]]),
+ ('KHR-GL43', ['master', [include('gl43-master.txt')]]),
+ ('KHR-GL42', ['master', [include('gl42-master.txt')]]),
+ ('KHR-GL41', ['master', [include('gl41-master.txt')]]),
+ ('KHR-GL40', ['master', [include('gl40-master.txt')]]),
+ ('KHR-GL33', ['master', [include('gl33-master.txt')]]),
+ ('KHR-GL32', ['master', [include('gl32-master.txt')]]),
+ ('KHR-GL31', ['master', [include('gl31-master.txt')]]),
+ ('KHR-GL30', ['master', [include('gl30-master.txt')]]),
+ ('GTF-GL45', ['gtf-master', [include('gl45-gtf-master.txt')]]),
+ ('GTF-GL44', ['gtf-master', [include('gl44-gtf-master.txt')]]),
+ ('GTF-GL43', ['gtf-master', [include('gl43-gtf-master.txt')]]),
+ ('GTF-GL42', ['gtf-master', [include('gl42-gtf-master.txt')]]),
+ ('GTF-GL41', ['gtf-master', [include('gl41-gtf-master.txt')]]),
+ ('GTF-GL40', ['gtf-master', [include('gl40-gtf-master.txt')]]),
+ ('GTF-GL33', ['gtf-master', [include('gl33-gtf-master.txt')]]),
+ ('GTF-GL32', ['gtf-master', [include('gl32-gtf-master.txt')]]),
+ ('GTF-GL31', ['gtf-master', [include('gl31-gtf-master.txt')]]),
+ ('GTF-GL30', ['gtf-master', [include('gl30-gtf-master.txt')]])
])
def generateGLMustpass():
config_w64 = Configuration(name = cfgName, surfacewidth = "64", surfaceheight = "-1", baseseed = "3", fboconfig = "rgba8888d24s8", filters = cfgFilter)
config_h64 = Configuration(name = cfgName, surfacewidth = "-1", surfaceheight = "64", baseseed = "3", fboconfig = "rgba8888d24s8", filters = cfgFilter)
- pgkModule = getModuleByName(packageName)
- pkg0 = Package(module = pgkModule,
+ pkgModule = getModuleByName(packageName)
+ pkg0 = Package(module = pkgModule,
useforfirsteglconfig = True,
configurations = [
config_w64xh64, config_w113xh47, config_w64, config_h64
]
)
- pkg1 = Package(module = pgkModule,
+ pkg1 = Package(module = pkgModule,
useforfirsteglconfig = False,
configurations = [
config_w64xh64, config_w113xh47,
gl_packages.append(pkg0)
gl_packages.append(pkg1)
- mustpass = [Mustpass(project = GL_CTS_KHR_MP_PROJECT, version = "4.5.5.x", isCurrent=True, packages = gl_packages)]
+ mustpass = [Mustpass(project = GL_CTS_KHR_MP_PROJECT, version = "4.5.5.x", isCurrent=True, packages = gl_packages),
+ Mustpass(project = GL_CTS_NOCTX_PROJECT, version = "4.5.5.x", isCurrent=True, packages = [GLCTS_NOCTX_KHR_PKG_1CFG]),
+ ]
return mustpass
GL_BUILD_CONFIG = BuildConfig(buildPath, "Debug", ["-DDEQP_TARGET=%s" % DEFAULT_TARGET, "-DGLCTS_GTF_TARGET=gl"])
return "glu::ApiType::core(3, 1)"
if apiName == "GL30":
return "glu::ApiType::core(3, 0)"
- if apiName == "EGL":
+ if apiName == "EGL" or apiName == "NOCTX":
return "glu::ApiType()"
raise Exception("Unknown API %s" % apiName)
fileBody += "\n\n"
fileBody += GENERATED_FILE_WARNING
fileBody += "\n\n"
- fileBody += 'const string mustpassDir = "' + mustpass.project.devicepath + '/' + mustpass.version + '/";\n\n'
- fileBody += "struct RunParams\n"
- fileBody += "{\n"
- fileBody += "\tglu::ApiType apiType;\n"
- fileBody += "\tconst string configName;\n"
- fileBody += "\tconst char* glConfigName;\n"
- fileBody += "\tconst string screenRotation;\n"
- fileBody += "\tint\t\t\t baseSeed;\n"
- fileBody += "\tconst char* fboConfig;\n"
- fileBody += "\tint\t\t\t surfaceWidth;\n"
- fileBody += "\tint\t\t\t surfaceHeight;\n"
- fileBody += "};\n"
- fileBody += "\n"
+ fileBody += 'const char* mustpassDir = "' + mustpass.project.devicepath + '/' + mustpass.version + '/";\n\n'
gtf_wrapper_open = "#if defined(DEQP_GTF_AVAILABLE)\n"
gtf_wrapper_close = "#endif // defined(DEQP_GTF_AVAILABLE)\n"
const glu::ContextType& contextType,
glu::ResetNotificationStrategy resetNotificationStrategy)
{
- const bool khrCreateContextSupported = hasExtension(egl, display, "EGL_KHR_create_context");
- EGLContext context = EGL_NO_CONTEXT;
- EGLenum api = EGL_NONE;
+ const bool khrCreateContextSupported = hasExtension(egl, display, "EGL_KHR_create_context");
+ const bool khrCreateContextNoErrorSupported = hasExtension(egl, display, "EGL_KHR_create_context_no_error");
+ EGLContext context = EGL_NO_CONTEXT;
+ EGLenum api = EGL_NONE;
vector<EGLint> attribList;
if (glu::isContextTypeES(contextType))
flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR;
}
+ if ((contextType.getFlags() & glu::CONTEXT_NO_ERROR) != 0)
+ {
+ if (khrCreateContextNoErrorSupported)
+ {
+ attribList.push_back(EGL_CONTEXT_OPENGL_NO_ERROR_KHR);
+ attribList.push_back(EGL_TRUE);
+ }
+ else
+ throw tcu::NotSupportedError("EGL_KHR_create_context_no_error is required for creating no-error contexts");
+ }
+
if ((contextType.getFlags() & glu::CONTEXT_FORWARD_COMPATIBLE) != 0)
{
if (!glu::isContextTypeGLCore(contextType))
#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
#define EGL_NO_RESET_NOTIFICATION 0x31BE
#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
#define EGL_NO_RESET_NOTIFICATION 0x31BE
{
CONTEXT_ROBUST = (1<<0), //!< Robust context
CONTEXT_DEBUG = (1<<1), //!< Debug context
- CONTEXT_FORWARD_COMPATIBLE = (1<<2) //!< Forward-compatible context
+ CONTEXT_FORWARD_COMPATIBLE = (1<<2), //!< Forward-compatible context
+ CONTEXT_NO_ERROR = (1<<3) //!< No error context
};
inline ContextFlags operator| (ContextFlags a, ContextFlags b) { return ContextFlags((deUint32)a|(deUint32)b); }
enum
{
- FLAGS_BITS = 3,
+ FLAGS_BITS = 4,
TOTAL_CONTEXT_BITS = TOTAL_API_BITS+FLAGS_BITS,
FLAGS_SHIFT = TOTAL_API_BITS
};
#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002
#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
#define GL_MAP_READ_BIT 0x0001
#include "tcuRenderTarget.hpp"
#include "glwInitFunctions.hpp"
#include "deUniquePtr.hpp"
+#include "glwEnums.hpp"
#include <sstream>
#include <iterator>
if ((contextType.getFlags() & glu::CONTEXT_ROBUST) != 0)
flags |= GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB;
+ if ((contextType.getFlags() & glu::CONTEXT_NO_ERROR) != 0)
+ {
+ if (m_display.isGlxExtensionSupported("GLX_ARB_create_context_no_error"))
+ {
+ attribs.push_back(GLX_CONTEXT_OPENGL_NO_ERROR_ARB);
+ attribs.push_back(True);
+ }
+ else
+ TCU_THROW(NotSupportedError, "GLX_ARB_create_context_no_error is required for creating no-error contexts");
+ }
+
if (flags != 0)
{
attribs.push_back(GLX_CONTEXT_FLAGS_ARB);
#include "deStringUtil.hpp"
#include "tcuFormatUtil.hpp"
#include "gluRenderConfig.hpp"
+#include "glwEnums.hpp"
#include <map>
+#include <sstream>
+#include <iterator>
+#include <set>
#include <WinGDI.h>
#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+// WGL ARB_create_context_no_error
+#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3
+
DE_BEGIN_EXTERN_C
// WGL core
-typedef HGLRC (WINAPI* wglCreateContextFunc) (HDC hdc);
-typedef BOOL (WINAPI* wglDeleteContextFunc) (HGLRC hglrc);
-typedef BOOL (WINAPI* wglMakeCurrentFunc) (HDC hdc, HGLRC hglrc);
-typedef PROC (WINAPI* wglGetProcAddressFunc) (LPCSTR lpszProc);
-typedef BOOL (WINAPI* wglSwapLayerBuffersFunc) (HDC dhc, UINT fuPlanes);
+typedef HGLRC (WINAPI* wglCreateContextFunc) (HDC hdc);
+typedef BOOL (WINAPI* wglDeleteContextFunc) (HGLRC hglrc);
+typedef BOOL (WINAPI* wglMakeCurrentFunc) (HDC hdc, HGLRC hglrc);
+typedef PROC (WINAPI* wglGetProcAddressFunc) (LPCSTR lpszProc);
+typedef BOOL (WINAPI* wglSwapLayerBuffersFunc) (HDC dhc, UINT fuPlanes);
// WGL_ARB_pixel_format
-typedef BOOL (WINAPI* wglGetPixelFormatAttribivARBFunc) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
-typedef BOOL (WINAPI* wglGetPixelFormatAttribfvARBFunc) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
-typedef BOOL (WINAPI* wglChoosePixelFormatARBFunc) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+typedef BOOL (WINAPI* wglGetPixelFormatAttribivARBFunc) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI* wglGetPixelFormatAttribfvARBFunc) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI* wglChoosePixelFormatARBFunc) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
// WGL_ARB_create_context
-typedef HGLRC (WINAPI* wglCreateContextAttribsARBFunc) (HDC hdc, HGLRC hshareContext, const int* attribList);
+typedef HGLRC (WINAPI* wglCreateContextAttribsARBFunc) (HDC hdc, HGLRC hshareContext, const int* attribList);
+typedef const char* (WINAPI* wglGetExtensionsStringARBFunc) (HDC hdc);
DE_END_EXTERN_C
// WGL_ARB_create_context
wglCreateContextAttribsARBFunc createContextAttribsARB;
+ wglGetExtensionsStringARBFunc getExtensionsStringARB;
Functions (void)
: createContext (DE_NULL)
, getPixelFormatAttribfvARB (DE_NULL)
, choosePixelFormatARB (DE_NULL)
, createContextAttribsARB (DE_NULL)
+ , getExtensionsStringARB (DE_NULL)
{
}
};
const Functions& getFunctions (void) const { return m_functions; }
const de::DynamicLibrary& getGLLibrary (void) const { return m_library; }
+ bool isWglExtensionSupported (const char* extName) const;
private:
de::DynamicLibrary m_library;
Functions m_functions;
+ std::set<std::string> m_extensions;
};
Library::Library (HINSTANCE instance)
// WGL_ARB_create_context
m_functions.createContextAttribsARB = (wglCreateContextAttribsARBFunc)m_functions.getProcAddress("wglCreateContextAttribsARB");
+ m_functions.getExtensionsStringARB = (wglGetExtensionsStringARBFunc)m_functions.getProcAddress("wglGetExtensionsStringARB");
m_functions.makeCurrent(tmpWindow.getDeviceContext(), NULL);
m_functions.deleteContext(tmpCtx);
if (!m_functions.getPixelFormatAttribivARB ||
!m_functions.getPixelFormatAttribfvARB ||
!m_functions.choosePixelFormatARB ||
- !m_functions.createContextAttribsARB)
+ !m_functions.createContextAttribsARB ||
+ !m_functions.getExtensionsStringARB)
throw ResourceError("Failed to load WGL extension functions");
+
+ const char* extensions = m_functions.getExtensionsStringARB(tmpWindow.getDeviceContext());
+ std::istringstream extStream(extensions);
+ m_extensions = std::set<std::string>(std::istream_iterator<std::string>(extStream),
+ std::istream_iterator<std::string>());
}
Library::~Library (void)
{
}
+bool Library::isWglExtensionSupported (const char* extName) const
+{
+ return m_extensions.find(extName) != m_extensions.end();
+}
+
// Core
Core::Core (HINSTANCE instance)
if ((ctxType.getFlags() & glu::CONTEXT_ROBUST) != 0)
flags |= WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB;
+ if ((ctxType.getFlags() & glu::CONTEXT_NO_ERROR) != 0)
+ {
+ if (core->getLibrary()->isWglExtensionSupported("WGL_ARB_create_context_no_error"))
+ {
+ attribList.push_back(WGL_CONTEXT_OPENGL_NO_ERROR_ARB);
+ attribList.push_back(1);
+ }
+ else
+ TCU_THROW(NotSupportedError, "WGL_ARB_create_context_no_error is required for creating no-error contexts");
+ }
+
if (flags != 0)
{
attribList.push_back(WGL_CONTEXT_FLAGS_ARB);
attribList.push_back(0);
// Create context
- m_context = wgl.createContextAttribsARB(deviceCtx, (HGLRC)0, &attribList[0]);
+ m_context = wgl.createContextAttribsARB(deviceCtx, (HGLRC)0, &attribList[0]);
if (!m_context)
TCU_THROW(ResourceError, "Failed to create WGL context");
EXTENSIONS = [
# \todo [2014-12-05 pyry] Use 1.5 core functions/enums instead
"EGL_KHR_create_context",
+ "EGL_KHR_create_context_no_error",
"EGL_KHR_lock_surface",
"EGL_KHR_image_base",
"EGL_KHR_fence_sync",
'GL_KHR_blend_equation_advanced_coherent',
'GL_KHR_debug',
'GL_KHR_robustness',
+ 'GL_KHR_no_error',
'GL_EXT_bgra',
'GL_EXT_geometry_point_size',
'GL_EXT_tessellation_shader',