13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.0 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 GLES3 shader constant expression tests 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es3fShaderConstExprTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsShaderLibrary.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsShaderConstExprTests.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuStringTemplate.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderUtil.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMath.h" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles3 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// builtins 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ShaderConstExprBuiltinTests : public TestCaseGroup 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ShaderConstExprBuiltinTests (Context& context) : TestCaseGroup (context, "builtin_functions", "Builtin functions") {} 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~ShaderConstExprBuiltinTests (void) {} 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addChildGroup (const char* name, const char* desc, const gls::ShaderConstExpr::TestParams* cases, int numCases); 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ShaderConstExprBuiltinTests::addChildGroup (const char* name, const char* desc, const gls::ShaderConstExpr::TestParams* cases, int numCases) 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const std::vector<tcu::TestNode*> children = createTests(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), cases, numCases, glu::GLSL_VERSION_300_ES); 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* group = new tcu::TestCaseGroup(m_testCtx, name, desc); 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(group); 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < (int)children.size(); i++) 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(children[i]); 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ShaderConstExprBuiltinTests::init (void) 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry using namespace gls::ShaderConstExpr; 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // ${T} => final type, ${MT} => final type but with scalar version usable even when T is a vector 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Trigonometry 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"radians", "radians(${T} (90.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatRadians(90.0f) }, 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"degrees", "degrees(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatDegrees(2.0f) }, 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"sin", "sin(${T} (3.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatSin(3.0f) }, 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"cos", "cos(${T} (3.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatCos(3.2f) }, 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"tan", "tan(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatTan(1.5f) }, 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"asin", "asin(${T} (0.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAsin(0.0f) }, 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"acos", "acos(${T} (1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAcos(1.0f) }, 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"atan_separate", "atan(${T} (-1.0), ${T} (-1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAtan2(-1.0f, -1.0f) }, 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"atan_combined", "atan(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAtanOver(2.0f) }, 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"sinh", "sinh(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatSinh(1.5f) }, 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"cosh", "cosh(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatCosh(1.5f) }, 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"tanh", "tanh(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatTanh(1.5f) }, 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"asinh", "asinh(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAsinh(2.0f) }, 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"acosh", "acosh(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAcosh(2.0f) }, 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"atanh", "atanh(${T} (0.8))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAtanh(0.8f) }, 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("angle_and_trigonometry", "Angles and Trigonometry", cases, DE_LENGTH_OF_ARRAY(cases)); 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Exponential 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"pow", "pow(${T} (1.7), ${T} (3.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatPow(1.7f, 3.5f) }, 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"exp", "exp(${T} (4.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatExp(4.2f) }, 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"log", "log(${T} (42.12))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatLog(42.12f) }, 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"exp2", "exp2(${T} (6.7))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatExp2(6.7f) }, 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"log2", "log2(${T} (100.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatLog2(100.0f) }, 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"sqrt", "sqrt(${T} (10.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatSqrt(10.0f) }, 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"inversesqrt", "inversesqrt(${T} (10.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatRsq(10.0f) }, 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("exponential", "Exponential", cases, DE_LENGTH_OF_ARRAY(cases)); 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Common 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"abs", "abs(${T} (-42.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 42.0f }, 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"abs", "abs(${T} (-42))", glu::TYPE_INT, 1, 4, glu::TYPE_INT, 42.0f }, 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"sign", "sign(${T} (-18.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, -1.0f }, 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"sign", "sign(${T} (-18))", glu::TYPE_INT, 1, 4, glu::TYPE_INT, -1.0f }, 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"floor", "floor(${T} (37.3))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatFloor(37.3f) }, 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"trunc", "trunc(${T} (-1.8))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, -1.0f }, 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"round", "round(${T} (42.7))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 42.0f }, 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"roundEven", "roundEven(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 2.0f }, 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"ceil", "ceil(${T} (82.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatCeil(82.2f) }, 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"fract", "fract(${T} (17.75))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatFrac(17.75f) }, 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mod", "mod(${T} (87.65), ${MT} (3.7))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatMod(87.65f, 3.7f) }, 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // modf cannot be tested due to lacking valid ways of using the 'out' parameter in a constant expression 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"min", "min(${T} (12.3), ${MT} (32.1))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 12.3f }, 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"min", "min(${T} (13), ${MT} (-14))", glu::TYPE_INT, 1, 4, glu::TYPE_INT, -14.0f }, 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"min", "min(${T} (13), ${MT} (14))", glu::TYPE_UINT, 1, 4, glu::TYPE_UINT, 13.0f }, 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"max", "max(${T} (12.3), ${MT} (32.1))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 32.1f }, 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"max", "max(${T} (13), ${MT} (-14))", glu::TYPE_INT, 1, 4, glu::TYPE_INT, 13.0f }, 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"max", "max(${T} (13), ${MT} (14))", glu::TYPE_UINT, 1, 4, glu::TYPE_UINT, 14.0f }, 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"clamp", "clamp(${T} (42.1), ${MT} (10.0), ${MT} (15.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 15.0f }, 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"clamp", "clamp(${T} (42), ${MT} (-10), ${MT} (15))", glu::TYPE_INT, 1, 4, glu::TYPE_INT, 15.0f }, 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"clamp", "clamp(${T} (42), ${MT} (10), ${MT} (15))", glu::TYPE_UINT, 1, 4, glu::TYPE_UINT, 15.0f }, 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mix", "mix(${T} (10.0), ${T} (20.0), ${MT}(0.75))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 17.5f }, 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mix_float_bool", "mix(float(10.0), float(20.0), bool(1))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 20.0f }, 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mix_vec2_bvec2", "mix(vec2(10.0), vec2(20.0), bvec2(1)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 20.0f }, 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mix_vec3_bvec3", "mix(vec3(10.0), vec3(20.0), bvec3(1)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 20.0f }, 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"mix_vec4_bvec4", "mix(vec4(10.0), vec4(20.0), bvec4(1)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 20.0f }, 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"step", "step(${MT} (3.2), ${T} (4.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 1.0f }, 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"smoothstep", "smoothstep(${MT} (3.0), ${MT} (5.0), ${T} (4.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 0.5f }, 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"isnan", "isnan(${T} (1.3))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_BOOL, 0.0f }, 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"isinf", "isinf(${T} (1.3))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_BOOL, 0.0f }, 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"floatbits_int", "intBitsToFloat(floatBitsToInt(42.12))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 42.12f }, 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"floatbits_uint", "uintBitsToFloat(floatBitsToUint(-14.2))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -14.2f }, 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("common", "Common", cases, DE_LENGTH_OF_ARRAY(cases)); 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Floating point pack & unpack 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"packSnorm2x16", "packSnorm2x16(vec2(0.7, 0.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_UINT, 22937.0f }, 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"unpackSnorm2x16", "unpackSnorm2x16(22937u).x", glu::TYPE_UINT, 1, 1, glu::TYPE_FLOAT, 0.7f }, 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"packUnorm2x16", "packUnorm2x16(vec2(0.6, -0.3))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_UINT, 39321.0f }, 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"unpackUnorm2x16", "unpackUnorm2x16(39321u).x", glu::TYPE_UINT, 1, 1, glu::TYPE_FLOAT, 0.6f }, 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"packHalf2x16", "unpackHalf2x16(packHalf2x16(vec2(0.3, 0.1))).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 0.3f }, 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \todo [2014-01-29 otto] Separate testing of half-precision pack & unpack 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("float_pack_unpack", "Floating point pack & unpack", cases, DE_LENGTH_OF_ARRAY(cases)); 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Geometric 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"length_float", "length(1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"length_vec2", "length(vec2(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(2.0f) }, 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"length_vec3", "length(vec3(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(3.0f) }, 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"length_vec4", "length(vec4(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(4.0f) }, 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"distance_float", "distance(1.0, 2.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"distance_vec2", "distance(vec2(1.0), vec2(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(2.0f) }, 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"distance_vec3", "distance(vec3(1.0), vec3(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(3.0f) }, 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"distance_vec4", "distance(vec4(1.0), vec4(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(4.0f) }, 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dot_float", "dot(1.0, 1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dot_vec2", "dot(vec2(1.0), vec2(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.0f }, 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dot_vec3", "dot(vec3(1.0), vec3(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 3.0f }, 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dot_vec4", "dot(vec4(1.0), vec4(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 4.0f }, 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"normalize_float", "normalize(1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"normalize_vec2", "normalize(vec2(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(2.0f) }, 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"normalize_vec3", "normalize(vec3(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(3.0f) }, 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"normalize_vec4", "normalize(vec4(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(4.0f) }, 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"faceforward", "faceforward(${T} (1.0), ${T} (1.0), ${T} (1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, -1.0f }, 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // reflect(I, N) => I - 2*dot(N, I)*N 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"reflect_float", "reflect(1.0, 1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"reflect_vec2", "reflect(vec2(1.0), vec2(1.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"reflect_vec3", "reflect(vec3(1.0), vec3(1.0, 0.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"reflect_vec4", "reflect(vec4(1.0), vec4(1.0, 0.0, 0.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry /* 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry genType refract(genType I, genType N, float eta) => 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry k = 1.0 - (eta^2)*(1.0-dot(N,I)^2) 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if k < 0 return 0.0 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else return eta*I - (eta*dot(N,I) + sqrt(k))*N 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry */ 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"refract_float", "refract(1.0, 1.0, 0.5)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"refract_vec2", "refract(vec2(1.0), vec2(1.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"refract_vec3", "refract(vec3(1.0), vec3(1.0, 0.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"refract_vec4", "refract(vec4(1.0), vec4(1.0, 0.0, 0.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f }, 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("geometric", "Geometric", cases, DE_LENGTH_OF_ARRAY(cases)); 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Matrix 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"compMult_mat2", "matrixCompMult(mat2(1.0), mat2(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"compMult_mat3", "matrixCompMult(mat3(1.0), mat3(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"compMult_mat4", "matrixCompMult(mat4(1.0), mat4(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f }, 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat2", "outerProduct(vec2(3.0), vec2(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat3", "outerProduct(vec3(3.0), vec3(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat4", "outerProduct(vec4(3.0), vec4(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat2x3","outerProduct(vec3(3.0), vec2(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat3x2","outerProduct(vec2(3.0), vec3(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat2x4","outerProduct(vec4(3.0), vec2(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat4x2","outerProduct(vec2(3.0), vec4(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat3x4","outerProduct(vec4(3.0), vec3(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"outerProd_mat4x3","outerProduct(vec3(3.0), vec4(3.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 9.0f }, 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat2", "transpose(mat2(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.0f }, 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat3", "transpose(mat3(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.0f }, 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat4", "transpose(mat4(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.0f }, 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat3x2","transpose(mat3x2(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat2x3","transpose(mat2x3(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat4x2","transpose(mat4x2(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat4x3","transpose(mat4x3(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat2x4","transpose(mat2x4(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"transpose_mat3x4","transpose(mat3x4(2.3))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.3f }, 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"determinant_mat2","determinant(mat2(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 4.0f }, 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"determinant_mat3","determinant(mat3(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 8.0f }, 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"determinant_mat4","determinant(mat4(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 16.0f }, 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"inverse_mat2", "inverse(mat2(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 0.5f }, 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"inverse_mat3", "inverse(mat3(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 0.5f }, 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"inverse_mat4", "inverse(mat4(2.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 0.5f }, 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("matrix", "Matrix", cases, DE_LENGTH_OF_ARRAY(cases)); 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Vector relational 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThan", "lessThan(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThan", "lessThan(${T} (-1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThan", "lessThan(${T} (1), ${T} (2))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThanEqual", "lessThanEqual(${T} (1.0), ${T} (1.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThanEqual", "lessThanEqual(${T} (-1), ${T} (-1))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"lessThanEqual", "lessThanEqual(${T} (1), ${T} (1))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThan", "greaterThan(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThan", "greaterThan(${T} (-1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThan", "greaterThan(${T} (1), ${T} (2))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThanEqual","greaterThanEqual(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThanEqual","greaterThanEqual(${T} (-1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"greaterThanEqual","greaterThanEqual(${T} (1), ${T} (2))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"equal", "equal(${T} (1.0), ${T} (1.2))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"equal", "equal(${T} (1), ${T} (-2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"equal", "equal(${T} (1), ${T} (2))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 0.0f }, 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"equal", "equal(${T} (true), ${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 0.0f }, 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"notEqual", "notEqual(${T} (1.0), ${T} (1.2))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"notEqual", "notEqual(${T} (1), ${T} (-2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"notEqual", "notEqual(${T} (1), ${T} (2))", glu::TYPE_UINT, 2, 4, glu::TYPE_BOOL, 1.0f }, 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"notEqual", "notEqual(${T} (true), ${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 1.0f }, 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"any_bvec2", "any(bvec2(true, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f }, 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"any_bvec3", "any(bvec3(true, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f }, 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"any_bvec4", "any(bvec4(true, false, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f }, 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"all_bvec2", "all(bvec2(true, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f }, 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"all_bvec3", "all(bvec3(true, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f }, 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"all_bvec4", "all(bvec4(true, false, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f }, 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"not", "not(${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 1.0f }, 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChildGroup("vector_relational", "Vector relational", cases, DE_LENGTH_OF_ARRAY(cases)); 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Fragment processing (must return zero when used in initilizer with constexpr arguement) 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const TestParams cases[] = 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dFdx", "dFdx(${T} (123.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 0.0 }, 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"dFdy", "dFdx(${T} (234.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 0.0 }, 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {"fwidth", "fwidth(${T} (345.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 0.0 }, 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const std::vector<tcu::TestNode*> children = createTests(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), cases, DE_LENGTH_OF_ARRAY(cases), glu::GLSL_VERSION_300_ES, SHADER_FRAGMENT); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* group = new tcu::TestCaseGroup(m_testCtx, "fragment_processing", "Fragment processing"); 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(group); 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < (int)children.size(); i++) 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(children[i]); 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// all 3053c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderConstExprTests::ShaderConstExprTests (Context& context) 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup (context, "constant_expressions", "Constant expressions") 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3103c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderConstExprTests::~ShaderConstExprTests (void) 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ShaderConstExprTests::init (void) 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const std::vector<tcu::TestNode*> children = gls::ShaderLibrary(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo()).loadShaderFile("shaders/constant_expressions.test"); 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int i = 0; i < (int)children.size(); i++) 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(children[i]); 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new ShaderConstExprBuiltinTests(m_context)); 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 327