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" 343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUnique.hpp" 353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp" 373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp" 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluDefs.hpp" 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderConfig.hpp" 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp" 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deUniquePtr.hpp" 473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "deSTLUtil.hpp" 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string> 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <set> 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <sstream> 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <cstring> 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::set; 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw; 623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos// Make sure KHR / core values match to those in GL_ARB_robustness and GL_EXT_robustness 643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosDE_STATIC_ASSERT(GL_RESET_NOTIFICATION_STRATEGY == 0x8256); 653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosDE_STATIC_ASSERT(GL_LOSE_CONTEXT_ON_RESET == 0x8252); 663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosDE_STATIC_ASSERT(GL_NO_RESET_NOTIFICATION == 0x8261); 673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#if !defined(GL_CONTEXT_ROBUST_ACCESS) 693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos# define GL_CONTEXT_ROBUST_ACCESS 0x90F3 703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#endif 713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrysize_t getAttribListLength (const EGLint* attribList) 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry size_t size = 0; 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (attribList[size] != EGL_NONE) 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry size++; 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return size + 1; 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystring eglContextFlagsToString (EGLint flags) 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream stream; 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (flags == 0) 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "<None>"; 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool first = true; 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) != 0) 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"; 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) != 0) 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"; 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((flags & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) != 0) 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"; 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return stream.str(); 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystring eglProfileMaskToString (EGLint mask) 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream stream; 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (mask == 0) 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "<None>"; 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool first = true; 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((mask & EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR) != 0) 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry first = false; 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR"; 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((mask & EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR) != 0) 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!first) 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "|"; 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry stream << "EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR"; 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return stream.str(); 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* eglResetNotificationStrategyToString (EGLint strategy) 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (strategy) 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_NO_RESET_NOTIFICATION_KHR: return "EGL_NO_RESET_NOTIFICATION_KHR"; 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_LOSE_CONTEXT_ON_RESET_KHR: return "EGL_LOSE_CONTEXT_ON_RESET_KHR"; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return "<Unknown>"; 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateContextExtCase : public TestCase 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateContextExtCase (EglTestContext& eglTestCtx, EGLenum api, const EGLint* attribList, const eglu::FilterList& filter, const char* name, const char* description); 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~CreateContextExtCase (void); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos void executeForSurface (EGLConfig config, EGLSurface surface); 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void checkRequiredExtensions (void); 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void logAttribList (void); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool validateCurrentContext (const glw::Functions& gl); 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_isOk; 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_iteration; 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const eglu::FilterList m_filter; 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLint> m_attribList; 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLenum m_api; 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLDisplay m_display; 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLConfig> m_configs; 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::ContextType m_glContextType; 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyryglu::ContextType attribListToContextType (EGLenum api, const EGLint* attribList) 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint majorVersion = 1; 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint minorVersion = 0; 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::ContextFlags flags = glu::ContextFlags(0); 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::Profile profile = api == EGL_OPENGL_ES_API ? glu::PROFILE_ES : glu::PROFILE_CORE; 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = attribList; 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos while ((*iter) != EGL_NONE) 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = (*iter); 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = (*iter); 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) != 0) 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_ROBUST; 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) != 0) 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_DEBUG; 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) != 0) 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry flags = flags | glu::CONTEXT_FORWARD_COMPATIBLE; 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (*iter == EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR) 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profile = glu::PROFILE_COMPATIBILITY; 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (*iter != EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR) 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::InternalError("Indeterminate OpenGL profile"); 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter += 2; 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return glu::ContextType(majorVersion, minorVersion, profile, flags); 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2743c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtCase::CreateContextExtCase (EglTestContext& eglTestCtx, EGLenum api, const EGLint* attribList, const eglu::FilterList& filter, const char* name, const char* description) 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (eglTestCtx, name, description) 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_isOk (true) 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_iteration (0) 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_filter (filter) 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribList (attribList, attribList + getAttribListLength(attribList)) 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_api (api) 2813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_display (EGL_NO_DISPLAY) 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_glContextType (attribListToContextType(api, attribList)) 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2863c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtCase::~CreateContextExtCase (void) 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deinit(); 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::init (void) 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 2943c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_configs = eglu::chooseConfigs(m_eglTestCtx.getLibrary(), m_display, m_filter); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::deinit (void) 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_attribList.clear(); 3003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_configs.clear(); 3013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 3023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (m_display != EGL_NO_DISPLAY) 3033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 3043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_eglTestCtx.getLibrary().terminate(m_display); 3053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = EGL_NO_DISPLAY; 3063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::logAttribList (void) 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream attribListString; 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_MAJOR_VERSION_KHR(EGL_CONTEXT_CLIENT_VERSION), " << (*iter) << ", "; 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_MINOR_VERSION_KHR, " << (*iter) << ", "; 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_FLAGS_KHR, " << eglContextFlagsToString(*iter) << ", "; 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, " << eglProfileMaskToString(*iter) << ", "; 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, " << eglResetNotificationStrategyToString(*iter) << ", "; 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, "; 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 352e9f851b0fe18a2d834bce827564b3a8d4d128438Jarkko Pöyry if (*iter == EGL_FALSE || *iter == EGL_TRUE) 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << (*iter ? "EGL_TRUE" : "EGL_FALSE"); 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << (*iter); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribListString << "EGL_NONE"; 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "EGL attrib list: { " << attribListString.str() << " }" << TestLog::EndMessage; 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtCase::checkRequiredExtensions (void) 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry set<string> requiredExtensions; 3722f4e6d98746307432f4d82b8d4885116805d7f98Mika Isojärvi vector<string> extensions = eglu::getDisplayExtensions(m_eglTestCtx.getLibrary(), m_display); 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_KHR_create_context"); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_EXT_create_context_robustness"); 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requiredExtensions.insert("EGL_EXT_create_context_robustness"); 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (std::set<string>::const_iterator reqExt = requiredExtensions.begin(); reqExt != requiredExtensions.end(); ++reqExt) 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (!de::contains(extensions.begin(), extensions.end(), *reqExt)) 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Required extension '" << (*reqExt) << "' not supported" << TestLog::EndMessage; 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!isOk) 4383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos TCU_THROW(NotSupportedError, "Required extensions not supported"); 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool checkVersionString (TestLog& log, const glw::Functions& gl, bool desktop, int major, int minor) 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* const versionStr = (const char*)gl.getString(GL_VERSION); 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* iter = versionStr; 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int majorVersion = 0; 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int minorVersion = 0; 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check embedded version prefixes 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!desktop) 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* prefix = NULL; 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* prefixIter = NULL; 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (major == 1) 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefix = "OpenGL ES-CM "; 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefix = "OpenGL ES "; 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefixIter = prefix; 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (*prefixIter) 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*prefixIter) != (*iter)) 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid version string prefix. Expected '" << prefix << "'." << TestLog::EndMessage; 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry prefixIter++; 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) && (*iter) != '.') 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int val = (*iter) - '0'; 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Not a number 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (val < 0 || val > 9) 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse major version number. Not a number." << TestLog::EndMessage; 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zero 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 0 && val == 0) 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse major version number. Begins with zero." << TestLog::EndMessage; 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = majorVersion * 10 + val; 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Invalid format 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter) != '.') 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse version. Expected '.' after major version number." << TestLog::EndMessage; 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) && (*iter) != ' ' && (*iter) != '.') 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int val = (*iter) - '0'; 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Not a number 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (val < 0 || val > 9) 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse minor version number. Not a number." << TestLog::EndMessage; 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zero 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (minorVersion == 0 && val == 0) 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Leading zeros in minor version 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*(iter + 1)) != ' ' && (*(iter + 1)) != '.' && (*(iter + 1)) != '\0') 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Failed to parse minor version number. Leading zeros." << TestLog::EndMessage; 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = minorVersion * 10 + val; 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Invalid format 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((*iter) != ' ' && (*iter) != '.' && (*iter) != '\0') 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (desktop) 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Major version is less than required." << TestLog::EndMessage; 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Minor version is less than required." << TestLog::EndMessage; 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion == minor) 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (major < 3 || (major == 3 && minor == 0)) 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 3 && minorVersion == 1) 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5571ba68362f2e13d7fdf7f1c3dc4a8eb3d517502b1Tobias Sargeant if (glu::hasExtension(gl, glu::ApiType::core(3, 1), "GL_ARB_compatibility")) 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.0 or earlier. Got OpenGL 3.1 without GL_ARB_compatibility." << TestLog::EndMessage; 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= minor)) 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profile = 0; 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profile == GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.0 or earlier. Got later version without compatibility profile." << TestLog::EndMessage; 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (major == 3 && minor == 1) 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion > 3 || (majorVersion == 3 && minorVersion >= minor)) 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profile = 0; 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profile == GL_CONTEXT_CORE_PROFILE_BIT) 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Required OpenGL 3.1. Got later version without core profile." << TestLog::EndMessage; 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Couldn't do any further compatibilyt checks." << TestLog::EndMessage; 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Major version is less than required." << TestLog::EndMessage; 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Minor version is less than required." << TestLog::EndMessage; 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool checkVersionQueries (TestLog& log, const glw::Functions& gl, int major, int minor) 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 majorVersion = 0; 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 minorVersion = 0; 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_MAJOR_VERSION, &majorVersion); 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_MINOR_VERSION, &minorVersion); 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major || (majorVersion == major && minorVersion < minor)) 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < major) 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_MAJOR_VERSION) returned '" << majorVersion << "' expected at least '" << major << "'" << TestLog::EndMessage; 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (majorVersion == major && minorVersion < minor) 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "glGetIntegerv(GL_MINOR_VERSION) returned '" << minorVersion << "' expected '" << minor << "'" << TestLog::EndMessage; 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return true; 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool CreateContextExtCase::validateCurrentContext (const glw::Functions& gl) 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestLog& log = m_testCtx.getLog(); 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint* iter = &(m_attribList[0]); 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint majorVersion = -1; 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint minorVersion = -1; 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint contextFlags = -1; 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint profileMask = -1; 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint notificationStrategy = -1; 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint robustAccessExt = -1; 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint notificationStrategyExt = -1; 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while ((*iter) != EGL_NONE) 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (*iter) 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MAJOR_VERSION_KHR: 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = (*iter); 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_MINOR_VERSION_KHR: 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = (*iter); 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_FLAGS_KHR: 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry contextFlags = (*iter); 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR: 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profileMask = (*iter); 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry notificationStrategy = (*iter); 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry robustAccessExt = *iter; 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry notificationStrategyExt = *iter; 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry iter++; 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const string version = (const char*)gl.getString(GL_VERSION); 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "GL_VERSION: '" << version << "'" << TestLog::EndMessage; 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == -1) 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry majorVersion = 1; 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (minorVersion == -1) 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry minorVersion = 0; 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_ES_API) 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionString(log, gl, false, majorVersion, minorVersion)) 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion == 3) 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionQueries(log, gl, majorVersion, minorVersion)) 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_API) 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionString(log, gl, true, majorVersion, minorVersion)) 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion >= 3) 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!checkVersionQueries(log, gl, majorVersion, minorVersion)) 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags != -1) 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API && (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 1))) 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 contextFlagsGL; 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags == -1) 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry contextFlags = 0; 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_FLAGS, &contextFlagsGL); 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (contextFlags != contextFlagsGL) 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_FLAGS. Expected '" << eglContextFlagsToString(contextFlags) << "' got '" << eglContextFlagsToString(contextFlagsGL) << "'" << TestLog::EndMessage; 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask != -1 || (m_api == EGL_OPENGL_API && (majorVersion >= 3))) 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask == -1) 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry profileMask = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (majorVersion < 3 || (majorVersion == 3 && minorVersion < 2)) 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note Ignore profile masks. This is not an error 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 profileMaskGL = 0; 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7930ef97d1d8255eea27a3191e3295b7ece83e13807Mika Isojärvi gl.getIntegerv(GL_CONTEXT_PROFILE_MASK, &profileMaskGL); 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (profileMask != profileMaskGL) 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Invalid GL_CONTEXT_PROFILE_MASK. Expected '" << eglProfileMaskToString(profileMask) << "' got '" << eglProfileMaskToString(profileMaskGL) << "'" << TestLog::EndMessage; 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos DE_ASSERT(notificationStrategy == -1 || notificationStrategyExt == -1); 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (notificationStrategy != -1 || notificationStrategyExt != -1) 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8083c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const deInt32 expected = notificationStrategy != -1 ? notificationStrategy : notificationStrategyExt; 8093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos deInt32 strategy = 0; 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8113c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos gl.getIntegerv(GL_RESET_NOTIFICATION_STRATEGY, &strategy); 8123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv()"); 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (expected == EGL_NO_RESET_NOTIFICATION && strategy != GL_NO_RESET_NOTIFICATION) 8153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 8163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY) returned '" << strategy << "', expected 'GL_NO_RESET_NOTIFICATION'" << TestLog::EndMessage; 8173c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos isOk = false; 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos else if (expected == EGL_LOSE_CONTEXT_ON_RESET && strategy != GL_LOSE_CONTEXT_ON_RESET) 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY) returned '" << strategy << "', expected 'GL_LOSE_CONTEXT_ON_RESET'" << TestLog::EndMessage; 8223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos isOk = false; 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8253fdee359c9eee4d6c1d823b23f7f64631b5945f8Jarkko Pöyry 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (robustAccessExt == EGL_TRUE) 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API) 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8301ba68362f2e13d7fdf7f1c3dc4a8eb3d517502b1Tobias Sargeant if (!glu::hasExtension(gl, glu::ApiType::core(majorVersion, minorVersion), "GL_ARB_robustness")) 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Created robustness context but it doesn't support GL_ARB_robustness." << TestLog::EndMessage; 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8381ba68362f2e13d7fdf7f1c3dc4a8eb3d517502b1Tobias Sargeant if (!glu::hasExtension(gl, glu::ApiType::es(majorVersion, minorVersion), "GL_EXT_robustness")) 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Created robustness context but it doesn't support GL_EXT_robustness." << TestLog::EndMessage; 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_api == EGL_OPENGL_API && (majorVersion > 3 || (majorVersion == 3 && minorVersion >= 1))) 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deInt32 contextFlagsGL; 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_api == EGL_OPENGL_API); 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.getIntegerv(GL_CONTEXT_FLAGS, &contextFlagsGL); 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if ((contextFlagsGL & GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT) != 0) 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "Invalid GL_CONTEXT_FLAGS. GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT to be set, got '" << eglContextFlagsToString(contextFlagsGL) << "'" << TestLog::EndMessage; 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_api == EGL_OPENGL_ES_API) 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint8 robustAccessGL; 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos gl.getBooleanv(GL_CONTEXT_ROBUST_ACCESS, &robustAccessGL); 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetBooleanv()"); 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (robustAccessGL != GL_TRUE) 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "Invalid GL_CONTEXT_ROBUST_ACCESS returned by glGetBooleanv(). Got '" << robustAccessGL << "' expected GL_TRUE." << TestLog::EndMessage; 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry isOk = false; 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8723fdee359c9eee4d6c1d823b23f7f64631b5945f8Jarkko Pöyry 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return isOk; 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8783c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestCase::IterateResult CreateContextExtCase::iterate (void) 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_iteration == 0) 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logAttribList(); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry checkRequiredExtensions(); 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_iteration < (int)m_configs.size()) 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLConfig config = m_configs[m_iteration]; 8903c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint surfaceTypes = eglu::getConfigAttribInt(egl, m_display, config, EGL_SURFACE_TYPE); 8913c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint configId = eglu::getConfigAttribInt(egl, m_display, config, EGL_CONFIG_ID); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((surfaceTypes & EGL_PBUFFER_BIT) != 0) 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos tcu::ScopedLogSection section (m_testCtx.getLog(), ("EGLConfig ID: " + de::toString(configId) + " with PBuffer").c_str(), ("EGLConfig ID: " + de::toString(configId)).c_str()); 8963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint attribList[] = 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_WIDTH, 64, 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_HEIGHT, 64, 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 9023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::UniqueSurface surface (egl, m_display, egl.createPbufferSurface(m_display, config, attribList)); 9033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(egl, "eglCreatePbufferSurface"); 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos executeForSurface(config, *surface); 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if ((surfaceTypes & EGL_WINDOW_BIT) != 0) 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 909485844e764f2821545146b832726a36012f86238Mika Isojärvi const eglu::NativeWindowFactory& factory = eglu::selectNativeWindowFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine()); 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 911485844e764f2821545146b832726a36012f86238Mika Isojärvi de::UniquePtr<eglu::NativeWindow> window (factory.createWindow(&m_eglTestCtx.getNativeDisplay(), m_display, config, DE_NULL, eglu::WindowParams(256, 256, eglu::parseWindowVisibility(m_testCtx.getCommandLine())))); 9123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::UniqueSurface surface (egl, m_display, eglu::createWindowSurface(m_eglTestCtx.getNativeDisplay(), *window, m_display, config, DE_NULL)); 9133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 9143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos executeForSurface(config, *surface); 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if ((surfaceTypes & EGL_PIXMAP_BIT) != 0) 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 918485844e764f2821545146b832726a36012f86238Mika Isojärvi const eglu::NativePixmapFactory& factory = eglu::selectNativePixmapFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine()); 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 920485844e764f2821545146b832726a36012f86238Mika Isojärvi de::UniquePtr<eglu::NativePixmap> pixmap (factory.createPixmap(&m_eglTestCtx.getNativeDisplay(), m_display, config, DE_NULL, 256, 256)); 9213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::UniqueSurface surface (egl, m_display, eglu::createPixmapSurface(m_eglTestCtx.getNativeDisplay(), *pixmap, m_display, config, DE_NULL)); 9223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 9233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos executeForSurface(config, *surface); 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else // No supported surface type 9263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos TCU_FAIL("Invalid or empty surface type bits"); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_iteration++; 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return CONTINUE; 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_configs.size() == 0) 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "No supported configs found" << TestLog::EndMessage; 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "No supported configs found"); 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_isOk) 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateContextExtCase::executeForSurface (EGLConfig config, EGLSurface surface) 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(egl, bindAPI(m_api)); 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry try 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos glw::Functions gl; 9563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::UniqueContext context (egl, m_display, egl.createContext(m_display, config, EGL_NO_CONTEXT, &m_attribList[0])); 9573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(egl, "eglCreateContext"); 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(egl, makeCurrent(m_display, surface, surface, *context)); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_eglTestCtx.initGLFunctions(&gl, m_glContextType.getAPI()); 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!validateCurrentContext(gl)) 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_isOk = false; 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (const eglu::Error& error) 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (error.getError() == EGL_BAD_MATCH) 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Context creation failed with error EGL_BAD_CONTEXT. Config doesn't support api version." << TestLog::EndMessage; 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (error.getError() == EGL_BAD_CONFIG) 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Context creation failed with error EGL_BAD_MATCH. Context attribute compination not supported." << TestLog::EndMessage; 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9743c827367444ee418f129b2c238299f49d3264554Jarkko 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; 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_isOk = false; 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 978d2722f6ec95d6f745a9ee1bfa5f033574b91f235Mika Isojärvi 979d2722f6ec95d6f745a9ee1bfa5f033574b91f235Mika Isojärvi EGLU_CHECK_CALL(egl, makeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)); 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateContextExtGroup : public TestCaseGroup 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateContextExtGroup (EglTestContext& eglTestCtx, EGLenum api, EGLint apiBit, const EGLint* attribList, const char* name, const char* description); 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~CreateContextExtGroup (void); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLenum m_api; 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const EGLint m_apiBit; 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLint> m_attribList; 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9963c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtGroup::CreateContextExtGroup (EglTestContext& eglTestCtx, EGLenum api, EGLint apiBit, const EGLint* attribList, const char* name, const char* description) 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup (eglTestCtx, name, description) 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_api (api) 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_apiBit (apiBit) 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribList (attribList, attribList + getAttribListLength(attribList)) 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10043c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtGroup::~CreateContextExtGroup (void) 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10083c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <int Red, int Green, int Blue, int Alpha> 10103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool colorBits (const eglu::CandidateConfig& c) 10113c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{ 10123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return c.redSize() == Red && 10133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.greenSize() == Green && 10143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.blueSize() == Blue && 10153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.alphaSize() == Alpha; 10163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos} 10173c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool hasDepth (const eglu::CandidateConfig& c) { return c.depthSize() > 0; } 10193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool noDepth (const eglu::CandidateConfig& c) { return c.depthSize() == 0; } 10203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool hasStencil (const eglu::CandidateConfig& c) { return c.stencilSize() > 0; } 10213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool noStencil (const eglu::CandidateConfig& c) { return c.stencilSize() == 0; } 10223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <deUint32 Type> 10243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool renderable (const eglu::CandidateConfig& c) 10253c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{ 10263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return (c.renderableType() & Type) == Type; 10273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos} 10283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic eglu::ConfigFilter getRenderableFilter (deUint32 bits) 10303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{ 10313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos switch (bits) 10323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 10333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos case EGL_OPENGL_ES2_BIT: return renderable<EGL_OPENGL_ES2_BIT>; 10343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos case EGL_OPENGL_ES3_BIT: return renderable<EGL_OPENGL_ES3_BIT>; 10353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos case EGL_OPENGL_BIT: return renderable<EGL_OPENGL_BIT>; 10363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos default: 10373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos DE_ASSERT(false); 10383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return renderable<0>; 10393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } 10403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos} 10413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtGroup::init (void) 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter colorFilter; 10503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter depthFilter; 10513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter stencilFilter; 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } groups[] = 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1054653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgb565_no_depth_no_stencil", "RGB565 configs without depth or stencil", colorBits<5, 6, 5, 0>, noDepth, noStencil }, 10553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb565_no_depth_stencil", "RGB565 configs with stencil and no depth", colorBits<5, 6, 5, 0>, noDepth, hasStencil }, 10563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb565_depth_no_stencil", "RGB565 configs with depth and no stencil", colorBits<5, 6, 5, 0>, hasDepth, noStencil }, 10573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb565_depth_stencil", "RGB565 configs with depth and stencil", colorBits<5, 6, 5, 0>, hasDepth, hasStencil }, 10583c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1059653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgb888_no_depth_no_stencil", "RGB888 configs without depth or stencil", colorBits<8, 8, 8, 0>, noDepth, noStencil }, 10603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb888_no_depth_stencil", "RGB888 configs with stencil and no depth", colorBits<8, 8, 8, 0>, noDepth, hasStencil }, 10613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb888_depth_no_stencil", "RGB888 configs with depth and no stencil", colorBits<8, 8, 8, 0>, hasDepth, noStencil }, 10623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb888_depth_stencil", "RGB888 configs with depth and stencil", colorBits<8, 8, 8, 0>, hasDepth, hasStencil }, 10633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1064653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgba4444_no_depth_no_stencil", "RGBA4444 configs without depth or stencil", colorBits<4, 4, 4, 4>, noDepth, noStencil }, 10653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba4444_no_depth_stencil", "RGBA4444 configs with stencil and no depth", colorBits<4, 4, 4, 4>, noDepth, hasStencil }, 1066653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgba4444_depth_no_stencil", "RGBA4444 configs with depth and no stencil", colorBits<4, 4, 4, 4>, hasDepth, noStencil }, 10673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba4444_depth_stencil", "RGBA4444 configs with depth and stencil", colorBits<4, 4, 4, 4>, hasDepth, hasStencil }, 10683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1069653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgba5551_no_depth_no_stencil", "RGBA5551 configs without depth or stencil", colorBits<5, 5, 5, 1>, noDepth, noStencil }, 10703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba5551_no_depth_stencil", "RGBA5551 configs with stencil and no depth", colorBits<5, 5, 5, 1>, noDepth, hasStencil }, 10713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba5551_depth_no_stencil", "RGBA5551 configs with depth and no stencil", colorBits<5, 5, 5, 1>, hasDepth, noStencil }, 10723c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba5551_depth_stencil", "RGBA5551 configs with depth and stencil", colorBits<5, 5, 5, 1>, hasDepth, hasStencil }, 10733c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1074653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos { "rgba8888_no_depth_no_stencil", "RGBA8888 configs without depth or stencil", colorBits<8, 8, 8, 8>, noDepth, noStencil }, 10753c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba8888_no_depth_stencil", "RGBA8888 configs with stencil and no depth", colorBits<8, 8, 8, 8>, noDepth, hasStencil }, 10763c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba8888_depth_no_stencil", "RGBA8888 configs with depth and no stencil", colorBits<8, 8, 8, 8>, hasDepth, noStencil }, 10773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba8888_depth_stencil", "RGBA8888 configs with depth and stencil", colorBits<8, 8, 8, 8>, hasDepth, hasStencil } 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int groupNdx = 0; groupNdx < DE_LENGTH_OF_ARRAY(groups); groupNdx++) 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry eglu::FilterList filter; 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos filter << groups[groupNdx].colorFilter 10853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << groups[groupNdx].depthFilter 10863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << groups[groupNdx].stencilFilter 10873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << getRenderableFilter(m_apiBit); 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new CreateContextExtCase(m_eglTestCtx, m_api, &(m_attribList[0]), filter, groups[groupNdx].name, groups[groupNdx].description)); 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Add other group 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10963c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtTests::CreateContextExtTests (EglTestContext& eglTestCtx) 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(eglTestCtx, "create_context_ext", "EGL_KHR_create_context tests.") 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11013c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContextExtTests::~CreateContextExtTests (void) 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateContextExtTests::init (void) 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const size_t maxAttributeCount = 10; 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const struct 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* name; 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* description; 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum api; 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint apiBit; 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint attribList[maxAttributeCount]; 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } groupList[] = 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Not supported by glw 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 1.x 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_10", "Create OpenGL ES 1.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES_BIT, 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_11", "Create OpenGL ES 1.1 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES_BIT, 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 2.x 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_20", "Create OpenGL ES 2.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES2_BIT, 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL ES 3.x 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gles_30", "Create OpenGL ES 3.0 context", EGL_OPENGL_ES_API, EGL_OPENGL_ES3_BIT_KHR, 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [mika] Not supported by glw 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] Should we really test 1.x? 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_10", "Create OpenGL 1.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE} }, 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_11", "Create OpenGL 1.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 1, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 2.x 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_20", "Create OpenGL 2.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_21", "Create OpenGL 2.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 2, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 3.x 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_30", "Create OpenGL 3.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_30", "Create robust OpenGL 3.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11493c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_31", "Create OpenGL 3.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_31", "Create robust OpenGL 3.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11533c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_32", "Create OpenGL 3.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_NONE } }, 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_32", "Create robust OpenGL 3.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11573c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_33", "Create OpenGL 3.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_NONE } }, 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_33", "Create robust OpenGL 3.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11613c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // OpenGL 4.x 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_40", "Create OpenGL 4.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 0, EGL_NONE } }, 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_40", "Create robust OpenGL 4.0 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11673c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_41", "Create OpenGL 4.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 1, EGL_NONE } }, 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_41", "Create robust OpenGL 4.1 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11713c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_42", "Create OpenGL 4.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 2, EGL_NONE } }, 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_42", "Create robust OpenGL 4.2 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11753c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "gl_43", "Create OpenGL 4.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_MAJOR_VERSION_KHR, 4, EGL_CONTEXT_MINOR_VERSION_KHR, 3, EGL_NONE } }, 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_43", "Create robust OpenGL 4.3 context", EGL_OPENGL_API, EGL_OPENGL_BIT, 11793c827367444ee418f129b2c238299f49d3264554Jarkko 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 } }, 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Robust contexts with EGL_EXT_create_context_robustness 11823c827367444ee418f129b2c238299f49d3264554Jarkko 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, 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } }, 11843c827367444ee418f129b2c238299f49d3264554Jarkko 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, 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } }, 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if 0 11873c827367444ee418f129b2c238299f49d3264554Jarkko 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. 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { "robust_gl_ext", "Create robust OpenGL context with EGL_EXT_create_context_robustness.", EGL_OPENGL_API, EGL_OPENGL_BIT, 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE, EGL_NONE } } 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int groupNdx = 0; groupNdx < DE_LENGTH_OF_ARRAY(groupList); groupNdx++) 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new CreateContextExtGroup(m_eglTestCtx, groupList[groupNdx].api, groupList[groupNdx].apiBit, groupList[groupNdx].attribList, groupList[groupNdx].name, groupList[groupNdx].description)); 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1199