11a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos/*------------------------------------------------------------------------- 21a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * drawElements Quality Program OpenGL ES 2.0 Module 31a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * ------------------------------------------------- 41a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * 51a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * Copyright 2015 The Android Open Source Project 61a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * 71a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 81a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * you may not use this file except in compliance with the License. 91a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * You may obtain a copy of the License at 101a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * 111a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 121a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * 131a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * Unless required by applicable law or agreed to in writing, software 141a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 151a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 161a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * See the License for the specific language governing permissions and 171a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * limitations under the License. 181a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * 191a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos *//*! 201a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * \file 211a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos * \brief GL_EXT_debug_marker tests 221a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos *//*--------------------------------------------------------------------*/ 231a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 241a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "es2fDebugMarkerTests.hpp" 251a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "gluContextInfo.hpp" 261a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "gluRenderContext.hpp" 271a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "glwFunctions.hpp" 281a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "glwEnums.hpp" 291a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "tcuTestLog.hpp" 301a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "deRandom.hpp" 311a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#include "deUniquePtr.hpp" 321a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 331a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosnamespace deqp 341a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 351a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosnamespace gles2 361a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 371a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosnamespace Functional 381a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 391a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 401a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosnamespace 411a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 421a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 431a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosusing std::vector; 441a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosusing tcu::TestLog; 451a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 461a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosvoid checkSupport (const glu::ContextInfo& ctxInfo) 471a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 481a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos if (!ctxInfo.isExtensionSupported("GL_EXT_debug_marker")) 491a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 501a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#if (DE_OS == DE_OS_ANDROID) 511a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos TCU_THROW(TestError, "Support for GL_EXT_debug_marker is mandatory on Android"); 521a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#else 531a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos TCU_THROW(NotSupportedError, "GL_EXT_debug_marker is not supported"); 541a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos#endif 551a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 561a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos // else no exception thrown 571a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} 581a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 591a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosclass IsSupportedCase : public TestCase 601a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 611a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulospublic: 621a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos IsSupportedCase (Context& context) 631a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos : TestCase(context, "supported", "Is GL_EXT_debug_marker supported") 641a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 651a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 661a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 671a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos IterateResult iterate (void) 681a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 691a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos checkSupport(m_context.getContextInfo()); 701a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "GL_EXT_debug_marker is supported"); 711a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos return STOP; 721a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 731a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos}; 741a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 751a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosvoid getSimpleRndString (vector<char>& dst, de::Random& rnd, int maxLen) 761a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 771a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const char s_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -_"; 781a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 791a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos dst.resize(rnd.getInt(0, (int)maxLen)); 801a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 811a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos for (size_t ndx = 0; ndx < dst.size(); ndx++) 821a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos dst[ndx] = rnd.choose<char>(DE_ARRAY_BEGIN(s_chars), DE_ARRAY_END(s_chars)); 831a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} 841a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 851a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosvoid getComplexRndString (vector<char>& dst, de::Random& rnd, int maxLen) 861a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 871a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos dst.resize(rnd.getInt(0, (int)maxLen)); 881a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 891a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos for (size_t ndx = 0; ndx < dst.size(); ndx++) 901a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos dst[ndx] = (char)rnd.getUint8(); 911a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} 921a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 931a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosenum CallType 941a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 951a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos CALL_TYPE_PUSH_GROUP = 0, 961a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos CALL_TYPE_POP_GROUP, 971a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos CALL_TYPE_INSERT_MARKER, 981a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 991a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos CALL_TYPE_LAST 1001a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos}; 1011a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1021a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosclass RandomCase : public TestCase 1031a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 1041a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulospublic: 1051a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos RandomCase (Context& context) 1061a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos : TestCase(context, "random", "Random GL_EXT_debug_marker usage") 1071a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1081a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1091a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1101a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos void init (void) 1111a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1121a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos checkSupport(m_context.getContextInfo()); 1131a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1141a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1151a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos IterateResult iterate (void) 1161a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1171a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 1181a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const int numIters = 1000; 1191a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const int maxMsgLen = 4096; 1201a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos de::Random rnd (0xaf829c0); 1211a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1221a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos for (int iterNdx = 0; iterNdx < numIters; iterNdx++) 1231a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1241a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const CallType callType = CallType(rnd.getInt(0, CALL_TYPE_LAST-1)); 1251a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1261a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos if (callType == CALL_TYPE_PUSH_GROUP || callType == CALL_TYPE_INSERT_MARKER) 1271a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1281a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const bool nullTerminate = rnd.getBool(); 1291a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const bool passLength = rnd.getBool(); 1301a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const bool complexMsg = rnd.getBool(); 1311a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos vector<char> message; 1321a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1331a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos if (complexMsg) 1341a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos getComplexRndString(message, rnd, maxMsgLen); 1351a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos else 1361a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos getSimpleRndString(message, rnd, maxMsgLen); 1371a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1381a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos if (nullTerminate) 1391a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos message.push_back(char(0)); 1401a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1411a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1421a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const glw::GLsizei length = passLength ? glw::GLsizei(nullTerminate ? message.size()-1 : message.size()) : 0; 1431a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1441a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos if (callType == CALL_TYPE_PUSH_GROUP) 1451a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.pushGroupMarkerEXT(length, &message[0]); 1461a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos else 1471a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.insertEventMarkerEXT(length, &message[0]); 1481a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1491a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1501a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos else 1511a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.popGroupMarkerEXT(); 1521a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1531a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1541a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "Debug marker calls must not set error state"); 1551a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1561a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "All calls passed"); 1571a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos return STOP; 1581a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1591a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos}; 1601a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1611a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulosclass InvalidCase : public TestCase 1621a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 1631a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulospublic: 1641a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos InvalidCase (Context& context) 1651a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos : TestCase(context, "invalid", "Invalid GL_EXT_debug_marker usage") 1661a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1671a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1681a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1691a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos void init (void) 1701a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1711a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos checkSupport(m_context.getContextInfo()); 1721a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1731a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1741a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos IterateResult iterate (void) 1751a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos { 1761a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 1771a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1781a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos m_testCtx.getLog() << TestLog::Message << "Note: GL_EXT_debug_marker calls must not report an error even if invalid arguments are supplied." << TestLog::EndMessage; 1791a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1801a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.pushGroupMarkerEXT(-1, "foo"); 1811a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.insertEventMarkerEXT(-1, "foo"); 1821a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.pushGroupMarkerEXT(0, DE_NULL); 1831a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.insertEventMarkerEXT(0, DE_NULL); 1841a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.pushGroupMarkerEXT(-1, DE_NULL); 1851a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos gl.insertEventMarkerEXT(-1, DE_NULL); 1861a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1871a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "Debug marker calls must not set error state"); 1881a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1891a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "All calls passed"); 1901a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos return STOP; 1911a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos } 1921a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos}; 1931a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1941a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} // anonymous 1951a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 1961a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulostcu::TestCaseGroup* createDebugMarkerTests (Context& context) 1971a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos{ 1981a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos de::MovePtr<tcu::TestCaseGroup> debugMarkerGroup (new tcu::TestCaseGroup(context.getTestContext(), "debug_marker", "GL_EXT_debug_marker tests")); 1991a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 2001a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos debugMarkerGroup->addChild(new IsSupportedCase (context)); 2011a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos debugMarkerGroup->addChild(new RandomCase (context)); 2021a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos debugMarkerGroup->addChild(new InvalidCase (context)); 2031a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 2041a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos return debugMarkerGroup.release(); 2051a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} 2061a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos 2071a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} // Functional 2081a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} // gles2 2091a9576a710673363b2c0d9e5771451cebbfa6d10Pyry Haulos} // deqp 210