teglSimpleConfigCase.cpp revision 8e814ce14475b71be9d3e17db2f1d1c6a3fcc59f
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. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglSimpleConfigCase.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFormatUtil.hpp" 273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUtil.hpp" 283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp" 293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp" 303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "deStringUtil.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing eglu::ConfigInfo; 413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw; 423c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglu; 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosSimpleConfigCase::SimpleConfigCase (EglTestContext& eglTestCtx, const char* name, const char* description, const FilterList& filters) 453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos : TestCase (eglTestCtx, name, description) 463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_filters (filters) 473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , m_display (EGL_NO_DISPLAY) 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySimpleConfigCase::~SimpleConfigCase (void) 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SimpleConfigCase::init (void) 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos DE_ASSERT(m_display == EGL_NO_DISPLAY && m_configs.empty()); 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_configs = chooseConfigs(egl, m_display, m_filters); 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos // Log matching configs. 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos vector<EGLint> configIds(m_configs.size()); 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos for (size_t ndx = 0; ndx < m_configs.size(); ndx++) 693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos configIds[ndx] = getConfigID(egl, m_display, m_configs[ndx]); 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_testCtx.getLog() << TestLog::Message << "Compatible configs: " << tcu::formatArray(configIds.begin(), configIds.end()) << TestLog::EndMessage; 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_configs.empty()) 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 763c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos egl.terminate(m_display); 773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_display = EGL_NO_DISPLAY; 783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos TCU_THROW(NotSupportedError, "No compatible configs found"); 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Init config iter 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_configIter = m_configs.begin(); 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Init test case result to Pass 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid SimpleConfigCase::deinit (void) 893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{ 908e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos if (m_display != EGL_NO_DISPLAY) 918e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos { 928e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglTestCtx.getLibrary().terminate(m_display); 938e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_display = EGL_NO_DISPLAY; 948e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos } 953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_configs.clear(); 963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos} 973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 983c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySimpleConfigCase::IterateResult SimpleConfigCase::iterate (void) 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_configIter != m_configs.end()); 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLConfig config = *m_configIter++; 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry try 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos executeForConfig(m_display, config); 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (const tcu::TestError& e) 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << e; 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note Other errors are handled by framework (resource / internal errors). 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return (m_configIter != m_configs.end()) ? CONTINUE : STOP; 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <int Red, int Green, int Blue, int Alpha> 1193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool colorBits (const eglu::CandidateConfig& c) 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return c.redSize() == Red && 1223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.greenSize() == Green && 1233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.blueSize() == Blue && 1243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.alphaSize() == Alpha; 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <int Red, int Green, int Blue, int Alpha> 1283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool notColorBits (const eglu::CandidateConfig& c) 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos return c.redSize() != Red || 1313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.greenSize() != Green || 1323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.blueSize() != Blue || 1333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos c.alphaSize() != Alpha; 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool hasDepth (const eglu::CandidateConfig& c) { return c.depthSize() > 0; } 1373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool noDepth (const eglu::CandidateConfig& c) { return c.depthSize() == 0; } 1383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool hasStencil (const eglu::CandidateConfig& c) { return c.stencilSize() > 0; } 1393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool noStencil (const eglu::CandidateConfig& c) { return c.stencilSize() == 0; } 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid getDefaultFilterLists (vector<NamedFilterList>& lists, const FilterList& baseFilters) 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const struct 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const char* name; 1463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter filter; 1473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } s_colorRules[] = 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb565", colorBits<5, 6, 5, 0> }, 1503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgb888", colorBits<8, 8, 8, 0> }, 1513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba4444", colorBits<4, 4, 4, 4> }, 1523c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba5551", colorBits<5, 5, 5, 1> }, 1533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "rgba8888", colorBits<8, 8, 8, 8> } 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos static const struct 1573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1583c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const char* name; 1593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter filter; 1603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } s_depthRules[] = 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "no_depth", noDepth }, 1633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "depth", hasDepth }, 1643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos }; 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos static const struct 1673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const char* name; 1693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos eglu::ConfigFilter filter; 1703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } s_stencilRules[] = 1713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1723c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "no_stencil", noStencil }, 1733c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { "stencil", hasStencil }, 1743c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos }; 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1763c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos for (int colorRuleNdx = 0; colorRuleNdx < DE_LENGTH_OF_ARRAY(s_colorRules); colorRuleNdx++) 1773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos for (int depthRuleNdx = 0; depthRuleNdx < DE_LENGTH_OF_ARRAY(s_depthRules); depthRuleNdx++) 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1803c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos for (int stencilRuleNdx = 0; stencilRuleNdx < DE_LENGTH_OF_ARRAY(s_stencilRules); stencilRuleNdx++) 1813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos { 1823c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const string name = string(s_colorRules[colorRuleNdx].name) + "_" + s_depthRules[depthRuleNdx].name + "_" + s_stencilRules[stencilRuleNdx].name; 1833c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos NamedFilterList filters (name.c_str(), ""); 1843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos filters << baseFilters 1863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << s_colorRules[colorRuleNdx].filter 1873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << s_depthRules[depthRuleNdx].filter 1883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << s_stencilRules[stencilRuleNdx].filter; 1893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1903c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos lists.push_back(filters); 1913c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos } 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos // Build "other" set - not configs that don't match any of known color rules 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos NamedFilterList filters ("other", "All other configs"); 1983c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 1993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos // \todo [2014-12-18 pyry] Optimize rules 2003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos filters << baseFilters 2013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << notColorBits<5, 6, 5, 0> 2023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << notColorBits<8, 8, 8, 0> 2033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << notColorBits<4, 4, 4, 4> 2043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << notColorBits<5, 5, 5, 1> 2053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos << notColorBits<8, 8, 8, 8>; 2063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 2073c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos lists.push_back(filters); 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 213