1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief GLES2 shader constant expression tests
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es2fShaderConstExprTests.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "glsShaderLibrary.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glsShaderConstExprTests.hpp"
28*35238bceSAndroid Build Coastguard Worker
29*35238bceSAndroid Build Coastguard Worker #include "tcuStringTemplate.hpp"
30*35238bceSAndroid Build Coastguard Worker
31*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "deMath.h"
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker namespace deqp
35*35238bceSAndroid Build Coastguard Worker {
36*35238bceSAndroid Build Coastguard Worker namespace gles2
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker namespace Functional
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker // builtins
42*35238bceSAndroid Build Coastguard Worker class ShaderConstExprBuiltinTests : public TestCaseGroup
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker public:
ShaderConstExprBuiltinTests(Context & context)45*35238bceSAndroid Build Coastguard Worker ShaderConstExprBuiltinTests(Context &context) : TestCaseGroup(context, "builtin_functions", "Builtin functions")
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker }
~ShaderConstExprBuiltinTests(void)48*35238bceSAndroid Build Coastguard Worker virtual ~ShaderConstExprBuiltinTests(void)
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker }
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard Worker void init(void);
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker void addChildGroup(const char *name, const char *desc, const gls::ShaderConstExpr::TestParams *cases, int numCases);
55*35238bceSAndroid Build Coastguard Worker };
56*35238bceSAndroid Build Coastguard Worker
addChildGroup(const char * name,const char * desc,const gls::ShaderConstExpr::TestParams * cases,int numCases)57*35238bceSAndroid Build Coastguard Worker void ShaderConstExprBuiltinTests::addChildGroup(const char *name, const char *desc,
58*35238bceSAndroid Build Coastguard Worker const gls::ShaderConstExpr::TestParams *cases, int numCases)
59*35238bceSAndroid Build Coastguard Worker {
60*35238bceSAndroid Build Coastguard Worker const std::vector<tcu::TestNode *> children = createTests(
61*35238bceSAndroid Build Coastguard Worker m_testCtx, m_context.getRenderContext(), m_context.getContextInfo(), cases, numCases, glu::GLSL_VERSION_100_ES);
62*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *group = new tcu::TestCaseGroup(m_testCtx, name, desc);
63*35238bceSAndroid Build Coastguard Worker
64*35238bceSAndroid Build Coastguard Worker addChild(group);
65*35238bceSAndroid Build Coastguard Worker
66*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < (int)children.size(); i++)
67*35238bceSAndroid Build Coastguard Worker group->addChild(children[i]);
68*35238bceSAndroid Build Coastguard Worker }
69*35238bceSAndroid Build Coastguard Worker
init(void)70*35238bceSAndroid Build Coastguard Worker void ShaderConstExprBuiltinTests::init(void)
71*35238bceSAndroid Build Coastguard Worker {
72*35238bceSAndroid Build Coastguard Worker using namespace gls::ShaderConstExpr;
73*35238bceSAndroid Build Coastguard Worker
74*35238bceSAndroid Build Coastguard Worker // ${T} => final type, ${MT} => final type but with scalar version usable even when T is a vector
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard Worker // Trigonometry
77*35238bceSAndroid Build Coastguard Worker {
78*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
79*35238bceSAndroid Build Coastguard Worker {"radians", "radians(${T} (90.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatRadians(90.0f)},
80*35238bceSAndroid Build Coastguard Worker {"degrees", "degrees(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatDegrees(2.0f)},
81*35238bceSAndroid Build Coastguard Worker {"sin", "sin(${T} (3.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatSin(3.0f)},
82*35238bceSAndroid Build Coastguard Worker {"cos", "cos(${T} (3.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatCos(3.2f)},
83*35238bceSAndroid Build Coastguard Worker {"tan", "tan(${T} (1.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatTan(1.5f)},
84*35238bceSAndroid Build Coastguard Worker {"asin", "asin(${T} (0.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAsin(0.0f)},
85*35238bceSAndroid Build Coastguard Worker {"acos", "acos(${T} (1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAcos(1.0f)},
86*35238bceSAndroid Build Coastguard Worker {"atan_separate", "atan(${T} (-1.0), ${T} (-1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT,
87*35238bceSAndroid Build Coastguard Worker deFloatAtan2(-1.0f, -1.0f)},
88*35238bceSAndroid Build Coastguard Worker {"atan_combined", "atan(${T} (2.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatAtanOver(2.0f)},
89*35238bceSAndroid Build Coastguard Worker };
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard Worker addChildGroup("trigonometry", "Trigonometry", cases, DE_LENGTH_OF_ARRAY(cases));
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker // Exponential
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
96*35238bceSAndroid Build Coastguard Worker {"pow", "pow(${T} (1.7), ${T} (3.5))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatPow(1.7f, 3.5f)},
97*35238bceSAndroid Build Coastguard Worker {"exp", "exp(${T} (4.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatExp(4.2f)},
98*35238bceSAndroid Build Coastguard Worker {"log", "log(${T} (42.12))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatLog(42.12f)},
99*35238bceSAndroid Build Coastguard Worker {"exp2", "exp2(${T} (6.7))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatExp2(6.7f)},
100*35238bceSAndroid Build Coastguard Worker {"log2", "log2(${T} (100.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatLog2(100.0f)},
101*35238bceSAndroid Build Coastguard Worker {"sqrt", "sqrt(${T} (10.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatSqrt(10.0f)},
102*35238bceSAndroid Build Coastguard Worker {"inversesqrt", "inversesqrt(${T} (10.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatRsq(10.0f)},
103*35238bceSAndroid Build Coastguard Worker };
104*35238bceSAndroid Build Coastguard Worker
105*35238bceSAndroid Build Coastguard Worker addChildGroup("exponential", "Exponential", cases, DE_LENGTH_OF_ARRAY(cases));
106*35238bceSAndroid Build Coastguard Worker }
107*35238bceSAndroid Build Coastguard Worker // Common
108*35238bceSAndroid Build Coastguard Worker {
109*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
110*35238bceSAndroid Build Coastguard Worker {"abs", "abs(${T} (-42.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 42.0f},
111*35238bceSAndroid Build Coastguard Worker {"sign", "sign(${T} (-18.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, -1.0f},
112*35238bceSAndroid Build Coastguard Worker {"floor", "floor(${T} (37.3))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatFloor(37.3f)},
113*35238bceSAndroid Build Coastguard Worker {"ceil", "ceil(${T} (82.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatCeil(82.2f)},
114*35238bceSAndroid Build Coastguard Worker {"fract", "fract(${T} (17.75))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatFrac(17.75f)},
115*35238bceSAndroid Build Coastguard Worker {"mod", "mod(${T} (87.65), ${MT} (3.7))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, deFloatMod(87.65f, 3.7f)},
116*35238bceSAndroid Build Coastguard Worker {"min", "min(${T} (12.3), ${MT} (32.1))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 12.3f},
117*35238bceSAndroid Build Coastguard Worker {"max", "max(${T} (12.3), ${MT} (32.1))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 32.1f},
118*35238bceSAndroid Build Coastguard Worker {"clamp", "clamp(${T} (42.1), ${MT} (10.0), ${MT} (15.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 15.0f},
119*35238bceSAndroid Build Coastguard Worker {"mix", "mix(${T} (10.0), ${T} (20.0), ${MT}(0.75))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 17.5f},
120*35238bceSAndroid Build Coastguard Worker {"step", "step(${MT} (3.2), ${T} (4.2))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT, 1.0f},
121*35238bceSAndroid Build Coastguard Worker {"smoothstep", "smoothstep(${MT} (3.0), ${MT} (5.0), ${T} (4.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT,
122*35238bceSAndroid Build Coastguard Worker 0.5f},
123*35238bceSAndroid Build Coastguard Worker };
124*35238bceSAndroid Build Coastguard Worker
125*35238bceSAndroid Build Coastguard Worker addChildGroup("common", "Common", cases, DE_LENGTH_OF_ARRAY(cases));
126*35238bceSAndroid Build Coastguard Worker }
127*35238bceSAndroid Build Coastguard Worker // Geometric
128*35238bceSAndroid Build Coastguard Worker {
129*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
130*35238bceSAndroid Build Coastguard Worker {"length_float", "length(1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f},
131*35238bceSAndroid Build Coastguard Worker {"length_vec2", "length(vec2(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(2.0f)},
132*35238bceSAndroid Build Coastguard Worker {"length_vec3", "length(vec3(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(3.0f)},
133*35238bceSAndroid Build Coastguard Worker {"length_vec4", "length(vec4(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatSqrt(4.0f)},
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker {"distance_float", "distance(1.0, 2.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f},
136*35238bceSAndroid Build Coastguard Worker {"distance_vec2", "distance(vec2(1.0), vec2(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
137*35238bceSAndroid Build Coastguard Worker deFloatSqrt(2.0f)},
138*35238bceSAndroid Build Coastguard Worker {"distance_vec3", "distance(vec3(1.0), vec3(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
139*35238bceSAndroid Build Coastguard Worker deFloatSqrt(3.0f)},
140*35238bceSAndroid Build Coastguard Worker {"distance_vec4", "distance(vec4(1.0), vec4(2.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
141*35238bceSAndroid Build Coastguard Worker deFloatSqrt(4.0f)},
142*35238bceSAndroid Build Coastguard Worker
143*35238bceSAndroid Build Coastguard Worker {"dot_float", "dot(1.0, 1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f},
144*35238bceSAndroid Build Coastguard Worker {"dot_vec2", "dot(vec2(1.0), vec2(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 2.0f},
145*35238bceSAndroid Build Coastguard Worker {"dot_vec3", "dot(vec3(1.0), vec3(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 3.0f},
146*35238bceSAndroid Build Coastguard Worker {"dot_vec4", "dot(vec4(1.0), vec4(1.0))", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 4.0f},
147*35238bceSAndroid Build Coastguard Worker
148*35238bceSAndroid Build Coastguard Worker {"normalize_float", "normalize(1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, 1.0f},
149*35238bceSAndroid Build Coastguard Worker {"normalize_vec2", "normalize(vec2(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(2.0f)},
150*35238bceSAndroid Build Coastguard Worker {"normalize_vec3", "normalize(vec3(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(3.0f)},
151*35238bceSAndroid Build Coastguard Worker {"normalize_vec4", "normalize(vec4(1.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, deFloatRsq(4.0f)},
152*35238bceSAndroid Build Coastguard Worker
153*35238bceSAndroid Build Coastguard Worker {"faceforward", "faceforward(${T} (1.0), ${T} (1.0), ${T} (1.0))", glu::TYPE_FLOAT, 1, 4, glu::TYPE_FLOAT,
154*35238bceSAndroid Build Coastguard Worker -1.0f},
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker // reflect(I, N) => I - 2*dot(N, I)*N
157*35238bceSAndroid Build Coastguard Worker {"reflect_float", "reflect(1.0, 1.0)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f},
158*35238bceSAndroid Build Coastguard Worker {"reflect_vec2", "reflect(vec2(1.0), vec2(1.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f},
159*35238bceSAndroid Build Coastguard Worker {"reflect_vec3", "reflect(vec3(1.0), vec3(1.0, 0.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
160*35238bceSAndroid Build Coastguard Worker -1.0f},
161*35238bceSAndroid Build Coastguard Worker {"reflect_vec4", "reflect(vec4(1.0), vec4(1.0, 0.0, 0.0, 0.0)).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
162*35238bceSAndroid Build Coastguard Worker -1.0f},
163*35238bceSAndroid Build Coastguard Worker
164*35238bceSAndroid Build Coastguard Worker /*
165*35238bceSAndroid Build Coastguard Worker genType refract(genType I, genType N, float eta) =>
166*35238bceSAndroid Build Coastguard Worker k = 1.0 - (eta^2)*(1.0-dot(N,I)^2)
167*35238bceSAndroid Build Coastguard Worker if k < 0 return 0.0
168*35238bceSAndroid Build Coastguard Worker else return eta*I - (eta*dot(N,I) + sqrt(k))*N
169*35238bceSAndroid Build Coastguard Worker */
170*35238bceSAndroid Build Coastguard Worker {"refract_float", "refract(1.0, 1.0, 0.5)", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT, -1.0f},
171*35238bceSAndroid Build Coastguard Worker {"refract_vec2", "refract(vec2(1.0), vec2(1.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
172*35238bceSAndroid Build Coastguard Worker -1.0f},
173*35238bceSAndroid Build Coastguard Worker {"refract_vec3", "refract(vec3(1.0), vec3(1.0, 0.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
174*35238bceSAndroid Build Coastguard Worker -1.0f},
175*35238bceSAndroid Build Coastguard Worker {"refract_vec4", "refract(vec4(1.0), vec4(1.0, 0.0, 0.0, 0.0), 0.5).x", glu::TYPE_FLOAT, 1, 1,
176*35238bceSAndroid Build Coastguard Worker glu::TYPE_FLOAT, -1.0f},
177*35238bceSAndroid Build Coastguard Worker };
178*35238bceSAndroid Build Coastguard Worker
179*35238bceSAndroid Build Coastguard Worker addChildGroup("geometric", "Geometric", cases, DE_LENGTH_OF_ARRAY(cases));
180*35238bceSAndroid Build Coastguard Worker }
181*35238bceSAndroid Build Coastguard Worker // Matrix
182*35238bceSAndroid Build Coastguard Worker {
183*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
184*35238bceSAndroid Build Coastguard Worker {"compMult_mat2", "matrixCompMult(mat2(1.0), mat2(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
185*35238bceSAndroid Build Coastguard Worker 1.0f},
186*35238bceSAndroid Build Coastguard Worker {"compMult_mat3", "matrixCompMult(mat3(1.0), mat3(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
187*35238bceSAndroid Build Coastguard Worker 1.0f},
188*35238bceSAndroid Build Coastguard Worker {"compMult_mat4", "matrixCompMult(mat4(1.0), mat4(1.0))[0][0]", glu::TYPE_FLOAT, 1, 1, glu::TYPE_FLOAT,
189*35238bceSAndroid Build Coastguard Worker 1.0f},
190*35238bceSAndroid Build Coastguard Worker };
191*35238bceSAndroid Build Coastguard Worker
192*35238bceSAndroid Build Coastguard Worker addChildGroup("matrix", "Matrix", cases, DE_LENGTH_OF_ARRAY(cases));
193*35238bceSAndroid Build Coastguard Worker }
194*35238bceSAndroid Build Coastguard Worker // Vector relational
195*35238bceSAndroid Build Coastguard Worker {
196*35238bceSAndroid Build Coastguard Worker const TestParams cases[] = {
197*35238bceSAndroid Build Coastguard Worker {"lessThan", "lessThan(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f},
198*35238bceSAndroid Build Coastguard Worker {"lessThan", "lessThan(${T} (1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f},
199*35238bceSAndroid Build Coastguard Worker {"lessThanEqual", "lessThanEqual(${T} (1.0), ${T} (1.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f},
200*35238bceSAndroid Build Coastguard Worker {"lessThanEqual", "lessThanEqual(${T} (1), ${T} (1))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f},
201*35238bceSAndroid Build Coastguard Worker {"greaterThan", "greaterThan(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 0.0f},
202*35238bceSAndroid Build Coastguard Worker {"greaterThan", "greaterThan(${T} (1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f},
203*35238bceSAndroid Build Coastguard Worker {"greaterThanEqual", "greaterThanEqual(${T} (1.0), ${T} (2.0))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL,
204*35238bceSAndroid Build Coastguard Worker 0.0f},
205*35238bceSAndroid Build Coastguard Worker {"greaterThanEqual", "greaterThanEqual(${T} (1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f},
206*35238bceSAndroid Build Coastguard Worker {"equal", "equal(${T} (1.0), ${T} (1.2))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 0.0f},
207*35238bceSAndroid Build Coastguard Worker {"equal", "equal(${T} (1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 0.0f},
208*35238bceSAndroid Build Coastguard Worker {"equal", "equal(${T} (true), ${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 0.0f},
209*35238bceSAndroid Build Coastguard Worker {"notEqual", "notEqual(${T} (1.0), ${T} (1.2))", glu::TYPE_FLOAT, 2, 4, glu::TYPE_BOOL, 1.0f},
210*35238bceSAndroid Build Coastguard Worker {"notEqual", "notEqual(${T} (1), ${T} (2))", glu::TYPE_INT, 2, 4, glu::TYPE_BOOL, 1.0f},
211*35238bceSAndroid Build Coastguard Worker {"notEqual", "notEqual(${T} (true), ${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 1.0f},
212*35238bceSAndroid Build Coastguard Worker {"any_bvec2", "any(bvec2(true, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f},
213*35238bceSAndroid Build Coastguard Worker {"any_bvec3", "any(bvec3(true, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f},
214*35238bceSAndroid Build Coastguard Worker {"any_bvec4", "any(bvec4(true, false, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 1.0f},
215*35238bceSAndroid Build Coastguard Worker {"all_bvec2", "all(bvec2(true, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f},
216*35238bceSAndroid Build Coastguard Worker {"all_bvec3", "all(bvec3(true, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f},
217*35238bceSAndroid Build Coastguard Worker {"all_bvec4", "all(bvec4(true, false, false, false))", glu::TYPE_BOOL, 1, 1, glu::TYPE_BOOL, 0.0f},
218*35238bceSAndroid Build Coastguard Worker {"not", "not(${T} (false))", glu::TYPE_BOOL, 2, 4, glu::TYPE_BOOL, 1.0f}};
219*35238bceSAndroid Build Coastguard Worker
220*35238bceSAndroid Build Coastguard Worker addChildGroup("vector_relational", "Vector relational", cases, DE_LENGTH_OF_ARRAY(cases));
221*35238bceSAndroid Build Coastguard Worker }
222*35238bceSAndroid Build Coastguard Worker }
223*35238bceSAndroid Build Coastguard Worker
ShaderConstExprTests(Context & context)224*35238bceSAndroid Build Coastguard Worker ShaderConstExprTests::ShaderConstExprTests(Context &context)
225*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "constant_expressions", "Constant expressions")
226*35238bceSAndroid Build Coastguard Worker {
227*35238bceSAndroid Build Coastguard Worker }
228*35238bceSAndroid Build Coastguard Worker
~ShaderConstExprTests(void)229*35238bceSAndroid Build Coastguard Worker ShaderConstExprTests::~ShaderConstExprTests(void)
230*35238bceSAndroid Build Coastguard Worker {
231*35238bceSAndroid Build Coastguard Worker }
232*35238bceSAndroid Build Coastguard Worker
233*35238bceSAndroid Build Coastguard Worker // all
init(void)234*35238bceSAndroid Build Coastguard Worker void ShaderConstExprTests::init(void)
235*35238bceSAndroid Build Coastguard Worker {
236*35238bceSAndroid Build Coastguard Worker const std::vector<tcu::TestNode *> children =
237*35238bceSAndroid Build Coastguard Worker gls::ShaderLibrary(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo())
238*35238bceSAndroid Build Coastguard Worker .loadShaderFile("shaders/constant_expressions.test");
239*35238bceSAndroid Build Coastguard Worker
240*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < (int)children.size(); i++)
241*35238bceSAndroid Build Coastguard Worker addChild(children[i]);
242*35238bceSAndroid Build Coastguard Worker
243*35238bceSAndroid Build Coastguard Worker addChild(new ShaderConstExprBuiltinTests(m_context));
244*35238bceSAndroid Build Coastguard Worker
245*35238bceSAndroid Build Coastguard Worker // Negative cases.
246*35238bceSAndroid Build Coastguard Worker {
247*35238bceSAndroid Build Coastguard Worker gls::ShaderLibrary library(m_testCtx, m_context.getRenderContext(), m_context.getContextInfo());
248*35238bceSAndroid Build Coastguard Worker std::vector<tcu::TestNode *> negativeCases =
249*35238bceSAndroid Build Coastguard Worker library.loadShaderFile("shaders/invalid_constant_expressions.test");
250*35238bceSAndroid Build Coastguard Worker
251*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *group =
252*35238bceSAndroid Build Coastguard Worker new tcu::TestCaseGroup(m_testCtx, "invalid", "Invalid constant expressions", negativeCases);
253*35238bceSAndroid Build Coastguard Worker addChild(group);
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker }
256*35238bceSAndroid Build Coastguard Worker
257*35238bceSAndroid Build Coastguard Worker } // namespace Functional
258*35238bceSAndroid Build Coastguard Worker } // namespace gles2
259*35238bceSAndroid Build Coastguard Worker } // namespace deqp
260