19e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry/*-------------------------------------------------------------------------
29e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * drawElements Quality Program OpenGL ES 3.1 Module
39e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * -------------------------------------------------
49e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *
59e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * Copyright 2014 The Android Open Source Project
69e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *
79e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * Licensed under the Apache License, Version 2.0 (the "License");
89e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * you may not use this file except in compliance with the License.
99e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * You may obtain a copy of the License at
109e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *
119e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *      http://www.apache.org/licenses/LICENSE-2.0
129e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *
139e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * Unless required by applicable law or agreed to in writing, software
149e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * distributed under the License is distributed on an "AS IS" BASIS,
159e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
169e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * See the License for the specific language governing permissions and
179e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * limitations under the License.
189e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *
199e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *//*!
209e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * \file
219e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry * \brief ANDROID_extension_pack_es31a tests
229e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry *//*--------------------------------------------------------------------*/
239e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
249e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "es31fAndroidExtensionPackES31ATests.hpp"
259e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "glsStateQueryUtil.hpp"
269e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "glsShaderLibrary.hpp"
279e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "tcuTestLog.hpp"
289e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "gluCallLogWrapper.hpp"
299e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "gluContextInfo.hpp"
309e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "gluStrUtil.hpp"
319e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "glwFunctions.hpp"
329e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "glwEnums.hpp"
339e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry#include "deStringUtil.hpp"
349e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
359e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrynamespace deqp
369e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
379e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrynamespace gles31
389e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
399e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrynamespace Functional
409e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
419e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrynamespace
429e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
439e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
449e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrystatic std::string genExtensionTestName (const char* extensionName)
459e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
469e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	DE_ASSERT(deStringBeginsWith(extensionName, "GL_"));
479e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	return de::toLower(std::string(extensionName + 3));
489e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
499e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
509e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryclass ExtensionPackTestCase : public TestCase
519e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
529e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrypublic:
539e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			ExtensionPackTestCase	(Context& context, const char* name, const char* description);
549e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
559e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryprotected:
569e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	void	init					(void);
579e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry};
589e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
599e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyryExtensionPackTestCase::ExtensionPackTestCase (Context& context, const char* name, const char* description)
609e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	: TestCase	(context, name, description)
619e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
629e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
639e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
649e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryvoid ExtensionPackTestCase::init (void)
659e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
669e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	if (!m_context.getContextInfo().isExtensionSupported("GL_ANDROID_extension_pack_es31a"))
679e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		throw tcu::NotSupportedError("Test requires GL_ANDROID_extension_pack_es31a extension");
689e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
699e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
709e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryclass ImplementationLimitCase : public ExtensionPackTestCase
719e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
729e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrypublic:
739e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry							ImplementationLimitCase	(Context& context, const char* name, const char* description, glw::GLenum target, int limit);
749e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
759e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryprivate:
769e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	IterateResult			iterate					(void);
779e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
789e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	const glw::GLenum		m_target;
799e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	const int				m_limit;
809e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry};
819e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
829e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyryImplementationLimitCase::ImplementationLimitCase (Context& context, const char* name, const char* description, glw::GLenum target, int limit)
839e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	: ExtensionPackTestCase	(context, name, description)
849e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	, m_target				(target)
859e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	, m_limit				(limit)
869e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
879e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
889e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
899e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyryImplementationLimitCase::IterateResult ImplementationLimitCase::iterate (void)
909e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
919e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	using namespace gls::StateQueryUtil;
929e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
939e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	glu::CallLogWrapper						gl		(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
949e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	StateQueryMemoryWriteGuard<glw::GLint>	result;
959e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
969e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
979e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	m_testCtx.getLog()
989e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< tcu::TestLog::Message
999e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< "Querying " << glu::getGettableStateName(m_target) << ", expecting at least " << m_limit
1009e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< tcu::TestLog::EndMessage;
1019e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1029e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	gl.enableLogging(true);
1039e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	gl.glGetIntegerv(m_target, &result);
1049e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	GLU_EXPECT_NO_ERROR(gl.glGetError(), "implementation limit query failed");
1059e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1069e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	if (result.verifyValidity(m_testCtx) && result < m_limit)
1079e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
1089e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.getLog()
1099e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::Message
1109e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< "// ERROR: Got " << result << ", expected at least " << m_limit
1119e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::EndMessage;
1129e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1139e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Too low implementation limit");
1149e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
1159e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1169e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	return STOP;
1179e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
1189e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1199e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryclass SubExtensionCase : public ExtensionPackTestCase
1209e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1219e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyrypublic:
1229e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry						SubExtensionCase	(Context& context, const char* name, const char* description, const char* extension);
1239e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1249e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryprivate:
1259e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	IterateResult		iterate				(void);
1269e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1279e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	const std::string	m_extension;
1289e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry};
1299e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1309e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyrySubExtensionCase::SubExtensionCase (Context& context, const char* name, const char* description, const char* extension)
1319e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	: ExtensionPackTestCase	(context, name, description)
1329e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	, m_extension			(extension)
1339e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1349e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
1359e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1369e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyrySubExtensionCase::IterateResult SubExtensionCase::iterate (void)
1379e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1389e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	m_testCtx.getLog()
1399e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< tcu::TestLog::Message
1409e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< "Verifying that extension \"" << m_extension << "\" is supported."
1419e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		<< tcu::TestLog::EndMessage;
1429e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1439e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	if (m_context.getContextInfo().isExtensionSupported(m_extension.c_str()))
1449e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
1459e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.getLog()
1469e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::Message
1479e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< "Extension is supported."
1489e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::EndMessage;
1499e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1509e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
1519e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
1529e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	else
1539e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
1549e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.getLog()
1559e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::Message
1569e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< "Error, extension is not supported."
1579e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			<< tcu::TestLog::EndMessage;
1589e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1599e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Required extension not supported");
1609e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
1619e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1629e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	return STOP;
1639e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
1649e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1659e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry} //anonymous
1669e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1679e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyryAndroidExtensionPackES31ATests::AndroidExtensionPackES31ATests (Context& context)
1689e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	: TestCaseGroup(context, "android_extension_pack", "ANDROID_extension_pack_es31a extension tests")
1699e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1709e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
1719e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1729e574351a4724975bf91b1e74ccae8786d711386Jarkko PöyryAndroidExtensionPackES31ATests::~AndroidExtensionPackES31ATests (void)
1739e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1749e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
1759e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
1769e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyryvoid AndroidExtensionPackES31ATests::init (void)
1779e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry{
1789e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	// .limits
1799e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
1809e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		static const struct
1819e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		{
1829e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			const char*	name;
1839e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			glw::GLenum	target;
1849e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			int			limit;
1859e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		} limits[] =
1869e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		{
1879e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			{
1889e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				"max_fragment_atomic_counter_buffers",
1899e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS,
1909e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				1
1919e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			},
1929e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			{
1939e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				"max_fragment_atomic_counters",
1949e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				GL_MAX_FRAGMENT_ATOMIC_COUNTERS,
1959e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				8
1969e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			},
1979e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			{
1989e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				"max_fragment_image_uniforms",
1999e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				GL_MAX_FRAGMENT_IMAGE_UNIFORMS,
2009e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				4
2019e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			},
2029e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			{
2039e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				"max_fragment_shader_storage_blocks",
2049e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS,
2059e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry				4
2069e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			},
2079e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		};
2089e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2099e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		tcu::TestCaseGroup* const group = new tcu::TestCaseGroup(m_testCtx, "limits", "Implementation limits");
2109e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		addChild(group);
2119e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2129e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(limits); ++ndx)
2139e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			group->addChild(new ImplementationLimitCase(m_context,
2149e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry														limits[ndx].name,
2159e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry														(std::string() + "Check " + limits[ndx].name + " is at least " + de::toString(limits[ndx].limit)).c_str(),
2169e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry														limits[ndx].target,
2179e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry														limits[ndx].limit));
2189e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
2199e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2209e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	// .extensions
2219e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
2229e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		static const char* const subExtensions[] =
2239e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		{
2249e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_KHR_debug",
2259e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_KHR_texture_compression_astc_ldr",
2269e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_KHR_blend_equation_advanced",
2279e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_sample_shading",
2289e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_sample_variables",
2299e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_shader_image_atomic",
2309e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_shader_multisample_interpolation",
2319e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_texture_stencil8",
2329e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_OES_texture_storage_multisample_2d_array",
2339e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_copy_image",
2349e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_draw_buffers_indexed",
2359e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_geometry_shader",
2369e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_gpu_shader5",
2379e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_primitive_bounding_box",
2389e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_shader_io_blocks",
2399e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_tessellation_shader",
2409e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_texture_border_clamp",
2419e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_texture_buffer",
2429e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_texture_cube_map_array",
2439e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			"GL_EXT_texture_sRGB_decode",
2449e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		};
2459e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2469e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		tcu::TestCaseGroup* const group = new tcu::TestCaseGroup(m_testCtx, "extensions", "Required extensions");
2479e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		addChild(group);
2489e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2499e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(subExtensions); ++ndx)
2509e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		{
2519e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			const std::string name			= genExtensionTestName(subExtensions[ndx]);
2529e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			const std::string description	= "Check that extension " + name + " is supported if extension pack is supported";
2539e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry			group->addChild(new SubExtensionCase(m_context, name.c_str(), description.c_str(), subExtensions[ndx]));
2549e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		}
2559e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
2569e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2579e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	// .shaders
2589e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	{
2599e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		gls::ShaderLibrary					shaderLibrary	(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo());
2609e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		const std::vector<tcu::TestNode*>&	children		= shaderLibrary.loadShaderFile("shaders/android_extension_pack.test");
2619e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		tcu::TestCaseGroup* const			group			= new tcu::TestCaseGroup(m_testCtx, "shaders", "Shader tests", children);
2629e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2639e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry		addChild(group);
2649e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry	}
2659e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry}
2669e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry
2679e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry} // Functional
2689e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry} // gles31
2699e574351a4724975bf91b1e74ccae8786d711386Jarkko Pöyry} // deqp
270