xref: /aosp_15_r20/external/deqp/modules/gles3/functional/es3fRandomShaderTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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