Add basic test for EGL_KHR_no_config_context am: d7ec39dd04 am: a05826c329
authorPyry Haulos <phaulos@google.com>
Tue, 24 Jan 2017 23:25:52 +0000 (23:25 +0000)
committerandroid-build-merger <android-build-merger@google.com>
Tue, 24 Jan 2017 23:25:52 +0000 (23:25 +0000)
am: 726be5f657

Change-Id: Idd4cbec6935fb1fbbc465aa0e416258033002e4c

android/cts/master/egl-master.txt
modules/egl/teglCreateContextTests.cpp

index 60e5a14..a61fc9f 100644 (file)
@@ -24,6 +24,7 @@ dEQP-EGL.functional.create_context.rgba8888_no_depth_stencil
 dEQP-EGL.functional.create_context.rgba8888_depth_no_stencil
 dEQP-EGL.functional.create_context.rgba8888_depth_stencil
 dEQP-EGL.functional.create_context.other
+dEQP-EGL.functional.create_context.no_config
 dEQP-EGL.functional.query_context.simple.query_api
 dEQP-EGL.functional.query_context.get_current_context.rgb565_window
 dEQP-EGL.functional.query_context.get_current_context.rgb565_pixmap
index 81e0c38..17592cd 100644 (file)
 #include "teglSimpleConfigCase.hpp"
 #include "egluStrUtil.hpp"
 #include "egluUtil.hpp"
+#include "egluUnique.hpp"
 #include "eglwLibrary.hpp"
 #include "eglwEnums.hpp"
 #include "tcuTestLog.hpp"
+#include "deSTLUtil.hpp"
 
 namespace deqp
 {
@@ -38,6 +40,25 @@ using std::vector;
 using tcu::TestLog;
 using namespace eglw;
 
+static const EGLint s_es1Attrs[] = { EGL_CONTEXT_CLIENT_VERSION,       1, EGL_NONE };
+static const EGLint s_es2Attrs[] = { EGL_CONTEXT_CLIENT_VERSION,       2, EGL_NONE };
+static const EGLint s_es3Attrs[] = { EGL_CONTEXT_MAJOR_VERSION_KHR,    3, EGL_NONE };
+
+static const struct
+{
+       const char*             name;
+       EGLenum                 api;
+       EGLint                  apiBit;
+       const EGLint*   ctxAttrs;
+} s_apis[] =
+{
+       { "OpenGL",                     EGL_OPENGL_API,         EGL_OPENGL_BIT,                 DE_NULL         },
+       { "OpenGL ES 1",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES_BIT,              s_es1Attrs      },
+       { "OpenGL ES 2",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES2_BIT,             s_es2Attrs      },
+       { "OpenGL ES 3",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES3_BIT_KHR, s_es3Attrs      },
+       { "OpenVG",                     EGL_OPENVG_API,         EGL_OPENVG_BIT,                 DE_NULL         }
+};
+
 class CreateContextCase : public SimpleConfigCase
 {
 public:
@@ -63,36 +84,17 @@ void CreateContextCase::executeForConfig (EGLDisplay display, EGLConfig config)
        EGLint                  id              = eglu::getConfigAttribInt(egl, display, config, EGL_CONFIG_ID);
        EGLint                  apiBits = eglu::getConfigAttribInt(egl, display, config, EGL_RENDERABLE_TYPE);
 
-       static const EGLint es1Attrs[] = { EGL_CONTEXT_CLIENT_VERSION,          1, EGL_NONE };
-       static const EGLint es2Attrs[] = { EGL_CONTEXT_CLIENT_VERSION,          2, EGL_NONE };
-       static const EGLint es3Attrs[] = { EGL_CONTEXT_MAJOR_VERSION_KHR,       3, EGL_NONE };
-
-       static const struct
+       for (int apiNdx = 0; apiNdx < (int)DE_LENGTH_OF_ARRAY(s_apis); apiNdx++)
        {
-               const char*             name;
-               EGLenum                 api;
-               EGLint                  apiBit;
-               const EGLint*   ctxAttrs;
-       } apis[] =
-       {
-               { "OpenGL",                     EGL_OPENGL_API,         EGL_OPENGL_BIT,                 DE_NULL         },
-               { "OpenGL ES 1",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES_BIT,              es1Attrs        },
-               { "OpenGL ES 2",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES2_BIT,             es2Attrs        },
-               { "OpenGL ES 3",        EGL_OPENGL_ES_API,      EGL_OPENGL_ES3_BIT_KHR, es3Attrs        },
-               { "OpenVG",                     EGL_OPENVG_API,         EGL_OPENVG_BIT,                 DE_NULL         }
-       };
-
-       for (int apiNdx = 0; apiNdx < (int)DE_LENGTH_OF_ARRAY(apis); apiNdx++)
-       {
-               if ((apiBits & apis[apiNdx].apiBit) == 0)
+               if ((apiBits & s_apis[apiNdx].apiBit) == 0)
                        continue; // Not supported API
 
-               log << TestLog::Message << "Creating " << apis[apiNdx].name << " context with config ID " << id << TestLog::EndMessage;
+               log << TestLog::Message << "Creating " << s_apis[apiNdx].name << " context with config ID " << id << TestLog::EndMessage;
                EGLU_CHECK_MSG(egl, "init");
 
-               EGLU_CHECK_CALL(egl, bindAPI(apis[apiNdx].api));
+               EGLU_CHECK_CALL(egl, bindAPI(s_apis[apiNdx].api));
 
-               EGLContext      context = egl.createContext(display, config, EGL_NO_CONTEXT, apis[apiNdx].ctxAttrs);
+               EGLContext      context = egl.createContext(display, config, EGL_NO_CONTEXT, s_apis[apiNdx].ctxAttrs);
                EGLenum         err             = egl.getError();
 
                if (context == EGL_NO_CONTEXT || err != EGL_SUCCESS)
@@ -109,6 +111,55 @@ void CreateContextCase::executeForConfig (EGLDisplay display, EGLConfig config)
        }
 }
 
+class CreateContextNoConfigCase : public TestCase
+{
+public:
+       CreateContextNoConfigCase (EglTestContext& eglTestCtx)
+               : TestCase(eglTestCtx, "no_config", "EGL_KHR_no_config_context")
+       {
+       }
+
+       IterateResult iterate (void)
+       {
+               const eglw::Library&            egl             = m_eglTestCtx.getLibrary();
+               const eglu::UniqueDisplay       display (egl, eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay(), DE_NULL));
+               tcu::TestLog&                           log             = m_testCtx.getLog();
+
+               if (!eglu::hasExtension(egl, *display, "EGL_KHR_no_config_context"))
+                       TCU_THROW(NotSupportedError, "EGL_KHR_no_config_context is not supported");
+
+               for (int apiNdx = 0; apiNdx < (int)DE_LENGTH_OF_ARRAY(s_apis); apiNdx++)
+               {
+                       const EGLenum   api             = s_apis[apiNdx].api;
+
+                       if (egl.bindAPI(api) != EGL_FALSE)
+                       {
+                               TCU_CHECK(egl.getError() == EGL_BAD_PARAMETER);
+                               log << TestLog::Message << "eglBindAPI(" << eglu::getAPIStr(api) << ") failed, skipping" << TestLog::EndMessage;
+                               continue;
+                       }
+
+                       log << TestLog::Message << "Creating " << s_apis[apiNdx].name << " context" << TestLog::EndMessage;
+
+                       const EGLContext        context = egl.createContext(*display, (EGLConfig)0, EGL_NO_CONTEXT, s_apis[apiNdx].ctxAttrs);
+                       const EGLenum           err             = egl.getError();
+
+                       if (context == EGL_NO_CONTEXT || err != EGL_SUCCESS)
+                       {
+                               log << TestLog::Message << "  Fail, context: " << tcu::toHex(context) << ", error: " << eglu::getErrorName(err) << TestLog::EndMessage;
+                               m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Failed to create context");
+                       }
+                       else
+                       {
+                               // Destroy
+                               EGLU_CHECK_CALL(egl, destroyContext(*display, context));
+                               log << TestLog::Message << "  Pass" << TestLog::EndMessage;
+                       }
+               }
+
+               return STOP;
+       }
+};
 
 CreateContextTests::CreateContextTests (EglTestContext& eglTestCtx)
        : TestCaseGroup(eglTestCtx, "create_context", "Basic eglCreateContext() tests")
@@ -126,6 +177,8 @@ void CreateContextTests::init (void)
 
        for (vector<NamedFilterList>::iterator i = filterLists.begin(); i != filterLists.end(); i++)
                addChild(new CreateContextCase(m_eglTestCtx, i->getName(), i->getDescription(), *i));
+
+       addChild(new CreateContextNoConfigCase(m_eglTestCtx));
 }
 
 } // egl