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