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 Occlusion query stress tests
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es3sOcclusionQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "deString.h"
29*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "tcuVector.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuSurface.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "gluShaderProgram.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "deClock.h"
34*35238bceSAndroid Build Coastguard Worker
35*35238bceSAndroid Build Coastguard Worker #include "glw.h"
36*35238bceSAndroid Build Coastguard Worker
37*35238bceSAndroid Build Coastguard Worker #include <vector>
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker using std::vector;
40*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
41*35238bceSAndroid Build Coastguard Worker
42*35238bceSAndroid Build Coastguard Worker namespace deqp
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker namespace gles3
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker namespace Stress
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker
49*35238bceSAndroid Build Coastguard Worker static const tcu::Vec4 OCCLUDER_COLOR = tcu::Vec4(0.0f, 0.0f, 1.0f, 1.0f);
50*35238bceSAndroid Build Coastguard Worker static const tcu::Vec4 TARGET_COLOR = tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f);
51*35238bceSAndroid Build Coastguard Worker static const int NUM_CASE_ITERATIONS = 3;
52*35238bceSAndroid Build Coastguard Worker static const int NUM_GENERATED_VERTICES = 100;
53*35238bceSAndroid Build Coastguard Worker static const int WATCHDOG_INTERVAL = 50; // Touch watchdog every N iterations.
54*35238bceSAndroid Build Coastguard Worker
55*35238bceSAndroid Build Coastguard Worker class OcclusionQueryStressCase : public TestCase
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker public:
58*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase(Context &ctx, const char *name, const char *desc, int m_numOccluderDraws,
59*35238bceSAndroid Build Coastguard Worker int m_numOccludersPerDraw, int m_numTargetDraws, int m_numTargetsPerDraw, int m_numQueries,
60*35238bceSAndroid Build Coastguard Worker uint32_t m_queryMode);
61*35238bceSAndroid Build Coastguard Worker ~OcclusionQueryStressCase(void);
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker void init(void);
64*35238bceSAndroid Build Coastguard Worker void deinit(void);
65*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker private:
68*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase(const OcclusionQueryStressCase &);
69*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase &operator=(const OcclusionQueryStressCase &);
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker int m_numOccluderDraws;
72*35238bceSAndroid Build Coastguard Worker int m_numOccludersPerDraw;
73*35238bceSAndroid Build Coastguard Worker int m_numTargetDraws;
74*35238bceSAndroid Build Coastguard Worker int m_numTargetsPerDraw;
75*35238bceSAndroid Build Coastguard Worker int m_numQueries;
76*35238bceSAndroid Build Coastguard Worker uint32_t m_queryMode;
77*35238bceSAndroid Build Coastguard Worker
78*35238bceSAndroid Build Coastguard Worker glu::RenderContext &m_renderCtx;
79*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram *m_program;
80*35238bceSAndroid Build Coastguard Worker int m_iterNdx;
81*35238bceSAndroid Build Coastguard Worker de::Random m_rnd;
82*35238bceSAndroid Build Coastguard Worker };
83*35238bceSAndroid Build Coastguard Worker
OcclusionQueryStressCase(Context & ctx,const char * name,const char * desc,int numOccluderDraws,int numOccludersPerDraw,int numTargetDraws,int numTargetsPerDraw,int numQueries,uint32_t queryMode)84*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase::OcclusionQueryStressCase(Context &ctx, const char *name, const char *desc,
85*35238bceSAndroid Build Coastguard Worker int numOccluderDraws, int numOccludersPerDraw, int numTargetDraws,
86*35238bceSAndroid Build Coastguard Worker int numTargetsPerDraw, int numQueries, uint32_t queryMode)
87*35238bceSAndroid Build Coastguard Worker : TestCase(ctx, name, desc)
88*35238bceSAndroid Build Coastguard Worker , m_numOccluderDraws(numOccluderDraws)
89*35238bceSAndroid Build Coastguard Worker , m_numOccludersPerDraw(numOccludersPerDraw)
90*35238bceSAndroid Build Coastguard Worker , m_numTargetDraws(numTargetDraws)
91*35238bceSAndroid Build Coastguard Worker , m_numTargetsPerDraw(numTargetsPerDraw)
92*35238bceSAndroid Build Coastguard Worker , m_numQueries(numQueries)
93*35238bceSAndroid Build Coastguard Worker , m_queryMode(queryMode)
94*35238bceSAndroid Build Coastguard Worker , m_renderCtx(ctx.getRenderContext())
95*35238bceSAndroid Build Coastguard Worker , m_program(DE_NULL)
96*35238bceSAndroid Build Coastguard Worker , m_iterNdx(0)
97*35238bceSAndroid Build Coastguard Worker , m_rnd(deStringHash(name))
98*35238bceSAndroid Build Coastguard Worker {
99*35238bceSAndroid Build Coastguard Worker }
100*35238bceSAndroid Build Coastguard Worker
~OcclusionQueryStressCase(void)101*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase::~OcclusionQueryStressCase(void)
102*35238bceSAndroid Build Coastguard Worker {
103*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase::deinit();
104*35238bceSAndroid Build Coastguard Worker }
105*35238bceSAndroid Build Coastguard Worker
init(void)106*35238bceSAndroid Build Coastguard Worker void OcclusionQueryStressCase::init(void)
107*35238bceSAndroid Build Coastguard Worker {
108*35238bceSAndroid Build Coastguard Worker const char *vertShaderSource = "#version 300 es\n"
109*35238bceSAndroid Build Coastguard Worker "layout(location = 0) in mediump vec4 a_position;\n"
110*35238bceSAndroid Build Coastguard Worker "\n"
111*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
112*35238bceSAndroid Build Coastguard Worker "{\n"
113*35238bceSAndroid Build Coastguard Worker " gl_Position = a_position;\n"
114*35238bceSAndroid Build Coastguard Worker "}\n";
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker const char *fragShaderSource = "#version 300 es\n"
117*35238bceSAndroid Build Coastguard Worker "layout(location = 0) out mediump vec4 dEQP_FragColor;\n"
118*35238bceSAndroid Build Coastguard Worker "uniform mediump vec4 u_color;\n"
119*35238bceSAndroid Build Coastguard Worker "\n"
120*35238bceSAndroid Build Coastguard Worker "void main (void)\n"
121*35238bceSAndroid Build Coastguard Worker "{\n"
122*35238bceSAndroid Build Coastguard Worker " mediump float depth_gradient = gl_FragCoord.z;\n"
123*35238bceSAndroid Build Coastguard Worker " mediump float bias = 0.1;\n"
124*35238bceSAndroid Build Coastguard Worker " dEQP_FragColor = vec4(u_color.xyz * (depth_gradient + bias), 1.0);\n"
125*35238bceSAndroid Build Coastguard Worker "}\n";
126*35238bceSAndroid Build Coastguard Worker
127*35238bceSAndroid Build Coastguard Worker DE_ASSERT(!m_program);
128*35238bceSAndroid Build Coastguard Worker m_program = new glu::ShaderProgram(m_context.getRenderContext(),
129*35238bceSAndroid Build Coastguard Worker glu::makeVtxFragSources(vertShaderSource, fragShaderSource));
130*35238bceSAndroid Build Coastguard Worker
131*35238bceSAndroid Build Coastguard Worker if (!m_program->isOk())
132*35238bceSAndroid Build Coastguard Worker {
133*35238bceSAndroid Build Coastguard Worker m_testCtx.getLog() << *m_program;
134*35238bceSAndroid Build Coastguard Worker TCU_FAIL("Failed to compile shader program");
135*35238bceSAndroid Build Coastguard Worker }
136*35238bceSAndroid Build Coastguard Worker
137*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); // Initialize test result to pass.
138*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("Case initialization finished");
139*35238bceSAndroid Build Coastguard Worker }
140*35238bceSAndroid Build Coastguard Worker
deinit(void)141*35238bceSAndroid Build Coastguard Worker void OcclusionQueryStressCase::deinit(void)
142*35238bceSAndroid Build Coastguard Worker {
143*35238bceSAndroid Build Coastguard Worker delete m_program;
144*35238bceSAndroid Build Coastguard Worker m_program = DE_NULL;
145*35238bceSAndroid Build Coastguard Worker }
146*35238bceSAndroid Build Coastguard Worker
iterate(void)147*35238bceSAndroid Build Coastguard Worker OcclusionQueryStressCase::IterateResult OcclusionQueryStressCase::iterate(void)
148*35238bceSAndroid Build Coastguard Worker {
149*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
150*35238bceSAndroid Build Coastguard Worker uint32_t colorUnif = glGetUniformLocation(m_program->getProgram(), "u_color");
151*35238bceSAndroid Build Coastguard Worker
152*35238bceSAndroid Build Coastguard Worker std::vector<float> vertices;
153*35238bceSAndroid Build Coastguard Worker std::vector<float> occluderVertices;
154*35238bceSAndroid Build Coastguard Worker std::vector<float> targetVertices;
155*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> queryIds(m_numQueries, 0);
156*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> queryResultReady(m_numQueries, 0);
157*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> queryResult(m_numQueries, 0);
158*35238bceSAndroid Build Coastguard Worker
159*35238bceSAndroid Build Coastguard Worker std::string sectionName("Case iteration " + de::toString(m_iterNdx + 1) + "/" + de::toString(NUM_CASE_ITERATIONS));
160*35238bceSAndroid Build Coastguard Worker tcu::ScopedLogSection section(log, sectionName.c_str(), sectionName.c_str());
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker log << tcu::TestLog::Message << "Parameters:\n"
163*35238bceSAndroid Build Coastguard Worker << "- Number of occlusion queries: " << m_numQueries << ".\n"
164*35238bceSAndroid Build Coastguard Worker << "- Number of occluder draws per query: " << m_numOccluderDraws
165*35238bceSAndroid Build Coastguard Worker << ", primitives per draw: " << m_numOccludersPerDraw << ".\n"
166*35238bceSAndroid Build Coastguard Worker << "- Number of target draws per query: " << m_numTargetDraws
167*35238bceSAndroid Build Coastguard Worker << ", primitives per draw: " << m_numTargetsPerDraw << ".\n"
168*35238bceSAndroid Build Coastguard Worker << tcu::TestLog::EndMessage;
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker int numOccluderIndicesPerDraw = 3 * m_numOccludersPerDraw;
171*35238bceSAndroid Build Coastguard Worker int numTargetIndicesPerDraw = 3 * m_numTargetsPerDraw;
172*35238bceSAndroid Build Coastguard Worker
173*35238bceSAndroid Build Coastguard Worker // Generate vertex data
174*35238bceSAndroid Build Coastguard Worker
175*35238bceSAndroid Build Coastguard Worker vertices.resize(4 * NUM_GENERATED_VERTICES);
176*35238bceSAndroid Build Coastguard Worker
177*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < NUM_GENERATED_VERTICES; i++)
178*35238bceSAndroid Build Coastguard Worker {
179*35238bceSAndroid Build Coastguard Worker vertices[4 * i] = m_rnd.getFloat(-1.0f, 1.0f);
180*35238bceSAndroid Build Coastguard Worker vertices[4 * i + 1] = m_rnd.getFloat(-1.0f, 1.0f);
181*35238bceSAndroid Build Coastguard Worker vertices[4 * i + 2] = m_rnd.getFloat(0.0f, 1.0f);
182*35238bceSAndroid Build Coastguard Worker vertices[4 * i + 3] = 1.0f;
183*35238bceSAndroid Build Coastguard Worker }
184*35238bceSAndroid Build Coastguard Worker
185*35238bceSAndroid Build Coastguard Worker // Generate primitives
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker occluderVertices.resize(4 * numOccluderIndicesPerDraw * m_numOccluderDraws);
188*35238bceSAndroid Build Coastguard Worker
189*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numOccluderIndicesPerDraw * m_numOccluderDraws; i++)
190*35238bceSAndroid Build Coastguard Worker {
191*35238bceSAndroid Build Coastguard Worker int vtxNdx = m_rnd.getInt(0, NUM_GENERATED_VERTICES - 1);
192*35238bceSAndroid Build Coastguard Worker occluderVertices[4 * i] = vertices[4 * vtxNdx];
193*35238bceSAndroid Build Coastguard Worker occluderVertices[4 * i + 1] = vertices[4 * vtxNdx + 1];
194*35238bceSAndroid Build Coastguard Worker occluderVertices[4 * i + 2] = vertices[4 * vtxNdx + 2];
195*35238bceSAndroid Build Coastguard Worker occluderVertices[4 * i + 3] = vertices[4 * vtxNdx + 3];
196*35238bceSAndroid Build Coastguard Worker }
197*35238bceSAndroid Build Coastguard Worker
198*35238bceSAndroid Build Coastguard Worker targetVertices.resize(4 * numTargetIndicesPerDraw * m_numTargetDraws);
199*35238bceSAndroid Build Coastguard Worker
200*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numTargetIndicesPerDraw * m_numTargetDraws; i++)
201*35238bceSAndroid Build Coastguard Worker {
202*35238bceSAndroid Build Coastguard Worker int vtxNdx = m_rnd.getInt(0, NUM_GENERATED_VERTICES - 1);
203*35238bceSAndroid Build Coastguard Worker targetVertices[4 * i] = vertices[4 * vtxNdx];
204*35238bceSAndroid Build Coastguard Worker targetVertices[4 * i + 1] = vertices[4 * vtxNdx + 1];
205*35238bceSAndroid Build Coastguard Worker targetVertices[4 * i + 2] = vertices[4 * vtxNdx + 2];
206*35238bceSAndroid Build Coastguard Worker targetVertices[4 * i + 3] = vertices[4 * vtxNdx + 3];
207*35238bceSAndroid Build Coastguard Worker }
208*35238bceSAndroid Build Coastguard Worker
209*35238bceSAndroid Build Coastguard Worker TCU_CHECK(m_program);
210*35238bceSAndroid Build Coastguard Worker
211*35238bceSAndroid Build Coastguard Worker glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
212*35238bceSAndroid Build Coastguard Worker glClearDepthf(1.0f);
213*35238bceSAndroid Build Coastguard Worker glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
214*35238bceSAndroid Build Coastguard Worker glEnable(GL_DEPTH_TEST);
215*35238bceSAndroid Build Coastguard Worker glUseProgram(m_program->getProgram());
216*35238bceSAndroid Build Coastguard Worker glEnableVertexAttribArray(0);
217*35238bceSAndroid Build Coastguard Worker
218*35238bceSAndroid Build Coastguard Worker uint64_t time = deGetMicroseconds();
219*35238bceSAndroid Build Coastguard Worker
220*35238bceSAndroid Build Coastguard Worker for (int queryIter = 0; queryIter < m_numQueries; queryIter++)
221*35238bceSAndroid Build Coastguard Worker {
222*35238bceSAndroid Build Coastguard Worker // Draw occluders
223*35238bceSAndroid Build Coastguard Worker
224*35238bceSAndroid Build Coastguard Worker glUniform4f(colorUnif, OCCLUDER_COLOR.x(), OCCLUDER_COLOR.y(), OCCLUDER_COLOR.z(), OCCLUDER_COLOR.w());
225*35238bceSAndroid Build Coastguard Worker
226*35238bceSAndroid Build Coastguard Worker for (int drawIter = 0; drawIter < m_numOccluderDraws; drawIter++)
227*35238bceSAndroid Build Coastguard Worker {
228*35238bceSAndroid Build Coastguard Worker glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, &occluderVertices[drawIter * numOccluderIndicesPerDraw]);
229*35238bceSAndroid Build Coastguard Worker glDrawArrays(GL_TRIANGLES, 0, numOccluderIndicesPerDraw);
230*35238bceSAndroid Build Coastguard Worker }
231*35238bceSAndroid Build Coastguard Worker
232*35238bceSAndroid Build Coastguard Worker // Begin occlusion query
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker glGenQueries(1, &queryIds[queryIter]);
235*35238bceSAndroid Build Coastguard Worker glBeginQuery(m_queryMode, queryIds[queryIter]);
236*35238bceSAndroid Build Coastguard Worker
237*35238bceSAndroid Build Coastguard Worker // Draw targets
238*35238bceSAndroid Build Coastguard Worker
239*35238bceSAndroid Build Coastguard Worker glUniform4f(colorUnif, TARGET_COLOR.x(), TARGET_COLOR.y(), TARGET_COLOR.z(), TARGET_COLOR.w());
240*35238bceSAndroid Build Coastguard Worker
241*35238bceSAndroid Build Coastguard Worker for (int drawIter = 0; drawIter < m_numTargetDraws; drawIter++)
242*35238bceSAndroid Build Coastguard Worker {
243*35238bceSAndroid Build Coastguard Worker glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, &targetVertices[drawIter * numTargetIndicesPerDraw]);
244*35238bceSAndroid Build Coastguard Worker glDrawArrays(GL_TRIANGLES, 0, numTargetIndicesPerDraw);
245*35238bceSAndroid Build Coastguard Worker }
246*35238bceSAndroid Build Coastguard Worker
247*35238bceSAndroid Build Coastguard Worker // End occlusion query
248*35238bceSAndroid Build Coastguard Worker
249*35238bceSAndroid Build Coastguard Worker glEndQuery(m_queryMode);
250*35238bceSAndroid Build Coastguard Worker
251*35238bceSAndroid Build Coastguard Worker if ((queryIter % WATCHDOG_INTERVAL) == 0 && m_testCtx.getWatchDog())
252*35238bceSAndroid Build Coastguard Worker qpWatchDog_touch(m_testCtx.getWatchDog());
253*35238bceSAndroid Build Coastguard Worker }
254*35238bceSAndroid Build Coastguard Worker
255*35238bceSAndroid Build Coastguard Worker glFinish();
256*35238bceSAndroid Build Coastguard Worker glDisable(GL_DEPTH_TEST);
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker uint64_t dTime = deGetMicroseconds() - time;
259*35238bceSAndroid Build Coastguard Worker log << tcu::TestLog::Message << "Total duration: " << dTime / 1000 << " ms" << tcu::TestLog::EndMessage;
260*35238bceSAndroid Build Coastguard Worker
261*35238bceSAndroid Build Coastguard Worker // Get results
262*35238bceSAndroid Build Coastguard Worker
263*35238bceSAndroid Build Coastguard Worker for (int queryIter = 0; queryIter < m_numQueries; queryIter++)
264*35238bceSAndroid Build Coastguard Worker {
265*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(queryIds[queryIter], GL_QUERY_RESULT_AVAILABLE, &queryResultReady[queryIter]);
266*35238bceSAndroid Build Coastguard Worker
267*35238bceSAndroid Build Coastguard Worker if (queryResultReady[queryIter] == GL_TRUE)
268*35238bceSAndroid Build Coastguard Worker {
269*35238bceSAndroid Build Coastguard Worker glGetQueryObjectuiv(queryIds[queryIter], GL_QUERY_RESULT, &queryResult[queryIter]);
270*35238bceSAndroid Build Coastguard Worker }
271*35238bceSAndroid Build Coastguard Worker else
272*35238bceSAndroid Build Coastguard Worker TCU_FAIL("Occlusion query failed to return a result after glFinish()");
273*35238bceSAndroid Build Coastguard Worker
274*35238bceSAndroid Build Coastguard Worker if ((queryIter % WATCHDOG_INTERVAL) == 0 && m_testCtx.getWatchDog())
275*35238bceSAndroid Build Coastguard Worker qpWatchDog_touch(m_testCtx.getWatchDog());
276*35238bceSAndroid Build Coastguard Worker }
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker glDeleteQueries(m_numQueries, &queryIds[0]);
279*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("Occlusion queries finished");
280*35238bceSAndroid Build Coastguard Worker
281*35238bceSAndroid Build Coastguard Worker log << tcu::TestLog::Message << "Case passed!" << tcu::TestLog::EndMessage;
282*35238bceSAndroid Build Coastguard Worker
283*35238bceSAndroid Build Coastguard Worker return (++m_iterNdx < NUM_CASE_ITERATIONS) ? CONTINUE : STOP;
284*35238bceSAndroid Build Coastguard Worker }
285*35238bceSAndroid Build Coastguard Worker
OcclusionQueryTests(Context & testCtx)286*35238bceSAndroid Build Coastguard Worker OcclusionQueryTests::OcclusionQueryTests(Context &testCtx)
287*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(testCtx, "occlusion_query", "Occlusion query stress tests")
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker }
290*35238bceSAndroid Build Coastguard Worker
~OcclusionQueryTests(void)291*35238bceSAndroid Build Coastguard Worker OcclusionQueryTests::~OcclusionQueryTests(void)
292*35238bceSAndroid Build Coastguard Worker {
293*35238bceSAndroid Build Coastguard Worker }
294*35238bceSAndroid Build Coastguard Worker
init(void)295*35238bceSAndroid Build Coastguard Worker void OcclusionQueryTests::init(void)
296*35238bceSAndroid Build Coastguard Worker {
297*35238bceSAndroid Build Coastguard Worker addChild(new OcclusionQueryStressCase(m_context, "10_queries_2500_triangles_per_query",
298*35238bceSAndroid Build Coastguard Worker "10_queries_2500_triangles_per_query", 49, 50, 1, 50, 10,
299*35238bceSAndroid Build Coastguard Worker GL_ANY_SAMPLES_PASSED));
300*35238bceSAndroid Build Coastguard Worker addChild(new OcclusionQueryStressCase(m_context, "100_queries_2500_triangles_per_query",
301*35238bceSAndroid Build Coastguard Worker "100_queries_2500_triangles_per_query", 49, 50, 1, 50, 100,
302*35238bceSAndroid Build Coastguard Worker GL_ANY_SAMPLES_PASSED));
303*35238bceSAndroid Build Coastguard Worker addChild(new OcclusionQueryStressCase(m_context, "1000_queries_500_triangles_per_query",
304*35238bceSAndroid Build Coastguard Worker "1000_queries_500_triangles_per_query", 49, 10, 1, 10, 1000,
305*35238bceSAndroid Build Coastguard Worker GL_ANY_SAMPLES_PASSED));
306*35238bceSAndroid Build Coastguard Worker addChild(new OcclusionQueryStressCase(m_context, "10000_queries_20_triangles_per_query",
307*35238bceSAndroid Build Coastguard Worker "10000_queries_20_triangles_per_query", 1, 19, 1, 1, 10000,
308*35238bceSAndroid Build Coastguard Worker GL_ANY_SAMPLES_PASSED));
309*35238bceSAndroid Build Coastguard Worker }
310*35238bceSAndroid Build Coastguard Worker
311*35238bceSAndroid Build Coastguard Worker } // namespace Stress
312*35238bceSAndroid Build Coastguard Worker } // namespace gles3
313*35238bceSAndroid Build Coastguard Worker } // namespace deqp
314