1e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 2e5c31af7Sopenharmony_ci * drawElements Quality Program EGL Module 3e5c31af7Sopenharmony_ci * --------------------------------------- 4e5c31af7Sopenharmony_ci * 5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 10e5c31af7Sopenharmony_ci * 11e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 17e5c31af7Sopenharmony_ci * limitations under the License. 18e5c31af7Sopenharmony_ci * 19e5c31af7Sopenharmony_ci *//*! 20e5c31af7Sopenharmony_ci * \file 21e5c31af7Sopenharmony_ci * \brief Extension function pointer query tests. 22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci#include "teglGetProcAddressTests.hpp" 25e5c31af7Sopenharmony_ci#include "teglTestCase.hpp" 26e5c31af7Sopenharmony_ci#include "egluCallLogWrapper.hpp" 27e5c31af7Sopenharmony_ci#include "egluStrUtil.hpp" 28e5c31af7Sopenharmony_ci#include "egluUtil.hpp" 29e5c31af7Sopenharmony_ci#include "eglwLibrary.hpp" 30e5c31af7Sopenharmony_ci#include "eglwEnums.hpp" 31e5c31af7Sopenharmony_ci#include "tcuTestLog.hpp" 32e5c31af7Sopenharmony_ci#include "deSTLUtil.hpp" 33e5c31af7Sopenharmony_ci#include "deStringUtil.hpp" 34e5c31af7Sopenharmony_ci 35e5c31af7Sopenharmony_cinamespace deqp 36e5c31af7Sopenharmony_ci{ 37e5c31af7Sopenharmony_cinamespace egl 38e5c31af7Sopenharmony_ci{ 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_cinamespace 41e5c31af7Sopenharmony_ci{ 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ci#define EGL_MAKE_VERSION(major, minor) (((major) << 12) | (minor)) 44e5c31af7Sopenharmony_ci 45e5c31af7Sopenharmony_ciusing tcu::TestLog; 46e5c31af7Sopenharmony_ciusing namespace eglw; 47e5c31af7Sopenharmony_ci 48e5c31af7Sopenharmony_ci// Function name strings generated from API headers 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci#include "teglGetProcAddressTests.inl" 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_cistruct FunctionNames 53e5c31af7Sopenharmony_ci{ 54e5c31af7Sopenharmony_ci int numFunctions; 55e5c31af7Sopenharmony_ci const char* const* functions; 56e5c31af7Sopenharmony_ci 57e5c31af7Sopenharmony_ci FunctionNames (int numFunctions_, const char* const* functions_) 58e5c31af7Sopenharmony_ci : numFunctions (numFunctions_) 59e5c31af7Sopenharmony_ci , functions (functions_) 60e5c31af7Sopenharmony_ci { 61e5c31af7Sopenharmony_ci } 62e5c31af7Sopenharmony_ci}; 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ciFunctionNames getExtFunctionNames (const std::string& extName) 65e5c31af7Sopenharmony_ci{ 66e5c31af7Sopenharmony_ci for (int ndx = 0; ndx <= DE_LENGTH_OF_ARRAY(s_extensions); ndx++) 67e5c31af7Sopenharmony_ci { 68e5c31af7Sopenharmony_ci if (extName == s_extensions[ndx].name) 69e5c31af7Sopenharmony_ci return FunctionNames(s_extensions[ndx].numFunctions, s_extensions[ndx].functions); 70e5c31af7Sopenharmony_ci } 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_ci DE_ASSERT(false); 73e5c31af7Sopenharmony_ci return FunctionNames(0, DE_NULL); 74e5c31af7Sopenharmony_ci} 75e5c31af7Sopenharmony_ci 76e5c31af7Sopenharmony_ci} // anonymous 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_ci// Base class for eglGetProcAddress() test cases 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ciclass GetProcAddressCase : public TestCase, protected eglu::CallLogWrapper 81e5c31af7Sopenharmony_ci{ 82e5c31af7Sopenharmony_cipublic: 83e5c31af7Sopenharmony_ci GetProcAddressCase (EglTestContext& eglTestCtx, const char* name, const char* description); 84e5c31af7Sopenharmony_ci virtual ~GetProcAddressCase (void); 85e5c31af7Sopenharmony_ci 86e5c31af7Sopenharmony_ci void init (void); 87e5c31af7Sopenharmony_ci void deinit (void); 88e5c31af7Sopenharmony_ci IterateResult iterate (void); 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_ci bool isSupported (const std::string& extName); 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_ci virtual void executeTest (void) = 0; 93e5c31af7Sopenharmony_ci 94e5c31af7Sopenharmony_ciprotected: 95e5c31af7Sopenharmony_ci EGLDisplay m_display; 96e5c31af7Sopenharmony_ci int m_eglVersion; 97e5c31af7Sopenharmony_ci 98e5c31af7Sopenharmony_ciprivate: 99e5c31af7Sopenharmony_ci std::vector<std::string> m_supported; 100e5c31af7Sopenharmony_ci}; 101e5c31af7Sopenharmony_ci 102e5c31af7Sopenharmony_ciGetProcAddressCase::GetProcAddressCase (EglTestContext& eglTestCtx, const char* name, const char* description) 103e5c31af7Sopenharmony_ci : TestCase (eglTestCtx, name, description) 104e5c31af7Sopenharmony_ci , CallLogWrapper (eglTestCtx.getLibrary(), eglTestCtx.getTestContext().getLog()) 105e5c31af7Sopenharmony_ci , m_display (EGL_NO_DISPLAY) 106e5c31af7Sopenharmony_ci{ 107e5c31af7Sopenharmony_ci} 108e5c31af7Sopenharmony_ci 109e5c31af7Sopenharmony_ciGetProcAddressCase::~GetProcAddressCase (void) 110e5c31af7Sopenharmony_ci{ 111e5c31af7Sopenharmony_ci} 112e5c31af7Sopenharmony_ci 113e5c31af7Sopenharmony_civoid GetProcAddressCase::init (void) 114e5c31af7Sopenharmony_ci{ 115e5c31af7Sopenharmony_ci try 116e5c31af7Sopenharmony_ci { 117e5c31af7Sopenharmony_ci m_supported = eglu::getClientExtensions(m_eglTestCtx.getLibrary()); 118e5c31af7Sopenharmony_ci } 119e5c31af7Sopenharmony_ci catch (const tcu::NotSupportedError&) 120e5c31af7Sopenharmony_ci { 121e5c31af7Sopenharmony_ci // Ignore case where EGL client extensions are not supported 122e5c31af7Sopenharmony_ci // that's okay for these tests. 123e5c31af7Sopenharmony_ci } 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ci DE_ASSERT(m_display == EGL_NO_DISPLAY); 126e5c31af7Sopenharmony_ci 127e5c31af7Sopenharmony_ci m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 128e5c31af7Sopenharmony_ci 129e5c31af7Sopenharmony_ci // The EGL_VERSION string is laid out as follows: 130e5c31af7Sopenharmony_ci // major_version.minor_version space vendor_specific_info 131e5c31af7Sopenharmony_ci // Split version from vendor_specific_info 132e5c31af7Sopenharmony_ci std::vector<std::string> tokens = de::splitString(eglQueryString(m_display, EGL_VERSION), ' '); 133e5c31af7Sopenharmony_ci // split version into major & minor 134e5c31af7Sopenharmony_ci std::vector<std::string> values = de::splitString(tokens[0], '.'); 135e5c31af7Sopenharmony_ci m_eglVersion = EGL_MAKE_VERSION(atoi(values[0].c_str()), atoi(values[1].c_str())); 136e5c31af7Sopenharmony_ci 137e5c31af7Sopenharmony_ci { 138e5c31af7Sopenharmony_ci const std::vector<std::string> displayExtensios = eglu::getDisplayExtensions(m_eglTestCtx.getLibrary(), m_display); 139e5c31af7Sopenharmony_ci m_supported.insert(m_supported.end(), displayExtensios.begin(), displayExtensios.end()); 140e5c31af7Sopenharmony_ci } 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ci m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 143e5c31af7Sopenharmony_ci} 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_civoid GetProcAddressCase::deinit (void) 146e5c31af7Sopenharmony_ci{ 147e5c31af7Sopenharmony_ci m_eglTestCtx.getLibrary().terminate(m_display); 148e5c31af7Sopenharmony_ci m_display = EGL_NO_DISPLAY; 149e5c31af7Sopenharmony_ci} 150e5c31af7Sopenharmony_ci 151e5c31af7Sopenharmony_citcu::TestNode::IterateResult GetProcAddressCase::iterate (void) 152e5c31af7Sopenharmony_ci{ 153e5c31af7Sopenharmony_ci enableLogging(true); 154e5c31af7Sopenharmony_ci 155e5c31af7Sopenharmony_ci executeTest(); 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci enableLogging(false); 158e5c31af7Sopenharmony_ci 159e5c31af7Sopenharmony_ci return STOP; 160e5c31af7Sopenharmony_ci} 161e5c31af7Sopenharmony_ci 162e5c31af7Sopenharmony_cibool GetProcAddressCase::isSupported (const std::string& extName) 163e5c31af7Sopenharmony_ci{ 164e5c31af7Sopenharmony_ci return de::contains(m_supported.begin(), m_supported.end(), extName); 165e5c31af7Sopenharmony_ci} 166e5c31af7Sopenharmony_ci 167e5c31af7Sopenharmony_ci// Test by extension 168e5c31af7Sopenharmony_ci 169e5c31af7Sopenharmony_ciclass GetProcAddressExtensionCase : public GetProcAddressCase 170e5c31af7Sopenharmony_ci{ 171e5c31af7Sopenharmony_cipublic: 172e5c31af7Sopenharmony_ci GetProcAddressExtensionCase (EglTestContext& eglTestCtx, const char* name, const char* description, const std::string& extName) 173e5c31af7Sopenharmony_ci : GetProcAddressCase (eglTestCtx, name, description) 174e5c31af7Sopenharmony_ci , m_extName (extName) 175e5c31af7Sopenharmony_ci { 176e5c31af7Sopenharmony_ci } 177e5c31af7Sopenharmony_ci 178e5c31af7Sopenharmony_ci virtual ~GetProcAddressExtensionCase (void) 179e5c31af7Sopenharmony_ci { 180e5c31af7Sopenharmony_ci } 181e5c31af7Sopenharmony_ci 182e5c31af7Sopenharmony_ci void executeTest (void) 183e5c31af7Sopenharmony_ci { 184e5c31af7Sopenharmony_ci TestLog& log = m_testCtx.getLog(); 185e5c31af7Sopenharmony_ci bool supported = isSupported(m_extName); 186e5c31af7Sopenharmony_ci const FunctionNames funcNames = getExtFunctionNames(m_extName); 187e5c31af7Sopenharmony_ci 188e5c31af7Sopenharmony_ci DE_ASSERT(funcNames.numFunctions > 0); 189e5c31af7Sopenharmony_ci 190e5c31af7Sopenharmony_ci log << TestLog::Message << m_extName << ": " << (supported ? "supported" : "not supported") << TestLog::EndMessage; 191e5c31af7Sopenharmony_ci log << TestLog::Message << TestLog::EndMessage; 192e5c31af7Sopenharmony_ci 193e5c31af7Sopenharmony_ci for (int funcNdx = 0; funcNdx < funcNames.numFunctions; funcNdx++) 194e5c31af7Sopenharmony_ci { 195e5c31af7Sopenharmony_ci const char* funcName = funcNames.functions[funcNdx]; 196e5c31af7Sopenharmony_ci void (*funcPtr)(void); 197e5c31af7Sopenharmony_ci 198e5c31af7Sopenharmony_ci funcPtr = eglGetProcAddress(funcName); 199e5c31af7Sopenharmony_ci eglu::checkError(eglGetError(), "eglGetProcAddress()", __FILE__, __LINE__); 200e5c31af7Sopenharmony_ci 201e5c31af7Sopenharmony_ci if (supported && funcPtr == 0) 202e5c31af7Sopenharmony_ci { 203e5c31af7Sopenharmony_ci log << TestLog::Message << "Fail, received null pointer for supported extension function: " << funcName << TestLog::EndMessage; 204e5c31af7Sopenharmony_ci m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Unexpected null pointer"); 205e5c31af7Sopenharmony_ci } 206e5c31af7Sopenharmony_ci } 207e5c31af7Sopenharmony_ci } 208e5c31af7Sopenharmony_ci 209e5c31af7Sopenharmony_ciprivate: 210e5c31af7Sopenharmony_ci std::string m_extName; 211e5c31af7Sopenharmony_ci}; 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci// Test core functions 214e5c31af7Sopenharmony_ci 215e5c31af7Sopenharmony_ciclass GetProcAddressCoreFunctionsCase : public GetProcAddressCase 216e5c31af7Sopenharmony_ci{ 217e5c31af7Sopenharmony_cipublic: 218e5c31af7Sopenharmony_ci enum ApiType 219e5c31af7Sopenharmony_ci { 220e5c31af7Sopenharmony_ci EGL14, 221e5c31af7Sopenharmony_ci EGL15, 222e5c31af7Sopenharmony_ci GLES, 223e5c31af7Sopenharmony_ci GLES2, 224e5c31af7Sopenharmony_ci GLES3 225e5c31af7Sopenharmony_ci }; 226e5c31af7Sopenharmony_ci 227e5c31af7Sopenharmony_ci GetProcAddressCoreFunctionsCase (EglTestContext& eglTestCtx, const char* name, const char* description, const ApiType apiType) 228e5c31af7Sopenharmony_ci : GetProcAddressCase (eglTestCtx, name, description) 229e5c31af7Sopenharmony_ci , m_apiType (apiType) 230e5c31af7Sopenharmony_ci { 231e5c31af7Sopenharmony_ci } 232e5c31af7Sopenharmony_ci 233e5c31af7Sopenharmony_ci virtual ~GetProcAddressCoreFunctionsCase (void) 234e5c31af7Sopenharmony_ci { 235e5c31af7Sopenharmony_ci } 236e5c31af7Sopenharmony_ci 237e5c31af7Sopenharmony_ci EGLint RenderableType (ApiType type) 238e5c31af7Sopenharmony_ci { 239e5c31af7Sopenharmony_ci EGLint renderableType = EGL_OPENGL_ES_BIT; 240e5c31af7Sopenharmony_ci switch (type) { 241e5c31af7Sopenharmony_ci case EGL14: 242e5c31af7Sopenharmony_ci case EGL15: 243e5c31af7Sopenharmony_ci case GLES: 244e5c31af7Sopenharmony_ci renderableType = EGL_OPENGL_ES_BIT; 245e5c31af7Sopenharmony_ci break; 246e5c31af7Sopenharmony_ci case GLES2: 247e5c31af7Sopenharmony_ci renderableType = EGL_OPENGL_ES2_BIT; 248e5c31af7Sopenharmony_ci break; 249e5c31af7Sopenharmony_ci case GLES3: 250e5c31af7Sopenharmony_ci renderableType = EGL_OPENGL_ES3_BIT_KHR; 251e5c31af7Sopenharmony_ci break; 252e5c31af7Sopenharmony_ci } 253e5c31af7Sopenharmony_ci return renderableType; 254e5c31af7Sopenharmony_ci } 255e5c31af7Sopenharmony_ci 256e5c31af7Sopenharmony_ci bool isApiSupported (void) 257e5c31af7Sopenharmony_ci { 258e5c31af7Sopenharmony_ci EGLint renderableType = EGL_OPENGL_ES_BIT; 259e5c31af7Sopenharmony_ci switch (m_apiType) { 260e5c31af7Sopenharmony_ci case EGL14: 261e5c31af7Sopenharmony_ci return m_eglVersion >= EGL_MAKE_VERSION(1, 4); 262e5c31af7Sopenharmony_ci case EGL15: 263e5c31af7Sopenharmony_ci // With Android Q, EGL 1.5 entry points must have valid 264e5c31af7Sopenharmony_ci // GetProcAddress. 265e5c31af7Sopenharmony_ci return m_eglVersion >= EGL_MAKE_VERSION(1, 5); 266e5c31af7Sopenharmony_ci case GLES: 267e5c31af7Sopenharmony_ci case GLES2: 268e5c31af7Sopenharmony_ci case GLES3: 269e5c31af7Sopenharmony_ci renderableType = RenderableType(m_apiType); 270e5c31af7Sopenharmony_ci break; 271e5c31af7Sopenharmony_ci } 272e5c31af7Sopenharmony_ci return (eglu::getRenderableAPIsMask(m_eglTestCtx.getLibrary(), m_display) & renderableType) == renderableType; 273e5c31af7Sopenharmony_ci } 274e5c31af7Sopenharmony_ci 275e5c31af7Sopenharmony_ci FunctionNames getCoreFunctionNames (EGLint apiType) 276e5c31af7Sopenharmony_ci { 277e5c31af7Sopenharmony_ci switch (apiType) 278e5c31af7Sopenharmony_ci { 279e5c31af7Sopenharmony_ci case EGL14: return FunctionNames(DE_LENGTH_OF_ARRAY(s_EGL14), s_EGL14); 280e5c31af7Sopenharmony_ci case EGL15: return FunctionNames(DE_LENGTH_OF_ARRAY(s_EGL15), s_EGL15); 281e5c31af7Sopenharmony_ci case GLES : return FunctionNames(DE_LENGTH_OF_ARRAY(s_GLES10), s_GLES10); 282e5c31af7Sopenharmony_ci case GLES2: return FunctionNames(DE_LENGTH_OF_ARRAY(s_GLES20), s_GLES20); 283e5c31af7Sopenharmony_ci case GLES3: return FunctionNames(DE_LENGTH_OF_ARRAY(s_GLES30), s_GLES30); 284e5c31af7Sopenharmony_ci default: 285e5c31af7Sopenharmony_ci DE_ASSERT(false); 286e5c31af7Sopenharmony_ci } 287e5c31af7Sopenharmony_ci 288e5c31af7Sopenharmony_ci return FunctionNames(0, DE_NULL); 289e5c31af7Sopenharmony_ci } 290e5c31af7Sopenharmony_ci 291e5c31af7Sopenharmony_ci void executeTest (void) 292e5c31af7Sopenharmony_ci { 293e5c31af7Sopenharmony_ci TestLog& log = m_testCtx.getLog(); 294e5c31af7Sopenharmony_ci const bool funcPtrSupported = isSupported("EGL_KHR_get_all_proc_addresses"); 295e5c31af7Sopenharmony_ci const bool apiSupported = isApiSupported(); 296e5c31af7Sopenharmony_ci const FunctionNames funcNames = getCoreFunctionNames(m_apiType); 297e5c31af7Sopenharmony_ci 298e5c31af7Sopenharmony_ci log << TestLog::Message << "EGL_KHR_get_all_proc_addresses: " << (funcPtrSupported ? "supported" : "not supported") << TestLog::EndMessage; 299e5c31af7Sopenharmony_ci log << TestLog::Message << TestLog::EndMessage; 300e5c31af7Sopenharmony_ci 301e5c31af7Sopenharmony_ci if (!apiSupported) 302e5c31af7Sopenharmony_ci { 303e5c31af7Sopenharmony_ci switch (m_apiType) 304e5c31af7Sopenharmony_ci { 305e5c31af7Sopenharmony_ci case EGL14: 306e5c31af7Sopenharmony_ci log << TestLog::Message << " EGL not supported by any available configuration." << TestLog::EndMessage; 307e5c31af7Sopenharmony_ci break; 308e5c31af7Sopenharmony_ci case EGL15: 309e5c31af7Sopenharmony_ci log << TestLog::Message << " EGL 1.5 not supported by any available configuration." << TestLog::EndMessage; 310e5c31af7Sopenharmony_ci break; 311e5c31af7Sopenharmony_ci case GLES: 312e5c31af7Sopenharmony_ci case GLES2: 313e5c31af7Sopenharmony_ci case GLES3: 314e5c31af7Sopenharmony_ci log << TestLog::Message << eglu::getConfigAttribValueStr(EGL_RENDERABLE_TYPE, RenderableType(m_apiType)) << " not supported by any available configuration." << TestLog::EndMessage; 315e5c31af7Sopenharmony_ci break; 316e5c31af7Sopenharmony_ci } 317e5c31af7Sopenharmony_ci log << TestLog::Message << TestLog::EndMessage; 318e5c31af7Sopenharmony_ci } 319e5c31af7Sopenharmony_ci 320e5c31af7Sopenharmony_ci for (int funcNdx = 0; funcNdx < funcNames.numFunctions; funcNdx++) 321e5c31af7Sopenharmony_ci { 322e5c31af7Sopenharmony_ci const char* funcName = funcNames.functions[funcNdx]; 323e5c31af7Sopenharmony_ci void (*funcPtr)(void); 324e5c31af7Sopenharmony_ci 325e5c31af7Sopenharmony_ci funcPtr = eglGetProcAddress(funcName); 326e5c31af7Sopenharmony_ci eglu::checkError(eglGetError(), "eglGetProcAddress()", __FILE__, __LINE__); 327e5c31af7Sopenharmony_ci 328e5c31af7Sopenharmony_ci if (apiSupported && funcPtrSupported && (funcPtr == 0)) 329e5c31af7Sopenharmony_ci { 330e5c31af7Sopenharmony_ci log << TestLog::Message << "Fail, received null pointer for supported function: " << funcName << TestLog::EndMessage; 331e5c31af7Sopenharmony_ci m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Unexpected null pointer"); 332e5c31af7Sopenharmony_ci } 333e5c31af7Sopenharmony_ci else if (!apiSupported && (funcPtr != 0)) 334e5c31af7Sopenharmony_ci { 335e5c31af7Sopenharmony_ci log << TestLog::Message << "Warning, received non-null value for unsupported function: " << funcName << TestLog::EndMessage; 336e5c31af7Sopenharmony_ci m_testCtx.setTestResult(QP_TEST_RESULT_QUALITY_WARNING, "Non-null value for unsupported function"); 337e5c31af7Sopenharmony_ci } 338e5c31af7Sopenharmony_ci } 339e5c31af7Sopenharmony_ci } 340e5c31af7Sopenharmony_ci 341e5c31af7Sopenharmony_ciprivate: 342e5c31af7Sopenharmony_ci const ApiType m_apiType; 343e5c31af7Sopenharmony_ci}; 344e5c31af7Sopenharmony_ci 345e5c31af7Sopenharmony_ciGetProcAddressTests::GetProcAddressTests (EglTestContext& eglTestCtx) 346e5c31af7Sopenharmony_ci : TestCaseGroup(eglTestCtx, "get_proc_address", "eglGetProcAddress() tests") 347e5c31af7Sopenharmony_ci{ 348e5c31af7Sopenharmony_ci} 349e5c31af7Sopenharmony_ci 350e5c31af7Sopenharmony_ciGetProcAddressTests::~GetProcAddressTests (void) 351e5c31af7Sopenharmony_ci{ 352e5c31af7Sopenharmony_ci} 353e5c31af7Sopenharmony_ci 354e5c31af7Sopenharmony_civoid GetProcAddressTests::init (void) 355e5c31af7Sopenharmony_ci{ 356e5c31af7Sopenharmony_ci // extensions 357e5c31af7Sopenharmony_ci { 358e5c31af7Sopenharmony_ci tcu::TestCaseGroup* extensionsGroup = new tcu::TestCaseGroup(m_testCtx, "extension", "Test EGL extensions"); 359e5c31af7Sopenharmony_ci addChild(extensionsGroup); 360e5c31af7Sopenharmony_ci 361e5c31af7Sopenharmony_ci for (int extNdx = 0; extNdx < DE_LENGTH_OF_ARRAY(s_extensions); extNdx++) 362e5c31af7Sopenharmony_ci { 363e5c31af7Sopenharmony_ci const std::string& extName = s_extensions[extNdx].name; 364e5c31af7Sopenharmony_ci std::string testName (extName); 365e5c31af7Sopenharmony_ci 366e5c31af7Sopenharmony_ci for (size_t ndx = 0; ndx < extName.length(); ndx++) 367e5c31af7Sopenharmony_ci testName[ndx] = de::toLower(extName[ndx]); 368e5c31af7Sopenharmony_ci 369e5c31af7Sopenharmony_ci extensionsGroup->addChild(new GetProcAddressExtensionCase(m_eglTestCtx, testName.c_str(), ("Test " + extName).c_str(), extName)); 370e5c31af7Sopenharmony_ci } 371e5c31af7Sopenharmony_ci } 372e5c31af7Sopenharmony_ci 373e5c31af7Sopenharmony_ci // core functions 374e5c31af7Sopenharmony_ci { 375e5c31af7Sopenharmony_ci tcu::TestCaseGroup* coreFuncGroup = new tcu::TestCaseGroup(m_testCtx, "core", "Test core functions"); 376e5c31af7Sopenharmony_ci addChild(coreFuncGroup); 377e5c31af7Sopenharmony_ci 378e5c31af7Sopenharmony_ci coreFuncGroup->addChild(new GetProcAddressCoreFunctionsCase (m_eglTestCtx, "egl", "Test EGL core functions", GetProcAddressCoreFunctionsCase::EGL14)); 379e5c31af7Sopenharmony_ci 380e5c31af7Sopenharmony_ci coreFuncGroup->addChild(new GetProcAddressCoreFunctionsCase (m_eglTestCtx, "egl15", "Test EGL 1.5 functions", GetProcAddressCoreFunctionsCase::EGL15)); 381e5c31af7Sopenharmony_ci coreFuncGroup->addChild(new GetProcAddressCoreFunctionsCase (m_eglTestCtx, "gles", "Test OpenGL ES core functions", GetProcAddressCoreFunctionsCase::GLES)); 382e5c31af7Sopenharmony_ci coreFuncGroup->addChild(new GetProcAddressCoreFunctionsCase (m_eglTestCtx, "gles2", "Test OpenGL ES 2 core functions", GetProcAddressCoreFunctionsCase::GLES2)); 383e5c31af7Sopenharmony_ci coreFuncGroup->addChild(new GetProcAddressCoreFunctionsCase (m_eglTestCtx, "gles3", "Test OpenGL ES 3 core functions", GetProcAddressCoreFunctionsCase::GLES3)); 384e5c31af7Sopenharmony_ci } 385e5c31af7Sopenharmony_ci} 386e5c31af7Sopenharmony_ci 387e5c31af7Sopenharmony_ci} // egl 388e5c31af7Sopenharmony_ci} // deqp 389