1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * drawElements Quality Program OpenGL ES 2.0 Module
3e5c31af7Sopenharmony_ci * -------------------------------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci *
11e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci * limitations under the License.
18e5c31af7Sopenharmony_ci *
19e5c31af7Sopenharmony_ci *//*!
20e5c31af7Sopenharmony_ci * \file
21e5c31af7Sopenharmony_ci * \brief Random shader tests.
22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "es2fRandomShaderTests.hpp"
25e5c31af7Sopenharmony_ci#include "glsRandomShaderCase.hpp"
26e5c31af7Sopenharmony_ci#include "deStringUtil.hpp"
27e5c31af7Sopenharmony_ci
28e5c31af7Sopenharmony_cinamespace deqp
29e5c31af7Sopenharmony_ci{
30e5c31af7Sopenharmony_cinamespace gles2
31e5c31af7Sopenharmony_ci{
32e5c31af7Sopenharmony_cinamespace Functional
33e5c31af7Sopenharmony_ci{
34e5c31af7Sopenharmony_ci
35e5c31af7Sopenharmony_cinamespace
36e5c31af7Sopenharmony_ci{
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_cigls::RandomShaderCase* createRandomShaderCase (Context& context, const char* description, const rsg::ProgramParameters& baseParams, deUint32 seed, bool vertex, bool fragment)
39e5c31af7Sopenharmony_ci{
40e5c31af7Sopenharmony_ci	rsg::ProgramParameters params = baseParams;
41e5c31af7Sopenharmony_ci
42e5c31af7Sopenharmony_ci	params.seed							= seed;
43e5c31af7Sopenharmony_ci	params.vertexParameters.randomize	= vertex;
44e5c31af7Sopenharmony_ci	params.fragmentParameters.randomize	= fragment;
45e5c31af7Sopenharmony_ci
46e5c31af7Sopenharmony_ci	return new gls::RandomShaderCase(context.getTestContext(), context.getRenderContext(), de::toString(seed).c_str(), description, params);
47e5c31af7Sopenharmony_ci}
48e5c31af7Sopenharmony_ci
49e5c31af7Sopenharmony_ciclass BasicExpressionGroup : public TestCaseGroup
50e5c31af7Sopenharmony_ci{
51e5c31af7Sopenharmony_cipublic:
52e5c31af7Sopenharmony_ci	BasicExpressionGroup (Context& context)
53e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "basic_expression", "Basic arithmetic expressions")
54e5c31af7Sopenharmony_ci	{
55e5c31af7Sopenharmony_ci	}
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ci	void init (void)
58e5c31af7Sopenharmony_ci	{
59e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
62e5c31af7Sopenharmony_ci		addChild(vertexGroup);
63e5c31af7Sopenharmony_ci
64e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
65e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
68e5c31af7Sopenharmony_ci		addChild(combinedGroup);
69e5c31af7Sopenharmony_ci
70e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
71e5c31af7Sopenharmony_ci		{
72e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Random expressions in vertex shader",					params, seed, true, false));
73e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Random expressions in fragment shader",				params, seed, false, true));
74e5c31af7Sopenharmony_ci			combinedGroup->addChild(createRandomShaderCase(m_context,	"Random expressions in vertex and fragment shaders",	params, seed, true, true));
75e5c31af7Sopenharmony_ci		}
76e5c31af7Sopenharmony_ci	}
77e5c31af7Sopenharmony_ci};
78e5c31af7Sopenharmony_ci
79e5c31af7Sopenharmony_ciclass ScalarConversionGroup : public TestCaseGroup
80e5c31af7Sopenharmony_ci{
81e5c31af7Sopenharmony_cipublic:
82e5c31af7Sopenharmony_ci	ScalarConversionGroup (Context& context)
83e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "scalar_conversion", "Scalar conversions")
84e5c31af7Sopenharmony_ci	{
85e5c31af7Sopenharmony_ci	}
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ci	void init (void)
88e5c31af7Sopenharmony_ci	{
89e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
90e5c31af7Sopenharmony_ci		params.useScalarConversions = true;
91e5c31af7Sopenharmony_ci
92e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
93e5c31af7Sopenharmony_ci		addChild(vertexGroup);
94e5c31af7Sopenharmony_ci
95e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
96e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
99e5c31af7Sopenharmony_ci		addChild(combinedGroup);
100e5c31af7Sopenharmony_ci
101e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
102e5c31af7Sopenharmony_ci		{
103e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Scalar conversions in vertex shader",					params, seed, true, false));
104e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Scalar conversions in fragment shader",				params, seed, false, true));
105e5c31af7Sopenharmony_ci			combinedGroup->addChild(createRandomShaderCase(m_context,	"Scalar conversions in vertex and fragment shaders",	params, seed, true, true));
106e5c31af7Sopenharmony_ci		}
107e5c31af7Sopenharmony_ci	}
108e5c31af7Sopenharmony_ci};
109e5c31af7Sopenharmony_ci
110e5c31af7Sopenharmony_ciclass SwizzleGroup : public TestCaseGroup
111e5c31af7Sopenharmony_ci{
112e5c31af7Sopenharmony_cipublic:
113e5c31af7Sopenharmony_ci	SwizzleGroup (Context& context)
114e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "swizzle", "Vector swizzles")
115e5c31af7Sopenharmony_ci	{
116e5c31af7Sopenharmony_ci	}
117e5c31af7Sopenharmony_ci
118e5c31af7Sopenharmony_ci	void init (void)
119e5c31af7Sopenharmony_ci	{
120e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
121e5c31af7Sopenharmony_ci		params.useScalarConversions = true;
122e5c31af7Sopenharmony_ci		params.useSwizzle			= true;
123e5c31af7Sopenharmony_ci
124e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
125e5c31af7Sopenharmony_ci		addChild(vertexGroup);
126e5c31af7Sopenharmony_ci
127e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
128e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
129e5c31af7Sopenharmony_ci
130e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 50; seed++)
131e5c31af7Sopenharmony_ci		{
132e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Vector swizzles in vertex shader",		params, seed, true, false));
133e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Vector swizzles in fragment shader",	params, seed, false, true));
134e5c31af7Sopenharmony_ci		}
135e5c31af7Sopenharmony_ci	}
136e5c31af7Sopenharmony_ci};
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ciclass ComparisonOpsGroup : public TestCaseGroup
139e5c31af7Sopenharmony_ci{
140e5c31af7Sopenharmony_cipublic:
141e5c31af7Sopenharmony_ci	ComparisonOpsGroup (Context& context)
142e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "comparison_ops", "Comparison operators")
143e5c31af7Sopenharmony_ci	{
144e5c31af7Sopenharmony_ci	}
145e5c31af7Sopenharmony_ci
146e5c31af7Sopenharmony_ci	void init (void)
147e5c31af7Sopenharmony_ci	{
148e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
149e5c31af7Sopenharmony_ci		params.useScalarConversions = true;
150e5c31af7Sopenharmony_ci		params.useComparisonOps		= true;
151e5c31af7Sopenharmony_ci
152e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
153e5c31af7Sopenharmony_ci		addChild(vertexGroup);
154e5c31af7Sopenharmony_ci
155e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
156e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
157e5c31af7Sopenharmony_ci
158e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 50; seed++)
159e5c31af7Sopenharmony_ci		{
160e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Comparison operators in vertex shader",		params, seed, true, false));
161e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Comparison operators in fragment shader",		params, seed, false, true));
162e5c31af7Sopenharmony_ci		}
163e5c31af7Sopenharmony_ci	}
164e5c31af7Sopenharmony_ci};
165e5c31af7Sopenharmony_ci
166e5c31af7Sopenharmony_ciclass ConditionalsGroup : public TestCaseGroup
167e5c31af7Sopenharmony_ci{
168e5c31af7Sopenharmony_cipublic:
169e5c31af7Sopenharmony_ci	ConditionalsGroup (Context& context)
170e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "conditionals", "Conditional control flow (if-else)")
171e5c31af7Sopenharmony_ci	{
172e5c31af7Sopenharmony_ci	}
173e5c31af7Sopenharmony_ci
174e5c31af7Sopenharmony_ci	void init (void)
175e5c31af7Sopenharmony_ci	{
176e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
177e5c31af7Sopenharmony_ci		params.useScalarConversions = true;
178e5c31af7Sopenharmony_ci		params.useSwizzle			= true;
179e5c31af7Sopenharmony_ci		params.useComparisonOps		= true;
180e5c31af7Sopenharmony_ci		params.useConditionals		= true;
181e5c31af7Sopenharmony_ci		params.vertexParameters.maxStatementDepth		= 4;
182e5c31af7Sopenharmony_ci		params.vertexParameters.maxStatementsPerBlock	= 5;
183e5c31af7Sopenharmony_ci		params.fragmentParameters.maxStatementDepth		= 4;
184e5c31af7Sopenharmony_ci		params.fragmentParameters.maxStatementsPerBlock	= 5;
185e5c31af7Sopenharmony_ci
186e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
187e5c31af7Sopenharmony_ci		addChild(vertexGroup);
188e5c31af7Sopenharmony_ci
189e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
190e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* combinedGroup = new tcu::TestCaseGroup(m_testCtx, "combined", "Combined tests");
193e5c31af7Sopenharmony_ci		addChild(combinedGroup);
194e5c31af7Sopenharmony_ci
195e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
196e5c31af7Sopenharmony_ci		{
197e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Conditional control flow in vertex shader",				params, seed, true, false));
198e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Conditional control flow in fragment shader",				params, seed, false, true));
199e5c31af7Sopenharmony_ci			combinedGroup->addChild(createRandomShaderCase(m_context,	"Conditional control flow in vertex and fragment shaders",	params, seed, true, true));
200e5c31af7Sopenharmony_ci		}
201e5c31af7Sopenharmony_ci	}
202e5c31af7Sopenharmony_ci};
203e5c31af7Sopenharmony_ci
204e5c31af7Sopenharmony_ciclass TrigonometricGroup : public TestCaseGroup
205e5c31af7Sopenharmony_ci{
206e5c31af7Sopenharmony_cipublic:
207e5c31af7Sopenharmony_ci	TrigonometricGroup (Context& context)
208e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "trigonometric", "Trigonometric built-in functions")
209e5c31af7Sopenharmony_ci	{
210e5c31af7Sopenharmony_ci	}
211e5c31af7Sopenharmony_ci
212e5c31af7Sopenharmony_ci	void init (void)
213e5c31af7Sopenharmony_ci	{
214e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
215e5c31af7Sopenharmony_ci		params.useScalarConversions		= true;
216e5c31af7Sopenharmony_ci		params.useSwizzle				= true;
217e5c31af7Sopenharmony_ci		params.trigonometricBaseWeight	= 4.0f;
218e5c31af7Sopenharmony_ci
219e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
220e5c31af7Sopenharmony_ci		addChild(vertexGroup);
221e5c31af7Sopenharmony_ci
222e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
223e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
224e5c31af7Sopenharmony_ci
225e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
226e5c31af7Sopenharmony_ci		{
227e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Trigonometric ops in vertex shader",	params, seed, true, false));
228e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Trigonometric ops in fragment shader",	params, seed, false, true));
229e5c31af7Sopenharmony_ci		}
230e5c31af7Sopenharmony_ci	}
231e5c31af7Sopenharmony_ci};
232e5c31af7Sopenharmony_ci
233e5c31af7Sopenharmony_ciclass ExponentialGroup : public TestCaseGroup
234e5c31af7Sopenharmony_ci{
235e5c31af7Sopenharmony_cipublic:
236e5c31af7Sopenharmony_ci	ExponentialGroup (Context& context)
237e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "exponential", "Exponential built-in functions")
238e5c31af7Sopenharmony_ci	{
239e5c31af7Sopenharmony_ci	}
240e5c31af7Sopenharmony_ci
241e5c31af7Sopenharmony_ci	void init (void)
242e5c31af7Sopenharmony_ci	{
243e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
244e5c31af7Sopenharmony_ci		params.useScalarConversions		= true;
245e5c31af7Sopenharmony_ci		params.useSwizzle				= true;
246e5c31af7Sopenharmony_ci		params.exponentialBaseWeight	= 4.0f;
247e5c31af7Sopenharmony_ci
248e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
249e5c31af7Sopenharmony_ci		addChild(vertexGroup);
250e5c31af7Sopenharmony_ci
251e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
252e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
253e5c31af7Sopenharmony_ci
254e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
255e5c31af7Sopenharmony_ci		{
256e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Exponential ops in vertex shader",		params, seed, true, false));
257e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Exponential ops in fragment shader",	params, seed, false, true));
258e5c31af7Sopenharmony_ci		}
259e5c31af7Sopenharmony_ci	}
260e5c31af7Sopenharmony_ci};
261e5c31af7Sopenharmony_ci
262e5c31af7Sopenharmony_ciclass TextureGroup : public TestCaseGroup
263e5c31af7Sopenharmony_ci{
264e5c31af7Sopenharmony_cipublic:
265e5c31af7Sopenharmony_ci	TextureGroup (Context& context)
266e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "texture", "Texture lookups")
267e5c31af7Sopenharmony_ci	{
268e5c31af7Sopenharmony_ci	}
269e5c31af7Sopenharmony_ci
270e5c31af7Sopenharmony_ci	void init (void)
271e5c31af7Sopenharmony_ci	{
272e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
273e5c31af7Sopenharmony_ci		params.useScalarConversions						= true;
274e5c31af7Sopenharmony_ci		params.useSwizzle								= true;
275e5c31af7Sopenharmony_ci		params.vertexParameters.texLookupBaseWeight		= 10.0f;
276e5c31af7Sopenharmony_ci		params.vertexParameters.useTexture2D			= true;
277e5c31af7Sopenharmony_ci		params.vertexParameters.useTextureCube			= true;
278e5c31af7Sopenharmony_ci		params.fragmentParameters.texLookupBaseWeight	= 10.0f;
279e5c31af7Sopenharmony_ci		params.fragmentParameters.useTexture2D			= true;
280e5c31af7Sopenharmony_ci		params.fragmentParameters.useTextureCube		= true;
281e5c31af7Sopenharmony_ci
282e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
283e5c31af7Sopenharmony_ci		addChild(vertexGroup);
284e5c31af7Sopenharmony_ci
285e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
286e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
287e5c31af7Sopenharmony_ci
288e5c31af7Sopenharmony_ci		// Do only 50 vertex cases and 150 fragment cases.
289e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 50; seed++)
290e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Texture lookups in vertex shader",		params, seed, true, false));
291e5c31af7Sopenharmony_ci
292e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 150; seed++)
293e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Texture lookups in fragment shader",	params, seed, false, true));
294e5c31af7Sopenharmony_ci	}
295e5c31af7Sopenharmony_ci};
296e5c31af7Sopenharmony_ci
297e5c31af7Sopenharmony_ciclass AllFeaturesGroup : public TestCaseGroup
298e5c31af7Sopenharmony_ci{
299e5c31af7Sopenharmony_cipublic:
300e5c31af7Sopenharmony_ci	AllFeaturesGroup (Context& context)
301e5c31af7Sopenharmony_ci		: TestCaseGroup(context, "all_features", "All features enabled")
302e5c31af7Sopenharmony_ci	{
303e5c31af7Sopenharmony_ci	}
304e5c31af7Sopenharmony_ci
305e5c31af7Sopenharmony_ci	void init (void)
306e5c31af7Sopenharmony_ci	{
307e5c31af7Sopenharmony_ci		rsg::ProgramParameters params;
308e5c31af7Sopenharmony_ci		params.useScalarConversions		= true;
309e5c31af7Sopenharmony_ci		params.useSwizzle				= true;
310e5c31af7Sopenharmony_ci		params.useComparisonOps			= true;
311e5c31af7Sopenharmony_ci		params.useConditionals			= true;
312e5c31af7Sopenharmony_ci		params.trigonometricBaseWeight	= 1.0f;
313e5c31af7Sopenharmony_ci		params.exponentialBaseWeight	= 1.0f;
314e5c31af7Sopenharmony_ci
315e5c31af7Sopenharmony_ci		params.vertexParameters.maxStatementDepth				= 4;
316e5c31af7Sopenharmony_ci		params.vertexParameters.maxStatementsPerBlock			= 7;
317e5c31af7Sopenharmony_ci		params.vertexParameters.maxExpressionDepth				= 7;
318e5c31af7Sopenharmony_ci		params.vertexParameters.maxCombinedVariableScalars		= 64;
319e5c31af7Sopenharmony_ci		params.fragmentParameters.maxStatementDepth				= 4;
320e5c31af7Sopenharmony_ci		params.fragmentParameters.maxStatementsPerBlock			= 7;
321e5c31af7Sopenharmony_ci		params.fragmentParameters.maxExpressionDepth			= 7;
322e5c31af7Sopenharmony_ci		params.fragmentParameters.maxCombinedVariableScalars	= 64;
323e5c31af7Sopenharmony_ci
324e5c31af7Sopenharmony_ci		params.fragmentParameters.texLookupBaseWeight		= 4.0f; // \note Texture lookups are enabled for fragment shaders only.
325e5c31af7Sopenharmony_ci		params.fragmentParameters.useTexture2D				= true;
326e5c31af7Sopenharmony_ci		params.fragmentParameters.useTextureCube			= true;
327e5c31af7Sopenharmony_ci
328e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* vertexGroup = new tcu::TestCaseGroup(m_testCtx, "vertex", "Vertex-only tests");
329e5c31af7Sopenharmony_ci		addChild(vertexGroup);
330e5c31af7Sopenharmony_ci
331e5c31af7Sopenharmony_ci		tcu::TestCaseGroup* fragmentGroup = new tcu::TestCaseGroup(m_testCtx, "fragment", "Fragment-only tests");
332e5c31af7Sopenharmony_ci		addChild(fragmentGroup);
333e5c31af7Sopenharmony_ci
334e5c31af7Sopenharmony_ci		for (int seed = 0; seed < 100; seed++)
335e5c31af7Sopenharmony_ci		{
336e5c31af7Sopenharmony_ci			vertexGroup->addChild(createRandomShaderCase(m_context,		"Texture lookups in vertex shader",		params, seed, true, false));
337e5c31af7Sopenharmony_ci			fragmentGroup->addChild(createRandomShaderCase(m_context,	"Texture lookups in fragment shader",	params, seed, false, true));
338e5c31af7Sopenharmony_ci		}
339e5c31af7Sopenharmony_ci	}
340e5c31af7Sopenharmony_ci};
341e5c31af7Sopenharmony_ci
342e5c31af7Sopenharmony_ci} // anonymous
343e5c31af7Sopenharmony_ci
344e5c31af7Sopenharmony_ciRandomShaderTests::RandomShaderTests (Context& context)
345e5c31af7Sopenharmony_ci	: TestCaseGroup(context, "random", "Random shaders")
346e5c31af7Sopenharmony_ci{
347e5c31af7Sopenharmony_ci}
348e5c31af7Sopenharmony_ci
349e5c31af7Sopenharmony_ciRandomShaderTests::~RandomShaderTests (void)
350e5c31af7Sopenharmony_ci{
351e5c31af7Sopenharmony_ci}
352e5c31af7Sopenharmony_ci
353e5c31af7Sopenharmony_cinamespace
354e5c31af7Sopenharmony_ci{
355e5c31af7Sopenharmony_ci
356e5c31af7Sopenharmony_ci} // anonymous
357e5c31af7Sopenharmony_ci
358e5c31af7Sopenharmony_civoid RandomShaderTests::init (void)
359e5c31af7Sopenharmony_ci{
360e5c31af7Sopenharmony_ci	addChild(new BasicExpressionGroup	(m_context));
361e5c31af7Sopenharmony_ci	addChild(new ScalarConversionGroup	(m_context));
362e5c31af7Sopenharmony_ci	addChild(new SwizzleGroup			(m_context));
363e5c31af7Sopenharmony_ci	addChild(new ComparisonOpsGroup		(m_context));
364e5c31af7Sopenharmony_ci	addChild(new ConditionalsGroup		(m_context));
365e5c31af7Sopenharmony_ci	addChild(new TrigonometricGroup		(m_context));
366e5c31af7Sopenharmony_ci	addChild(new ExponentialGroup		(m_context));
367e5c31af7Sopenharmony_ci	addChild(new TextureGroup			(m_context));
368e5c31af7Sopenharmony_ci	addChild(new AllFeaturesGroup		(m_context));
369e5c31af7Sopenharmony_ci}
370e5c31af7Sopenharmony_ci
371e5c31af7Sopenharmony_ci} // Functional
372e5c31af7Sopenharmony_ci} // gles2
373e5c31af7Sopenharmony_ci} // deqp
374