12739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe/*-------------------------------------------------------------------------
22739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * drawElements Quality Program OpenGL ES 3.1 Module
32739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * -------------------------------------------------
42739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *
52739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * Copyright 2016 The Android Open Source Project
62739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *
72739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * Licensed under the Apache License, Version 2.0 (the "License");
82739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * you may not use this file except in compliance with the License.
92739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * You may obtain a copy of the License at
102739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *
112739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *      http://www.apache.org/licenses/LICENSE-2.0
122739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *
132739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * Unless required by applicable law or agreed to in writing, software
142739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * distributed under the License is distributed on an "AS IS" BASIS,
152739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
162739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * See the License for the specific language governing permissions and
172739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * limitations under the License.
182739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *
192739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *//*!
202739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * \file
212739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe * \brief Negative Precise Tests
222739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe *//*--------------------------------------------------------------------*/
232739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
242739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe#include "es31fNegativePreciseTests.hpp"
252739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
262739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe#include "gluShaderProgram.hpp"
272739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe#include "glwEnums.hpp"
282739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
292739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppenamespace deqp
302739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
312739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppenamespace gles31
322739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
332739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppenamespace Functional
342739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
352739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppenamespace NegativeTestShared
362739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
372739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppenamespace
382739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
392739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
402739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppeenum TestPrecise
412739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
422739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_AS_VARIABLE_NAME = 0,
432739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_AS_FUNCTION_NAME,
442739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_AS_ARGUMENT_NAME,
452739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_AS_MACRO_NAME,
462739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_MACRO_AND_VARIABLE,
472739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_MACRO_AND_FUNCTION,
482739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_MACRO_AND_ARGUMENT,
492739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
502739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TEST_PRECISE_LAST
512739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe};
522739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
532739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppestatic const glu::ShaderType s_shaderTypes[] =
542739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
552739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_VERTEX,
562739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_FRAGMENT,
572739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_GEOMETRY,
582739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_COMPUTE,
592739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_TESSELLATION_CONTROL,
602739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	glu::SHADERTYPE_TESSELLATION_EVALUATION
612739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe};
622739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
632739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppestd::string generateShaderSource (NegativeTestContext& ctx, glu::ShaderType shaderType, TestPrecise test)
642739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
652739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	const bool				isES32	= contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2));
662739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	const glu::GLSLVersion	version	= isES32 ? glu::GLSL_VERSION_320_ES : glu::GLSL_VERSION_310_ES;
672739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	std::ostringstream		source;
682739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
692739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	source	<< glu::getGLSLVersionDeclaration(version) << "\n"
702739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			<< (isES32 ? "" : "#extension GL_EXT_gpu_shader5 : enable\n");
712739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
722739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	switch (test)
732739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	{
742739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_AS_MACRO_NAME:		source << "#define precise 0\n";		break;
752739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
762739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_VARIABLE:
772739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_FUNCTION:
782739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_ARGUMENT:	source << "#define precise aName\n";	break;
792739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		default:
802739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			break;
812739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	}
822739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
832739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe    switch (shaderType)
842739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe    {
852739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        case glu::SHADERTYPE_GEOMETRY:
862739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            source  << (isES32 ? "" : "#extension GL_EXT_geometry_shader : enable\n")
872739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe                    << "layout(max_vertices = 5) out;\n";
882739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            break;
892739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
902739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        case glu::SHADERTYPE_TESSELLATION_CONTROL:
912739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            source  << (isES32 ? "" : "#extension GL_EXT_tessellation_shader : enable\n")
922739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe                    << "layout(vertices = 3) out;\n";
932739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            break;
942739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
952739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        case glu::SHADERTYPE_TESSELLATION_EVALUATION:
962739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            source  << (isES32 ? "" : "#extension GL_EXT_tessellation_shader : enable\n")
972739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe                    << "layout(triangles, equal_spacing, cw) in;\n";
982739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            break;
992739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1002739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        default:
1012739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe            break;
1022739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe    }
1032739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1042739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	switch (test)
1052739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	{
1062739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_AS_FUNCTION_NAME:
1072739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_FUNCTION:
1082739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			source	<< "\n"
1092739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "void precise()\n"
1102739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "{\n"
1112739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "}\n";
1122739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			break;
1132739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1142739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_AS_ARGUMENT_NAME:
1152739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_ARGUMENT:
1162739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			source	<< "\n"
1172739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "void example(int precise)\n"
1182739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "{\n"
1192739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe					<< "}\n";
1202739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			break;
1212739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1222739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		default:
1232739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			break;
1242739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	}
1252739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1262739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe    source  << "void main()\n"
1272739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			<< "{\n";
1282739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1292739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	switch (test)
1302739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	{
1312739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_AS_VARIABLE_NAME:
1322739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_MACRO_AND_VARIABLE:	source << "	int precise = 1;\n";		break;
1332739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		case TEST_PRECISE_AS_MACRO_NAME:		source << "	int number = precise;\n";	break;
1342739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		default:
1352739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe			break;
1362739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	}
1372739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1382739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	source << "}\n";
1392739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1402739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	return source.str();
1412739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
1422739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1432739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppevoid generateAndVerifyShader (NegativeTestContext& ctx, glu::ShaderType shaderType, TestPrecise test)
1442739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
145653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos	glu::Shader			shader			(ctx.getRenderContext(), shaderType);
146653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos	std::string			shaderSource	= generateShaderSource(ctx, shaderType, test);
1472739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	const char* const	source			= shaderSource.c_str();
148653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos	const int			length			= (int) shaderSource.size();
1492739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1502739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	shader.setSources(1, &source, &length);
1512739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	shader.compile();
1522739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1532739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.getLog() << shader;
1542739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1552739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	if (shader.getCompileStatus())
1562739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		ctx.fail("Shader was not expected to compile.");
1572739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
1582739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1592739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppevoid precise_as_variable_name (NegativeTestContext& ctx)
1602739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
1612739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TCU_CHECK_AND_THROW(NotSupportedError,
1622739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
1632739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
1642739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1652739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.beginSection("Test that precise cannot be used as a variable name.");
1662739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
1674a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	{
1684a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
1694a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_VARIABLE_NAME);
1704a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	}
1712739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.endSection();
1722739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
1732739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1742739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppevoid precise_as_function_name (NegativeTestContext& ctx)
1752739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
1762739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TCU_CHECK_AND_THROW(NotSupportedError,
1772739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
1782739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
1792739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1802739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.beginSection("Test that precise cannot be used as a function name.");
1812739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
1824a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	{
1834a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
1844a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_FUNCTION_NAME);
1854a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	}
1862739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.endSection();
1872739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
1882739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1892739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppevoid precise_as_function_argument (NegativeTestContext& ctx)
1902739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
1912739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	TCU_CHECK_AND_THROW(NotSupportedError,
1922739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		ctx.isExtensionSupported("GL_EXT_gpu_shader5") || contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)),
1932739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe		"This test requires support for the extension GL_EXT_gpu_shader5 or context version 3.2 or higher.");
1942739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
1952739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.beginSection("Test that precise cannot be used as a argument name.");
1962739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
1974a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	{
1984a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
1994a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_ARGUMENT_NAME);
2004a3a2d79a0fdfaef7666b71f7ac8c64076570ac4Pyry Haulos	}
2012739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	ctx.endSection();
2022739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
2032739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
2042739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe} // anonymous
2052739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
2062739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppestd::vector<FunctionContainer> getNegativePreciseTestFunctions (void)
2072739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe{
2082739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	const FunctionContainer funcs[] =
2092739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	{
2102739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        {precise_as_variable_name,			"precise_as_variable_name",			"Test precise keyword as variable name."			},
2112739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        {precise_as_function_name,			"precise_as_function_name",			"Test precise keyword as function name."			},
2122739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe        {precise_as_function_argument,		"precise_as_function_argument",		"Test precise keyword as argument name."			},
2132739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	};
2142739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
2152739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe	return std::vector<FunctionContainer>(DE_ARRAY_BEGIN(funcs), DE_ARRAY_END(funcs));
2162739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe}
2172739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe
2182739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe} // NegativeTestShared
2192739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe} // Functional
2202739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe} // gles31
2212739e26e674d6331aa944ccfd7f1a9aa3583b747Daniel Andrade Groppe} // deqp
222