From d7ec39dd049741a9ebfb39fa7fbe763ce81fb98e Mon Sep 17 00:00:00 2001 From: Pyry Haulos Date: Fri, 20 Jan 2017 11:04:46 -0800 Subject: [PATCH] Add basic test for EGL_KHR_no_config_context Change-Id: I14aa3f38ea8d2aaa224c13a992d41cf5ef546f6e --- android/cts/master/egl-master.txt | 1 + modules/egl/teglCreateContextTests.cpp | 101 +++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 24 deletions(-) diff --git a/android/cts/master/egl-master.txt b/android/cts/master/egl-master.txt index 60e5a14..a61fc9f 100644 --- a/android/cts/master/egl-master.txt +++ b/android/cts/master/egl-master.txt @@ -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 diff --git a/modules/egl/teglCreateContextTests.cpp b/modules/egl/teglCreateContextTests.cpp index 81e0c38..17592cd 100644 --- a/modules/egl/teglCreateContextTests.cpp +++ b/modules/egl/teglCreateContextTests.cpp @@ -25,9 +25,11 @@ #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::iterator i = filterLists.begin(); i != filterLists.end(); i++) addChild(new CreateContextCase(m_eglTestCtx, i->getName(), i->getDescription(), *i)); + + addChild(new CreateContextNoConfigCase(m_eglTestCtx)); } } // egl -- 2.7.4