X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=modules%2Fegl%2FteglRenderCase.cpp;h=a0ff8ae7524a93acde261ebb085de923f689f34e;hb=521bf8a7c396dd577e590150d497f07a0e8b73b9;hp=b2c81a0cb08045b82e0ff5a0f2d06304e61745f0;hpb=9e189e136c68e3084af70218bceba39c21afb79c;p=platform%2Fupstream%2FVK-GL-CTS.git diff --git a/modules/egl/teglRenderCase.cpp b/modules/egl/teglRenderCase.cpp index b2c81a0..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) { } @@ -207,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) { } @@ -217,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); @@ -227,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; @@ -288,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) { } @@ -299,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. @@ -385,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 @@ -421,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); } @@ -436,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); }