1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.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 Random shader tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es3fRandomShaderTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsRandomShaderCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "deString.h"
27*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker
29*35238bceSAndroid Build Coastguard Worker namespace deqp
30*35238bceSAndroid Build Coastguard Worker {
31*35238bceSAndroid Build Coastguard Worker namespace gles3
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker namespace Functional
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Worker namespace
37*35238bceSAndroid Build Coastguard Worker {
38*35238bceSAndroid Build Coastguard Worker
createRandomShaderCase(Context & context,const char * description,const rsg::ProgramParameters & baseParams,uint32_t seed,bool vertex,bool fragment)39*35238bceSAndroid Build Coastguard Worker gls::RandomShaderCase *createRandomShaderCase(Context &context, const char *description,
40*35238bceSAndroid Build Coastguard Worker const rsg::ProgramParameters &baseParams, uint32_t seed, bool vertex,
41*35238bceSAndroid Build Coastguard Worker bool fragment)
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params = baseParams;
44*35238bceSAndroid Build Coastguard Worker
45*35238bceSAndroid Build Coastguard Worker params.version = rsg::VERSION_300;
46*35238bceSAndroid Build Coastguard Worker params.seed = seed;
47*35238bceSAndroid Build Coastguard Worker params.vertexParameters.randomize = vertex;
48*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.randomize = fragment;
49*35238bceSAndroid Build Coastguard Worker
50*35238bceSAndroid Build Coastguard Worker return new gls::RandomShaderCase(context.getTestContext(), context.getRenderContext(), de::toString(seed).c_str(),
51*35238bceSAndroid Build Coastguard Worker description, params);
52*35238bceSAndroid Build Coastguard Worker }
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker class BasicExpressionGroup : public TestCaseGroup
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker public:
BasicExpressionGroup(Context & context)57*35238bceSAndroid Build Coastguard Worker BasicExpressionGroup(Context &context) : TestCaseGroup(context, "basic_expression", "Basic arithmetic expressions")
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker }
60*35238bceSAndroid Build Coastguard Worker
init(void)61*35238bceSAndroid Build Coastguard Worker void init(void)
62*35238bceSAndroid Build Coastguard Worker {
63*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
64*35238bceSAndroid Build Coastguard Worker
65*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
66*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
67*35238bceSAndroid Build Coastguard Worker
68*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
69*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
72*35238bceSAndroid Build Coastguard Worker addChild(combinedGroup);
73*35238bceSAndroid Build Coastguard Worker
74*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
77*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Random expressions in vertex shader", params, seed, true, false));
78*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
79*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Random expressions in fragment shader", params, seed, false, true));
80*35238bceSAndroid Build Coastguard Worker combinedGroup->addChild(createRandomShaderCase(
81*35238bceSAndroid Build Coastguard Worker m_context, "Random expressions in vertex and fragment shaders", params, seed, true, true));
82*35238bceSAndroid Build Coastguard Worker }
83*35238bceSAndroid Build Coastguard Worker }
84*35238bceSAndroid Build Coastguard Worker };
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard Worker class ScalarConversionGroup : public TestCaseGroup
87*35238bceSAndroid Build Coastguard Worker {
88*35238bceSAndroid Build Coastguard Worker public:
ScalarConversionGroup(Context & context)89*35238bceSAndroid Build Coastguard Worker ScalarConversionGroup(Context &context) : TestCaseGroup(context, "scalar_conversion", "Scalar conversions")
90*35238bceSAndroid Build Coastguard Worker {
91*35238bceSAndroid Build Coastguard Worker }
92*35238bceSAndroid Build Coastguard Worker
init(void)93*35238bceSAndroid Build Coastguard Worker void init(void)
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
96*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
97*35238bceSAndroid Build Coastguard Worker
98*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
99*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
100*35238bceSAndroid Build Coastguard Worker
101*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
102*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
103*35238bceSAndroid Build Coastguard Worker
104*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
105*35238bceSAndroid Build Coastguard Worker addChild(combinedGroup);
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
108*35238bceSAndroid Build Coastguard Worker {
109*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
110*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Scalar conversions in vertex shader", params, seed, true, false));
111*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
112*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Scalar conversions in fragment shader", params, seed, false, true));
113*35238bceSAndroid Build Coastguard Worker combinedGroup->addChild(createRandomShaderCase(
114*35238bceSAndroid Build Coastguard Worker m_context, "Scalar conversions in vertex and fragment shaders", params, seed, true, true));
115*35238bceSAndroid Build Coastguard Worker }
116*35238bceSAndroid Build Coastguard Worker }
117*35238bceSAndroid Build Coastguard Worker };
118*35238bceSAndroid Build Coastguard Worker
119*35238bceSAndroid Build Coastguard Worker class SwizzleGroup : public TestCaseGroup
120*35238bceSAndroid Build Coastguard Worker {
121*35238bceSAndroid Build Coastguard Worker public:
SwizzleGroup(Context & context)122*35238bceSAndroid Build Coastguard Worker SwizzleGroup(Context &context) : TestCaseGroup(context, "swizzle", "Vector swizzles")
123*35238bceSAndroid Build Coastguard Worker {
124*35238bceSAndroid Build Coastguard Worker }
125*35238bceSAndroid Build Coastguard Worker
init(void)126*35238bceSAndroid Build Coastguard Worker void init(void)
127*35238bceSAndroid Build Coastguard Worker {
128*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
129*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
130*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
131*35238bceSAndroid Build Coastguard Worker
132*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
133*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
136*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
137*35238bceSAndroid Build Coastguard Worker
138*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 50; seed++)
139*35238bceSAndroid Build Coastguard Worker {
140*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
141*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Vector swizzles in vertex shader", params, seed, true, false));
142*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
143*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Vector swizzles in fragment shader", params, seed, false, true));
144*35238bceSAndroid Build Coastguard Worker }
145*35238bceSAndroid Build Coastguard Worker }
146*35238bceSAndroid Build Coastguard Worker };
147*35238bceSAndroid Build Coastguard Worker
148*35238bceSAndroid Build Coastguard Worker class ComparisonOpsGroup : public TestCaseGroup
149*35238bceSAndroid Build Coastguard Worker {
150*35238bceSAndroid Build Coastguard Worker public:
ComparisonOpsGroup(Context & context)151*35238bceSAndroid Build Coastguard Worker ComparisonOpsGroup(Context &context) : TestCaseGroup(context, "comparison_ops", "Comparison operators")
152*35238bceSAndroid Build Coastguard Worker {
153*35238bceSAndroid Build Coastguard Worker }
154*35238bceSAndroid Build Coastguard Worker
init(void)155*35238bceSAndroid Build Coastguard Worker void init(void)
156*35238bceSAndroid Build Coastguard Worker {
157*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
158*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
159*35238bceSAndroid Build Coastguard Worker params.useComparisonOps = true;
160*35238bceSAndroid Build Coastguard Worker
161*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
162*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
163*35238bceSAndroid Build Coastguard Worker
164*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
165*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
166*35238bceSAndroid Build Coastguard Worker
167*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 50; seed++)
168*35238bceSAndroid Build Coastguard Worker {
169*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
170*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Comparison operators in vertex shader", params, seed, true, false));
171*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(createRandomShaderCase(m_context, "Comparison operators in fragment shader", params,
172*35238bceSAndroid Build Coastguard Worker seed, false, true));
173*35238bceSAndroid Build Coastguard Worker }
174*35238bceSAndroid Build Coastguard Worker }
175*35238bceSAndroid Build Coastguard Worker };
176*35238bceSAndroid Build Coastguard Worker
177*35238bceSAndroid Build Coastguard Worker class ConditionalsGroup : public TestCaseGroup
178*35238bceSAndroid Build Coastguard Worker {
179*35238bceSAndroid Build Coastguard Worker public:
ConditionalsGroup(Context & context)180*35238bceSAndroid Build Coastguard Worker ConditionalsGroup(Context &context) : TestCaseGroup(context, "conditionals", "Conditional control flow (if-else)")
181*35238bceSAndroid Build Coastguard Worker {
182*35238bceSAndroid Build Coastguard Worker }
183*35238bceSAndroid Build Coastguard Worker
init(void)184*35238bceSAndroid Build Coastguard Worker void init(void)
185*35238bceSAndroid Build Coastguard Worker {
186*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
187*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
188*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
189*35238bceSAndroid Build Coastguard Worker params.useComparisonOps = true;
190*35238bceSAndroid Build Coastguard Worker params.useConditionals = true;
191*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxStatementDepth = 4;
192*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxStatementsPerBlock = 5;
193*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxStatementDepth = 4;
194*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxStatementsPerBlock = 5;
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
197*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
198*35238bceSAndroid Build Coastguard Worker
199*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
200*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
201*35238bceSAndroid Build Coastguard Worker
202*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
203*35238bceSAndroid Build Coastguard Worker addChild(combinedGroup);
204*35238bceSAndroid Build Coastguard Worker
205*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(createRandomShaderCase(m_context, "Conditional control flow in vertex shader", params,
208*35238bceSAndroid Build Coastguard Worker seed, true, false));
209*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(createRandomShaderCase(m_context, "Conditional control flow in fragment shader",
210*35238bceSAndroid Build Coastguard Worker params, seed, false, true));
211*35238bceSAndroid Build Coastguard Worker combinedGroup->addChild(createRandomShaderCase(
212*35238bceSAndroid Build Coastguard Worker m_context, "Conditional control flow in vertex and fragment shaders", params, seed, true, true));
213*35238bceSAndroid Build Coastguard Worker }
214*35238bceSAndroid Build Coastguard Worker }
215*35238bceSAndroid Build Coastguard Worker };
216*35238bceSAndroid Build Coastguard Worker
217*35238bceSAndroid Build Coastguard Worker class TrigonometricGroup : public TestCaseGroup
218*35238bceSAndroid Build Coastguard Worker {
219*35238bceSAndroid Build Coastguard Worker public:
TrigonometricGroup(Context & context)220*35238bceSAndroid Build Coastguard Worker TrigonometricGroup(Context &context) : TestCaseGroup(context, "trigonometric", "Trigonometric built-in functions")
221*35238bceSAndroid Build Coastguard Worker {
222*35238bceSAndroid Build Coastguard Worker }
223*35238bceSAndroid Build Coastguard Worker
init(void)224*35238bceSAndroid Build Coastguard Worker void init(void)
225*35238bceSAndroid Build Coastguard Worker {
226*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
227*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
228*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
229*35238bceSAndroid Build Coastguard Worker params.trigonometricBaseWeight = 4.0f;
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
232*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
235*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
236*35238bceSAndroid Build Coastguard Worker
237*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
238*35238bceSAndroid Build Coastguard Worker {
239*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
240*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Trigonometric ops in vertex shader", params, seed, true, false));
241*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
242*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Trigonometric ops in fragment shader", params, seed, false, true));
243*35238bceSAndroid Build Coastguard Worker }
244*35238bceSAndroid Build Coastguard Worker }
245*35238bceSAndroid Build Coastguard Worker };
246*35238bceSAndroid Build Coastguard Worker
247*35238bceSAndroid Build Coastguard Worker class ExponentialGroup : public TestCaseGroup
248*35238bceSAndroid Build Coastguard Worker {
249*35238bceSAndroid Build Coastguard Worker public:
ExponentialGroup(Context & context)250*35238bceSAndroid Build Coastguard Worker ExponentialGroup(Context &context) : TestCaseGroup(context, "exponential", "Exponential built-in functions")
251*35238bceSAndroid Build Coastguard Worker {
252*35238bceSAndroid Build Coastguard Worker }
253*35238bceSAndroid Build Coastguard Worker
init(void)254*35238bceSAndroid Build Coastguard Worker void init(void)
255*35238bceSAndroid Build Coastguard Worker {
256*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
257*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
258*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
259*35238bceSAndroid Build Coastguard Worker params.exponentialBaseWeight = 4.0f;
260*35238bceSAndroid Build Coastguard Worker
261*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
262*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
263*35238bceSAndroid Build Coastguard Worker
264*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
265*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
266*35238bceSAndroid Build Coastguard Worker
267*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
268*35238bceSAndroid Build Coastguard Worker {
269*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
270*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Exponential ops in vertex shader", params, seed, true, false));
271*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
272*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Exponential ops in fragment shader", params, seed, false, true));
273*35238bceSAndroid Build Coastguard Worker }
274*35238bceSAndroid Build Coastguard Worker }
275*35238bceSAndroid Build Coastguard Worker };
276*35238bceSAndroid Build Coastguard Worker
277*35238bceSAndroid Build Coastguard Worker class TextureGroup : public TestCaseGroup
278*35238bceSAndroid Build Coastguard Worker {
279*35238bceSAndroid Build Coastguard Worker public:
TextureGroup(Context & context)280*35238bceSAndroid Build Coastguard Worker TextureGroup(Context &context) : TestCaseGroup(context, "texture", "Texture lookups")
281*35238bceSAndroid Build Coastguard Worker {
282*35238bceSAndroid Build Coastguard Worker }
283*35238bceSAndroid Build Coastguard Worker
init(void)284*35238bceSAndroid Build Coastguard Worker void init(void)
285*35238bceSAndroid Build Coastguard Worker {
286*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
287*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
288*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
289*35238bceSAndroid Build Coastguard Worker params.vertexParameters.texLookupBaseWeight = 10.0f;
290*35238bceSAndroid Build Coastguard Worker params.vertexParameters.useTexture2D = true;
291*35238bceSAndroid Build Coastguard Worker params.vertexParameters.useTextureCube = true;
292*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.texLookupBaseWeight = 10.0f;
293*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.useTexture2D = true;
294*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.useTextureCube = true;
295*35238bceSAndroid Build Coastguard Worker
296*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
297*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
300*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
301*35238bceSAndroid Build Coastguard Worker
302*35238bceSAndroid Build Coastguard Worker // Do only 50 vertex cases and 150 fragment cases.
303*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 50; seed++)
304*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
305*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Texture lookups in vertex shader", params, seed, true, false));
306*35238bceSAndroid Build Coastguard Worker
307*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 150; seed++)
308*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
309*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Texture lookups in fragment shader", params, seed, false, true));
310*35238bceSAndroid Build Coastguard Worker }
311*35238bceSAndroid Build Coastguard Worker };
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker class AllFeaturesGroup : public TestCaseGroup
314*35238bceSAndroid Build Coastguard Worker {
315*35238bceSAndroid Build Coastguard Worker public:
AllFeaturesGroup(Context & context)316*35238bceSAndroid Build Coastguard Worker AllFeaturesGroup(Context &context) : TestCaseGroup(context, "all_features", "All features enabled")
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker }
319*35238bceSAndroid Build Coastguard Worker
init(void)320*35238bceSAndroid Build Coastguard Worker void init(void)
321*35238bceSAndroid Build Coastguard Worker {
322*35238bceSAndroid Build Coastguard Worker rsg::ProgramParameters params;
323*35238bceSAndroid Build Coastguard Worker params.useScalarConversions = true;
324*35238bceSAndroid Build Coastguard Worker params.useSwizzle = true;
325*35238bceSAndroid Build Coastguard Worker params.useComparisonOps = true;
326*35238bceSAndroid Build Coastguard Worker params.useConditionals = true;
327*35238bceSAndroid Build Coastguard Worker params.trigonometricBaseWeight = 1.0f;
328*35238bceSAndroid Build Coastguard Worker params.exponentialBaseWeight = 1.0f;
329*35238bceSAndroid Build Coastguard Worker
330*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxStatementDepth = 4;
331*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxStatementsPerBlock = 7;
332*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxExpressionDepth = 7;
333*35238bceSAndroid Build Coastguard Worker params.vertexParameters.maxCombinedVariableScalars = 64;
334*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxStatementDepth = 4;
335*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxStatementsPerBlock = 7;
336*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxExpressionDepth = 7;
337*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.maxCombinedVariableScalars = 64;
338*35238bceSAndroid Build Coastguard Worker
339*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.texLookupBaseWeight =
340*35238bceSAndroid Build Coastguard Worker 4.0f; // \note Texture lookups are enabled for fragment shaders only.
341*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.useTexture2D = true;
342*35238bceSAndroid Build Coastguard Worker params.fragmentParameters.useTextureCube = true;
343*35238bceSAndroid Build Coastguard Worker
344*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
345*35238bceSAndroid Build Coastguard Worker addChild(vertexGroup);
346*35238bceSAndroid Build Coastguard Worker
347*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
348*35238bceSAndroid Build Coastguard Worker addChild(fragmentGroup);
349*35238bceSAndroid Build Coastguard Worker
350*35238bceSAndroid Build Coastguard Worker for (int seed = 0; seed < 100; seed++)
351*35238bceSAndroid Build Coastguard Worker {
352*35238bceSAndroid Build Coastguard Worker vertexGroup->addChild(
353*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Texture lookups in vertex shader", params, seed, true, false));
354*35238bceSAndroid Build Coastguard Worker fragmentGroup->addChild(
355*35238bceSAndroid Build Coastguard Worker createRandomShaderCase(m_context, "Texture lookups in fragment shader", params, seed, false, true));
356*35238bceSAndroid Build Coastguard Worker }
357*35238bceSAndroid Build Coastguard Worker }
358*35238bceSAndroid Build Coastguard Worker };
359*35238bceSAndroid Build Coastguard Worker
360*35238bceSAndroid Build Coastguard Worker } // namespace
361*35238bceSAndroid Build Coastguard Worker
RandomShaderTests(Context & context)362*35238bceSAndroid Build Coastguard Worker RandomShaderTests::RandomShaderTests(Context &context) : TestCaseGroup(context, "random", "Random shaders")
363*35238bceSAndroid Build Coastguard Worker {
364*35238bceSAndroid Build Coastguard Worker }
365*35238bceSAndroid Build Coastguard Worker
~RandomShaderTests(void)366*35238bceSAndroid Build Coastguard Worker RandomShaderTests::~RandomShaderTests(void)
367*35238bceSAndroid Build Coastguard Worker {
368*35238bceSAndroid Build Coastguard Worker }
369*35238bceSAndroid Build Coastguard Worker
370*35238bceSAndroid Build Coastguard Worker namespace
371*35238bceSAndroid Build Coastguard Worker {
372*35238bceSAndroid Build Coastguard Worker
373*35238bceSAndroid Build Coastguard Worker } // namespace
374*35238bceSAndroid Build Coastguard Worker
init(void)375*35238bceSAndroid Build Coastguard Worker void RandomShaderTests::init(void)
376*35238bceSAndroid Build Coastguard Worker {
377*35238bceSAndroid Build Coastguard Worker addChild(new BasicExpressionGroup(m_context));
378*35238bceSAndroid Build Coastguard Worker addChild(new ScalarConversionGroup(m_context));
379*35238bceSAndroid Build Coastguard Worker addChild(new SwizzleGroup(m_context));
380*35238bceSAndroid Build Coastguard Worker addChild(new ComparisonOpsGroup(m_context));
381*35238bceSAndroid Build Coastguard Worker addChild(new ConditionalsGroup(m_context));
382*35238bceSAndroid Build Coastguard Worker addChild(new TrigonometricGroup(m_context));
383*35238bceSAndroid Build Coastguard Worker addChild(new ExponentialGroup(m_context));
384*35238bceSAndroid Build Coastguard Worker addChild(new TextureGroup(m_context));
385*35238bceSAndroid Build Coastguard Worker addChild(new AllFeaturesGroup(m_context));
386*35238bceSAndroid Build Coastguard Worker }
387*35238bceSAndroid Build Coastguard Worker
388*35238bceSAndroid Build Coastguard Worker } // namespace Functional
389*35238bceSAndroid Build Coastguard Worker } // namespace gles3
390*35238bceSAndroid Build Coastguard Worker } // namespace deqp
391