Add CTS_KHR_no_error test implementation
authorAdam Czupryna <adam.czupryna@mobica.com>
Mon, 27 Feb 2017 10:01:06 +0000 (11:01 +0100)
committerAlexander Galazin <alexander.galazin@arm.com>
Wed, 28 Jun 2017 08:20:41 +0000 (10:20 +0200)
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

36 files changed:
external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml [new file with mode: 0644]
external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt [new file with mode: 0644]
external/openglcts/modules/CMakeLists.txt
external/openglcts/modules/common/CMakeLists.txt
external/openglcts/modules/common/glcNoDefaultContextPackage.cpp
external/openglcts/modules/common/glcNoDefaultContextPackage.hpp
external/openglcts/modules/common/glcNoErrorTests.cpp [new file with mode: 0644]
external/openglcts/modules/common/glcNoErrorTests.hpp [new file with mode: 0644]
external/openglcts/modules/glcTestPackageRegistry.cpp
external/openglcts/modules/runner/glcAospMustpassEgl.hpp
external/openglcts/modules/runner/glcAospMustpassEs.hpp
external/openglcts/modules/runner/glcKhronosMustpassEs.hpp
external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp [new file with mode: 0644]
external/openglcts/modules/runner/glcKhronosMustpassGl.hpp
external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp [new file with mode: 0644]
external/openglcts/modules/runner/glcTestRunner.cpp
external/openglcts/modules/runner/glcTestRunner.hpp
external/openglcts/scripts/build_caselists.py
external/openglcts/scripts/build_mustpass.py
external/openglcts/scripts/mustpass.py
framework/egl/egluGLUtil.cpp
framework/egl/wrapper/eglwEnums.inl
framework/egl/wrapper/eglwEnumsC.inl
framework/opengl/gluRenderContext.hpp
framework/opengl/wrapper/glwEnums.inl
framework/platform/lnx/X11/tcuLnxX11GlxPlatform.cpp
framework/platform/win32/tcuWGL.cpp
scripts/egl/common.py
scripts/opengl/src_util.py

diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/mustpass.xml
new file mode 100644 (file)
index 0000000..f61d5a7
--- /dev/null
@@ -0,0 +1,24 @@
+<?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>
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..ead6f7c
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.gl30.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gl/khronos_mustpass_noctx/4.5.5.x/src/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..706eb29
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.gl*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/mustpass.xml
new file mode 100644 (file)
index 0000000..56b29ce
--- /dev/null
@@ -0,0 +1,24 @@
+<?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>
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..e363547
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.es2.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/3.2.4.x/src/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..8b3a676
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.es*
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/mustpass.xml
new file mode 100644 (file)
index 0000000..6c41041
--- /dev/null
@@ -0,0 +1,24 @@
+<?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>
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..e363547
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.es2.no_error.create_context
diff --git a/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt b/external/openglcts/data/mustpass/gles/khronos_mustpass_noctx/master/src/noctx-khr-master.txt
new file mode 100644 (file)
index 0000000..8b3a676
--- /dev/null
@@ -0,0 +1 @@
+KHR-NoContext.es*
index 9a79996..84850e2 100644 (file)
@@ -41,6 +41,7 @@ set(GLCTS_SRCS
        )
 
 set(GLCTS_LIBS
+       glcts-common-nocontext-package
        glcts-gl
        glcts-es2
        glcts-es3
index 6d1528b..aaf8c6b 100644 (file)
@@ -24,8 +24,8 @@ set(GLCTS_COMMON_SRCS
        glcFragDepthTests.hpp
        glcInfoTests.cpp
        glcInfoTests.hpp
-       glcNoDefaultContextPackage.cpp
-       glcNoDefaultContextPackage.hpp
+       glcNoErrorTests.cpp
+       glcNoErrorTests.hpp
        glcRobustBufferAccessBehaviorTests.cpp
        glcRobustBufferAccessBehaviorTests.hpp
        glcShaderIndexingTests.cpp
@@ -78,3 +78,9 @@ set(GLCTS_COMMON_LIBS
 
 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})
index a91a13b..f26498f 100644 (file)
@@ -22,6 +22,7 @@
  */ /*-------------------------------------------------------------------*/
 
 #include "glcNoDefaultContextPackage.hpp"
+#include "glcNoErrorTests.hpp"
 #include "gluRenderContext.hpp"
 
 namespace glcts
@@ -79,4 +80,14 @@ tcu::TestCaseExecutor* NoDefaultContextPackage::createExecutor(void) const
        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
index 17506d2..ca916c5 100644 (file)
@@ -34,9 +34,7 @@ public:
        NoDefaultContextPackage(tcu::TestContext& testCtx, const char* name);
        virtual ~NoDefaultContextPackage(void);
 
-       virtual void init(void)
-       {
-       }
+       void init(void);
 
        tcu::Archive* getArchive(void)
        {
diff --git a/external/openglcts/modules/common/glcNoErrorTests.cpp b/external/openglcts/modules/common/glcNoErrorTests.cpp
new file mode 100644 (file)
index 0000000..d024c1e
--- /dev/null
@@ -0,0 +1,132 @@
+/*-------------------------------------------------------------------------
+ * 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 */
diff --git a/external/openglcts/modules/common/glcNoErrorTests.hpp b/external/openglcts/modules/common/glcNoErrorTests.hpp
new file mode 100644 (file)
index 0000000..aa35ef7
--- /dev/null
@@ -0,0 +1,76 @@
+#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
index f58a4e3..1719b52 100644 (file)
@@ -54,6 +54,8 @@
 #include "gl3cTestPackages.hpp"
 #include "gl4cTestPackages.hpp"
 
+#include "glcNoDefaultContextPackage.hpp"
+
 #if defined(DEQP_GTF_AVAILABLE)
 #include "gtfGL30TestPackage.hpp"
 #include "gtfGL31TestPackage.hpp"
@@ -147,6 +149,11 @@ static tcu::TestPackage* createES32Package(tcu::TestContext& testCtx)
        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");
@@ -272,6 +279,8 @@ void registerPackages(void)
 
        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);
index 47c0723..e08d324 100644 (file)
  * 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 },
index 9d4636a..25663c5 100644 (file)
  * 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 },
index 8187891..7b4fe17 100644 (file)
  * 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 },
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp b/external/openglcts/modules/runner/glcKhronosMustpassEsNocontext.hpp
new file mode 100644 (file)
index 0000000..4b61afa
--- /dev/null
@@ -0,0 +1,29 @@
+#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
index f3bc02d..2d30c8a 100644 (file)
  * 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 },
diff --git a/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp b/external/openglcts/modules/runner/glcKhronosMustpassGlNocontext.hpp
new file mode 100644 (file)
index 0000000..2a51d14
--- /dev/null
@@ -0,0 +1,29 @@
+#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
index 3bacaf1..afbd316 100644 (file)
@@ -194,7 +194,7 @@ static configInfo parseConfigBitsFromName(const char* configName)
        return cfgInfo;
 }
 
-static string getApiName(glu::ApiType apiType)
+static const char* getApiName(glu::ApiType apiType)
 {
        if (apiType == glu::ApiType::es(2, 0))
                return "gles2";
@@ -228,7 +228,7 @@ static string getApiName(glu::ApiType apiType)
                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=";
@@ -238,7 +238,7 @@ static const string getCaseListFileOption(const string mustpassDir, const string
        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-" +
@@ -252,8 +252,8 @@ static const string getLogFileName(const string apiName, const string configName
        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);
@@ -294,7 +294,8 @@ static void getTestRunsForAOSPEGL(vector<TestRunParams>& runs, const ConfigList&
                        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;
 
@@ -339,7 +340,8 @@ static void getTestRunsForAOSPES(vector<TestRunParams>& runs, const ConfigList&
                        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;
 
@@ -361,10 +363,45 @@ static void getTestRunsForAOSPES(vector<TestRunParams>& runs, const ConfigList&
        }
 }
 
+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"
 
@@ -380,7 +417,8 @@ static void getTestRunsForES(glu::ApiType type, const ConfigList& configs, vecto
                        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;
@@ -401,8 +439,16 @@ static void getTestRunsForES(glu::ApiType type, const ConfigList& configs, vecto
        }
 }
 
+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)
@@ -417,7 +463,8 @@ static void getTestRunsForGL(glu::ApiType type, const ConfigList& configs, vecto
                        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;
index be59095..4ae9a61 100644 (file)
@@ -42,6 +42,18 @@ namespace glcts
 
 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;
index d716a99..0bcbb31 100644 (file)
@@ -51,6 +51,7 @@ MODULES = [
        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"),
index 3930675..813d95b 100644 (file)
@@ -73,6 +73,12 @@ CTS_AOSP_MP_EGL_DATA_DIR             = os.path.join(DEQP_DIR, "external", "openglcts", "dat
 
 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")
@@ -82,6 +88,7 @@ ES2KHR_MODULE                                 = getModuleByName("KHR-GLES2")
 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")
@@ -844,6 +851,20 @@ GLCTS_GLES32_KHR_PKG_N1CFG                 = Package(module = ES32KHR_MODULE, useforfirsteglco
                                        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,
@@ -908,6 +929,10 @@ ES_MUSTPASS_LISTS          = [
                                                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]),
 
@@ -927,6 +952,9 @@ ES_MUSTPASS_LISTS           = [
                                                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]),
 
@@ -947,27 +975,33 @@ GL_CTS_KHR_MP_DEVICE_DIR                  = "gl_cts/data/mustpass/gl/khronos_mustpass"
 
 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():
@@ -980,14 +1014,14 @@ 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,
@@ -996,7 +1030,9 @@ def generateGLMustpass():
                        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"])
index b97ceaa..c8292c8 100644 (file)
@@ -285,7 +285,7 @@ def getApiType(apiName):
                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)
@@ -313,19 +313,7 @@ def genSpecCPPIncludeFile (specFilename, mustpass):
        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"
index 4584cd4..cca5681 100644 (file)
@@ -82,9 +82,10 @@ EGLContext createGLContext (const Library&                                   egl,
                                                        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))
@@ -149,6 +150,17 @@ EGLContext createGLContext (const Library&                                 egl,
                                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))
index 1822da9..6d0cef4 100644 (file)
 #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
index c3ab2ef..6552ff1 100644 (file)
 #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
index 7f896e3..0c6871c 100644 (file)
@@ -61,7 +61,8 @@ enum ContextFlags
 {
        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); }
@@ -158,7 +159,7 @@ protected:
 
        enum
        {
-               FLAGS_BITS                      = 3,
+               FLAGS_BITS                      = 4,
                TOTAL_CONTEXT_BITS      = TOTAL_API_BITS+FLAGS_BITS,
                FLAGS_SHIFT                     = TOTAL_API_BITS
        };
index 60711f7..2df4c82 100644 (file)
@@ -10,6 +10,7 @@
 #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
index df0fda5..297be76 100644 (file)
@@ -26,6 +26,7 @@
 #include "tcuRenderTarget.hpp"
 #include "glwInitFunctions.hpp"
 #include "deUniquePtr.hpp"
+#include "glwEnums.hpp"
 
 #include <sstream>
 #include <iterator>
@@ -353,6 +354,17 @@ GLXContext GlxVisual::createContext (const GlxContextFactory&              factory,
                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);
index bc1819c..a142a4d 100644 (file)
 #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
 
@@ -153,6 +161,7 @@ struct Functions
 
        // WGL_ARB_create_context
        wglCreateContextAttribsARBFunc          createContextAttribsARB;
+       wglGetExtensionsStringARBFunc           getExtensionsStringARB;
 
        Functions (void)
                : createContext                         (DE_NULL)
@@ -164,6 +173,7 @@ struct Functions
                , getPixelFormatAttribfvARB     (DE_NULL)
                , choosePixelFormatARB          (DE_NULL)
                , createContextAttribsARB       (DE_NULL)
+               , getExtensionsStringARB        (DE_NULL)
        {
        }
 };
@@ -178,10 +188,12 @@ public:
 
        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)
@@ -235,6 +247,7 @@ 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);
@@ -242,14 +255,25 @@ Library::Library (HINSTANCE instance)
        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)
@@ -439,6 +463,17 @@ Context::Context (const Core*                                              core,
                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);
@@ -477,7 +512,7 @@ Context::Context (const Core*                                               core,
        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");
index 552d5cb..e0cf276 100644 (file)
@@ -48,6 +48,7 @@ VERSION                               = '1.5'
 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",
index 3a2bf34..efc29df 100644 (file)
@@ -47,6 +47,7 @@ EXTENSIONS                    = [
        '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',