1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.1 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 Texture buffer tests
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es31fTextureBufferTests.hpp"
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Worker #include "glsTextureBufferCase.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
28*35238bceSAndroid Build Coastguard Worker
29*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
30*35238bceSAndroid Build Coastguard Worker
31*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "gluContextInfo.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "gluCallLogWrapper.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "gluStrUtil.hpp"
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
37*35238bceSAndroid Build Coastguard Worker
38*35238bceSAndroid Build Coastguard Worker #include "deStringUtil.hpp"
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker #include <string>
41*35238bceSAndroid Build Coastguard Worker
42*35238bceSAndroid Build Coastguard Worker using std::string;
43*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls::TextureBufferCaseUtil;
44*35238bceSAndroid Build Coastguard Worker using deqp::gls::TextureBufferCase;
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker namespace deqp
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker namespace gles31
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker namespace Functional
51*35238bceSAndroid Build Coastguard Worker {
52*35238bceSAndroid Build Coastguard Worker namespace
53*35238bceSAndroid Build Coastguard Worker {
54*35238bceSAndroid Build Coastguard Worker
toTestName(RenderBits renderBits)55*35238bceSAndroid Build Coastguard Worker string toTestName(RenderBits renderBits)
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker struct
58*35238bceSAndroid Build Coastguard Worker {
59*35238bceSAndroid Build Coastguard Worker RenderBits bit;
60*35238bceSAndroid Build Coastguard Worker const char *str;
61*35238bceSAndroid Build Coastguard Worker } bitInfos[] = {{RENDERBITS_AS_VERTEX_ARRAY, "as_vertex_array"},
62*35238bceSAndroid Build Coastguard Worker {RENDERBITS_AS_INDEX_ARRAY, "as_index_array"},
63*35238bceSAndroid Build Coastguard Worker {RENDERBITS_AS_VERTEX_TEXTURE, "as_vertex_texture"},
64*35238bceSAndroid Build Coastguard Worker {RENDERBITS_AS_FRAGMENT_TEXTURE, "as_fragment_texture"}};
65*35238bceSAndroid Build Coastguard Worker
66*35238bceSAndroid Build Coastguard Worker std::ostringstream stream;
67*35238bceSAndroid Build Coastguard Worker bool first = true;
68*35238bceSAndroid Build Coastguard Worker
69*35238bceSAndroid Build Coastguard Worker DE_ASSERT(renderBits != 0);
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker for (int infoNdx = 0; infoNdx < DE_LENGTH_OF_ARRAY(bitInfos); infoNdx++)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker if (renderBits & bitInfos[infoNdx].bit)
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker stream << (first ? "" : "_") << bitInfos[infoNdx].str;
76*35238bceSAndroid Build Coastguard Worker first = false;
77*35238bceSAndroid Build Coastguard Worker }
78*35238bceSAndroid Build Coastguard Worker }
79*35238bceSAndroid Build Coastguard Worker
80*35238bceSAndroid Build Coastguard Worker return stream.str();
81*35238bceSAndroid Build Coastguard Worker }
82*35238bceSAndroid Build Coastguard Worker
toTestName(ModifyBits modifyBits)83*35238bceSAndroid Build Coastguard Worker string toTestName(ModifyBits modifyBits)
84*35238bceSAndroid Build Coastguard Worker {
85*35238bceSAndroid Build Coastguard Worker struct
86*35238bceSAndroid Build Coastguard Worker {
87*35238bceSAndroid Build Coastguard Worker ModifyBits bit;
88*35238bceSAndroid Build Coastguard Worker const char *str;
89*35238bceSAndroid Build Coastguard Worker } bitInfos[] = {{MODIFYBITS_BUFFERDATA, "bufferdata"},
90*35238bceSAndroid Build Coastguard Worker {MODIFYBITS_BUFFERSUBDATA, "buffersubdata"},
91*35238bceSAndroid Build Coastguard Worker {MODIFYBITS_MAPBUFFER_WRITE, "mapbuffer_write"},
92*35238bceSAndroid Build Coastguard Worker {MODIFYBITS_MAPBUFFER_READWRITE, "mapbuffer_readwrite"}};
93*35238bceSAndroid Build Coastguard Worker
94*35238bceSAndroid Build Coastguard Worker std::ostringstream stream;
95*35238bceSAndroid Build Coastguard Worker bool first = true;
96*35238bceSAndroid Build Coastguard Worker
97*35238bceSAndroid Build Coastguard Worker DE_ASSERT(modifyBits != 0);
98*35238bceSAndroid Build Coastguard Worker
99*35238bceSAndroid Build Coastguard Worker for (int infoNdx = 0; infoNdx < DE_LENGTH_OF_ARRAY(bitInfos); infoNdx++)
100*35238bceSAndroid Build Coastguard Worker {
101*35238bceSAndroid Build Coastguard Worker if (modifyBits & bitInfos[infoNdx].bit)
102*35238bceSAndroid Build Coastguard Worker {
103*35238bceSAndroid Build Coastguard Worker stream << (first ? "" : "_") << bitInfos[infoNdx].str;
104*35238bceSAndroid Build Coastguard Worker first = false;
105*35238bceSAndroid Build Coastguard Worker }
106*35238bceSAndroid Build Coastguard Worker }
107*35238bceSAndroid Build Coastguard Worker
108*35238bceSAndroid Build Coastguard Worker return stream.str();
109*35238bceSAndroid Build Coastguard Worker }
110*35238bceSAndroid Build Coastguard Worker
operator |(RenderBits a,RenderBits b)111*35238bceSAndroid Build Coastguard Worker RenderBits operator|(RenderBits a, RenderBits b)
112*35238bceSAndroid Build Coastguard Worker {
113*35238bceSAndroid Build Coastguard Worker return (RenderBits)(uint32_t(a) | uint32_t(b));
114*35238bceSAndroid Build Coastguard Worker }
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker } // namespace
117*35238bceSAndroid Build Coastguard Worker
118*35238bceSAndroid Build Coastguard Worker // Queries
119*35238bceSAndroid Build Coastguard Worker
120*35238bceSAndroid Build Coastguard Worker namespace
121*35238bceSAndroid Build Coastguard Worker {
122*35238bceSAndroid Build Coastguard Worker
checkSupport(Context & ctx)123*35238bceSAndroid Build Coastguard Worker static void checkSupport(Context &ctx)
124*35238bceSAndroid Build Coastguard Worker {
125*35238bceSAndroid Build Coastguard Worker auto ctxType = ctx.getRenderContext().getType();
126*35238bceSAndroid Build Coastguard Worker if (!glu::contextSupports(ctxType, glu::ApiType::es(3, 2)) &&
127*35238bceSAndroid Build Coastguard Worker !glu::contextSupports(ctxType, glu::ApiType::core(4, 5)) &&
128*35238bceSAndroid Build Coastguard Worker !ctx.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer"))
129*35238bceSAndroid Build Coastguard Worker TCU_THROW(NotSupportedError, "GL_EXT_texture_buffer is not supported");
130*35238bceSAndroid Build Coastguard Worker }
131*35238bceSAndroid Build Coastguard Worker
132*35238bceSAndroid Build Coastguard Worker using namespace gls::StateQueryUtil;
133*35238bceSAndroid Build Coastguard Worker
134*35238bceSAndroid Build Coastguard Worker class LimitQueryCase : public TestCase
135*35238bceSAndroid Build Coastguard Worker {
136*35238bceSAndroid Build Coastguard Worker public:
137*35238bceSAndroid Build Coastguard Worker LimitQueryCase(Context &ctx, const char *name, const char *desc, glw::GLenum target, int minLimit, QueryType type);
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker private:
140*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
141*35238bceSAndroid Build Coastguard Worker
142*35238bceSAndroid Build Coastguard Worker const glw::GLenum m_target;
143*35238bceSAndroid Build Coastguard Worker const int m_minValue;
144*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
145*35238bceSAndroid Build Coastguard Worker };
146*35238bceSAndroid Build Coastguard Worker
LimitQueryCase(Context & context,const char * name,const char * desc,glw::GLenum target,int minLimit,QueryType type)147*35238bceSAndroid Build Coastguard Worker LimitQueryCase::LimitQueryCase(Context &context, const char *name, const char *desc, glw::GLenum target, int minLimit,
148*35238bceSAndroid Build Coastguard Worker QueryType type)
149*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
150*35238bceSAndroid Build Coastguard Worker , m_target(target)
151*35238bceSAndroid Build Coastguard Worker , m_minValue(minLimit)
152*35238bceSAndroid Build Coastguard Worker , m_type(type)
153*35238bceSAndroid Build Coastguard Worker {
154*35238bceSAndroid Build Coastguard Worker }
155*35238bceSAndroid Build Coastguard Worker
iterate(void)156*35238bceSAndroid Build Coastguard Worker LimitQueryCase::IterateResult LimitQueryCase::iterate(void)
157*35238bceSAndroid Build Coastguard Worker {
158*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
159*35238bceSAndroid Build Coastguard Worker
160*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
161*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
164*35238bceSAndroid Build Coastguard Worker verifyStateIntegerMin(result, gl, m_target, m_minValue, m_type);
165*35238bceSAndroid Build Coastguard Worker
166*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
167*35238bceSAndroid Build Coastguard Worker return STOP;
168*35238bceSAndroid Build Coastguard Worker }
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker class AlignmentQueryCase : public TestCase
171*35238bceSAndroid Build Coastguard Worker {
172*35238bceSAndroid Build Coastguard Worker public:
173*35238bceSAndroid Build Coastguard Worker AlignmentQueryCase(Context &ctx, const char *name, const char *desc, glw::GLenum target, int maxAlign,
174*35238bceSAndroid Build Coastguard Worker QueryType type);
175*35238bceSAndroid Build Coastguard Worker
176*35238bceSAndroid Build Coastguard Worker private:
177*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
178*35238bceSAndroid Build Coastguard Worker
179*35238bceSAndroid Build Coastguard Worker const glw::GLenum m_target;
180*35238bceSAndroid Build Coastguard Worker const int m_maxValue;
181*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
182*35238bceSAndroid Build Coastguard Worker };
183*35238bceSAndroid Build Coastguard Worker
AlignmentQueryCase(Context & context,const char * name,const char * desc,glw::GLenum target,int maxAlign,QueryType type)184*35238bceSAndroid Build Coastguard Worker AlignmentQueryCase::AlignmentQueryCase(Context &context, const char *name, const char *desc, glw::GLenum target,
185*35238bceSAndroid Build Coastguard Worker int maxAlign, QueryType type)
186*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
187*35238bceSAndroid Build Coastguard Worker , m_target(target)
188*35238bceSAndroid Build Coastguard Worker , m_maxValue(maxAlign)
189*35238bceSAndroid Build Coastguard Worker , m_type(type)
190*35238bceSAndroid Build Coastguard Worker {
191*35238bceSAndroid Build Coastguard Worker }
192*35238bceSAndroid Build Coastguard Worker
iterate(void)193*35238bceSAndroid Build Coastguard Worker AlignmentQueryCase::IterateResult AlignmentQueryCase::iterate(void)
194*35238bceSAndroid Build Coastguard Worker {
195*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
196*35238bceSAndroid Build Coastguard Worker
197*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
198*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
199*35238bceSAndroid Build Coastguard Worker
200*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
201*35238bceSAndroid Build Coastguard Worker verifyStateIntegerMax(result, gl, m_target, m_maxValue, m_type);
202*35238bceSAndroid Build Coastguard Worker
203*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
204*35238bceSAndroid Build Coastguard Worker return STOP;
205*35238bceSAndroid Build Coastguard Worker }
206*35238bceSAndroid Build Coastguard Worker
207*35238bceSAndroid Build Coastguard Worker class TextureBufferBindingQueryCase : public TestCase
208*35238bceSAndroid Build Coastguard Worker {
209*35238bceSAndroid Build Coastguard Worker public:
210*35238bceSAndroid Build Coastguard Worker TextureBufferBindingQueryCase(Context &ctx, const char *name, const char *desc, QueryType type);
211*35238bceSAndroid Build Coastguard Worker
212*35238bceSAndroid Build Coastguard Worker private:
213*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
214*35238bceSAndroid Build Coastguard Worker
215*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
216*35238bceSAndroid Build Coastguard Worker };
217*35238bceSAndroid Build Coastguard Worker
TextureBufferBindingQueryCase(Context & context,const char * name,const char * desc,QueryType type)218*35238bceSAndroid Build Coastguard Worker TextureBufferBindingQueryCase::TextureBufferBindingQueryCase(Context &context, const char *name, const char *desc,
219*35238bceSAndroid Build Coastguard Worker QueryType type)
220*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
221*35238bceSAndroid Build Coastguard Worker , m_type(type)
222*35238bceSAndroid Build Coastguard Worker {
223*35238bceSAndroid Build Coastguard Worker }
224*35238bceSAndroid Build Coastguard Worker
iterate(void)225*35238bceSAndroid Build Coastguard Worker TextureBufferBindingQueryCase::IterateResult TextureBufferBindingQueryCase::iterate(void)
226*35238bceSAndroid Build Coastguard Worker {
227*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
228*35238bceSAndroid Build Coastguard Worker
229*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
230*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
231*35238bceSAndroid Build Coastguard Worker
232*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker // initial
235*35238bceSAndroid Build Coastguard Worker {
236*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "initial", "Initial value");
237*35238bceSAndroid Build Coastguard Worker
238*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BUFFER_BINDING, 0, m_type);
239*35238bceSAndroid Build Coastguard Worker }
240*35238bceSAndroid Build Coastguard Worker
241*35238bceSAndroid Build Coastguard Worker // bind
242*35238bceSAndroid Build Coastguard Worker {
243*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After bind");
244*35238bceSAndroid Build Coastguard Worker
245*35238bceSAndroid Build Coastguard Worker glw::GLuint buffer;
246*35238bceSAndroid Build Coastguard Worker
247*35238bceSAndroid Build Coastguard Worker gl.glGenBuffers(1, &buffer);
248*35238bceSAndroid Build Coastguard Worker gl.glBindBuffer(GL_TEXTURE_BUFFER, buffer);
249*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind buffer");
250*35238bceSAndroid Build Coastguard Worker
251*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BUFFER_BINDING, buffer, m_type);
252*35238bceSAndroid Build Coastguard Worker
253*35238bceSAndroid Build Coastguard Worker gl.glDeleteBuffers(1, &buffer);
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker
256*35238bceSAndroid Build Coastguard Worker // after delete
257*35238bceSAndroid Build Coastguard Worker {
258*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After delete");
259*35238bceSAndroid Build Coastguard Worker
260*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BUFFER_BINDING, 0, m_type);
261*35238bceSAndroid Build Coastguard Worker }
262*35238bceSAndroid Build Coastguard Worker
263*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
264*35238bceSAndroid Build Coastguard Worker return STOP;
265*35238bceSAndroid Build Coastguard Worker }
266*35238bceSAndroid Build Coastguard Worker
267*35238bceSAndroid Build Coastguard Worker class TextureBindingBufferQueryCase : public TestCase
268*35238bceSAndroid Build Coastguard Worker {
269*35238bceSAndroid Build Coastguard Worker public:
270*35238bceSAndroid Build Coastguard Worker TextureBindingBufferQueryCase(Context &ctx, const char *name, const char *desc, QueryType type);
271*35238bceSAndroid Build Coastguard Worker
272*35238bceSAndroid Build Coastguard Worker private:
273*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
274*35238bceSAndroid Build Coastguard Worker
275*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
276*35238bceSAndroid Build Coastguard Worker };
277*35238bceSAndroid Build Coastguard Worker
TextureBindingBufferQueryCase(Context & context,const char * name,const char * desc,QueryType type)278*35238bceSAndroid Build Coastguard Worker TextureBindingBufferQueryCase::TextureBindingBufferQueryCase(Context &context, const char *name, const char *desc,
279*35238bceSAndroid Build Coastguard Worker QueryType type)
280*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
281*35238bceSAndroid Build Coastguard Worker , m_type(type)
282*35238bceSAndroid Build Coastguard Worker {
283*35238bceSAndroid Build Coastguard Worker }
284*35238bceSAndroid Build Coastguard Worker
iterate(void)285*35238bceSAndroid Build Coastguard Worker TextureBindingBufferQueryCase::IterateResult TextureBindingBufferQueryCase::iterate(void)
286*35238bceSAndroid Build Coastguard Worker {
287*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
288*35238bceSAndroid Build Coastguard Worker
289*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
290*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
291*35238bceSAndroid Build Coastguard Worker
292*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Worker // initial
295*35238bceSAndroid Build Coastguard Worker {
296*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "initial", "Initial value");
297*35238bceSAndroid Build Coastguard Worker
298*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BINDING_BUFFER, 0, m_type);
299*35238bceSAndroid Build Coastguard Worker }
300*35238bceSAndroid Build Coastguard Worker
301*35238bceSAndroid Build Coastguard Worker // bind
302*35238bceSAndroid Build Coastguard Worker {
303*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After bind");
304*35238bceSAndroid Build Coastguard Worker
305*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
306*35238bceSAndroid Build Coastguard Worker
307*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
308*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_BUFFER, texture);
309*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind texture");
310*35238bceSAndroid Build Coastguard Worker
311*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BINDING_BUFFER, texture, m_type);
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
314*35238bceSAndroid Build Coastguard Worker }
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker // after delete
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "bind", "After delete");
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Worker verifyStateInteger(result, gl, GL_TEXTURE_BINDING_BUFFER, 0, m_type);
321*35238bceSAndroid Build Coastguard Worker }
322*35238bceSAndroid Build Coastguard Worker
323*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
324*35238bceSAndroid Build Coastguard Worker return STOP;
325*35238bceSAndroid Build Coastguard Worker }
326*35238bceSAndroid Build Coastguard Worker
327*35238bceSAndroid Build Coastguard Worker class TextureBufferDataStoreQueryCase : public TestCase
328*35238bceSAndroid Build Coastguard Worker {
329*35238bceSAndroid Build Coastguard Worker public:
330*35238bceSAndroid Build Coastguard Worker TextureBufferDataStoreQueryCase(Context &ctx, const char *name, const char *desc, QueryType type);
331*35238bceSAndroid Build Coastguard Worker
332*35238bceSAndroid Build Coastguard Worker private:
333*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
334*35238bceSAndroid Build Coastguard Worker
335*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
336*35238bceSAndroid Build Coastguard Worker };
337*35238bceSAndroid Build Coastguard Worker
TextureBufferDataStoreQueryCase(Context & context,const char * name,const char * desc,QueryType type)338*35238bceSAndroid Build Coastguard Worker TextureBufferDataStoreQueryCase::TextureBufferDataStoreQueryCase(Context &context, const char *name, const char *desc,
339*35238bceSAndroid Build Coastguard Worker QueryType type)
340*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
341*35238bceSAndroid Build Coastguard Worker , m_type(type)
342*35238bceSAndroid Build Coastguard Worker {
343*35238bceSAndroid Build Coastguard Worker }
344*35238bceSAndroid Build Coastguard Worker
iterate(void)345*35238bceSAndroid Build Coastguard Worker TextureBufferDataStoreQueryCase::IterateResult TextureBufferDataStoreQueryCase::iterate(void)
346*35238bceSAndroid Build Coastguard Worker {
347*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
348*35238bceSAndroid Build Coastguard Worker
349*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
350*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
351*35238bceSAndroid Build Coastguard Worker
352*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
353*35238bceSAndroid Build Coastguard Worker
354*35238bceSAndroid Build Coastguard Worker // non-buffer
355*35238bceSAndroid Build Coastguard Worker {
356*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "NonBuffer", "Non-buffer");
357*35238bceSAndroid Build Coastguard Worker
358*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
359*35238bceSAndroid Build Coastguard Worker
360*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
361*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_2D, texture);
362*35238bceSAndroid Build Coastguard Worker gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
363*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "gen texture");
364*35238bceSAndroid Build Coastguard Worker
365*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_2D, 0, GL_TEXTURE_BUFFER_DATA_STORE_BINDING, 0, m_type);
366*35238bceSAndroid Build Coastguard Worker
367*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
368*35238bceSAndroid Build Coastguard Worker }
369*35238bceSAndroid Build Coastguard Worker
370*35238bceSAndroid Build Coastguard Worker // buffer
371*35238bceSAndroid Build Coastguard Worker {
372*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "Buffer", "Texture buffer");
373*35238bceSAndroid Build Coastguard Worker
374*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
375*35238bceSAndroid Build Coastguard Worker glw::GLuint buffer;
376*35238bceSAndroid Build Coastguard Worker
377*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
378*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_BUFFER, texture);
379*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind texture");
380*35238bceSAndroid Build Coastguard Worker
381*35238bceSAndroid Build Coastguard Worker gl.glGenBuffers(1, &buffer);
382*35238bceSAndroid Build Coastguard Worker gl.glBindBuffer(GL_TEXTURE_BUFFER, buffer);
383*35238bceSAndroid Build Coastguard Worker gl.glBufferData(GL_TEXTURE_BUFFER, 32, DE_NULL, GL_STATIC_DRAW);
384*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind buf");
385*35238bceSAndroid Build Coastguard Worker
386*35238bceSAndroid Build Coastguard Worker gl.glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, buffer);
387*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "tex buffer");
388*35238bceSAndroid Build Coastguard Worker
389*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_BUFFER, 0, GL_TEXTURE_BUFFER_DATA_STORE_BINDING, buffer,
390*35238bceSAndroid Build Coastguard Worker m_type);
391*35238bceSAndroid Build Coastguard Worker
392*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
393*35238bceSAndroid Build Coastguard Worker gl.glDeleteBuffers(1, &buffer);
394*35238bceSAndroid Build Coastguard Worker }
395*35238bceSAndroid Build Coastguard Worker
396*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
397*35238bceSAndroid Build Coastguard Worker return STOP;
398*35238bceSAndroid Build Coastguard Worker }
399*35238bceSAndroid Build Coastguard Worker
400*35238bceSAndroid Build Coastguard Worker class TextureBufferOffsetQueryCase : public TestCase
401*35238bceSAndroid Build Coastguard Worker {
402*35238bceSAndroid Build Coastguard Worker public:
403*35238bceSAndroid Build Coastguard Worker TextureBufferOffsetQueryCase(Context &ctx, const char *name, const char *desc, QueryType type);
404*35238bceSAndroid Build Coastguard Worker
405*35238bceSAndroid Build Coastguard Worker private:
406*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
407*35238bceSAndroid Build Coastguard Worker
408*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
409*35238bceSAndroid Build Coastguard Worker };
410*35238bceSAndroid Build Coastguard Worker
TextureBufferOffsetQueryCase(Context & context,const char * name,const char * desc,QueryType type)411*35238bceSAndroid Build Coastguard Worker TextureBufferOffsetQueryCase::TextureBufferOffsetQueryCase(Context &context, const char *name, const char *desc,
412*35238bceSAndroid Build Coastguard Worker QueryType type)
413*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
414*35238bceSAndroid Build Coastguard Worker , m_type(type)
415*35238bceSAndroid Build Coastguard Worker {
416*35238bceSAndroid Build Coastguard Worker }
417*35238bceSAndroid Build Coastguard Worker
iterate(void)418*35238bceSAndroid Build Coastguard Worker TextureBufferOffsetQueryCase::IterateResult TextureBufferOffsetQueryCase::iterate(void)
419*35238bceSAndroid Build Coastguard Worker {
420*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
421*35238bceSAndroid Build Coastguard Worker
422*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
423*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
424*35238bceSAndroid Build Coastguard Worker
425*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
426*35238bceSAndroid Build Coastguard Worker
427*35238bceSAndroid Build Coastguard Worker // non-buffer
428*35238bceSAndroid Build Coastguard Worker {
429*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "NonBuffer", "Non-buffer");
430*35238bceSAndroid Build Coastguard Worker
431*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
432*35238bceSAndroid Build Coastguard Worker
433*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
434*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_2D, texture);
435*35238bceSAndroid Build Coastguard Worker gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
436*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "gen texture");
437*35238bceSAndroid Build Coastguard Worker
438*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_2D, 0, GL_TEXTURE_BUFFER_OFFSET, 0, m_type);
439*35238bceSAndroid Build Coastguard Worker
440*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
441*35238bceSAndroid Build Coastguard Worker }
442*35238bceSAndroid Build Coastguard Worker
443*35238bceSAndroid Build Coastguard Worker // buffer
444*35238bceSAndroid Build Coastguard Worker {
445*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "Buffer", "Texture buffer");
446*35238bceSAndroid Build Coastguard Worker
447*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
448*35238bceSAndroid Build Coastguard Worker glw::GLuint buffer;
449*35238bceSAndroid Build Coastguard Worker
450*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
451*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_BUFFER, texture);
452*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind texture");
453*35238bceSAndroid Build Coastguard Worker
454*35238bceSAndroid Build Coastguard Worker gl.glGenBuffers(1, &buffer);
455*35238bceSAndroid Build Coastguard Worker gl.glBindBuffer(GL_TEXTURE_BUFFER, buffer);
456*35238bceSAndroid Build Coastguard Worker gl.glBufferData(GL_TEXTURE_BUFFER, 1024, DE_NULL, GL_STATIC_DRAW);
457*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind buf");
458*35238bceSAndroid Build Coastguard Worker
459*35238bceSAndroid Build Coastguard Worker {
460*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection subsection(m_testCtx.getLog(), "Offset0", "Offset 0");
461*35238bceSAndroid Build Coastguard Worker gl.glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, buffer);
462*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "tex buffer");
463*35238bceSAndroid Build Coastguard Worker
464*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_BUFFER, 0, GL_TEXTURE_BUFFER_OFFSET, 0, m_type);
465*35238bceSAndroid Build Coastguard Worker }
466*35238bceSAndroid Build Coastguard Worker {
467*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection subsection(m_testCtx.getLog(), "Offset256", "Offset 256");
468*35238bceSAndroid Build Coastguard Worker gl.glTexBufferRange(GL_TEXTURE_BUFFER, GL_R32UI, buffer, 256, 512);
469*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "tex buffer");
470*35238bceSAndroid Build Coastguard Worker
471*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_BUFFER, 0, GL_TEXTURE_BUFFER_OFFSET, 256, m_type);
472*35238bceSAndroid Build Coastguard Worker }
473*35238bceSAndroid Build Coastguard Worker
474*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
475*35238bceSAndroid Build Coastguard Worker gl.glDeleteBuffers(1, &buffer);
476*35238bceSAndroid Build Coastguard Worker }
477*35238bceSAndroid Build Coastguard Worker
478*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
479*35238bceSAndroid Build Coastguard Worker return STOP;
480*35238bceSAndroid Build Coastguard Worker }
481*35238bceSAndroid Build Coastguard Worker
482*35238bceSAndroid Build Coastguard Worker class TextureBufferSizeQueryCase : public TestCase
483*35238bceSAndroid Build Coastguard Worker {
484*35238bceSAndroid Build Coastguard Worker public:
485*35238bceSAndroid Build Coastguard Worker TextureBufferSizeQueryCase(Context &ctx, const char *name, const char *desc, QueryType type);
486*35238bceSAndroid Build Coastguard Worker
487*35238bceSAndroid Build Coastguard Worker private:
488*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
489*35238bceSAndroid Build Coastguard Worker
490*35238bceSAndroid Build Coastguard Worker const QueryType m_type;
491*35238bceSAndroid Build Coastguard Worker };
492*35238bceSAndroid Build Coastguard Worker
TextureBufferSizeQueryCase(Context & context,const char * name,const char * desc,QueryType type)493*35238bceSAndroid Build Coastguard Worker TextureBufferSizeQueryCase::TextureBufferSizeQueryCase(Context &context, const char *name, const char *desc,
494*35238bceSAndroid Build Coastguard Worker QueryType type)
495*35238bceSAndroid Build Coastguard Worker : TestCase(context, name, desc)
496*35238bceSAndroid Build Coastguard Worker , m_type(type)
497*35238bceSAndroid Build Coastguard Worker {
498*35238bceSAndroid Build Coastguard Worker }
499*35238bceSAndroid Build Coastguard Worker
iterate(void)500*35238bceSAndroid Build Coastguard Worker TextureBufferSizeQueryCase::IterateResult TextureBufferSizeQueryCase::iterate(void)
501*35238bceSAndroid Build Coastguard Worker {
502*35238bceSAndroid Build Coastguard Worker checkSupport(m_context);
503*35238bceSAndroid Build Coastguard Worker
504*35238bceSAndroid Build Coastguard Worker glu::CallLogWrapper gl(m_context.getRenderContext().getFunctions(), m_testCtx.getLog());
505*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector result(m_testCtx.getLog(), " // ERROR: ");
506*35238bceSAndroid Build Coastguard Worker
507*35238bceSAndroid Build Coastguard Worker gl.enableLogging(true);
508*35238bceSAndroid Build Coastguard Worker
509*35238bceSAndroid Build Coastguard Worker // non-buffer
510*35238bceSAndroid Build Coastguard Worker {
511*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "NonBuffer", "Non-buffer");
512*35238bceSAndroid Build Coastguard Worker
513*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
514*35238bceSAndroid Build Coastguard Worker
515*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
516*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_2D, texture);
517*35238bceSAndroid Build Coastguard Worker gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32);
518*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "gen texture");
519*35238bceSAndroid Build Coastguard Worker
520*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_2D, 0, GL_TEXTURE_BUFFER_SIZE, 0, m_type);
521*35238bceSAndroid Build Coastguard Worker
522*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
523*35238bceSAndroid Build Coastguard Worker }
524*35238bceSAndroid Build Coastguard Worker
525*35238bceSAndroid Build Coastguard Worker // buffer
526*35238bceSAndroid Build Coastguard Worker {
527*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection section(m_testCtx.getLog(), "Buffer", "Texture buffer");
528*35238bceSAndroid Build Coastguard Worker
529*35238bceSAndroid Build Coastguard Worker glw::GLuint texture;
530*35238bceSAndroid Build Coastguard Worker glw::GLuint buffer;
531*35238bceSAndroid Build Coastguard Worker
532*35238bceSAndroid Build Coastguard Worker gl.glGenTextures(1, &texture);
533*35238bceSAndroid Build Coastguard Worker gl.glBindTexture(GL_TEXTURE_BUFFER, texture);
534*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind texture");
535*35238bceSAndroid Build Coastguard Worker
536*35238bceSAndroid Build Coastguard Worker gl.glGenBuffers(1, &buffer);
537*35238bceSAndroid Build Coastguard Worker gl.glBindBuffer(GL_TEXTURE_BUFFER, buffer);
538*35238bceSAndroid Build Coastguard Worker gl.glBufferData(GL_TEXTURE_BUFFER, 1024, DE_NULL, GL_STATIC_DRAW);
539*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "bind buf");
540*35238bceSAndroid Build Coastguard Worker
541*35238bceSAndroid Build Coastguard Worker {
542*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection subsection(m_testCtx.getLog(), "SizeAll", "Bind whole buffer");
543*35238bceSAndroid Build Coastguard Worker gl.glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, buffer);
544*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "tex buffer");
545*35238bceSAndroid Build Coastguard Worker
546*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_BUFFER, 0, GL_TEXTURE_BUFFER_SIZE, 1024, m_type);
547*35238bceSAndroid Build Coastguard Worker }
548*35238bceSAndroid Build Coastguard Worker {
549*35238bceSAndroid Build Coastguard Worker const tcu::ScopedLogSection subsection(m_testCtx.getLog(), "Partial", "Partial buffer");
550*35238bceSAndroid Build Coastguard Worker gl.glTexBufferRange(GL_TEXTURE_BUFFER, GL_R32UI, buffer, 256, 512);
551*35238bceSAndroid Build Coastguard Worker GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "tex buffer");
552*35238bceSAndroid Build Coastguard Worker
553*35238bceSAndroid Build Coastguard Worker verifyStateTextureLevelInteger(result, gl, GL_TEXTURE_BUFFER, 0, GL_TEXTURE_BUFFER_SIZE, 512, m_type);
554*35238bceSAndroid Build Coastguard Worker }
555*35238bceSAndroid Build Coastguard Worker
556*35238bceSAndroid Build Coastguard Worker gl.glDeleteTextures(1, &texture);
557*35238bceSAndroid Build Coastguard Worker gl.glDeleteBuffers(1, &buffer);
558*35238bceSAndroid Build Coastguard Worker }
559*35238bceSAndroid Build Coastguard Worker
560*35238bceSAndroid Build Coastguard Worker result.setTestContextResult(m_testCtx);
561*35238bceSAndroid Build Coastguard Worker return STOP;
562*35238bceSAndroid Build Coastguard Worker }
563*35238bceSAndroid Build Coastguard Worker
564*35238bceSAndroid Build Coastguard Worker } // namespace
565*35238bceSAndroid Build Coastguard Worker
createTextureBufferTests(Context & context)566*35238bceSAndroid Build Coastguard Worker TestCaseGroup *createTextureBufferTests(Context &context)
567*35238bceSAndroid Build Coastguard Worker {
568*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const root = new TestCaseGroup(context, "texture_buffer", "Texture buffer syncronization tests");
569*35238bceSAndroid Build Coastguard Worker
570*35238bceSAndroid Build Coastguard Worker const size_t bufferSizes[] = {512, 513, 65536, 65537, 131071};
571*35238bceSAndroid Build Coastguard Worker
572*35238bceSAndroid Build Coastguard Worker const size_t rangeSizes[] = {
573*35238bceSAndroid Build Coastguard Worker 512,
574*35238bceSAndroid Build Coastguard Worker 513,
575*35238bceSAndroid Build Coastguard Worker 65537,
576*35238bceSAndroid Build Coastguard Worker 98304,
577*35238bceSAndroid Build Coastguard Worker };
578*35238bceSAndroid Build Coastguard Worker
579*35238bceSAndroid Build Coastguard Worker const size_t offsets[] = {1, 7};
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker const RenderBits renderTypeCombinations[] = {
582*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY,
583*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_INDEX_ARRAY,
584*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_INDEX_ARRAY,
585*35238bceSAndroid Build Coastguard Worker
586*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_TEXTURE,
587*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE,
588*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE,
589*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE,
590*35238bceSAndroid Build Coastguard Worker
591*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_FRAGMENT_TEXTURE,
592*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_FRAGMENT_TEXTURE,
593*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_FRAGMENT_TEXTURE,
594*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_FRAGMENT_TEXTURE,
595*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_TEXTURE | RENDERBITS_AS_FRAGMENT_TEXTURE,
596*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE | RENDERBITS_AS_FRAGMENT_TEXTURE,
597*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE | RENDERBITS_AS_FRAGMENT_TEXTURE,
598*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_VERTEX_ARRAY | RENDERBITS_AS_INDEX_ARRAY | RENDERBITS_AS_VERTEX_TEXTURE |
599*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_FRAGMENT_TEXTURE};
600*35238bceSAndroid Build Coastguard Worker
601*35238bceSAndroid Build Coastguard Worker const ModifyBits modifyTypes[] = {MODIFYBITS_BUFFERDATA, MODIFYBITS_BUFFERSUBDATA, MODIFYBITS_MAPBUFFER_WRITE,
602*35238bceSAndroid Build Coastguard Worker MODIFYBITS_MAPBUFFER_READWRITE};
603*35238bceSAndroid Build Coastguard Worker
604*35238bceSAndroid Build Coastguard Worker // State and limit queries
605*35238bceSAndroid Build Coastguard Worker {
606*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const queryGroup = new TestCaseGroup(context, "state_query", "Query states and limits");
607*35238bceSAndroid Build Coastguard Worker root->addChild(queryGroup);
608*35238bceSAndroid Build Coastguard Worker
609*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new LimitQueryCase(context, "max_texture_buffer_size_getboolean",
610*35238bceSAndroid Build Coastguard Worker "Test MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE, 65536,
611*35238bceSAndroid Build Coastguard Worker QUERY_BOOLEAN));
612*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new LimitQueryCase(context, "max_texture_buffer_size_getinteger",
613*35238bceSAndroid Build Coastguard Worker "Test MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE, 65536,
614*35238bceSAndroid Build Coastguard Worker QUERY_INTEGER));
615*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new LimitQueryCase(context, "max_texture_buffer_size_getinteger64",
616*35238bceSAndroid Build Coastguard Worker "Test MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE, 65536,
617*35238bceSAndroid Build Coastguard Worker QUERY_INTEGER64));
618*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new LimitQueryCase(context, "max_texture_buffer_size_getfloat",
619*35238bceSAndroid Build Coastguard Worker "Test MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE, 65536,
620*35238bceSAndroid Build Coastguard Worker QUERY_FLOAT));
621*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new AlignmentQueryCase(context, "texture_buffer_offset_alignment_getboolean",
622*35238bceSAndroid Build Coastguard Worker "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT",
623*35238bceSAndroid Build Coastguard Worker GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 256, QUERY_BOOLEAN));
624*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new AlignmentQueryCase(context, "texture_buffer_offset_alignment_getinteger",
625*35238bceSAndroid Build Coastguard Worker "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT",
626*35238bceSAndroid Build Coastguard Worker GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 256, QUERY_INTEGER));
627*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new AlignmentQueryCase(context, "texture_buffer_offset_alignment_getinteger64",
628*35238bceSAndroid Build Coastguard Worker "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT",
629*35238bceSAndroid Build Coastguard Worker GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 256, QUERY_INTEGER64));
630*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new AlignmentQueryCase(context, "texture_buffer_offset_alignment_getfloat",
631*35238bceSAndroid Build Coastguard Worker "Test TEXTURE_BUFFER_OFFSET_ALIGNMENT",
632*35238bceSAndroid Build Coastguard Worker GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 256, QUERY_FLOAT));
633*35238bceSAndroid Build Coastguard Worker
634*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferBindingQueryCase(context, "texture_buffer_binding_getboolean",
635*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_BINDING", QUERY_BOOLEAN));
636*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferBindingQueryCase(context, "texture_buffer_binding_getinteger",
637*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_BINDING", QUERY_INTEGER));
638*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferBindingQueryCase(context, "texture_buffer_binding_getinteger64",
639*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_BINDING", QUERY_INTEGER64));
640*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferBindingQueryCase(context, "texture_buffer_binding_getfloat",
641*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_BINDING", QUERY_FLOAT));
642*35238bceSAndroid Build Coastguard Worker
643*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBindingBufferQueryCase(context, "texture_binding_buffer_getboolean",
644*35238bceSAndroid Build Coastguard Worker "TEXTURE_BINDING_BUFFER", QUERY_BOOLEAN));
645*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBindingBufferQueryCase(context, "texture_binding_buffer_getinteger",
646*35238bceSAndroid Build Coastguard Worker "TEXTURE_BINDING_BUFFER", QUERY_INTEGER));
647*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBindingBufferQueryCase(context, "texture_binding_buffer_getinteger64",
648*35238bceSAndroid Build Coastguard Worker "TEXTURE_BINDING_BUFFER", QUERY_INTEGER64));
649*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBindingBufferQueryCase(context, "texture_binding_buffer_getfloat",
650*35238bceSAndroid Build Coastguard Worker "TEXTURE_BINDING_BUFFER", QUERY_FLOAT));
651*35238bceSAndroid Build Coastguard Worker
652*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferDataStoreQueryCase(context, "texture_buffer_data_store_binding_integer",
653*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_DATA_STORE_BINDING",
654*35238bceSAndroid Build Coastguard Worker QUERY_TEXTURE_LEVEL_INTEGER));
655*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferDataStoreQueryCase(context, "texture_buffer_data_store_binding_float",
656*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_DATA_STORE_BINDING",
657*35238bceSAndroid Build Coastguard Worker QUERY_TEXTURE_LEVEL_FLOAT));
658*35238bceSAndroid Build Coastguard Worker
659*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferOffsetQueryCase(context, "texture_buffer_offset_integer",
660*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_OFFSET", QUERY_TEXTURE_LEVEL_INTEGER));
661*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferOffsetQueryCase(context, "texture_buffer_offset_float",
662*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_OFFSET", QUERY_TEXTURE_LEVEL_FLOAT));
663*35238bceSAndroid Build Coastguard Worker
664*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferSizeQueryCase(context, "texture_buffer_size_integer",
665*35238bceSAndroid Build Coastguard Worker "TEXTURE_BUFFER_SIZE", QUERY_TEXTURE_LEVEL_INTEGER));
666*35238bceSAndroid Build Coastguard Worker queryGroup->addChild(new TextureBufferSizeQueryCase(context, "texture_buffer_size_float", "TEXTURE_BUFFER_SIZE",
667*35238bceSAndroid Build Coastguard Worker QUERY_TEXTURE_LEVEL_FLOAT));
668*35238bceSAndroid Build Coastguard Worker }
669*35238bceSAndroid Build Coastguard Worker
670*35238bceSAndroid Build Coastguard Worker // Rendering test
671*35238bceSAndroid Build Coastguard Worker {
672*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const renderGroup = new TestCaseGroup(
673*35238bceSAndroid Build Coastguard Worker context, "render", "Setup texture buffer with glBufferData and render data in different ways");
674*35238bceSAndroid Build Coastguard Worker root->addChild(renderGroup);
675*35238bceSAndroid Build Coastguard Worker
676*35238bceSAndroid Build Coastguard Worker for (int renderTypeNdx = 0; renderTypeNdx < DE_LENGTH_OF_ARRAY(renderTypeCombinations); renderTypeNdx++)
677*35238bceSAndroid Build Coastguard Worker {
678*35238bceSAndroid Build Coastguard Worker const RenderBits renderType = renderTypeCombinations[renderTypeNdx];
679*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const renderTypeGroup =
680*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, toTestName(renderType).c_str(), toTestName(renderType).c_str());
681*35238bceSAndroid Build Coastguard Worker
682*35238bceSAndroid Build Coastguard Worker renderGroup->addChild(renderTypeGroup);
683*35238bceSAndroid Build Coastguard Worker
684*35238bceSAndroid Build Coastguard Worker for (int sizeNdx = 0; sizeNdx < DE_LENGTH_OF_ARRAY(bufferSizes); sizeNdx++)
685*35238bceSAndroid Build Coastguard Worker {
686*35238bceSAndroid Build Coastguard Worker const size_t size = bufferSizes[sizeNdx];
687*35238bceSAndroid Build Coastguard Worker const string name("buffer_size_" + de::toString(size));
688*35238bceSAndroid Build Coastguard Worker
689*35238bceSAndroid Build Coastguard Worker renderTypeGroup->addChild(new TextureBufferCase(context.getTestContext(), context.getRenderContext(),
690*35238bceSAndroid Build Coastguard Worker GL_RGBA8, size, 0, 0, RENDERBITS_NONE, MODIFYBITS_NONE,
691*35238bceSAndroid Build Coastguard Worker renderType, name.c_str(), name.c_str()));
692*35238bceSAndroid Build Coastguard Worker }
693*35238bceSAndroid Build Coastguard Worker
694*35238bceSAndroid Build Coastguard Worker for (int sizeNdx = 0; sizeNdx < DE_LENGTH_OF_ARRAY(rangeSizes); sizeNdx++)
695*35238bceSAndroid Build Coastguard Worker {
696*35238bceSAndroid Build Coastguard Worker const size_t size = rangeSizes[sizeNdx];
697*35238bceSAndroid Build Coastguard Worker const string name("range_size_" + de::toString(size));
698*35238bceSAndroid Build Coastguard Worker const size_t bufferSize = 131072;
699*35238bceSAndroid Build Coastguard Worker
700*35238bceSAndroid Build Coastguard Worker renderTypeGroup->addChild(new TextureBufferCase(
701*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, bufferSize, 0, size,
702*35238bceSAndroid Build Coastguard Worker RENDERBITS_NONE, MODIFYBITS_NONE, renderType, name.c_str(), name.c_str()));
703*35238bceSAndroid Build Coastguard Worker }
704*35238bceSAndroid Build Coastguard Worker
705*35238bceSAndroid Build Coastguard Worker for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
706*35238bceSAndroid Build Coastguard Worker {
707*35238bceSAndroid Build Coastguard Worker const size_t offset = offsets[offsetNdx];
708*35238bceSAndroid Build Coastguard Worker const size_t bufferSize = 131072;
709*35238bceSAndroid Build Coastguard Worker const size_t size = 65537;
710*35238bceSAndroid Build Coastguard Worker const string name("offset_" + de::toString(offset) + "_alignments");
711*35238bceSAndroid Build Coastguard Worker
712*35238bceSAndroid Build Coastguard Worker renderTypeGroup->addChild(new TextureBufferCase(
713*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, bufferSize, offset, size,
714*35238bceSAndroid Build Coastguard Worker RENDERBITS_NONE, MODIFYBITS_NONE, renderType, name.c_str(), name.c_str()));
715*35238bceSAndroid Build Coastguard Worker }
716*35238bceSAndroid Build Coastguard Worker }
717*35238bceSAndroid Build Coastguard Worker }
718*35238bceSAndroid Build Coastguard Worker
719*35238bceSAndroid Build Coastguard Worker // Modify tests
720*35238bceSAndroid Build Coastguard Worker {
721*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const modifyGroup =
722*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, "modify", "Modify texture buffer content in multiple ways");
723*35238bceSAndroid Build Coastguard Worker root->addChild(modifyGroup);
724*35238bceSAndroid Build Coastguard Worker
725*35238bceSAndroid Build Coastguard Worker for (int modifyNdx = 0; modifyNdx < DE_LENGTH_OF_ARRAY(modifyTypes); modifyNdx++)
726*35238bceSAndroid Build Coastguard Worker {
727*35238bceSAndroid Build Coastguard Worker const ModifyBits modifyType = modifyTypes[modifyNdx];
728*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const modifyTypeGroup =
729*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, toTestName(modifyType).c_str(), toTestName(modifyType).c_str());
730*35238bceSAndroid Build Coastguard Worker
731*35238bceSAndroid Build Coastguard Worker modifyGroup->addChild(modifyTypeGroup);
732*35238bceSAndroid Build Coastguard Worker
733*35238bceSAndroid Build Coastguard Worker for (int sizeNdx = 0; sizeNdx < DE_LENGTH_OF_ARRAY(bufferSizes); sizeNdx++)
734*35238bceSAndroid Build Coastguard Worker {
735*35238bceSAndroid Build Coastguard Worker const size_t size = bufferSizes[sizeNdx];
736*35238bceSAndroid Build Coastguard Worker const string name("buffer_size_" + de::toString(size));
737*35238bceSAndroid Build Coastguard Worker
738*35238bceSAndroid Build Coastguard Worker modifyTypeGroup->addChild(new TextureBufferCase(
739*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, size, 0, 0, RENDERBITS_NONE,
740*35238bceSAndroid Build Coastguard Worker modifyType, RENDERBITS_AS_FRAGMENT_TEXTURE, name.c_str(), name.c_str()));
741*35238bceSAndroid Build Coastguard Worker }
742*35238bceSAndroid Build Coastguard Worker
743*35238bceSAndroid Build Coastguard Worker for (int sizeNdx = 0; sizeNdx < DE_LENGTH_OF_ARRAY(rangeSizes); sizeNdx++)
744*35238bceSAndroid Build Coastguard Worker {
745*35238bceSAndroid Build Coastguard Worker const size_t size = rangeSizes[sizeNdx];
746*35238bceSAndroid Build Coastguard Worker const string name("range_size_" + de::toString(size));
747*35238bceSAndroid Build Coastguard Worker const size_t bufferSize = 131072;
748*35238bceSAndroid Build Coastguard Worker
749*35238bceSAndroid Build Coastguard Worker modifyTypeGroup->addChild(new TextureBufferCase(
750*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, bufferSize, 0, size,
751*35238bceSAndroid Build Coastguard Worker RENDERBITS_NONE, modifyType, RENDERBITS_AS_FRAGMENT_TEXTURE, name.c_str(), name.c_str()));
752*35238bceSAndroid Build Coastguard Worker }
753*35238bceSAndroid Build Coastguard Worker
754*35238bceSAndroid Build Coastguard Worker for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
755*35238bceSAndroid Build Coastguard Worker {
756*35238bceSAndroid Build Coastguard Worker const size_t offset = offsets[offsetNdx];
757*35238bceSAndroid Build Coastguard Worker const size_t bufferSize = 131072;
758*35238bceSAndroid Build Coastguard Worker const size_t size = 65537;
759*35238bceSAndroid Build Coastguard Worker const string name("offset_" + de::toString(offset) + "_alignments");
760*35238bceSAndroid Build Coastguard Worker
761*35238bceSAndroid Build Coastguard Worker modifyTypeGroup->addChild(new TextureBufferCase(
762*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, bufferSize, offset, size,
763*35238bceSAndroid Build Coastguard Worker RENDERBITS_NONE, modifyType, RENDERBITS_AS_FRAGMENT_TEXTURE, name.c_str(), name.c_str()));
764*35238bceSAndroid Build Coastguard Worker }
765*35238bceSAndroid Build Coastguard Worker }
766*35238bceSAndroid Build Coastguard Worker }
767*35238bceSAndroid Build Coastguard Worker
768*35238bceSAndroid Build Coastguard Worker // Modify-Render tests
769*35238bceSAndroid Build Coastguard Worker {
770*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const modifyRenderGroup = new TestCaseGroup(
771*35238bceSAndroid Build Coastguard Worker context, "modify_render", "Modify texture buffer content in multiple ways and render in different ways");
772*35238bceSAndroid Build Coastguard Worker root->addChild(modifyRenderGroup);
773*35238bceSAndroid Build Coastguard Worker
774*35238bceSAndroid Build Coastguard Worker for (int modifyNdx = 0; modifyNdx < DE_LENGTH_OF_ARRAY(modifyTypes); modifyNdx++)
775*35238bceSAndroid Build Coastguard Worker {
776*35238bceSAndroid Build Coastguard Worker const ModifyBits modifyType = modifyTypes[modifyNdx];
777*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const modifyTypeGroup =
778*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, toTestName(modifyType).c_str(), toTestName(modifyType).c_str());
779*35238bceSAndroid Build Coastguard Worker
780*35238bceSAndroid Build Coastguard Worker modifyRenderGroup->addChild(modifyTypeGroup);
781*35238bceSAndroid Build Coastguard Worker
782*35238bceSAndroid Build Coastguard Worker for (int renderTypeNdx = 0; renderTypeNdx < DE_LENGTH_OF_ARRAY(renderTypeCombinations); renderTypeNdx++)
783*35238bceSAndroid Build Coastguard Worker {
784*35238bceSAndroid Build Coastguard Worker const RenderBits renderType = renderTypeCombinations[renderTypeNdx];
785*35238bceSAndroid Build Coastguard Worker const size_t size = 16 * 1024;
786*35238bceSAndroid Build Coastguard Worker const string name(toTestName(renderType));
787*35238bceSAndroid Build Coastguard Worker
788*35238bceSAndroid Build Coastguard Worker modifyTypeGroup->addChild(new TextureBufferCase(context.getTestContext(), context.getRenderContext(),
789*35238bceSAndroid Build Coastguard Worker GL_RGBA8, size, 0, 0, RENDERBITS_NONE, modifyType,
790*35238bceSAndroid Build Coastguard Worker renderType, name.c_str(), name.c_str()));
791*35238bceSAndroid Build Coastguard Worker }
792*35238bceSAndroid Build Coastguard Worker }
793*35238bceSAndroid Build Coastguard Worker }
794*35238bceSAndroid Build Coastguard Worker
795*35238bceSAndroid Build Coastguard Worker // Render-Modify tests
796*35238bceSAndroid Build Coastguard Worker {
797*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const renderModifyGroup =
798*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, "render_modify", "Render texture buffer and modify.");
799*35238bceSAndroid Build Coastguard Worker root->addChild(renderModifyGroup);
800*35238bceSAndroid Build Coastguard Worker
801*35238bceSAndroid Build Coastguard Worker for (int renderTypeNdx = 0; renderTypeNdx < DE_LENGTH_OF_ARRAY(renderTypeCombinations); renderTypeNdx++)
802*35238bceSAndroid Build Coastguard Worker {
803*35238bceSAndroid Build Coastguard Worker const RenderBits renderType = renderTypeCombinations[renderTypeNdx];
804*35238bceSAndroid Build Coastguard Worker TestCaseGroup *const renderTypeGroup =
805*35238bceSAndroid Build Coastguard Worker new TestCaseGroup(context, toTestName(renderType).c_str(), toTestName(renderType).c_str());
806*35238bceSAndroid Build Coastguard Worker
807*35238bceSAndroid Build Coastguard Worker renderModifyGroup->addChild(renderTypeGroup);
808*35238bceSAndroid Build Coastguard Worker
809*35238bceSAndroid Build Coastguard Worker for (int modifyNdx = 0; modifyNdx < DE_LENGTH_OF_ARRAY(modifyTypes); modifyNdx++)
810*35238bceSAndroid Build Coastguard Worker {
811*35238bceSAndroid Build Coastguard Worker const ModifyBits modifyType = modifyTypes[modifyNdx];
812*35238bceSAndroid Build Coastguard Worker const size_t size = 16 * 1024;
813*35238bceSAndroid Build Coastguard Worker const string name(toTestName(modifyType));
814*35238bceSAndroid Build Coastguard Worker
815*35238bceSAndroid Build Coastguard Worker renderTypeGroup->addChild(new TextureBufferCase(
816*35238bceSAndroid Build Coastguard Worker context.getTestContext(), context.getRenderContext(), GL_RGBA8, size, 0, 0, renderType, modifyType,
817*35238bceSAndroid Build Coastguard Worker RENDERBITS_AS_FRAGMENT_TEXTURE, name.c_str(), name.c_str()));
818*35238bceSAndroid Build Coastguard Worker }
819*35238bceSAndroid Build Coastguard Worker }
820*35238bceSAndroid Build Coastguard Worker }
821*35238bceSAndroid Build Coastguard Worker
822*35238bceSAndroid Build Coastguard Worker return root;
823*35238bceSAndroid Build Coastguard Worker }
824*35238bceSAndroid Build Coastguard Worker
825*35238bceSAndroid Build Coastguard Worker } // namespace Functional
826*35238bceSAndroid Build Coastguard Worker } // namespace gles31
827*35238bceSAndroid Build Coastguard Worker } // namespace deqp
828