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 Choose config tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglChooseConfigTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglChooseConfigReference.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluStrUtil.hpp" 283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUtil.hpp" 293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp" 303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deRandom.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <algorithm> 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string> 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <set> 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <map> 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing std::set; 463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing std::vector; 473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing std::pair; 483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing std::string; 493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing tcu::TestLog; 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing eglu::ConfigInfo; 513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw; 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstring configListToString (const Library& egl, const EGLDisplay& display, const vector<EGLConfig>& configs) 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry string str = ""; 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (vector<EGLConfig>::const_iterator cfgIter = configs.begin(); cfgIter != configs.end(); cfgIter++) 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLConfig config = *cfgIter; 623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLint configId = eglu::getConfigID(egl, display, config); 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (str.length() != 0) 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry str += " "; 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry str += de::toString(configId); 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return str; 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid logConfigAttrib (TestLog& log, EGLenum attrib, EGLint value) 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const std::string attribStr = eglu::getConfigAttribName(attrib); 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (value == EGL_DONT_CARE) 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << " " << attribStr << ": EGL_DONT_CARE" << TestLog::EndMessage; 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << " " << attribStr << ": " << eglu::getConfigAttribValueStr(attrib, value) << TestLog::EndMessage; 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8559adfaea5676524b22738039e020e59a73c17a0bMika Isojärvibool configListEqual (const Library& egl, const EGLDisplay& display, const vector<EGLConfig>& as, const vector<EGLConfig>& bs) 8659adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi{ 8759adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi if (as.size() != bs.size()) 8859adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi return false; 8959adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi 9059adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi for (int configNdx = 0; configNdx < (int)as.size(); configNdx++) 9159adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi { 9259adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi if (as[configNdx] != bs[configNdx]) 9359adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi { 9459adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi // Allow lists to differ if both configs are non-conformant 9559adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi const EGLint aCaveat = eglu::getConfigAttribInt(egl, display, as[configNdx], EGL_CONFIG_CAVEAT); 9659adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi const EGLint bCaveat = eglu::getConfigAttribInt(egl, display, bs[configNdx], EGL_CONFIG_CAVEAT); 9759adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi 9859adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi if (aCaveat != EGL_NON_CONFORMANT_CONFIG || bCaveat != EGL_NON_CONFORMANT_CONFIG) 9959adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi return false; 10059adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi } 10159adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi } 10259adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi 10359adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi return true; 10459adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi} 10559adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ChooseConfigCase : public TestCase 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChooseConfigCase (EglTestContext& eglTestCtx, const char* name, const char* description, bool checkOrder, const EGLint* attributes) 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (eglTestCtx, name, description) 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_checkOrder (checkOrder) 1143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_display (EGL_NO_DISPLAY) 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Parse attributes 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (attributes[0] != EGL_NONE) 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_attributes.push_back(std::make_pair((EGLenum)attributes[0], (EGLint)attributes[1])); 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attributes += 2; 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChooseConfigCase (EglTestContext& eglTestCtx, const char* name, const char* description, bool checkOrder, const std::vector<std::pair<EGLenum, EGLint> >& attributes) 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (eglTestCtx, name, description) 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_checkOrder (checkOrder) 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attributes (attributes) 1283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_display (EGL_NO_DISPLAY) 1293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } 1313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos void init (void) 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos DE_ASSERT(m_display == EGL_NO_DISPLAY); 1353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 1363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } 1373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos void deinit (void) 1393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_eglTestCtx.getLibrary().terminate(m_display); 1413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = EGL_NO_DISPLAY; 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void) 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeTest(m_attributes, m_checkOrder); 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChooseConfigCase (EglTestContext& eglTestCtx, const char* name, const char* description, bool checkOrder) 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (eglTestCtx, name, description) 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_checkOrder (checkOrder) 1553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_display (EGL_NO_DISPLAY) 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void executeTest (const std::vector<std::pair<EGLenum, EGLint> >& attributes, bool checkOrder) 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 1623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos TestLog& log = m_testCtx.getLog(); 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Build attributes for EGL 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<EGLint> attribList; 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (vector<pair<EGLenum, EGLint> >::const_iterator i = attributes.begin(); i != attributes.end(); i++) 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribList.push_back(i->first); 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribList.push_back(i->second); 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attribList.push_back(EGL_NONE); 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Print attribList to log 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Attributes:" << TestLog::EndMessage; 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (vector<pair<EGLenum, EGLint> >::const_iterator i = attributes.begin(); i != attributes.end(); i++) 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry logConfigAttrib(log, i->first, i->second); 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<EGLConfig> resultConfigs; 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<EGLConfig> referenceConfigs; 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Query from EGL implementation 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint numConfigs = 0; 1843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(egl, chooseConfig(m_display, &attribList[0], DE_NULL, 0, &numConfigs)); 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resultConfigs.resize(numConfigs); 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (numConfigs > 0) 1883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(egl, chooseConfig(m_display, &attribList[0], &resultConfigs[0], (EGLint)resultConfigs.size(), &numConfigs)); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Build reference 1923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos chooseConfigReference(egl, m_display, referenceConfigs, attributes); 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1943c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "Expected:\n " << configListToString(egl, m_display, referenceConfigs) << TestLog::EndMessage; 1953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos log << TestLog::Message << "Got:\n " << configListToString(egl, m_display, resultConfigs) << TestLog::EndMessage; 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isSetMatch = (set<EGLConfig>(resultConfigs.begin(), resultConfigs.end()) == set<EGLConfig>(referenceConfigs.begin(), referenceConfigs.end())); 19859adfaea5676524b22738039e020e59a73c17a0bMika Isojärvi bool isExactMatch = configListEqual(egl, m_display, resultConfigs, referenceConfigs); 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isMatch = isSetMatch && (checkOrder ? isExactMatch : true); 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (isMatch) 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Pass" << TestLog::EndMessage; 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!isSetMatch) 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Fail, configs don't match" << TestLog::EndMessage; 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!isExactMatch) 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry log << TestLog::Message << "Fail, got correct configs but in invalid order" << TestLog::EndMessage; 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!isMatch) 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void fillDontCare (std::vector<std::pair<EGLenum, EGLint> >& attributes) 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum dontCareAttributes[] = 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_TRANSPARENT_TYPE, 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_COLOR_BUFFER_TYPE, 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RENDERABLE_TYPE, 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SURFACE_TYPE 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Fill appropriate unused attributes with EGL_DONT_CARE 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(dontCareAttributes); ndx++) 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool found = false; 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t findNdx = 0; findNdx < attributes.size(); findNdx++) 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (attributes[findNdx].first == dontCareAttributes[ndx]) found = true; 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!found) attributes.push_back(std::make_pair(dontCareAttributes[ndx], EGL_DONT_CARE)); 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const bool m_checkOrder; 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<pair<EGLenum, EGLint> > m_attributes; 2353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 2363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLDisplay m_display; 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ChooseConfigSimpleCase : public ChooseConfigCase 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint getValue (EGLenum name) 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const struct 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum name; 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint value; 2483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } attributes[] = 2493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BUFFER_SIZE, 0 }, 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RED_SIZE, 0 }, 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_GREEN_SIZE, 0 }, 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BLUE_SIZE, 0 }, 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LUMINANCE_SIZE, 0 }, 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_SIZE, 0 }, 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_MASK_SIZE, 0 }, 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGB, EGL_DONT_CARE }, 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGBA, EGL_DONT_CARE }, 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_COLOR_BUFFER_TYPE, EGL_DONT_CARE }, 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFIG_CAVEAT, EGL_DONT_CARE }, 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //{ EGL_CONFIG_ID, EGL_DONT_CARE }, 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_DEPTH_SIZE, 0 }, 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LEVEL, 0 }, 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MAX_SWAP_INTERVAL, EGL_DONT_CARE }, 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MIN_SWAP_INTERVAL, EGL_DONT_CARE }, 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_NATIVE_RENDERABLE, EGL_DONT_CARE }, 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_NATIVE_VISUAL_TYPE, EGL_DONT_CARE }, 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLE_BUFFERS, 0 }, 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLES, 0 }, 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_STENCIL_SIZE, 0 }, 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_TYPE, EGL_TRANSPARENT_RGB }, 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_RED_VALUE, 0 }, 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_GREEN_VALUE, 0 }, 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_BLUE_VALUE, 0 }, 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFORMANT, EGL_OPENGL_ES_BIT }, 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT }, 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SURFACE_TYPE, EGL_WINDOW_BIT } 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //{ EGL_CONFORMANT, EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT | EGL_OPENVG_BIT }, 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //{ EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT | EGL_OPENVG_BIT }, 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry //{ EGL_SURFACE_TYPE, EGL_WINDOW_BIT 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_PIXMAP_BIT 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_PBUFFER_BIT 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_MULTISAMPLE_RESOLVE_BOX_BIT 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_VG_ALPHA_FORMAT_PRE_BIT 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_SWAP_BEHAVIOR_PRESERVED_BIT 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // | EGL_VG_COLORSPACE_LINEAR_BIT 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // } 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (name == EGL_CONFIG_ID) 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(0); 2933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos vector<EGLConfig> configs = eglu::getConfigs(m_eglTestCtx.getLibrary(), m_display); 2943c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return eglu::getConfigID(m_eglTestCtx.getLibrary(), m_display, configs[rnd.getInt(0, (int)configs.size()-1)]); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(attributes); ndx++) 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (attributes[ndx].name == name) 3013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return attributes[ndx].value; 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return EGL_NONE; 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChooseConfigSimpleCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLenum attribute, bool checkOrder) 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ChooseConfigCase(eglTestCtx, name, description, checkOrder) 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribute(attribute) 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCase::IterateResult iterate (void) 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<std::pair<EGLenum, EGLint> > attributes; 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attributes.push_back(std::pair<EGLenum, EGLint>(m_attribute, getValue(m_attribute))); 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fillDontCare(attributes); 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeTest(attributes, m_checkOrder); 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum m_attribute; 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ChooseConfigRandomCase : public ChooseConfigCase 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ChooseConfigRandomCase (EglTestContext& eglTestCtx, const char* name, const char* description, const set<EGLenum>& attribSet) 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : ChooseConfigCase (eglTestCtx, name, description, true) 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_attribSet (attribSet) 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_numIters (10) 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_iterNdx (0) 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void) 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos ChooseConfigCase::init(); 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_iterNdx = 0; 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCase::IterateResult iterate (void) 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "Iteration :" << m_iterNdx << TestLog::EndMessage; 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_iterNdx += 1; 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Build random list of attributes 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd(m_iterNdx); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numAttribs = rnd.getInt(0, (int)m_attribSet.size()*2); 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<std::pair<EGLenum, EGLint> > attributes = genRandomAttributes(m_attribSet, numAttribs, rnd); 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fillDontCare(attributes); 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry executeTest(attributes, m_checkOrder); 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return m_iterNdx < m_numIters ? CONTINUE : STOP; 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry template <int MinVal, int MaxVal> static EGLint getInt (de::Random& rnd) 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return rnd.getInt(MinVal, MaxVal); 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static EGLint getBool (de::Random& rnd) 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return rnd.getBool() ? EGL_TRUE : EGL_FALSE; 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static EGLint getBufferType (de::Random& rnd) 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLint types[] = { EGL_RGB_BUFFER, EGL_LUMINANCE_BUFFER }; 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return rnd.choose<EGLint>(types, types+DE_LENGTH_OF_ARRAY(types)); 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static EGLint getConfigCaveat (de::Random& rnd) 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLint caveats[] = { EGL_SLOW_CONFIG, EGL_NON_CONFORMANT_CONFIG }; 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return rnd.choose<EGLint>(caveats, caveats+DE_LENGTH_OF_ARRAY(caveats)); 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static EGLint getApiBits (de::Random& rnd) 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint api = 0; 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry api |= rnd.getBool() ? EGL_OPENGL_BIT : 0; 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry api |= rnd.getBool() ? EGL_OPENGL_ES_BIT : 0; 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry api |= rnd.getBool() ? EGL_OPENGL_ES2_BIT : 0; 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry api |= rnd.getBool() ? EGL_OPENVG_BIT : 0; 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return api; 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static EGLint getSurfaceType (de::Random& rnd) 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint bits = 0; 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bits |= rnd.getBool() ? EGL_WINDOW_BIT : 0; 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bits |= rnd.getBool() ? EGL_PIXMAP_BIT : 0; 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bits |= rnd.getBool() ? EGL_PBUFFER_BIT : 0; 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return bits; 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct AttribSpec 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum attribute; 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint (*getValue)(de::Random& rnd); 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<std::pair<EGLenum, EGLint> > genRandomAttributes (const std::set<EGLenum>& attribSet, int numAttribs, de::Random& rnd) 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const struct AttribSpec attributes[] = 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BUFFER_SIZE, ChooseConfigRandomCase::getInt<0, 32>, }, 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RED_SIZE, ChooseConfigRandomCase::getInt<0, 8>, }, 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_GREEN_SIZE, ChooseConfigRandomCase::getInt<0, 8>, }, 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BLUE_SIZE, ChooseConfigRandomCase::getInt<0, 8>, }, 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LUMINANCE_SIZE, ChooseConfigRandomCase::getInt<0, 1>, }, 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_SIZE, ChooseConfigRandomCase::getInt<0, 8>, }, 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_MASK_SIZE, ChooseConfigRandomCase::getInt<0, 1>, }, 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGB, ChooseConfigRandomCase::getBool, }, 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGBA, ChooseConfigRandomCase::getBool, }, 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_COLOR_BUFFER_TYPE, ChooseConfigRandomCase::getBufferType, }, 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFIG_CAVEAT, ChooseConfigRandomCase::getConfigCaveat, }, 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_CONFIG_ID, 0/*special*/, }, 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFORMANT, ChooseConfigRandomCase::getApiBits, }, 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_DEPTH_SIZE, ChooseConfigRandomCase::getInt<0, 32>, }, 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LEVEL, ChooseConfigRandomCase::getInt<0, 1>, }, 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_MATCH_NATIVE_PIXMAP, EGL_NONE, }, 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MAX_SWAP_INTERVAL, ChooseConfigRandomCase::getInt<0, 2>, }, 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MIN_SWAP_INTERVAL, ChooseConfigRandomCase::getInt<0, 1>, }, 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_NATIVE_RENDERABLE, ChooseConfigRandomCase::getBool, }, 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_NATIVE_VISUAL_TYPE, EGL_DONT_CARE, }, 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RENDERABLE_TYPE, ChooseConfigRandomCase::getApiBits, }, 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLE_BUFFERS, ChooseConfigRandomCase::getInt<0, 1>, }, 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLES, ChooseConfigRandomCase::getInt<0, 1>, }, 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_STENCIL_SIZE, ChooseConfigRandomCase::getInt<0, 1>, }, 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SURFACE_TYPE, ChooseConfigRandomCase::getSurfaceType, }, 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_TRANSPARENT_TYPE, EGL_TRANSPARENT_RGB,}, 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_TRANSPARENT_RED_VALUE, ChooseConfigRandomCase::getInt<0, 255>, }, 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_TRANSPARENT_GREEN_VALUE, ChooseConfigRandomCase::getInt<0, 255>, }, 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// { EGL_TRANSPARENT_BLUE_VALUE, ChooseConfigRandomCase::getInt<0, 255>, } 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<std::pair<EGLenum, EGLint> > out; 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Build list to select from 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<AttribSpec> candidates; 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)DE_LENGTH_OF_ARRAY(attributes); ndx++) 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (attribSet.find(attributes[ndx].attribute) != attribSet.end()) 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry candidates.push_back(attributes[ndx]); 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int attribNdx = 0; attribNdx < numAttribs; attribNdx++) 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry AttribSpec spec = rnd.choose<AttribSpec>(candidates.begin(), candidates.end()); 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out.push_back(std::make_pair(spec.attribute, spec.getValue(rnd))); 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return out; 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::set<EGLenum> m_attribSet; 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_numIters; 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_iterNdx; 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4723c827367444ee418f129b2c238299f49d3264554Jarkko PoyryChooseConfigTests::ChooseConfigTests (EglTestContext& eglTestCtx) 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(eglTestCtx, "choose_config", "eglChooseConfig() tests") 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4773c827367444ee418f129b2c238299f49d3264554Jarkko PoyryChooseConfigTests::~ChooseConfigTests (void) 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate <typename T, size_t N> 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystd::set<T> toSet (const T (&arr)[N]) 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::set<T> set; 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (size_t i = 0; i < N; i++) 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry set.insert(arr[i]); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return set; 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ChooseConfigTests::init (void) 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Single attributes 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const struct 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLenum attribute; 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* testName; 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } attributes[] = 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BUFFER_SIZE, "buffer_size" }, 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RED_SIZE, "red_size" }, 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_GREEN_SIZE, "green_size" }, 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BLUE_SIZE, "blue_size" }, 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LUMINANCE_SIZE, "luminance_size" }, 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_SIZE, "alpha_size" }, 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_ALPHA_MASK_SIZE, "alpha_mask_size" }, 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGB, "bind_to_texture_rgb" }, 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_BIND_TO_TEXTURE_RGBA, "bind_to_texture_rgba" }, 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_COLOR_BUFFER_TYPE, "color_buffer_type" }, 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFIG_CAVEAT, "config_caveat" }, 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFIG_ID, "config_id" }, 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_CONFORMANT, "conformant" }, 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_DEPTH_SIZE, "depth_size" }, 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_LEVEL, "level" }, 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MAX_SWAP_INTERVAL, "max_swap_interval" }, 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_MIN_SWAP_INTERVAL, "min_swap_interval" }, 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_NATIVE_RENDERABLE, "native_renderable" }, 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_NATIVE_VISUAL_TYPE, "native_visual_type" }, 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_RENDERABLE_TYPE, "renderable_type" }, 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLE_BUFFERS, "sample_buffers" }, 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SAMPLES, "samples" }, 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_STENCIL_SIZE, "stencil_size" }, 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_SURFACE_TYPE, "surface_type" }, 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_TYPE, "transparent_type" }, 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_RED_VALUE, "transparent_red_value" }, 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_GREEN_VALUE, "transparent_green_value" }, 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { EGL_TRANSPARENT_BLUE_VALUE, "transparent_blue_value" } 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* simpleGroup = new tcu::TestCaseGroup(m_testCtx, "simple", "Simple tests"); 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(simpleGroup); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* selectionGroup = new tcu::TestCaseGroup(m_testCtx, "selection_only", "Selection tests, order ignored"); 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry simpleGroup->addChild(selectionGroup); 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* sortGroup = new tcu::TestCaseGroup(m_testCtx, "selection_and_sort", "Selection and ordering tests"); 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry simpleGroup->addChild(sortGroup); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)DE_LENGTH_OF_ARRAY(attributes); ndx++) 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry selectionGroup->addChild(new ChooseConfigSimpleCase(m_eglTestCtx, attributes[ndx].testName, "Simple config selection case", attributes[ndx].attribute, false)); 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry sortGroup->addChild(new ChooseConfigSimpleCase(m_eglTestCtx, attributes[ndx].testName, "Simple config selection and sort case", attributes[ndx].attribute, true)); 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Random 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* randomGroup = new tcu::TestCaseGroup(m_testCtx, "random", "Random eglChooseConfig() usage"); 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(randomGroup); 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum rgbaSizes[] = 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RED_SIZE, 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_GREEN_SIZE, 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BLUE_SIZE, 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_SIZE 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "color_sizes", "Random color size rules", toSet(rgbaSizes))); 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum colorDepthStencilSizes[] = 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RED_SIZE, 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_GREEN_SIZE, 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BLUE_SIZE, 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_SIZE, 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_DEPTH_SIZE, 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_STENCIL_SIZE 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "color_depth_stencil_sizes", "Random color, depth and stencil size rules", toSet(colorDepthStencilSizes))); 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum bufferSizes[] = 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BUFFER_SIZE, 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_LUMINANCE_SIZE, 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_MASK_SIZE, 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_DEPTH_SIZE, 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_STENCIL_SIZE 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "buffer_sizes", "Various buffer size rules", toSet(bufferSizes))); 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum surfaceType[] = 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NATIVE_RENDERABLE, 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SURFACE_TYPE 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "surface_type", "Surface type rules", toSet(surfaceType))); 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum sampleBuffers[] = 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SAMPLE_BUFFERS, 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SAMPLES 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "sample_buffers", "Sample buffer rules", toSet(sampleBuffers))); 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note Not every attribute is supported at the moment 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const EGLenum allAttribs[] = 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BUFFER_SIZE, 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RED_SIZE, 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_GREEN_SIZE, 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BLUE_SIZE, 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_SIZE, 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_MASK_SIZE, 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BIND_TO_TEXTURE_RGB, 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_BIND_TO_TEXTURE_RGBA, 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_COLOR_BUFFER_TYPE, 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_CONFIG_CAVEAT, 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_CONFIG_ID, 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_CONFORMANT, 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_DEPTH_SIZE, 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_LEVEL, 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGL_MATCH_NATIVE_PIXMAP, 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_MAX_SWAP_INTERVAL, 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_MIN_SWAP_INTERVAL, 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NATIVE_RENDERABLE, 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NATIVE_VISUAL_TYPE, 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RENDERABLE_TYPE, 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SAMPLE_BUFFERS, 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SAMPLES, 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_STENCIL_SIZE, 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SURFACE_TYPE, 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_TRANSPARENT_TYPE, 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGL_TRANSPARENT_RED_VALUE, 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGL_TRANSPARENT_GREEN_VALUE, 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGL_TRANSPARENT_BLUE_VALUE 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry randomGroup->addChild(new ChooseConfigRandomCase(m_eglTestCtx, "all", "All attributes", toSet(allAttribs))); 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 638