xref: /aosp_15_r20/external/deqp/modules/gles2/stress/es2sLongRunningTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief Long-running stress tests.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es2sLongRunningTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsLongStressCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "glsLongStressTestUtil.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker #include <string>
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker using std::string;
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker namespace deqp
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker namespace gles2
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker namespace Stress
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker 
LongRunningTests(Context & context)40*35238bceSAndroid Build Coastguard Worker LongRunningTests::LongRunningTests(Context &context) : TestCaseGroup(context, "long", "Long-running stress tests")
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker }
43*35238bceSAndroid Build Coastguard Worker 
~LongRunningTests(void)44*35238bceSAndroid Build Coastguard Worker LongRunningTests::~LongRunningTests(void)
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker }
47*35238bceSAndroid Build Coastguard Worker 
init(void)48*35238bceSAndroid Build Coastguard Worker void LongRunningTests::init(void)
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker     static const int Mi = 1 << 20;
51*35238bceSAndroid Build Coastguard Worker     const gls::LongStressTestUtil::ProgramLibrary progLib(glu::GLSL_VERSION_100_ES);
52*35238bceSAndroid Build Coastguard Worker 
53*35238bceSAndroid Build Coastguard Worker     typedef gls::LongStressCase::FeatureProbabilities Probs;
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker     // Buffer cases.
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker     {
58*35238bceSAndroid Build Coastguard Worker         static const struct MemCase
59*35238bceSAndroid Build Coastguard Worker         {
60*35238bceSAndroid Build Coastguard Worker             const char *const nameSuffix;
61*35238bceSAndroid Build Coastguard Worker             const char *const descSuffix;
62*35238bceSAndroid Build Coastguard Worker             const int limit;
63*35238bceSAndroid Build Coastguard Worker             const int redundantBufferFactor;
64*35238bceSAndroid Build Coastguard Worker             MemCase(const char *n, const char *d, int l, int r)
65*35238bceSAndroid Build Coastguard Worker                 : nameSuffix(n)
66*35238bceSAndroid Build Coastguard Worker                 , descSuffix(d)
67*35238bceSAndroid Build Coastguard Worker                 , limit(l)
68*35238bceSAndroid Build Coastguard Worker                 , redundantBufferFactor(r)
69*35238bceSAndroid Build Coastguard Worker             {
70*35238bceSAndroid Build Coastguard Worker             }
71*35238bceSAndroid Build Coastguard Worker         } memoryLimitCases[] = {MemCase("_low_memory", "; use a low buffer memory usage limit", 8 * Mi, 2),
72*35238bceSAndroid Build Coastguard Worker                                 MemCase("_high_memory", "; use a high buffer memory usage limit", 256 * Mi, 64)};
73*35238bceSAndroid Build Coastguard Worker 
74*35238bceSAndroid Build Coastguard Worker         const std::vector<gls::ProgramContext> contexts(1, progLib.generateBufferContext(4));
75*35238bceSAndroid Build Coastguard Worker 
76*35238bceSAndroid Build Coastguard Worker         static const struct Case
77*35238bceSAndroid Build Coastguard Worker         {
78*35238bceSAndroid Build Coastguard Worker             const char *const name;
79*35238bceSAndroid Build Coastguard Worker             const char *const desc;
80*35238bceSAndroid Build Coastguard Worker             const int redundantBufferFactor; //!< If non-positive, taken from memoryLimitCases.
81*35238bceSAndroid Build Coastguard Worker             const Probs probs;
82*35238bceSAndroid Build Coastguard Worker             Case(const char *const name_, const char *const desc_, int bufFact, const Probs &probs_ = Probs())
83*35238bceSAndroid Build Coastguard Worker                 : name(name_)
84*35238bceSAndroid Build Coastguard Worker                 , desc(desc_)
85*35238bceSAndroid Build Coastguard Worker                 , redundantBufferFactor(bufFact)
86*35238bceSAndroid Build Coastguard Worker                 , probs(probs_)
87*35238bceSAndroid Build Coastguard Worker             {
88*35238bceSAndroid Build Coastguard Worker             }
89*35238bceSAndroid Build Coastguard Worker         } cases[] = {Case("always_reupload", "Re-upload buffer data at the beginning of each iteration", -1,
90*35238bceSAndroid Build Coastguard Worker                           Probs().pReuploadBuffer(1.0f)),
91*35238bceSAndroid Build Coastguard Worker 
92*35238bceSAndroid Build Coastguard Worker                      Case("always_reupload_bufferdata",
93*35238bceSAndroid Build Coastguard Worker                           "Re-upload buffer data at the beginning of each iteration, using glBufferData", -1,
94*35238bceSAndroid Build Coastguard Worker                           Probs().pReuploadBuffer(1.0f).pReuploadWithBufferData(1.0f)),
95*35238bceSAndroid Build Coastguard Worker 
96*35238bceSAndroid Build Coastguard Worker                      Case("always_delete",
97*35238bceSAndroid Build Coastguard Worker                           "Delete buffers at the end of each iteration, and re-create at the beginning of the next", -1,
98*35238bceSAndroid Build Coastguard Worker                           Probs().pDeleteBuffer(1.0f)),
99*35238bceSAndroid Build Coastguard Worker 
100*35238bceSAndroid Build Coastguard Worker                      Case("wasteful", "Don't reuse buffers, and only delete them when given memory limit is reached", 2,
101*35238bceSAndroid Build Coastguard Worker                           Probs().pWastefulBufferMemoryUsage(1.0f)),
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker                      Case("separate_attribute_buffers_wasteful", "Give each vertex attribute its own buffer", 2,
104*35238bceSAndroid Build Coastguard Worker                           Probs().pSeparateAttribBuffers(1.0f).pWastefulBufferMemoryUsage(1.0f))};
105*35238bceSAndroid Build Coastguard Worker 
106*35238bceSAndroid Build Coastguard Worker         TestCaseGroup *const bufferGroup = new TestCaseGroup(m_context, "buffer", "Buffer stress tests");
107*35238bceSAndroid Build Coastguard Worker         addChild(bufferGroup);
108*35238bceSAndroid Build Coastguard Worker 
109*35238bceSAndroid Build Coastguard Worker         for (int memoryLimitNdx = 0; memoryLimitNdx < DE_LENGTH_OF_ARRAY(memoryLimitCases); memoryLimitNdx++)
110*35238bceSAndroid Build Coastguard Worker         {
111*35238bceSAndroid Build Coastguard Worker             for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); caseNdx++)
112*35238bceSAndroid Build Coastguard Worker             {
113*35238bceSAndroid Build Coastguard Worker                 const int redundantBufferFactor = cases[caseNdx].redundantBufferFactor > 0 ?
114*35238bceSAndroid Build Coastguard Worker                                                       cases[caseNdx].redundantBufferFactor :
115*35238bceSAndroid Build Coastguard Worker                                                       memoryLimitCases[memoryLimitNdx].redundantBufferFactor;
116*35238bceSAndroid Build Coastguard Worker 
117*35238bceSAndroid Build Coastguard Worker                 bufferGroup->addChild(new gls::LongStressCase(
118*35238bceSAndroid Build Coastguard Worker                     m_context.getTestContext(), m_context.getRenderContext(),
119*35238bceSAndroid Build Coastguard Worker                     (string() + cases[caseNdx].name + memoryLimitCases[memoryLimitNdx].nameSuffix).c_str(),
120*35238bceSAndroid Build Coastguard Worker                     (string() + cases[caseNdx].desc + memoryLimitCases[memoryLimitNdx].descSuffix).c_str(),
121*35238bceSAndroid Build Coastguard Worker                     0 /* tex memory */, memoryLimitCases[memoryLimitNdx].limit, 1 /* draw calls per iteration */,
122*35238bceSAndroid Build Coastguard Worker                     50000 /* tris per call */, contexts, cases[caseNdx].probs, GL_DYNAMIC_DRAW, GL_DYNAMIC_DRAW,
123*35238bceSAndroid Build Coastguard Worker                     redundantBufferFactor));
124*35238bceSAndroid Build Coastguard Worker             }
125*35238bceSAndroid Build Coastguard Worker         }
126*35238bceSAndroid Build Coastguard Worker     }
127*35238bceSAndroid Build Coastguard Worker 
128*35238bceSAndroid Build Coastguard Worker     // Texture cases.
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker     {
131*35238bceSAndroid Build Coastguard Worker         static const struct MemCase
132*35238bceSAndroid Build Coastguard Worker         {
133*35238bceSAndroid Build Coastguard Worker             const char *const nameSuffix;
134*35238bceSAndroid Build Coastguard Worker             const char *const descSuffix;
135*35238bceSAndroid Build Coastguard Worker             const int limit;
136*35238bceSAndroid Build Coastguard Worker             const int numTextures;
137*35238bceSAndroid Build Coastguard Worker             MemCase(const char *n, const char *d, int l, int t) : nameSuffix(n), descSuffix(d), limit(l), numTextures(t)
138*35238bceSAndroid Build Coastguard Worker             {
139*35238bceSAndroid Build Coastguard Worker             }
140*35238bceSAndroid Build Coastguard Worker         } memoryLimitCases[] = {MemCase("_low_memory", "; use a low texture memory usage limit", 8 * Mi, 6),
141*35238bceSAndroid Build Coastguard Worker                                 MemCase("_high_memory", "; use a high texture memory usage limit", 256 * Mi, 192)};
142*35238bceSAndroid Build Coastguard Worker 
143*35238bceSAndroid Build Coastguard Worker         static const struct Case
144*35238bceSAndroid Build Coastguard Worker         {
145*35238bceSAndroid Build Coastguard Worker             const char *const name;
146*35238bceSAndroid Build Coastguard Worker             const char *const desc;
147*35238bceSAndroid Build Coastguard Worker             const int numTextures; //!< If non-positive, taken from memoryLimitCases.
148*35238bceSAndroid Build Coastguard Worker             const Probs probs;
149*35238bceSAndroid Build Coastguard Worker             Case(const char *const name_, const char *const desc_, int numTextures_, const Probs &probs_ = Probs())
150*35238bceSAndroid Build Coastguard Worker                 : name(name_)
151*35238bceSAndroid Build Coastguard Worker                 , desc(desc_)
152*35238bceSAndroid Build Coastguard Worker                 , numTextures(numTextures_)
153*35238bceSAndroid Build Coastguard Worker                 , probs(probs_)
154*35238bceSAndroid Build Coastguard Worker             {
155*35238bceSAndroid Build Coastguard Worker             }
156*35238bceSAndroid Build Coastguard Worker         } cases[] = {Case("always_reupload", "Re-upload texture data at the beginning of each iteration", -1,
157*35238bceSAndroid Build Coastguard Worker                           Probs().pReuploadTexture(1.0f)),
158*35238bceSAndroid Build Coastguard Worker 
159*35238bceSAndroid Build Coastguard Worker                      Case("always_reupload_teximage",
160*35238bceSAndroid Build Coastguard Worker                           "Re-upload texture data at the beginning of each iteration, using glTexImage*", -1,
161*35238bceSAndroid Build Coastguard Worker                           Probs().pReuploadTexture(1.0f).pReuploadWithTexImage(1.0f)),
162*35238bceSAndroid Build Coastguard Worker 
163*35238bceSAndroid Build Coastguard Worker                      Case("always_delete",
164*35238bceSAndroid Build Coastguard Worker                           "Delete textures at the end of each iteration, and re-create at the beginning of the next",
165*35238bceSAndroid Build Coastguard Worker                           -1, Probs().pDeleteTexture(1.0f)),
166*35238bceSAndroid Build Coastguard Worker 
167*35238bceSAndroid Build Coastguard Worker                      Case("wasteful", "Don't reuse textures, and only delete them when given memory limit is reached",
168*35238bceSAndroid Build Coastguard Worker                           6, Probs().pWastefulTextureMemoryUsage(1.0f))};
169*35238bceSAndroid Build Coastguard Worker 
170*35238bceSAndroid Build Coastguard Worker         TestCaseGroup *const textureGroup = new TestCaseGroup(m_context, "texture", "Texture stress tests");
171*35238bceSAndroid Build Coastguard Worker         addChild(textureGroup);
172*35238bceSAndroid Build Coastguard Worker 
173*35238bceSAndroid Build Coastguard Worker         for (int memoryLimitNdx = 0; memoryLimitNdx < DE_LENGTH_OF_ARRAY(memoryLimitCases); memoryLimitNdx++)
174*35238bceSAndroid Build Coastguard Worker         {
175*35238bceSAndroid Build Coastguard Worker             for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); caseNdx++)
176*35238bceSAndroid Build Coastguard Worker             {
177*35238bceSAndroid Build Coastguard Worker                 const int numTextures = cases[caseNdx].numTextures > 0 ? cases[caseNdx].numTextures :
178*35238bceSAndroid Build Coastguard Worker                                                                          memoryLimitCases[memoryLimitNdx].numTextures;
179*35238bceSAndroid Build Coastguard Worker                 const std::vector<gls::ProgramContext> contexts(
180*35238bceSAndroid Build Coastguard Worker                     1, progLib.generateTextureContext(numTextures, 512, 512, 0.1f));
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker                 textureGroup->addChild(new gls::LongStressCase(
183*35238bceSAndroid Build Coastguard Worker                     m_context.getTestContext(), m_context.getRenderContext(),
184*35238bceSAndroid Build Coastguard Worker                     (string() + cases[caseNdx].name + memoryLimitCases[memoryLimitNdx].nameSuffix).c_str(),
185*35238bceSAndroid Build Coastguard Worker                     (string() + cases[caseNdx].desc + memoryLimitCases[memoryLimitNdx].descSuffix).c_str(),
186*35238bceSAndroid Build Coastguard Worker                     memoryLimitCases[memoryLimitNdx].limit, 1 * Mi /* buf memory */, 1 /* draw calls per iteration */,
187*35238bceSAndroid Build Coastguard Worker                     10000 /* tris per call */, contexts, cases[caseNdx].probs, GL_STATIC_DRAW, GL_STATIC_DRAW));
188*35238bceSAndroid Build Coastguard Worker             }
189*35238bceSAndroid Build Coastguard Worker         }
190*35238bceSAndroid Build Coastguard Worker     }
191*35238bceSAndroid Build Coastguard Worker 
192*35238bceSAndroid Build Coastguard Worker     // Draw call cases.
193*35238bceSAndroid Build Coastguard Worker 
194*35238bceSAndroid Build Coastguard Worker     {
195*35238bceSAndroid Build Coastguard Worker         const std::vector<gls::ProgramContext> contexts(1, progLib.generateTextureContext(1, 128, 128, 0.5f));
196*35238bceSAndroid Build Coastguard Worker 
197*35238bceSAndroid Build Coastguard Worker         static const struct Case
198*35238bceSAndroid Build Coastguard Worker         {
199*35238bceSAndroid Build Coastguard Worker             const char *const name;
200*35238bceSAndroid Build Coastguard Worker             const char *const desc;
201*35238bceSAndroid Build Coastguard Worker             const int drawCallsPerIteration;
202*35238bceSAndroid Build Coastguard Worker             const int numTrisPerDrawCall;
203*35238bceSAndroid Build Coastguard Worker             const Probs probs;
204*35238bceSAndroid Build Coastguard Worker             Case(const char *const name_, const char *const desc_, const int calls, const int tris,
205*35238bceSAndroid Build Coastguard Worker                  const Probs &probs_ = Probs())
206*35238bceSAndroid Build Coastguard Worker                 : name(name_)
207*35238bceSAndroid Build Coastguard Worker                 , desc(desc_)
208*35238bceSAndroid Build Coastguard Worker                 , drawCallsPerIteration(calls)
209*35238bceSAndroid Build Coastguard Worker                 , numTrisPerDrawCall(tris)
210*35238bceSAndroid Build Coastguard Worker                 , probs(probs_)
211*35238bceSAndroid Build Coastguard Worker             {
212*35238bceSAndroid Build Coastguard Worker             }
213*35238bceSAndroid Build Coastguard Worker         } cases[] = {Case("client_memory_data", "Use client-memory for index and attribute data, instead of GL buffers",
214*35238bceSAndroid Build Coastguard Worker                           200, 500, Probs().pClientMemoryAttributeData(1.0f).pClientMemoryIndexData(1.0f)),
215*35238bceSAndroid Build Coastguard Worker 
216*35238bceSAndroid Build Coastguard Worker                      Case("vary_draw_function",
217*35238bceSAndroid Build Coastguard Worker                           "Choose between glDrawElements and glDrawArrays each iteration, with uniform probability",
218*35238bceSAndroid Build Coastguard Worker                           200, 500, Probs().pUseDrawArrays(0.5f)),
219*35238bceSAndroid Build Coastguard Worker 
220*35238bceSAndroid Build Coastguard Worker                      Case("few_big_calls", "Per iteration, do a few draw calls with a big number of triangles per call",
221*35238bceSAndroid Build Coastguard Worker                           2, 50000),
222*35238bceSAndroid Build Coastguard Worker 
223*35238bceSAndroid Build Coastguard Worker                      Case("many_small_calls",
224*35238bceSAndroid Build Coastguard Worker                           "Per iteration, do many draw calls with a small number of triangles per call", 2000, 50)};
225*35238bceSAndroid Build Coastguard Worker 
226*35238bceSAndroid Build Coastguard Worker         TestCaseGroup *const drawCallGroup = new TestCaseGroup(m_context, "draw_call", "Draw call stress tests");
227*35238bceSAndroid Build Coastguard Worker         addChild(drawCallGroup);
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker         for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); caseNdx++)
230*35238bceSAndroid Build Coastguard Worker         {
231*35238bceSAndroid Build Coastguard Worker             drawCallGroup->addChild(new gls::LongStressCase(
232*35238bceSAndroid Build Coastguard Worker                 m_context.getTestContext(), m_context.getRenderContext(), cases[caseNdx].name, cases[caseNdx].desc,
233*35238bceSAndroid Build Coastguard Worker                 1 * Mi /* tex memory */, 2 * Mi /* buf memory */, cases[caseNdx].drawCallsPerIteration,
234*35238bceSAndroid Build Coastguard Worker                 cases[caseNdx].numTrisPerDrawCall, contexts, cases[caseNdx].probs, GL_STATIC_DRAW, GL_STATIC_DRAW));
235*35238bceSAndroid Build Coastguard Worker         }
236*35238bceSAndroid Build Coastguard Worker     }
237*35238bceSAndroid Build Coastguard Worker 
238*35238bceSAndroid Build Coastguard Worker     // Shader cases.
239*35238bceSAndroid Build Coastguard Worker 
240*35238bceSAndroid Build Coastguard Worker     {
241*35238bceSAndroid Build Coastguard Worker         std::vector<gls::ProgramContext> contexts;
242*35238bceSAndroid Build Coastguard Worker         contexts.push_back(progLib.generateFragmentPointLightContext(512, 512));
243*35238bceSAndroid Build Coastguard Worker         contexts.push_back(progLib.generateVertexUniformLoopLightContext(512, 512));
244*35238bceSAndroid Build Coastguard Worker 
245*35238bceSAndroid Build Coastguard Worker         static const struct Case
246*35238bceSAndroid Build Coastguard Worker         {
247*35238bceSAndroid Build Coastguard Worker             const char *const name;
248*35238bceSAndroid Build Coastguard Worker             const char *const desc;
249*35238bceSAndroid Build Coastguard Worker             const Probs probs;
250*35238bceSAndroid Build Coastguard Worker             Case(const char *const name_, const char *const desc_, const Probs &probs_ = Probs())
251*35238bceSAndroid Build Coastguard Worker                 : name(name_)
252*35238bceSAndroid Build Coastguard Worker                 , desc(desc_)
253*35238bceSAndroid Build Coastguard Worker                 , probs(probs_)
254*35238bceSAndroid Build Coastguard Worker             {
255*35238bceSAndroid Build Coastguard Worker             }
256*35238bceSAndroid Build Coastguard Worker         } cases[] = {Case("several_programs",
257*35238bceSAndroid Build Coastguard Worker                           "Use several different programs, choosing between them uniformly on each iteration"),
258*35238bceSAndroid Build Coastguard Worker 
259*35238bceSAndroid Build Coastguard Worker                      Case("several_programs_always_rebuild",
260*35238bceSAndroid Build Coastguard Worker                           "Use several different programs, choosing between them uniformly on each iteration, and "
261*35238bceSAndroid Build Coastguard Worker                           "always rebuild the program",
262*35238bceSAndroid Build Coastguard Worker                           Probs().pRebuildProgram(1.0f))};
263*35238bceSAndroid Build Coastguard Worker 
264*35238bceSAndroid Build Coastguard Worker         TestCaseGroup *const shaderGroup = new TestCaseGroup(m_context, "program", "Shader program stress tests");
265*35238bceSAndroid Build Coastguard Worker         addChild(shaderGroup);
266*35238bceSAndroid Build Coastguard Worker 
267*35238bceSAndroid Build Coastguard Worker         for (int caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(cases); caseNdx++)
268*35238bceSAndroid Build Coastguard Worker         {
269*35238bceSAndroid Build Coastguard Worker             shaderGroup->addChild(new gls::LongStressCase(
270*35238bceSAndroid Build Coastguard Worker                 m_context.getTestContext(), m_context.getRenderContext(), cases[caseNdx].name, cases[caseNdx].desc,
271*35238bceSAndroid Build Coastguard Worker                 3 * Mi /* tex memory */, 1 * Mi /* buf memory */, 1 /* draw calls per iteration */,
272*35238bceSAndroid Build Coastguard Worker                 10000 /* tris per call */, contexts, cases[caseNdx].probs, GL_STATIC_DRAW, GL_STATIC_DRAW));
273*35238bceSAndroid Build Coastguard Worker         }
274*35238bceSAndroid Build Coastguard Worker     }
275*35238bceSAndroid Build Coastguard Worker 
276*35238bceSAndroid Build Coastguard Worker     // Mixed cases.
277*35238bceSAndroid Build Coastguard Worker 
278*35238bceSAndroid Build Coastguard Worker     {
279*35238bceSAndroid Build Coastguard Worker         static const struct MemCase
280*35238bceSAndroid Build Coastguard Worker         {
281*35238bceSAndroid Build Coastguard Worker             const char *const nameSuffix;
282*35238bceSAndroid Build Coastguard Worker             const char *const descSuffix;
283*35238bceSAndroid Build Coastguard Worker             const int texLimit;
284*35238bceSAndroid Build Coastguard Worker             const int bufLimit;
285*35238bceSAndroid Build Coastguard Worker             MemCase(const char *n, const char *d, int t, int b) : nameSuffix(n), descSuffix(d), texLimit(t), bufLimit(b)
286*35238bceSAndroid Build Coastguard Worker             {
287*35238bceSAndroid Build Coastguard Worker             }
288*35238bceSAndroid Build Coastguard Worker         } memoryLimitCases[] = {MemCase("_low_memory", "; use a low memory usage limit", 8 * Mi, 8 * Mi),
289*35238bceSAndroid Build Coastguard Worker                                 MemCase("_high_memory", "; use a high memory usage limit", 128 * Mi, 128 * Mi)};
290*35238bceSAndroid Build Coastguard Worker 
291*35238bceSAndroid Build Coastguard Worker         TestCaseGroup *const mixedGroup = new TestCaseGroup(m_context, "mixed", "Mixed stress tests");
292*35238bceSAndroid Build Coastguard Worker         addChild(mixedGroup);
293*35238bceSAndroid Build Coastguard Worker 
294*35238bceSAndroid Build Coastguard Worker         for (int memoryLimitNdx = 0; memoryLimitNdx < DE_LENGTH_OF_ARRAY(memoryLimitCases); memoryLimitNdx++)
295*35238bceSAndroid Build Coastguard Worker         {
296*35238bceSAndroid Build Coastguard Worker             mixedGroup->addChild(new gls::LongStressCase(
297*35238bceSAndroid Build Coastguard Worker                 m_context.getTestContext(), m_context.getRenderContext(),
298*35238bceSAndroid Build Coastguard Worker                 (string() + "buffer_texture_wasteful" + memoryLimitCases[memoryLimitNdx].nameSuffix).c_str(),
299*35238bceSAndroid Build Coastguard Worker                 (string() + "Use both buffers and textures wastefully" + memoryLimitCases[memoryLimitNdx].descSuffix)
300*35238bceSAndroid Build Coastguard Worker                     .c_str(),
301*35238bceSAndroid Build Coastguard Worker                 memoryLimitCases[memoryLimitNdx].texLimit, memoryLimitCases[memoryLimitNdx].bufLimit,
302*35238bceSAndroid Build Coastguard Worker                 1 /* draw calls per iteration */, 10000 /* tris per call */,
303*35238bceSAndroid Build Coastguard Worker                 std::vector<gls::ProgramContext>(1, progLib.generateBufferAndTextureContext(4, 512, 512)),
304*35238bceSAndroid Build Coastguard Worker                 Probs()
305*35238bceSAndroid Build Coastguard Worker                     .pReuploadTexture(0.3f)
306*35238bceSAndroid Build Coastguard Worker                     .pReuploadWithTexImage(0.5f)
307*35238bceSAndroid Build Coastguard Worker                     .pReuploadBuffer(0.3f)
308*35238bceSAndroid Build Coastguard Worker                     .pReuploadWithBufferData(0.5f)
309*35238bceSAndroid Build Coastguard Worker                     .pDeleteTexture(0.2f)
310*35238bceSAndroid Build Coastguard Worker                     .pDeleteBuffer(0.2f)
311*35238bceSAndroid Build Coastguard Worker                     .pWastefulTextureMemoryUsage(0.5f)
312*35238bceSAndroid Build Coastguard Worker                     .pWastefulBufferMemoryUsage(0.5f)
313*35238bceSAndroid Build Coastguard Worker                     .pRandomBufferUploadTarget(1.0f)
314*35238bceSAndroid Build Coastguard Worker                     .pRandomBufferUsage(1.0f),
315*35238bceSAndroid Build Coastguard Worker                 GL_STATIC_DRAW, GL_STATIC_DRAW));
316*35238bceSAndroid Build Coastguard Worker 
317*35238bceSAndroid Build Coastguard Worker             {
318*35238bceSAndroid Build Coastguard Worker                 std::vector<gls::ProgramContext> contexts;
319*35238bceSAndroid Build Coastguard Worker                 contexts.push_back(progLib.generateFragmentPointLightContext(512, 512));
320*35238bceSAndroid Build Coastguard Worker                 contexts.push_back(progLib.generateVertexUniformLoopLightContext(512, 512));
321*35238bceSAndroid Build Coastguard Worker                 mixedGroup->addChild(new gls::LongStressCase(
322*35238bceSAndroid Build Coastguard Worker                     m_context.getTestContext(), m_context.getRenderContext(),
323*35238bceSAndroid Build Coastguard Worker                     (string() + "random" + memoryLimitCases[memoryLimitNdx].nameSuffix).c_str(),
324*35238bceSAndroid Build Coastguard Worker                     (string() + "Highly random behavior" + memoryLimitCases[memoryLimitNdx].descSuffix).c_str(),
325*35238bceSAndroid Build Coastguard Worker                     memoryLimitCases[memoryLimitNdx].texLimit, memoryLimitCases[memoryLimitNdx].bufLimit,
326*35238bceSAndroid Build Coastguard Worker                     1 /* draw calls per iteration */, 10000 /* tris per call */, contexts,
327*35238bceSAndroid Build Coastguard Worker                     Probs()
328*35238bceSAndroid Build Coastguard Worker                         .pRebuildProgram(0.3f)
329*35238bceSAndroid Build Coastguard Worker                         .pReuploadTexture(0.3f)
330*35238bceSAndroid Build Coastguard Worker                         .pReuploadWithTexImage(0.3f)
331*35238bceSAndroid Build Coastguard Worker                         .pReuploadBuffer(0.3f)
332*35238bceSAndroid Build Coastguard Worker                         .pReuploadWithBufferData(0.3f)
333*35238bceSAndroid Build Coastguard Worker                         .pDeleteTexture(0.2f)
334*35238bceSAndroid Build Coastguard Worker                         .pDeleteBuffer(0.2f)
335*35238bceSAndroid Build Coastguard Worker                         .pWastefulTextureMemoryUsage(0.3f)
336*35238bceSAndroid Build Coastguard Worker                         .pWastefulBufferMemoryUsage(0.3f)
337*35238bceSAndroid Build Coastguard Worker                         .pClientMemoryAttributeData(0.2f)
338*35238bceSAndroid Build Coastguard Worker                         .pClientMemoryIndexData(0.2f)
339*35238bceSAndroid Build Coastguard Worker                         .pSeparateAttribBuffers(0.4f)
340*35238bceSAndroid Build Coastguard Worker                         .pUseDrawArrays(0.4f)
341*35238bceSAndroid Build Coastguard Worker                         .pRandomBufferUploadTarget(1.0f)
342*35238bceSAndroid Build Coastguard Worker                         .pRandomBufferUsage(1.0f),
343*35238bceSAndroid Build Coastguard Worker                     GL_STATIC_DRAW, GL_STATIC_DRAW));
344*35238bceSAndroid Build Coastguard Worker             }
345*35238bceSAndroid Build Coastguard Worker         }
346*35238bceSAndroid Build Coastguard Worker     }
347*35238bceSAndroid Build Coastguard Worker }
348*35238bceSAndroid Build Coastguard Worker 
349*35238bceSAndroid Build Coastguard Worker } // namespace Stress
350*35238bceSAndroid Build Coastguard Worker } // namespace gles2
351*35238bceSAndroid Build Coastguard Worker } // namespace deqp
352