xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fTextureBufferTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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