X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=modules%2Fegl%2FteglRenderCase.cpp;h=a0ff8ae7524a93acde261ebb085de923f689f34e;hb=521bf8a7c396dd577e590150d497f07a0e8b73b9;hp=01fd5764b0ba0ba6c59572b68982ed0df02d4a08;hpb=8e4c731d827046f1a17974614f5fcd568b46c727;p=platform%2Fupstream%2FVK-GL-CTS.git diff --git a/modules/egl/teglRenderCase.cpp b/modules/egl/teglRenderCase.cpp index 01fd576..a0ff8ae 100644 --- a/modules/egl/teglRenderCase.cpp +++ b/modules/egl/teglRenderCase.cpp @@ -71,9 +71,8 @@ static void postSurface (const Library& egl, EGLDisplay display, EGLSurface surf // RenderCase -RenderCase::RenderCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLint apiMask, EGLint surfaceTypeMask, const eglu::FilterList& filters) +RenderCase::RenderCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLint surfaceTypeMask, const eglu::FilterList& filters) : SimpleConfigCase (eglTestCtx, name, description, filters) - , m_apiMask (apiMask) , m_surfaceTypeMask (surfaceTypeMask) { } @@ -130,15 +129,12 @@ void RenderCase::executeForConfig (EGLDisplay display, EGLConfig config) string("Config") + de::toString(configId) + "-Window", string("Config ID ") + de::toString(configId) + ", window surface"); - const eglu::NativeWindowFactory* windowFactory = eglu::selectNativeWindowFactory(displayFactory, m_testCtx.getCommandLine()); - - if (!windowFactory) - TCU_THROW(NotSupportedError, "Windows not supported"); + const eglu::NativeWindowFactory& windowFactory = eglu::selectNativeWindowFactory(displayFactory, m_testCtx.getCommandLine()); try { const eglu::WindowParams params (width, height, eglu::parseWindowVisibility(m_testCtx.getCommandLine())); - de::UniquePtr window (windowFactory->createWindow(&nativeDisplay, display, config, DE_NULL, params)); + de::UniquePtr window (windowFactory.createWindow(&nativeDisplay, display, config, DE_NULL, params)); EGLSurface eglSurface = createWindowSurface(nativeDisplay, *window, display, config, DE_NULL); eglu::UniqueSurface surface (egl, display, eglSurface); @@ -158,14 +154,11 @@ void RenderCase::executeForConfig (EGLDisplay display, EGLConfig config) string("Config") + de::toString(configId) + "-Pixmap", string("Config ID ") + de::toString(configId) + ", pixmap surface"); - const eglu::NativePixmapFactory* pixmapFactory = eglu::selectNativePixmapFactory(displayFactory, m_testCtx.getCommandLine()); - - if (!pixmapFactory) - TCU_THROW(NotSupportedError, "Windows not supported"); + const eglu::NativePixmapFactory& pixmapFactory = eglu::selectNativePixmapFactory(displayFactory, m_testCtx.getCommandLine()); try { - std::auto_ptr pixmap (pixmapFactory->createPixmap(&nativeDisplay, display, config, DE_NULL, width, height)); + std::auto_ptr pixmap (pixmapFactory.createPixmap(&nativeDisplay, display, config, DE_NULL, width, height)); EGLSurface eglSurface = createPixmapSurface(nativeDisplay, *pixmap, display, config, DE_NULL); eglu::UniqueSurface surface (egl, display, eglSurface); @@ -213,7 +206,8 @@ void RenderCase::executeForConfig (EGLDisplay display, EGLConfig config) // SingleContextRenderCase SingleContextRenderCase::SingleContextRenderCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLint apiMask, EGLint surfaceTypeMask, const eglu::FilterList& filters) - : RenderCase(eglTestCtx, name, description, apiMask, surfaceTypeMask, filters) + : RenderCase (eglTestCtx, name, description, surfaceTypeMask, filters) + , m_apiMask (apiMask) { } @@ -223,9 +217,10 @@ SingleContextRenderCase::~SingleContextRenderCase (void) void SingleContextRenderCase::executeForSurface (EGLDisplay display, EGLSurface surface, const Config& config) { - const Library& egl = m_eglTestCtx.getLibrary(); - const EGLint apis[] = { EGL_OPENGL_ES2_BIT, EGL_OPENGL_ES3_BIT_KHR, EGL_OPENGL_ES_BIT, EGL_OPENVG_BIT }; - tcu::TestLog& log = m_testCtx.getLog(); + const Library& egl = m_eglTestCtx.getLibrary(); + const EGLint apis[] = { EGL_OPENGL_ES2_BIT, EGL_OPENGL_ES3_BIT_KHR, EGL_OPENGL_ES_BIT, EGL_OPENVG_BIT }; + tcu::TestLog& log = m_testCtx.getLog(); + const EGLint configApiMask = eglu::getConfigAttribInt(egl, display, config.config, EGL_RENDERABLE_TYPE); checkBuildClientAPISupport(m_apiMask); @@ -233,8 +228,9 @@ void SingleContextRenderCase::executeForSurface (EGLDisplay display, EGLSurface { EGLint apiBit = apis[apiNdx]; - if ((apiBit & m_apiMask) == 0) - continue; // Skip this api. + // Skip API if build or current config doesn't support it. + if ((apiBit & m_apiMask) == 0 || (apiBit & configApiMask) == 0) + continue; EGLint api = EGL_NONE; const char* apiName = DE_NULL; @@ -294,8 +290,9 @@ void SingleContextRenderCase::executeForSurface (EGLDisplay display, EGLSurface // MultiContextRenderCase MultiContextRenderCase::MultiContextRenderCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLint api, EGLint surfaceType, const eglu::FilterList& filters, int numContextsPerApi) - : RenderCase (eglTestCtx, name, description, api, surfaceType, filters) + : RenderCase (eglTestCtx, name, description, surfaceType, filters) , m_numContextsPerApi (numContextsPerApi) + , m_apiMask (api) { } @@ -305,12 +302,16 @@ MultiContextRenderCase::~MultiContextRenderCase (void) void MultiContextRenderCase::executeForSurface (EGLDisplay display, EGLSurface surface, const Config& config) { - const Library& egl = m_eglTestCtx.getLibrary(); + const Library& egl = m_eglTestCtx.getLibrary(); + const EGLint configApiMask = eglu::getConfigAttribInt(egl, display, config.config, EGL_RENDERABLE_TYPE); vector > contexts; contexts.reserve(3*m_numContextsPerApi); // 3 types of contexts at maximum. checkBuildClientAPISupport(m_apiMask); + // ConfigFilter should make sure that config always supports all of the APIs. + TCU_CHECK_INTERNAL((configApiMask & m_apiMask) == m_apiMask); + try { // Create contexts that will participate in rendering. @@ -391,6 +392,16 @@ static bool surfaceType (const eglu::CandidateConfig& c) return (c.surfaceType() & Type) == Type; } +static bool isConformant (const eglu::CandidateConfig& c) +{ + return c.get(EGL_CONFIG_CAVEAT) != EGL_NON_CONFORMANT_CONFIG; +} + +static bool notFloat (const eglu::CandidateConfig& c) +{ + return c.colorComponentType() != EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT; +} + void getDefaultRenderFilterLists (vector& filterLists, const eglu::FilterList& baseFilters) { static const struct @@ -427,7 +438,8 @@ void getDefaultRenderFilterLists (vector& filterLists, const e filters << baseFilters << s_colorRules[colorNdx].filter - << s_surfaceRules[surfaceNdx].filter; + << s_surfaceRules[surfaceNdx].filter + << isConformant; filterLists.push_back(filters); } @@ -442,7 +454,9 @@ void getDefaultRenderFilterLists (vector& filterLists, const e << notColorBits<8, 8, 8, 0> << notColorBits<4, 4, 4, 4> << notColorBits<5, 5, 5, 1> - << notColorBits<8, 8, 8, 8>; + << notColorBits<8, 8, 8, 8> + << isConformant + << notFloat; filterLists.push_back(filters); }