13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program EGL Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * --------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Simple context construction test for EGL_KHR_create_context. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglCreateContextExtTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluNativeDisplay.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluNativeWindow.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluNativePixmap.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluConfigFilter.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluStrUtil.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluUtil.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluDefs.hpp" 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderConfig.hpp" 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp" 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deUniquePtr.hpp" 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <EGL/eglext.h> 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string> 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <set> 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <sstream> 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <cstring> 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// \note Taken from official EGL/eglext.h. EGL_EGLEXT_VERSION 20131028 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef EGL_KHR_create_context 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_KHR_create_context 1 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_FLAGS_KHR 0x30FC 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif /* EGL_KHR_create_context */ 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef EGL_EXT_create_context_robustness 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_EXT_create_context_robustness 1 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif /* EGL_EXT_create_context_robustness */ 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// \note Taken from official GLES2/gl2ext.h. Generated on date 20131202. 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef GL_EXT_robustness 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_EXT_robustness 1 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif /* GL_EXT_robustness */ 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef GL_ARB_robustness 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/* reuse GL_NO_ERROR */ 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::set; 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyrysize_t getAttribListLength (const EGLint* attribList) 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry size_t size = 0; 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (attribList[size] != EGL_NONE) 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry size++; 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return size + 1; 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystring eglContextFlagsToString (EGLint flags) 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream stream; 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (flags == 0) 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "<None>"; 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool first = true; 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) != 0) 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"; 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) != 0) 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"; 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) != 0) 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"; 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return stream.str(); 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystring eglProfileMaskToString (EGLint mask) 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream stream; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (mask == 0) 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "<None>"; 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool first = true; 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((mask & EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR) != 0) 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR"; 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((mask & EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR) != 0) 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR"; 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return stream.str(); 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* eglResetNotificationStrategyToString (EGLint strategy) 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (strategy) 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_NO_RESET_NOTIFICATION_KHR: return "EGL_NO_RESET_NOTIFICATION_KHR"; 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_LOSE_CONTEXT_ON_RESET_KHR: return "EGL_LOSE_CONTEXT_ON_RESET_KHR"; 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return "<Unknown>"; 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateContextExtCase : public TestCase 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateContextExtCase (EglTestContext& eglTestCtx, EGLenum api, const EGLint* attribList, const eglu::FilterList& filter, const char* name, const char* description); 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~CreateContextExtCase (void); 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void executeForConfig (tcu::egl::Display& display, EGLConfig config, tcu::egl::Surface& surface); 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void checkRequiredExtensions (void); 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void logAttribList (void); 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool validateCurrentContext (const glw::Functions& gl); 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_isOk; 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_iteration; 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const eglu::FilterList m_filter; 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLint> m_attribList; 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLenum m_api; 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLConfig> m_configs; 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::ContextType m_glContextType; 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryglu::ContextType attribListToContextType (EGLenum api, const EGLint* attribList) 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint majorVersion = 1; 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint minorVersion = 0; 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::ContextFlags flags = glu::ContextFlags(0); 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::Profile profile = api == EGL_OPENGL_ES_API ? glu::PROFILE_ES : glu::PROFILE_CORE; 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = attribList; 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while((*iter) != EGL_NONE) 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = (*iter); 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = (*iter); 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) != 0) 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_ROBUST; 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) != 0) 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_DEBUG; 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) != 0) 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_FORWARD_COMPATIBLE; 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (*iter == EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR) 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profile = glu::PROFILE_COMPATIBILITY; 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (*iter != EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR) 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::InternalError("Indeterminate OpenGL profile"); 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return glu::ContextType(majorVersion, minorVersion, profile, flags); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3083c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtCase::CreateContextExtCase (EglTestContext& eglTestCtx, EGLenum api, const EGLint* attribList, const eglu::FilterList& filter, const char* name, const char* description) 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (eglTestCtx, name, description) 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_isOk (true) 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_iteration (0) 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_filter (filter) 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribList (attribList, attribList + getAttribListLength(attribList)) 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_api (api) 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_glContextType (attribListToContextType(api, attribList)) 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3193c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtCase::~CreateContextExtCase (void) 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deinit(); 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::init (void) 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLConfig> configs; 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_eglTestCtx.getDisplay().getConfigs(configs); 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int configNdx = 0; configNdx < (int)configs.size(); configNdx++) 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_filter.match(m_eglTestCtx.getDisplay().getEGLDisplay(), configs[configNdx])) 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_configs.push_back(configs[configNdx]); 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::deinit (void) 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_attribList = vector<EGLint>(); 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_configs = vector<EGLConfig>(); 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::logAttribList (void) 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream attribListString; 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_MAJOR_VERSION_KHR(EGL_CONTEXT_CLIENT_VERSION), " << (*iter) << ", "; 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_MINOR_VERSION_KHR, " << (*iter) << ", "; 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_FLAGS_KHR, " << eglContextFlagsToString(*iter) << ", "; 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, " << eglProfileMaskToString(*iter) << ", "; 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, " << eglResetNotificationStrategyToString(*iter) << ", "; 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, "; 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (*iter == EGL_FALSE && *iter == EGL_TRUE) 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << (*iter ? "EGL_TRUE" : "EGL_FALSE"); 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << (*iter); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_NONE"; 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "EGL attrib list: { " << attribListString.str() << " }" << TestLog::EndMessage; 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::checkRequiredExtensions (void) 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry set<string> requiredExtensions; 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<string> extensions; 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_eglTestCtx.getDisplay().getExtensions(extensions); 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_EXT_create_context_robustness"); 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_EXT_create_context_robustness"); 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (std::set<string>::const_iterator reqExt = requiredExtensions.begin(); reqExt != requiredExtensions.end(); ++reqExt) 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool found = false; 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int extNdx = 0; extNdx < (int)extensions.size(); extNdx++) 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (*reqExt == extensions[extNdx]) 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry found = true; 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!found) 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Required extension '" << (*reqExt) << "' not supported" << TestLog::EndMessage; 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!isOk) 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::NotSupportedError("Required extensions not supported", "", __FILE__, __LINE__); 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool hasExtension (const glw::Functions& gl, const char* extension) 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::istringstream stream((const char*)gl.getString(GL_EXTENSIONS)); 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry string ext; 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (std::getline(stream, ext, ' ')) 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (ext == extension) 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool checkVersionString (TestLog& log, const glw::Functions& gl, bool desktop, int major, int minor) 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* const versionStr = (const char*)gl.getString(GL_VERSION); 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* iter = versionStr; 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int majorVersion = 0; 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int minorVersion = 0; 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check embedded version prefixes 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!desktop) 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* prefix = NULL; 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* prefixIter = NULL; 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (major == 1) 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefix = "OpenGL ES-CM "; 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefix = "OpenGL ES "; 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefixIter = prefix; 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (*prefixIter) 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*prefixIter) != (*iter)) 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid version string prefix. Expected '" << prefix << "'." << TestLog::EndMessage; 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefixIter++; 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) && (*iter) != '.') 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int val = (*iter) - '0'; 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Not a number 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (val < 0 || val > 9) 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse major version number. Not a number." << TestLog::EndMessage; 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zero 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 0 && val == 0) 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse major version number. Begins with zero." << TestLog::EndMessage; 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = majorVersion * 10 + val; 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Invalid format 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter) != '.') 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse version. Expected '.' after major version number." << TestLog::EndMessage; 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) && (*iter) != ' ' && (*iter) != '.') 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int val = (*iter) - '0'; 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Not a number 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (val < 0 || val > 9) 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse minor version number. Not a number." << TestLog::EndMessage; 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zero 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (minorVersion == 0 && val == 0) 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zeros in minor version 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*(iter + 1)) != ' ' && (*(iter + 1)) != '.' && (*(iter + 1)) != '\0') 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse minor version number. Leading zeros." << TestLog::EndMessage; 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = minorVersion * 10 + val; 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Invalid format 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter) != ' ' && (*iter) != '.' && (*iter) != '\0') 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (desktop) 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Major version is less than required." << TestLog::EndMessage; 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Minor version is less than required." << TestLog::EndMessage; 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion == minor) 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (major < 3 || (major == 3 && minor == 0)) 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 3 && minorVersion == 1) 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (hasExtension(gl, "GL_ARB_compatibility")) 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.0 or earlier. Got OpenGL 3.1 without GL_ARB_compatibility." << TestLog::EndMessage; 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= minor)) 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profile = 0; 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profile == GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.0 or earlier. Got later version without compatibility profile." << TestLog::EndMessage; 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (major == 3 && minor == 1) 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= minor)) 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profile = 0; 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profile == GL_CONTEXT_CORE_PROFILE_BIT) 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.1. Got later version without core profile." << TestLog::EndMessage; 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Couldn't do any further compatibilyt checks." << TestLog::EndMessage; 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Major version is less than required." << TestLog::EndMessage; 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Minor version is less than required." << TestLog::EndMessage; 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool checkVersionQueries (TestLog& log, const glw::Functions& gl, int major, int minor) 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 majorVersion = 0; 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 minorVersion = 0; 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_MAJOR_VERSION, &majorVersion); 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_MINOR_VERSION, &minorVersion); 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major || (majorVersion == major && minorVersion < minor)) 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_MAJOR_VERSION) returned '" << majorVersion << "' expected at least '" << major << "'" << TestLog::EndMessage; 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_MINOR_VERSION) returned '" << minorVersion << "' expected '" << minor << "'" << TestLog::EndMessage; 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool CreateContextExtCase::validateCurrentContext (const glw::Functions& gl) 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestLog& log = m_testCtx.getLog(); 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint majorVersion = -1; 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint minorVersion = -1; 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint contextFlags = -1; 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint profileMask = -1; 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint notificationStrategy = -1; 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint robustAccessExt = -1; 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint notificationStrategyExt = -1; 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = (*iter); 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = (*iter); 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry contextFlags = (*iter); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profileMask = (*iter); 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry notificationStrategy = (*iter); 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry robustAccessExt = *iter; 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry notificationStrategyExt = *iter; 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const string version = (const char*)gl.getString(GL_VERSION); 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "GL_VERSION: '" << version << "'" << TestLog::EndMessage; 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == -1) 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = 1; 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (minorVersion == -1) 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = 0; 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_ES_API) 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionString(log, gl, false, majorVersion, minorVersion)) 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 3) 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionQueries(log, gl, majorVersion, minorVersion)) 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_API) 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionString(log, gl, true, majorVersion, minorVersion)) 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion >= 3) 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionQueries(log, gl, majorVersion, minorVersion)) 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags != -1) 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API && (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 1))) 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 contextFlagsGL; 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags == -1) 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry contextFlags = 0; 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_FLAGS, &contextFlagsGL); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags != contextFlagsGL) 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_FLAGS. Expected '" << eglContextFlagsToString(contextFlags) << "' got '" << eglContextFlagsToString(contextFlagsGL) << "'" << TestLog::EndMessage; 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask != -1 || (m_api == EGL_OPENGL_API && (majorVersion >= 3))) 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask == -1) 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profileMask = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < 3 || (majorVersion == 3 && minorVersion < 2)) 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note Ignore profile masks. This is not an error 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profileMaskGL = 0; 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profileMask); 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask != profileMaskGL) 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_PROFILE_MASK. Expected '" << eglProfileMaskToString(profileMask) << "' got '" << eglProfileMaskToString(profileMaskGL) << "'" << TestLog::EndMessage; 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategy != -1) 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API) 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 strategy; 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &strategy); 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategy == EGL_NO_RESET_NOTIFICATION_KHR && strategy != GL_NO_RESET_NOTIFICATION_ARB) 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB) returned '" << strategy << "', expected 'GL_NO_RESET_NOTIFICATION_ARB'" << TestLog::EndMessage; 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (notificationStrategy == EGL_LOSE_CONTEXT_ON_RESET_KHR && strategy != GL_LOSE_CONTEXT_ON_RESET_ARB) 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB) returned '" << strategy << "', expected 'GL_LOSE_CONTEXT_ON_RESET_ARB'" << TestLog::EndMessage; 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 strategy; 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT, &strategy); 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategy == EGL_NO_RESET_NOTIFICATION_KHR && strategy != GL_NO_RESET_NOTIFICATION_EXT) 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT) returned '" << strategy << "', expected 'GL_NO_RESET_NOTIFICATION_EXT'" << TestLog::EndMessage; 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (notificationStrategy == EGL_LOSE_CONTEXT_ON_RESET_KHR && strategy != GL_LOSE_CONTEXT_ON_RESET_EXT) 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT) returned '" << strategy << "', expected 'GL_LOSE_CONTEXT_ON_RESET_EXT'" << TestLog::EndMessage; 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategyExt != -1) 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API) 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 strategy; 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &strategy); 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategyExt == EGL_NO_RESET_NOTIFICATION_KHR && strategy != GL_NO_RESET_NOTIFICATION_ARB) 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB) returned '" << strategy << "', expected 'GL_NO_RESET_NOTIFICATION_ARB'" << TestLog::EndMessage; 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (notificationStrategyExt == EGL_LOSE_CONTEXT_ON_RESET_KHR && strategy != GL_LOSE_CONTEXT_ON_RESET_ARB) 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB) returned '" << strategy << "', expected 'GL_LOSE_CONTEXT_ON_RESET_ARB'" << TestLog::EndMessage; 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 strategy; 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT, &strategy); 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notificationStrategyExt == EGL_NO_RESET_NOTIFICATION_KHR && strategy != GL_NO_RESET_NOTIFICATION_EXT) 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT) returned '" << strategy << "', expected 'GL_NO_RESET_NOTIFICATION_EXT'" << TestLog::EndMessage; 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (notificationStrategyExt == EGL_LOSE_CONTEXT_ON_RESET_KHR && strategy != GL_LOSE_CONTEXT_ON_RESET_EXT) 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_EXT) returned '" << strategy << "', expected 'GL_LOSE_CONTEXT_ON_RESET_EXT'" << TestLog::EndMessage; 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (robustAccessExt == EGL_TRUE) 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API) 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!hasExtension(gl, "GL_ARB_robustness")) 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Created robustness context but it doesn't support GL_ARB_robustness." << TestLog::EndMessage; 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!hasExtension(gl, "GL_EXT_robustness")) 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Created robustness context but it doesn't support GL_EXT_robustness." << TestLog::EndMessage; 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API && (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 1))) 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 contextFlagsGL; 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_FLAGS, &contextFlagsGL); 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((contextFlagsGL & GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB) != 0) 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_FLAGS. GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB to be set, got '" << eglContextFlagsToString(contextFlagsGL) << "'" << TestLog::EndMessage; 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint8 robustAccessGL; 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getBooleanv(GL_CONTEXT_ROBUST_ACCESS_EXT, &robustAccessGL); 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetBooleanv()"); 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (robustAccessGL != GL_TRUE) 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_ROBUST_ACCESS_EXT returned by glGetBooleanv(). Got '" << robustAccessGL << "' expected GL_TRUE." << TestLog::EndMessage; 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return isOk; 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9943c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestCase::IterateResult CreateContextExtCase::iterate (void) 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_iteration == 0) 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logAttribList(); 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkRequiredExtensions(); 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_iteration < (int)m_configs.size()) 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLConfig config = m_configs[m_iteration]; 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::egl::Display& display = m_eglTestCtx.getDisplay(); 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint surfaceTypes = display.getConfigAttrib(config, EGL_SURFACE_TYPE); 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint configId = display.getConfigAttrib(config, EGL_CONFIG_ID); 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((surfaceTypes & EGL_PBUFFER_BIT) != 0) 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::ScopedLogSection section(m_testCtx.getLog(), ("EGLConfig ID: " + de::toString(configId) + " with PBuffer").c_str(), ("EGLConfig ID: " + de::toString(configId)).c_str()); 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint attribList[] = 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_WIDTH, 64, 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_HEIGHT, 64, 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::egl::PbufferSurface pbuffer(display, config, attribList); 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeForConfig(display, config, pbuffer); 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if ((surfaceTypes & EGL_WINDOW_BIT) != 0) 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::UniquePtr<eglu::NativeWindow> window (m_eglTestCtx.createNativeWindow(display.getEGLDisplay(), config, DE_NULL, 256, 256, eglu::parseWindowVisibility(m_testCtx.getCommandLine()))); 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::egl::WindowSurface surface (display, eglu::createWindowSurface(m_eglTestCtx.getNativeDisplay(), *window, display.getEGLDisplay(), config, DE_NULL)); 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeForConfig(display, config, surface); 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if ((surfaceTypes & EGL_PIXMAP_BIT) != 0) 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::UniquePtr<eglu::NativePixmap> pixmap (m_eglTestCtx.createNativePixmap(display.getEGLDisplay(), config, DE_NULL, 256, 256)); 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::egl::PixmapSurface surface (display, eglu::createPixmapSurface(m_eglTestCtx.getNativeDisplay(), *pixmap, display.getEGLDisplay(), config, DE_NULL)); 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeForConfig(display, config, surface); 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else // No supported surface type 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(false); 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_iteration++; 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return CONTINUE; 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_configs.size() == 0) 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "No supported configs found" << TestLog::EndMessage; 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No supported configs found"); 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_isOk) 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::executeForConfig (tcu::egl::Display& display, EGLConfig config, tcu::egl::Surface& surface) 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::egl::Context* context = DE_NULL; 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK_EGL_CALL(eglBindAPI(m_api)); 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry try 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::Functions gl; 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context = new tcu::egl::Context(display, config, &(m_attribList[0]), m_api); 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context->makeCurrent(surface, surface); 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_eglTestCtx.getGLFunctions(gl, m_glContextType.getAPI()); 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!validateCurrentContext(gl)) 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_isOk = false; 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete context; 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (const eglu::Error& error) 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete context; 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (error.getError() == EGL_BAD_MATCH) 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Context creation failed with error EGL_BAD_CONTEXT. Config doesn't support api version." << TestLog::EndMessage; 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (error.getError() == EGL_BAD_CONFIG) 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Context creation failed with error EGL_BAD_MATCH. Context attribute compination not supported." << TestLog::EndMessage; 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Context creation failed with error " << eglu::getErrorStr(error.getError()) << ". Error is not result of unsupported api etc." << TestLog::EndMessage; 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_isOk = false; 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (...) 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete context; 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw; 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateContextExtGroup : public TestCaseGroup 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateContextExtGroup (EglTestContext& eglTestCtx, EGLenum api, EGLint apiBit, const EGLint* attribList, const char* name, const char* description); 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~CreateContextExtGroup (void); 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLenum m_api; 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint m_apiBit; 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLint> m_attribList; 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11133c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtGroup::CreateContextExtGroup (EglTestContext& eglTestCtx, EGLenum api, EGLint apiBit, const EGLint* attribList, const char* name, const char* description) 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup (eglTestCtx, name, description) 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_api (api) 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_apiBit (apiBit) 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribList (attribList, attribList + getAttribListLength(attribList)) 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11213c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtGroup::~CreateContextExtGroup (void) 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtGroup::init (void) 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint redSize; 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint greenSize; 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint blueSize; 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint alphaSize; 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool hasDepth; 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool hasStencil; 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } groups[] = 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb565_no_depth_no_stencil", "RGB565 configs without depth or stencil", 5, 6, 5, 0, false, false }, 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb565_no_depth_stencil", "RGB565 configs with stencil and no depth", 5, 6, 5, 0, false, true }, 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb565_depth_no_stencil", "RGB565 configs with depth and no stencil", 5, 6, 5, 0, true, false }, 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb565_depth_stencil", "RGB565 configs with depth and stencil", 5, 6, 5, 0, true, true }, 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb888_no_depth_no_stencil", "RGB888 configs without depth or stencil", 8, 8, 8, 0, false, false }, 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb888_no_depth_stencil", "RGB888 configs with stencil and no depth", 8, 8, 8, 0, false, true }, 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb888_depth_no_stencil", "RGB888 configs with depth and no stencil", 8, 8, 8, 0, true, false }, 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgb888_depth_stencil", "RGB888 configs with depth and stencil", 8, 8, 8, 0, true, true }, 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba4444_no_depth_no_stencil", "RGBA4444 configs without depth or stencil", 4, 4, 4, 4, false, false }, 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba4444_no_depth_stencil", "RGBA4444 configs with stencil and no depth", 4, 4, 4, 4, false, true }, 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba4444_depth_no_stencil", "RGBA4444 configs with depth and no stencil", 4, 4, 4, 4, false, false }, 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba4444_depth_stencil", "RGBA4444 configs with depth and stencil", 4, 4, 4, 4, true, true }, 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba5551_no_depth_no_stencil", "RGBA5551 configs without depth or stencil", 5, 5, 5, 1, false, false }, 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba5551_no_depth_stencil", "RGBA5551 configs with stencil and no depth", 5, 5, 5, 1, false, true }, 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba5551_depth_no_stencil", "RGBA5551 configs with depth and no stencil", 5, 5, 5, 1, true, false }, 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba5551_depth_stencil", "RGBA5551 configs with depth and stencil", 5, 5, 5, 1, true, true }, 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba8888_no_depth_no_stencil", "RGBA8888 configs without depth or stencil", 8, 8, 8, 8, false, false }, 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba8888_no_depth_stencil", "RGBA8888 configs with stencil and no depth", 8, 8, 8, 8, false, true }, 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba8888_depth_no_stencil", "RGBA8888 configs with depth and no stencil", 8, 8, 8, 8, true, false }, 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "rgba8888_depth_stencil", "RGBA8888 configs with depth and stencil", 8, 8, 8, 8, true, true } 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int groupNdx = 0; groupNdx < DE_LENGTH_OF_ARRAY(groups); groupNdx++) 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry eglu::FilterList filter; 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry filter 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (eglu::ConfigRedSize() == groups[groupNdx].redSize) 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (eglu::ConfigGreenSize() == groups[groupNdx].greenSize) 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (eglu::ConfigBlueSize() == groups[groupNdx].blueSize) 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << (eglu::ConfigAlphaSize() == groups[groupNdx].alphaSize); 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (groups[groupNdx].hasDepth) 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry filter << (eglu::ConfigDepthSize() >= 1); 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (groups[groupNdx].hasStencil) 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry filter << (eglu::ConfigStencilSize() >= 1); 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry filter << (eglu::ConfigRenderableType() & m_apiBit); 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new CreateContextExtCase(m_eglTestCtx, m_api, &(m_attribList[0]), filter, groups[groupNdx].name, groups[groupNdx].description)); 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Add other group 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11923c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtTests::CreateContextExtTests (EglTestContext& eglTestCtx) 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(eglTestCtx, "create_context_ext", "EGL_KHR_create_context tests.") 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11973c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtTests::~CreateContextExtTests (void) 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtTests::init (void) 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const size_t maxAttributeCount = 10; 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum api; 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint apiBit; 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint attribList[maxAttributeCount]; 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } groupList[] = 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Not supported by glw 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 1.x 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_10", "Create OpenGL ES 1.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES_BIT, 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_11", "Create OpenGL ES 1.1 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES_BIT, 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 2.x 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_20", "Create OpenGL ES 2.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES2_BIT, 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gles_20", "Create robust OpenGL ES 2.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES2_BIT, 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 3.x 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_30", "Create OpenGL ES 3.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES3_BIT_KHR, 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gles_30", "Create OpenGL ES 3.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES3_BIT_KHR, 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Not supported by glw 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] Should we really test 1.x? 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_10", "Create OpenGL 1.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_11", "Create OpenGL 1.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 2.x 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_20", "Create OpenGL 2.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_21", "Create OpenGL 2.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 3.x 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_30", "Create OpenGL 3.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_30", "Create robust OpenGL 3.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_31", "Create OpenGL 3.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_31", "Create robust OpenGL 3.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_32", "Create OpenGL 3.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_NONE } }, 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_32", "Create robust OpenGL 3.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_33", "Create OpenGL 3.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_NONE } }, 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_33", "Create robust OpenGL 3.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 4.x 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_40", "Create OpenGL 4.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_40", "Create robust OpenGL 4.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_41", "Create OpenGL 4.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_41", "Create robust OpenGL 4.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_42", "Create OpenGL 4.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_NONE } }, 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_42", "Create robust OpenGL 4.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_43", "Create OpenGL 4.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_NONE } }, 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_43", "Create robust OpenGL 4.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR, EGL_NONE } }, 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Robust contexts with EGL_EXT_create_context_robustness 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gles_2_ext", "Create robust OpenGL ES 2.0 context with EGL_EXT_create_context_robustness.", EGL_OPENGL_ES_API, EGL_OPENGL_ES2_BIT, 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } }, 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gles_3_ext", "Create robust OpenGL ES 3.0 context with EGL_EXT_create_context_robustness.", EGL_OPENGL_ES_API, EGL_OPENGL_ES3_BIT_KHR, 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } }, 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // glu/glw doesn't support any version of OpenGL and EGL doesn't allow use of EGL_CONTEXT_CLIENT_VERSION with OpenGL and doesn't define which OpenGL version should be returned. 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_ext", "Create robust OpenGL context with EGL_EXT_create_context_robustness.", EGL_OPENGL_API, EGL_OPENGL_BIT, 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } } 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int groupNdx = 0; groupNdx < DE_LENGTH_OF_ARRAY(groupList); groupNdx++) 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new CreateContextExtGroup(m_eglTestCtx, groupList[groupNdx].api, groupList[groupNdx].apiBit, groupList[groupNdx].attribList, groupList[groupNdx].name, groupList[groupNdx].description)); 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1299