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