xref: /aosp_15_r20/external/deqp/modules/gles2/functional/es2fVertexArrayTest.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker  * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief Vertex array and buffer tests
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "es2fVertexArrayTest.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsVertexArrayTests.hpp"
26*35238bceSAndroid Build Coastguard Worker 
27*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls;
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker namespace deqp
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker namespace gles2
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker namespace Functional
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker 
38*35238bceSAndroid Build Coastguard Worker template <class T>
typeToString(T t)39*35238bceSAndroid Build Coastguard Worker static std::string typeToString(T t)
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker     std::stringstream strm;
42*35238bceSAndroid Build Coastguard Worker     strm << t;
43*35238bceSAndroid Build Coastguard Worker     return strm.str();
44*35238bceSAndroid Build Coastguard Worker }
45*35238bceSAndroid Build Coastguard Worker 
46*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayUsageTests : public TestCaseGroup
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker public:
49*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayUsageTests(Context &context);
50*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayUsageTests(void);
51*35238bceSAndroid Build Coastguard Worker 
52*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
53*35238bceSAndroid Build Coastguard Worker 
54*35238bceSAndroid Build Coastguard Worker private:
55*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayUsageTests(const SingleVertexArrayUsageTests &other);
56*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayUsageTests &operator=(const SingleVertexArrayUsageTests &other);
57*35238bceSAndroid Build Coastguard Worker };
58*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayUsageTests(Context & context)59*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests::SingleVertexArrayUsageTests(Context &context)
60*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "usages", "Single vertex atribute, usage")
61*35238bceSAndroid Build Coastguard Worker {
62*35238bceSAndroid Build Coastguard Worker }
63*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayUsageTests(void)64*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests::~SingleVertexArrayUsageTests(void)
65*35238bceSAndroid Build Coastguard Worker {
66*35238bceSAndroid Build Coastguard Worker }
67*35238bceSAndroid Build Coastguard Worker 
init(void)68*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayUsageTests::init(void)
69*35238bceSAndroid Build Coastguard Worker {
70*35238bceSAndroid Build Coastguard Worker     // Test usage
71*35238bceSAndroid Build Coastguard Worker     Array::Usage usages[] = {Array::USAGE_STATIC_DRAW, Array::USAGE_STREAM_DRAW, Array::USAGE_DYNAMIC_DRAW};
72*35238bceSAndroid Build Coastguard Worker     int counts[]          = {1, 256};
73*35238bceSAndroid Build Coastguard Worker     int strides[]         = {0, -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
74*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_FIXED, Array::INPUTTYPE_SHORT,
75*35238bceSAndroid Build Coastguard Worker                                      Array::INPUTTYPE_BYTE};
76*35238bceSAndroid Build Coastguard Worker 
77*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
78*35238bceSAndroid Build Coastguard Worker     {
79*35238bceSAndroid Build Coastguard Worker         for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
80*35238bceSAndroid Build Coastguard Worker         {
81*35238bceSAndroid Build Coastguard Worker             for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
82*35238bceSAndroid Build Coastguard Worker             {
83*35238bceSAndroid Build Coastguard Worker                 for (int usageNdx = 0; usageNdx < DE_LENGTH_OF_ARRAY(usages); usageNdx++)
84*35238bceSAndroid Build Coastguard Worker                 {
85*35238bceSAndroid Build Coastguard Worker                     const int componentCount = 2;
86*35238bceSAndroid Build Coastguard Worker                     const int stride =
87*35238bceSAndroid Build Coastguard Worker                         (strides[strideNdx] < 0 ? Array::inputTypeSize(inputTypes[inputTypeNdx]) * componentCount :
88*35238bceSAndroid Build Coastguard Worker                                                   strides[strideNdx]);
89*35238bceSAndroid Build Coastguard Worker                     const bool aligned = (stride % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0;
90*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec::ArraySpec arraySpec(
91*35238bceSAndroid Build Coastguard Worker                         inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2, Array::STORAGE_BUFFER, usages[usageNdx],
92*35238bceSAndroid Build Coastguard Worker                         componentCount, 0, stride, false, GLValue::getMinValue(inputTypes[inputTypeNdx]),
93*35238bceSAndroid Build Coastguard Worker                         GLValue::getMaxValue(inputTypes[inputTypeNdx]));
94*35238bceSAndroid Build Coastguard Worker 
95*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec spec;
96*35238bceSAndroid Build Coastguard Worker                     spec.primitive = Array::PRIMITIVE_TRIANGLES;
97*35238bceSAndroid Build Coastguard Worker                     spec.drawCount = counts[countNdx];
98*35238bceSAndroid Build Coastguard Worker                     spec.first     = 0;
99*35238bceSAndroid Build Coastguard Worker                     spec.arrays.push_back(arraySpec);
100*35238bceSAndroid Build Coastguard Worker 
101*35238bceSAndroid Build Coastguard Worker                     std::string name = spec.getName();
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker                     if (aligned)
104*35238bceSAndroid Build Coastguard Worker                         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
105*35238bceSAndroid Build Coastguard Worker                                                           name.c_str()));
106*35238bceSAndroid Build Coastguard Worker                 }
107*35238bceSAndroid Build Coastguard Worker             }
108*35238bceSAndroid Build Coastguard Worker         }
109*35238bceSAndroid Build Coastguard Worker     }
110*35238bceSAndroid Build Coastguard Worker }
111*35238bceSAndroid Build Coastguard Worker 
112*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayStrideTests : public TestCaseGroup
113*35238bceSAndroid Build Coastguard Worker {
114*35238bceSAndroid Build Coastguard Worker public:
115*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayStrideTests(Context &context);
116*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayStrideTests(void);
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker private:
121*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayStrideTests(const SingleVertexArrayStrideTests &other);
122*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayStrideTests &operator=(const SingleVertexArrayStrideTests &other);
123*35238bceSAndroid Build Coastguard Worker };
124*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayStrideTests(Context & context)125*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests::SingleVertexArrayStrideTests(Context &context)
126*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "strides", "Single stride vertex atribute")
127*35238bceSAndroid Build Coastguard Worker {
128*35238bceSAndroid Build Coastguard Worker }
129*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayStrideTests(void)130*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests::~SingleVertexArrayStrideTests(void)
131*35238bceSAndroid Build Coastguard Worker {
132*35238bceSAndroid Build Coastguard Worker }
133*35238bceSAndroid Build Coastguard Worker 
init(void)134*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayStrideTests::init(void)
135*35238bceSAndroid Build Coastguard Worker {
136*35238bceSAndroid Build Coastguard Worker     // Test strides with different input types, component counts and storage, Usage(?)
137*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {
138*35238bceSAndroid Build Coastguard Worker         Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_SHORT, Array::INPUTTYPE_BYTE,
139*35238bceSAndroid Build Coastguard Worker         /*Array::INPUTTYPE_UNSIGNED_SHORT, Array::INPUTTYPE_UNSIGNED_BYTE,*/ Array::INPUTTYPE_FIXED};
140*35238bceSAndroid Build Coastguard Worker     Array::Storage storages[] = {Array::STORAGE_USER, Array::STORAGE_BUFFER};
141*35238bceSAndroid Build Coastguard Worker     int counts[]              = {1, 256};
142*35238bceSAndroid Build Coastguard Worker     int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
143*35238bceSAndroid Build Coastguard Worker 
144*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
145*35238bceSAndroid Build Coastguard Worker     {
146*35238bceSAndroid Build Coastguard Worker         for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
147*35238bceSAndroid Build Coastguard Worker         {
148*35238bceSAndroid Build Coastguard Worker             for (int componentCount = 2; componentCount < 5; componentCount++)
149*35238bceSAndroid Build Coastguard Worker             {
150*35238bceSAndroid Build Coastguard Worker                 for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
151*35238bceSAndroid Build Coastguard Worker                 {
152*35238bceSAndroid Build Coastguard Worker                     for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
153*35238bceSAndroid Build Coastguard Worker                     {
154*35238bceSAndroid Build Coastguard Worker                         const int stride =
155*35238bceSAndroid Build Coastguard Worker                             (strides[strideNdx] < 0 ? Array::inputTypeSize(inputTypes[inputTypeNdx]) * componentCount :
156*35238bceSAndroid Build Coastguard Worker                                                       strides[strideNdx]);
157*35238bceSAndroid Build Coastguard Worker                         const bool bufferAligned = (storages[storageNdx] == Array::STORAGE_BUFFER) &&
158*35238bceSAndroid Build Coastguard Worker                                                    (stride % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0;
159*35238bceSAndroid Build Coastguard Worker 
160*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
161*35238bceSAndroid Build Coastguard Worker                             inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC4, storages[storageNdx],
162*35238bceSAndroid Build Coastguard Worker                             Array::USAGE_DYNAMIC_DRAW, componentCount, 0, stride, false,
163*35238bceSAndroid Build Coastguard Worker                             GLValue::getMinValue(inputTypes[inputTypeNdx]),
164*35238bceSAndroid Build Coastguard Worker                             GLValue::getMaxValue(inputTypes[inputTypeNdx]));
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec spec;
167*35238bceSAndroid Build Coastguard Worker                         spec.primitive = Array::PRIMITIVE_TRIANGLES;
168*35238bceSAndroid Build Coastguard Worker                         spec.drawCount = counts[countNdx];
169*35238bceSAndroid Build Coastguard Worker                         spec.first     = 0;
170*35238bceSAndroid Build Coastguard Worker                         spec.arrays.push_back(arraySpec);
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker                         std::string name = spec.getName();
173*35238bceSAndroid Build Coastguard Worker                         if (bufferAligned)
174*35238bceSAndroid Build Coastguard Worker                             addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec,
175*35238bceSAndroid Build Coastguard Worker                                                               name.c_str(), name.c_str()));
176*35238bceSAndroid Build Coastguard Worker                     }
177*35238bceSAndroid Build Coastguard Worker                 }
178*35238bceSAndroid Build Coastguard Worker             }
179*35238bceSAndroid Build Coastguard Worker         }
180*35238bceSAndroid Build Coastguard Worker     }
181*35238bceSAndroid Build Coastguard Worker }
182*35238bceSAndroid Build Coastguard Worker 
183*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayFirstTests : public TestCaseGroup
184*35238bceSAndroid Build Coastguard Worker {
185*35238bceSAndroid Build Coastguard Worker public:
186*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayFirstTests(Context &context);
187*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayFirstTests(void);
188*35238bceSAndroid Build Coastguard Worker 
189*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker private:
192*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayFirstTests(const SingleVertexArrayFirstTests &other);
193*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayFirstTests &operator=(const SingleVertexArrayFirstTests &other);
194*35238bceSAndroid Build Coastguard Worker };
195*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayFirstTests(Context & context)196*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests::SingleVertexArrayFirstTests(Context &context)
197*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "first", "Single vertex atribute different first values")
198*35238bceSAndroid Build Coastguard Worker {
199*35238bceSAndroid Build Coastguard Worker }
200*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayFirstTests(void)201*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests::~SingleVertexArrayFirstTests(void)
202*35238bceSAndroid Build Coastguard Worker {
203*35238bceSAndroid Build Coastguard Worker }
204*35238bceSAndroid Build Coastguard Worker 
init(void)205*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayFirstTests::init(void)
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker     // Test strides with different input types, component counts and storage, Usage(?)
208*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_FIXED};
209*35238bceSAndroid Build Coastguard Worker     int counts[]                  = {5, 256};
210*35238bceSAndroid Build Coastguard Worker     int firsts[]                  = {6, 24};
211*35238bceSAndroid Build Coastguard Worker     int offsets[]                 = {1, 16, 17};
212*35238bceSAndroid Build Coastguard Worker     int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
213*35238bceSAndroid Build Coastguard Worker 
214*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
215*35238bceSAndroid Build Coastguard Worker     {
216*35238bceSAndroid Build Coastguard Worker         for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
217*35238bceSAndroid Build Coastguard Worker         {
218*35238bceSAndroid Build Coastguard Worker             for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
219*35238bceSAndroid Build Coastguard Worker             {
220*35238bceSAndroid Build Coastguard Worker                 for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
221*35238bceSAndroid Build Coastguard Worker                 {
222*35238bceSAndroid Build Coastguard Worker                     for (int firstNdx = 0; firstNdx < DE_LENGTH_OF_ARRAY(firsts); firstNdx++)
223*35238bceSAndroid Build Coastguard Worker                     {
224*35238bceSAndroid Build Coastguard Worker                         const int stride =
225*35238bceSAndroid Build Coastguard Worker                             (strides[strideNdx] < 0 ? Array::inputTypeSize(inputTypes[inputTypeNdx]) * 2 :
226*35238bceSAndroid Build Coastguard Worker                                                       strides[strideNdx]);
227*35238bceSAndroid Build Coastguard Worker                         const bool aligned = ((stride % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0) &&
228*35238bceSAndroid Build Coastguard Worker                                              (offsets[offsetNdx] % Array::inputTypeSize(inputTypes[inputTypeNdx]) == 0);
229*35238bceSAndroid Build Coastguard Worker 
230*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
231*35238bceSAndroid Build Coastguard Worker                             inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2, Array::STORAGE_BUFFER,
232*35238bceSAndroid Build Coastguard Worker                             Array::USAGE_DYNAMIC_DRAW, 2, offsets[offsetNdx], stride, false,
233*35238bceSAndroid Build Coastguard Worker                             GLValue::getMinValue(inputTypes[inputTypeNdx]),
234*35238bceSAndroid Build Coastguard Worker                             GLValue::getMaxValue(inputTypes[inputTypeNdx]));
235*35238bceSAndroid Build Coastguard Worker 
236*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec spec;
237*35238bceSAndroid Build Coastguard Worker                         spec.primitive = Array::PRIMITIVE_TRIANGLES;
238*35238bceSAndroid Build Coastguard Worker                         spec.drawCount = counts[countNdx];
239*35238bceSAndroid Build Coastguard Worker                         spec.first     = firsts[firstNdx];
240*35238bceSAndroid Build Coastguard Worker                         spec.arrays.push_back(arraySpec);
241*35238bceSAndroid Build Coastguard Worker 
242*35238bceSAndroid Build Coastguard Worker                         std::string name = Array::inputTypeToString(inputTypes[inputTypeNdx]) + "_first" +
243*35238bceSAndroid Build Coastguard Worker                                            typeToString(firsts[firstNdx]) + "_offset" +
244*35238bceSAndroid Build Coastguard Worker                                            typeToString(offsets[offsetNdx]) + "_stride" + typeToString(stride) +
245*35238bceSAndroid Build Coastguard Worker                                            "_quads" + typeToString(counts[countNdx]);
246*35238bceSAndroid Build Coastguard Worker                         if (aligned)
247*35238bceSAndroid Build Coastguard Worker                             addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec,
248*35238bceSAndroid Build Coastguard Worker                                                               name.c_str(), name.c_str()));
249*35238bceSAndroid Build Coastguard Worker                     }
250*35238bceSAndroid Build Coastguard Worker                 }
251*35238bceSAndroid Build Coastguard Worker             }
252*35238bceSAndroid Build Coastguard Worker         }
253*35238bceSAndroid Build Coastguard Worker     }
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker 
256*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOffsetTests : public TestCaseGroup
257*35238bceSAndroid Build Coastguard Worker {
258*35238bceSAndroid Build Coastguard Worker public:
259*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOffsetTests(Context &context);
260*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayOffsetTests(void);
261*35238bceSAndroid Build Coastguard Worker 
262*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
263*35238bceSAndroid Build Coastguard Worker 
264*35238bceSAndroid Build Coastguard Worker private:
265*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOffsetTests(const SingleVertexArrayOffsetTests &other);
266*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOffsetTests &operator=(const SingleVertexArrayOffsetTests &other);
267*35238bceSAndroid Build Coastguard Worker };
268*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayOffsetTests(Context & context)269*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests::SingleVertexArrayOffsetTests(Context &context)
270*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "offset", "Single vertex atribute offset element")
271*35238bceSAndroid Build Coastguard Worker {
272*35238bceSAndroid Build Coastguard Worker }
273*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayOffsetTests(void)274*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests::~SingleVertexArrayOffsetTests(void)
275*35238bceSAndroid Build Coastguard Worker {
276*35238bceSAndroid Build Coastguard Worker }
277*35238bceSAndroid Build Coastguard Worker 
init(void)278*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOffsetTests::init(void)
279*35238bceSAndroid Build Coastguard Worker {
280*35238bceSAndroid Build Coastguard Worker     // Test strides with different input types, component counts and storage, Usage(?)
281*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_FIXED};
282*35238bceSAndroid Build Coastguard Worker     int counts[]                  = {1, 256};
283*35238bceSAndroid Build Coastguard Worker     int offsets[]                 = {1, 4, 17, 32};
284*35238bceSAndroid Build Coastguard Worker     int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
285*35238bceSAndroid Build Coastguard Worker 
286*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
287*35238bceSAndroid Build Coastguard Worker     {
288*35238bceSAndroid Build Coastguard Worker         for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
289*35238bceSAndroid Build Coastguard Worker         {
290*35238bceSAndroid Build Coastguard Worker             for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
291*35238bceSAndroid Build Coastguard Worker             {
292*35238bceSAndroid Build Coastguard Worker                 for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
293*35238bceSAndroid Build Coastguard Worker                 {
294*35238bceSAndroid Build Coastguard Worker                     const int stride   = (strides[strideNdx] < 0 ? Array::inputTypeSize(inputTypes[inputTypeNdx]) * 2 :
295*35238bceSAndroid Build Coastguard Worker                                                                    strides[strideNdx]);
296*35238bceSAndroid Build Coastguard Worker                     const bool aligned = ((stride % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0) &&
297*35238bceSAndroid Build Coastguard Worker                                          ((offsets[offsetNdx] % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0);
298*35238bceSAndroid Build Coastguard Worker 
299*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec::ArraySpec arraySpec(
300*35238bceSAndroid Build Coastguard Worker                         inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2, Array::STORAGE_BUFFER,
301*35238bceSAndroid Build Coastguard Worker                         Array::USAGE_DYNAMIC_DRAW, 2, offsets[offsetNdx], stride, false,
302*35238bceSAndroid Build Coastguard Worker                         GLValue::getMinValue(inputTypes[inputTypeNdx]), GLValue::getMaxValue(inputTypes[inputTypeNdx]));
303*35238bceSAndroid Build Coastguard Worker 
304*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec spec;
305*35238bceSAndroid Build Coastguard Worker                     spec.primitive = Array::PRIMITIVE_TRIANGLES;
306*35238bceSAndroid Build Coastguard Worker                     spec.drawCount = counts[countNdx];
307*35238bceSAndroid Build Coastguard Worker                     spec.first     = 0;
308*35238bceSAndroid Build Coastguard Worker                     spec.arrays.push_back(arraySpec);
309*35238bceSAndroid Build Coastguard Worker 
310*35238bceSAndroid Build Coastguard Worker                     std::string name = spec.getName();
311*35238bceSAndroid Build Coastguard Worker                     if (aligned)
312*35238bceSAndroid Build Coastguard Worker                         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
313*35238bceSAndroid Build Coastguard Worker                                                           name.c_str()));
314*35238bceSAndroid Build Coastguard Worker                 }
315*35238bceSAndroid Build Coastguard Worker             }
316*35238bceSAndroid Build Coastguard Worker         }
317*35238bceSAndroid Build Coastguard Worker     }
318*35238bceSAndroid Build Coastguard Worker }
319*35238bceSAndroid Build Coastguard Worker 
320*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayNormalizeTests : public TestCaseGroup
321*35238bceSAndroid Build Coastguard Worker {
322*35238bceSAndroid Build Coastguard Worker public:
323*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayNormalizeTests(Context &context);
324*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayNormalizeTests(void);
325*35238bceSAndroid Build Coastguard Worker 
326*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
327*35238bceSAndroid Build Coastguard Worker 
328*35238bceSAndroid Build Coastguard Worker private:
329*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayNormalizeTests(const SingleVertexArrayNormalizeTests &other);
330*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayNormalizeTests &operator=(const SingleVertexArrayNormalizeTests &other);
331*35238bceSAndroid Build Coastguard Worker };
332*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayNormalizeTests(Context & context)333*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests::SingleVertexArrayNormalizeTests(Context &context)
334*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "normalize", "Single normalize vertex atribute")
335*35238bceSAndroid Build Coastguard Worker {
336*35238bceSAndroid Build Coastguard Worker }
337*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayNormalizeTests(void)338*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests::~SingleVertexArrayNormalizeTests(void)
339*35238bceSAndroid Build Coastguard Worker {
340*35238bceSAndroid Build Coastguard Worker }
341*35238bceSAndroid Build Coastguard Worker 
init(void)342*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayNormalizeTests::init(void)
343*35238bceSAndroid Build Coastguard Worker {
344*35238bceSAndroid Build Coastguard Worker     // Test normalization with different input types, component counts and storage
345*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT,         Array::INPUTTYPE_SHORT,
346*35238bceSAndroid Build Coastguard Worker                                      Array::INPUTTYPE_BYTE,          Array::INPUTTYPE_UNSIGNED_SHORT,
347*35238bceSAndroid Build Coastguard Worker                                      Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_FIXED};
348*35238bceSAndroid Build Coastguard Worker     Array::Storage storages[]     = {Array::STORAGE_USER};
349*35238bceSAndroid Build Coastguard Worker     int counts[]                  = {1, 256};
350*35238bceSAndroid Build Coastguard Worker 
351*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
352*35238bceSAndroid Build Coastguard Worker     {
353*35238bceSAndroid Build Coastguard Worker         for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
354*35238bceSAndroid Build Coastguard Worker         {
355*35238bceSAndroid Build Coastguard Worker             for (int componentCount = 2; componentCount < 5; componentCount++)
356*35238bceSAndroid Build Coastguard Worker             {
357*35238bceSAndroid Build Coastguard Worker                 for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
358*35238bceSAndroid Build Coastguard Worker                 {
359*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec::ArraySpec arraySpec(
360*35238bceSAndroid Build Coastguard Worker                         inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC4, storages[storageNdx],
361*35238bceSAndroid Build Coastguard Worker                         Array::USAGE_DYNAMIC_DRAW, componentCount, 0, 0, true,
362*35238bceSAndroid Build Coastguard Worker                         GLValue::getMinValue(inputTypes[inputTypeNdx]), GLValue::getMaxValue(inputTypes[inputTypeNdx]));
363*35238bceSAndroid Build Coastguard Worker 
364*35238bceSAndroid Build Coastguard Worker                     MultiVertexArrayTest::Spec spec;
365*35238bceSAndroid Build Coastguard Worker                     spec.primitive = Array::PRIMITIVE_TRIANGLES;
366*35238bceSAndroid Build Coastguard Worker                     spec.drawCount = counts[countNdx];
367*35238bceSAndroid Build Coastguard Worker                     spec.first     = 0;
368*35238bceSAndroid Build Coastguard Worker                     spec.arrays.push_back(arraySpec);
369*35238bceSAndroid Build Coastguard Worker 
370*35238bceSAndroid Build Coastguard Worker                     std::string name = spec.getName();
371*35238bceSAndroid Build Coastguard Worker                     addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
372*35238bceSAndroid Build Coastguard Worker                                                       name.c_str()));
373*35238bceSAndroid Build Coastguard Worker                 }
374*35238bceSAndroid Build Coastguard Worker             }
375*35238bceSAndroid Build Coastguard Worker         }
376*35238bceSAndroid Build Coastguard Worker     }
377*35238bceSAndroid Build Coastguard Worker }
378*35238bceSAndroid Build Coastguard Worker 
379*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOutputTypeTests : public TestCaseGroup
380*35238bceSAndroid Build Coastguard Worker {
381*35238bceSAndroid Build Coastguard Worker public:
382*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOutputTypeTests(Context &context);
383*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayOutputTypeTests(void);
384*35238bceSAndroid Build Coastguard Worker 
385*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
386*35238bceSAndroid Build Coastguard Worker 
387*35238bceSAndroid Build Coastguard Worker private:
388*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOutputTypeTests(const SingleVertexArrayOutputTypeTests &other);
389*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayOutputTypeTests &operator=(const SingleVertexArrayOutputTypeTests &other);
390*35238bceSAndroid Build Coastguard Worker };
391*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayOutputTypeTests(Context & context)392*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests::SingleVertexArrayOutputTypeTests(Context &context)
393*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "output_types", "Single output type vertex atribute")
394*35238bceSAndroid Build Coastguard Worker {
395*35238bceSAndroid Build Coastguard Worker }
396*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayOutputTypeTests(void)397*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests::~SingleVertexArrayOutputTypeTests(void)
398*35238bceSAndroid Build Coastguard Worker {
399*35238bceSAndroid Build Coastguard Worker }
400*35238bceSAndroid Build Coastguard Worker 
init(void)401*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOutputTypeTests::init(void)
402*35238bceSAndroid Build Coastguard Worker {
403*35238bceSAndroid Build Coastguard Worker     // Test output types with different input types, component counts and storage, Usage?, Precision?, float?
404*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[]   = {Array::INPUTTYPE_FLOAT,         Array::INPUTTYPE_SHORT,
405*35238bceSAndroid Build Coastguard Worker                                        Array::INPUTTYPE_BYTE,          Array::INPUTTYPE_UNSIGNED_SHORT,
406*35238bceSAndroid Build Coastguard Worker                                        Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_FIXED};
407*35238bceSAndroid Build Coastguard Worker     Array::OutputType outputTypes[] = {Array::OUTPUTTYPE_VEC2, Array::OUTPUTTYPE_VEC3, Array::OUTPUTTYPE_VEC4};
408*35238bceSAndroid Build Coastguard Worker     Array::Storage storages[]       = {Array::STORAGE_USER};
409*35238bceSAndroid Build Coastguard Worker     int counts[]                    = {1, 256};
410*35238bceSAndroid Build Coastguard Worker 
411*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
412*35238bceSAndroid Build Coastguard Worker     {
413*35238bceSAndroid Build Coastguard Worker         for (int outputTypeNdx = 0; outputTypeNdx < DE_LENGTH_OF_ARRAY(outputTypes); outputTypeNdx++)
414*35238bceSAndroid Build Coastguard Worker         {
415*35238bceSAndroid Build Coastguard Worker             for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
416*35238bceSAndroid Build Coastguard Worker             {
417*35238bceSAndroid Build Coastguard Worker                 for (int componentCount = 2; componentCount < 5; componentCount++)
418*35238bceSAndroid Build Coastguard Worker                 {
419*35238bceSAndroid Build Coastguard Worker                     for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
420*35238bceSAndroid Build Coastguard Worker                     {
421*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
422*35238bceSAndroid Build Coastguard Worker                             inputTypes[inputTypeNdx], outputTypes[outputTypeNdx], storages[storageNdx],
423*35238bceSAndroid Build Coastguard Worker                             Array::USAGE_DYNAMIC_DRAW, componentCount, 0, 0, false,
424*35238bceSAndroid Build Coastguard Worker                             GLValue::getMinValue(inputTypes[inputTypeNdx]),
425*35238bceSAndroid Build Coastguard Worker                             GLValue::getMaxValue(inputTypes[inputTypeNdx]));
426*35238bceSAndroid Build Coastguard Worker 
427*35238bceSAndroid Build Coastguard Worker                         MultiVertexArrayTest::Spec spec;
428*35238bceSAndroid Build Coastguard Worker                         spec.primitive = Array::PRIMITIVE_TRIANGLES;
429*35238bceSAndroid Build Coastguard Worker                         spec.drawCount = counts[countNdx];
430*35238bceSAndroid Build Coastguard Worker                         spec.first     = 0;
431*35238bceSAndroid Build Coastguard Worker                         spec.arrays.push_back(arraySpec);
432*35238bceSAndroid Build Coastguard Worker 
433*35238bceSAndroid Build Coastguard Worker                         std::string name = spec.getName();
434*35238bceSAndroid Build Coastguard Worker                         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
435*35238bceSAndroid Build Coastguard Worker                                                           name.c_str()));
436*35238bceSAndroid Build Coastguard Worker                     }
437*35238bceSAndroid Build Coastguard Worker                 }
438*35238bceSAndroid Build Coastguard Worker             }
439*35238bceSAndroid Build Coastguard Worker         }
440*35238bceSAndroid Build Coastguard Worker     }
441*35238bceSAndroid Build Coastguard Worker }
442*35238bceSAndroid Build Coastguard Worker 
443*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayTestGroup : public TestCaseGroup
444*35238bceSAndroid Build Coastguard Worker {
445*35238bceSAndroid Build Coastguard Worker public:
446*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayTestGroup(Context &context);
447*35238bceSAndroid Build Coastguard Worker     virtual ~SingleVertexArrayTestGroup(void);
448*35238bceSAndroid Build Coastguard Worker 
449*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
450*35238bceSAndroid Build Coastguard Worker 
451*35238bceSAndroid Build Coastguard Worker private:
452*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayTestGroup(const SingleVertexArrayTestGroup &other);
453*35238bceSAndroid Build Coastguard Worker     SingleVertexArrayTestGroup &operator=(const SingleVertexArrayTestGroup &other);
454*35238bceSAndroid Build Coastguard Worker };
455*35238bceSAndroid Build Coastguard Worker 
SingleVertexArrayTestGroup(Context & context)456*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup::SingleVertexArrayTestGroup(Context &context)
457*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "single_attribute", "Single vertex atribute")
458*35238bceSAndroid Build Coastguard Worker {
459*35238bceSAndroid Build Coastguard Worker }
460*35238bceSAndroid Build Coastguard Worker 
~SingleVertexArrayTestGroup(void)461*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup::~SingleVertexArrayTestGroup(void)
462*35238bceSAndroid Build Coastguard Worker {
463*35238bceSAndroid Build Coastguard Worker }
464*35238bceSAndroid Build Coastguard Worker 
init(void)465*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayTestGroup::init(void)
466*35238bceSAndroid Build Coastguard Worker {
467*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayStrideTests(m_context));
468*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayNormalizeTests(m_context));
469*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayOutputTypeTests(m_context));
470*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayUsageTests(m_context));
471*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayOffsetTests(m_context));
472*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayFirstTests(m_context));
473*35238bceSAndroid Build Coastguard Worker }
474*35238bceSAndroid Build Coastguard Worker 
475*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayCountTests : public TestCaseGroup
476*35238bceSAndroid Build Coastguard Worker {
477*35238bceSAndroid Build Coastguard Worker public:
478*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayCountTests(Context &context);
479*35238bceSAndroid Build Coastguard Worker     virtual ~MultiVertexArrayCountTests(void);
480*35238bceSAndroid Build Coastguard Worker 
481*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
482*35238bceSAndroid Build Coastguard Worker 
483*35238bceSAndroid Build Coastguard Worker private:
484*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayCountTests(const MultiVertexArrayCountTests &other);
485*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayCountTests &operator=(const MultiVertexArrayCountTests &other);
486*35238bceSAndroid Build Coastguard Worker 
487*35238bceSAndroid Build Coastguard Worker     std::string getTestName(const MultiVertexArrayTest::Spec &spec);
488*35238bceSAndroid Build Coastguard Worker };
489*35238bceSAndroid Build Coastguard Worker 
MultiVertexArrayCountTests(Context & context)490*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests::MultiVertexArrayCountTests(Context &context)
491*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "attribute_count", "Attribute counts")
492*35238bceSAndroid Build Coastguard Worker {
493*35238bceSAndroid Build Coastguard Worker }
494*35238bceSAndroid Build Coastguard Worker 
~MultiVertexArrayCountTests(void)495*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests::~MultiVertexArrayCountTests(void)
496*35238bceSAndroid Build Coastguard Worker {
497*35238bceSAndroid Build Coastguard Worker }
498*35238bceSAndroid Build Coastguard Worker 
getTestName(const MultiVertexArrayTest::Spec & spec)499*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayCountTests::getTestName(const MultiVertexArrayTest::Spec &spec)
500*35238bceSAndroid Build Coastguard Worker {
501*35238bceSAndroid Build Coastguard Worker     std::stringstream name;
502*35238bceSAndroid Build Coastguard Worker     name << spec.arrays.size();
503*35238bceSAndroid Build Coastguard Worker 
504*35238bceSAndroid Build Coastguard Worker     return name.str();
505*35238bceSAndroid Build Coastguard Worker }
506*35238bceSAndroid Build Coastguard Worker 
init(void)507*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayCountTests::init(void)
508*35238bceSAndroid Build Coastguard Worker {
509*35238bceSAndroid Build Coastguard Worker     // Test attribute counts
510*35238bceSAndroid Build Coastguard Worker     int arrayCounts[] = {2, 3, 4, 5, 6, 7, 8};
511*35238bceSAndroid Build Coastguard Worker 
512*35238bceSAndroid Build Coastguard Worker     for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
513*35238bceSAndroid Build Coastguard Worker     {
514*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec spec;
515*35238bceSAndroid Build Coastguard Worker 
516*35238bceSAndroid Build Coastguard Worker         spec.primitive = Array::PRIMITIVE_TRIANGLES;
517*35238bceSAndroid Build Coastguard Worker         spec.drawCount = 256;
518*35238bceSAndroid Build Coastguard Worker         spec.first     = 0;
519*35238bceSAndroid Build Coastguard Worker 
520*35238bceSAndroid Build Coastguard Worker         for (int arrayNdx = 0; arrayNdx < arrayCounts[arrayCountNdx]; arrayNdx++)
521*35238bceSAndroid Build Coastguard Worker         {
522*35238bceSAndroid Build Coastguard Worker             MultiVertexArrayTest::Spec::ArraySpec arraySpec(
523*35238bceSAndroid Build Coastguard Worker                 Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
524*35238bceSAndroid Build Coastguard Worker                 false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
525*35238bceSAndroid Build Coastguard Worker 
526*35238bceSAndroid Build Coastguard Worker             spec.arrays.push_back(arraySpec);
527*35238bceSAndroid Build Coastguard Worker         }
528*35238bceSAndroid Build Coastguard Worker 
529*35238bceSAndroid Build Coastguard Worker         std::string name = getTestName(spec);
530*35238bceSAndroid Build Coastguard Worker         std::string desc = getTestName(spec);
531*35238bceSAndroid Build Coastguard Worker 
532*35238bceSAndroid Build Coastguard Worker         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
533*35238bceSAndroid Build Coastguard Worker     }
534*35238bceSAndroid Build Coastguard Worker }
535*35238bceSAndroid Build Coastguard Worker 
536*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayStorageTests : public TestCaseGroup
537*35238bceSAndroid Build Coastguard Worker {
538*35238bceSAndroid Build Coastguard Worker public:
539*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStorageTests(Context &context);
540*35238bceSAndroid Build Coastguard Worker     virtual ~MultiVertexArrayStorageTests(void);
541*35238bceSAndroid Build Coastguard Worker 
542*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
543*35238bceSAndroid Build Coastguard Worker 
544*35238bceSAndroid Build Coastguard Worker private:
545*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStorageTests(const MultiVertexArrayStorageTests &other);
546*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStorageTests &operator=(const MultiVertexArrayStorageTests &other);
547*35238bceSAndroid Build Coastguard Worker 
548*35238bceSAndroid Build Coastguard Worker     void addStorageCases(MultiVertexArrayTest::Spec spec, int depth);
549*35238bceSAndroid Build Coastguard Worker     std::string getTestName(const MultiVertexArrayTest::Spec &spec);
550*35238bceSAndroid Build Coastguard Worker };
551*35238bceSAndroid Build Coastguard Worker 
MultiVertexArrayStorageTests(Context & context)552*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests::MultiVertexArrayStorageTests(Context &context)
553*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "storage", "Attribute storages")
554*35238bceSAndroid Build Coastguard Worker {
555*35238bceSAndroid Build Coastguard Worker }
556*35238bceSAndroid Build Coastguard Worker 
~MultiVertexArrayStorageTests(void)557*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests::~MultiVertexArrayStorageTests(void)
558*35238bceSAndroid Build Coastguard Worker {
559*35238bceSAndroid Build Coastguard Worker }
560*35238bceSAndroid Build Coastguard Worker 
getTestName(const MultiVertexArrayTest::Spec & spec)561*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayStorageTests::getTestName(const MultiVertexArrayTest::Spec &spec)
562*35238bceSAndroid Build Coastguard Worker {
563*35238bceSAndroid Build Coastguard Worker     std::stringstream name;
564*35238bceSAndroid Build Coastguard Worker     name << spec.arrays.size();
565*35238bceSAndroid Build Coastguard Worker 
566*35238bceSAndroid Build Coastguard Worker     for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
567*35238bceSAndroid Build Coastguard Worker     {
568*35238bceSAndroid Build Coastguard Worker         name << "_" << Array::storageToString(spec.arrays[arrayNdx].storage);
569*35238bceSAndroid Build Coastguard Worker     }
570*35238bceSAndroid Build Coastguard Worker 
571*35238bceSAndroid Build Coastguard Worker     return name.str();
572*35238bceSAndroid Build Coastguard Worker }
573*35238bceSAndroid Build Coastguard Worker 
addStorageCases(MultiVertexArrayTest::Spec spec,int depth)574*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStorageTests::addStorageCases(MultiVertexArrayTest::Spec spec, int depth)
575*35238bceSAndroid Build Coastguard Worker {
576*35238bceSAndroid Build Coastguard Worker     if (depth == 0)
577*35238bceSAndroid Build Coastguard Worker     {
578*35238bceSAndroid Build Coastguard Worker         // Skip trivial case, used elsewhere
579*35238bceSAndroid Build Coastguard Worker         bool ok = false;
580*35238bceSAndroid Build Coastguard Worker         for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
581*35238bceSAndroid Build Coastguard Worker         {
582*35238bceSAndroid Build Coastguard Worker             if (spec.arrays[arrayNdx].storage != Array::STORAGE_USER)
583*35238bceSAndroid Build Coastguard Worker             {
584*35238bceSAndroid Build Coastguard Worker                 ok = true;
585*35238bceSAndroid Build Coastguard Worker                 break;
586*35238bceSAndroid Build Coastguard Worker             }
587*35238bceSAndroid Build Coastguard Worker         }
588*35238bceSAndroid Build Coastguard Worker 
589*35238bceSAndroid Build Coastguard Worker         if (!ok)
590*35238bceSAndroid Build Coastguard Worker             return;
591*35238bceSAndroid Build Coastguard Worker 
592*35238bceSAndroid Build Coastguard Worker         std::string name = getTestName(spec);
593*35238bceSAndroid Build Coastguard Worker         std::string desc = getTestName(spec);
594*35238bceSAndroid Build Coastguard Worker 
595*35238bceSAndroid Build Coastguard Worker         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
596*35238bceSAndroid Build Coastguard Worker         return;
597*35238bceSAndroid Build Coastguard Worker     }
598*35238bceSAndroid Build Coastguard Worker 
599*35238bceSAndroid Build Coastguard Worker     Array::Storage storages[] = {Array::STORAGE_USER, Array::STORAGE_BUFFER};
600*35238bceSAndroid Build Coastguard Worker     for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
601*35238bceSAndroid Build Coastguard Worker     {
602*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
603*35238bceSAndroid Build Coastguard Worker             Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, storages[storageNdx], Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
604*35238bceSAndroid Build Coastguard Worker             false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
605*35238bceSAndroid Build Coastguard Worker 
606*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec _spec = spec;
607*35238bceSAndroid Build Coastguard Worker         _spec.arrays.push_back(arraySpec);
608*35238bceSAndroid Build Coastguard Worker         addStorageCases(_spec, depth - 1);
609*35238bceSAndroid Build Coastguard Worker     }
610*35238bceSAndroid Build Coastguard Worker }
611*35238bceSAndroid Build Coastguard Worker 
init(void)612*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStorageTests::init(void)
613*35238bceSAndroid Build Coastguard Worker {
614*35238bceSAndroid Build Coastguard Worker     // Test different storages
615*35238bceSAndroid Build Coastguard Worker     int arrayCounts[] = {3};
616*35238bceSAndroid Build Coastguard Worker 
617*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTest::Spec spec;
618*35238bceSAndroid Build Coastguard Worker 
619*35238bceSAndroid Build Coastguard Worker     spec.primitive = Array::PRIMITIVE_TRIANGLES;
620*35238bceSAndroid Build Coastguard Worker     spec.drawCount = 256;
621*35238bceSAndroid Build Coastguard Worker     spec.first     = 0;
622*35238bceSAndroid Build Coastguard Worker 
623*35238bceSAndroid Build Coastguard Worker     for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
624*35238bceSAndroid Build Coastguard Worker         addStorageCases(spec, arrayCounts[arrayCountNdx]);
625*35238bceSAndroid Build Coastguard Worker }
626*35238bceSAndroid Build Coastguard Worker 
627*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayStrideTests : public TestCaseGroup
628*35238bceSAndroid Build Coastguard Worker {
629*35238bceSAndroid Build Coastguard Worker public:
630*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStrideTests(Context &context);
631*35238bceSAndroid Build Coastguard Worker     virtual ~MultiVertexArrayStrideTests(void);
632*35238bceSAndroid Build Coastguard Worker 
633*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
634*35238bceSAndroid Build Coastguard Worker 
635*35238bceSAndroid Build Coastguard Worker private:
636*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStrideTests(const MultiVertexArrayStrideTests &other);
637*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayStrideTests &operator=(const MultiVertexArrayStrideTests &other);
638*35238bceSAndroid Build Coastguard Worker 
639*35238bceSAndroid Build Coastguard Worker     void addStrideCases(MultiVertexArrayTest::Spec spec, int depth);
640*35238bceSAndroid Build Coastguard Worker     std::string getTestName(const MultiVertexArrayTest::Spec &spec);
641*35238bceSAndroid Build Coastguard Worker };
642*35238bceSAndroid Build Coastguard Worker 
MultiVertexArrayStrideTests(Context & context)643*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests::MultiVertexArrayStrideTests(Context &context) : TestCaseGroup(context, "stride", "Strides")
644*35238bceSAndroid Build Coastguard Worker {
645*35238bceSAndroid Build Coastguard Worker }
646*35238bceSAndroid Build Coastguard Worker 
~MultiVertexArrayStrideTests(void)647*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests::~MultiVertexArrayStrideTests(void)
648*35238bceSAndroid Build Coastguard Worker {
649*35238bceSAndroid Build Coastguard Worker }
650*35238bceSAndroid Build Coastguard Worker 
getTestName(const MultiVertexArrayTest::Spec & spec)651*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayStrideTests::getTestName(const MultiVertexArrayTest::Spec &spec)
652*35238bceSAndroid Build Coastguard Worker {
653*35238bceSAndroid Build Coastguard Worker     std::stringstream name;
654*35238bceSAndroid Build Coastguard Worker 
655*35238bceSAndroid Build Coastguard Worker     name << spec.arrays.size();
656*35238bceSAndroid Build Coastguard Worker 
657*35238bceSAndroid Build Coastguard Worker     for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
658*35238bceSAndroid Build Coastguard Worker     {
659*35238bceSAndroid Build Coastguard Worker         name << "_" << Array::inputTypeToString(spec.arrays[arrayNdx].inputType) << spec.arrays[arrayNdx].componentCount
660*35238bceSAndroid Build Coastguard Worker              << "_" << spec.arrays[arrayNdx].stride;
661*35238bceSAndroid Build Coastguard Worker     }
662*35238bceSAndroid Build Coastguard Worker 
663*35238bceSAndroid Build Coastguard Worker     return name.str();
664*35238bceSAndroid Build Coastguard Worker }
665*35238bceSAndroid Build Coastguard Worker 
init(void)666*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStrideTests::init(void)
667*35238bceSAndroid Build Coastguard Worker {
668*35238bceSAndroid Build Coastguard Worker     // Test different strides, with multiple arrays, input types??
669*35238bceSAndroid Build Coastguard Worker     int arrayCounts[] = {3};
670*35238bceSAndroid Build Coastguard Worker 
671*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTest::Spec spec;
672*35238bceSAndroid Build Coastguard Worker 
673*35238bceSAndroid Build Coastguard Worker     spec.primitive = Array::PRIMITIVE_TRIANGLES;
674*35238bceSAndroid Build Coastguard Worker     spec.drawCount = 256;
675*35238bceSAndroid Build Coastguard Worker     spec.first     = 0;
676*35238bceSAndroid Build Coastguard Worker 
677*35238bceSAndroid Build Coastguard Worker     for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
678*35238bceSAndroid Build Coastguard Worker         addStrideCases(spec, arrayCounts[arrayCountNdx]);
679*35238bceSAndroid Build Coastguard Worker }
680*35238bceSAndroid Build Coastguard Worker 
addStrideCases(MultiVertexArrayTest::Spec spec,int depth)681*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStrideTests::addStrideCases(MultiVertexArrayTest::Spec spec, int depth)
682*35238bceSAndroid Build Coastguard Worker {
683*35238bceSAndroid Build Coastguard Worker     if (depth == 0)
684*35238bceSAndroid Build Coastguard Worker     {
685*35238bceSAndroid Build Coastguard Worker         std::string name = getTestName(spec);
686*35238bceSAndroid Build Coastguard Worker         std::string desc = getTestName(spec);
687*35238bceSAndroid Build Coastguard Worker         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
688*35238bceSAndroid Build Coastguard Worker         return;
689*35238bceSAndroid Build Coastguard Worker     }
690*35238bceSAndroid Build Coastguard Worker 
691*35238bceSAndroid Build Coastguard Worker     int strides[] = {0, -1, 17, 32};
692*35238bceSAndroid Build Coastguard Worker 
693*35238bceSAndroid Build Coastguard Worker     for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
694*35238bceSAndroid Build Coastguard Worker     {
695*35238bceSAndroid Build Coastguard Worker         const int componentCount = 2;
696*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
697*35238bceSAndroid Build Coastguard Worker             Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW,
698*35238bceSAndroid Build Coastguard Worker             componentCount, 0,
699*35238bceSAndroid Build Coastguard Worker             (strides[strideNdx] >= 0 ? strides[strideNdx] :
700*35238bceSAndroid Build Coastguard Worker                                        componentCount * Array::inputTypeSize(Array::INPUTTYPE_FLOAT)),
701*35238bceSAndroid Build Coastguard Worker             false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
702*35238bceSAndroid Build Coastguard Worker 
703*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec _spec = spec;
704*35238bceSAndroid Build Coastguard Worker         _spec.arrays.push_back(arraySpec);
705*35238bceSAndroid Build Coastguard Worker         addStrideCases(_spec, depth - 1);
706*35238bceSAndroid Build Coastguard Worker     }
707*35238bceSAndroid Build Coastguard Worker }
708*35238bceSAndroid Build Coastguard Worker 
709*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayOutputTests : public TestCaseGroup
710*35238bceSAndroid Build Coastguard Worker {
711*35238bceSAndroid Build Coastguard Worker public:
712*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayOutputTests(Context &context);
713*35238bceSAndroid Build Coastguard Worker     virtual ~MultiVertexArrayOutputTests(void);
714*35238bceSAndroid Build Coastguard Worker 
715*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
716*35238bceSAndroid Build Coastguard Worker 
717*35238bceSAndroid Build Coastguard Worker private:
718*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayOutputTests(const MultiVertexArrayOutputTests &other);
719*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayOutputTests &operator=(const MultiVertexArrayOutputTests &other);
720*35238bceSAndroid Build Coastguard Worker 
721*35238bceSAndroid Build Coastguard Worker     void addInputTypeCases(MultiVertexArrayTest::Spec spec, int depth);
722*35238bceSAndroid Build Coastguard Worker     std::string getTestName(const MultiVertexArrayTest::Spec &spec);
723*35238bceSAndroid Build Coastguard Worker };
724*35238bceSAndroid Build Coastguard Worker 
MultiVertexArrayOutputTests(Context & context)725*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests::MultiVertexArrayOutputTests(Context &context)
726*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "input_types", "input types")
727*35238bceSAndroid Build Coastguard Worker {
728*35238bceSAndroid Build Coastguard Worker }
729*35238bceSAndroid Build Coastguard Worker 
~MultiVertexArrayOutputTests(void)730*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests::~MultiVertexArrayOutputTests(void)
731*35238bceSAndroid Build Coastguard Worker {
732*35238bceSAndroid Build Coastguard Worker }
733*35238bceSAndroid Build Coastguard Worker 
getTestName(const MultiVertexArrayTest::Spec & spec)734*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayOutputTests::getTestName(const MultiVertexArrayTest::Spec &spec)
735*35238bceSAndroid Build Coastguard Worker {
736*35238bceSAndroid Build Coastguard Worker     std::stringstream name;
737*35238bceSAndroid Build Coastguard Worker 
738*35238bceSAndroid Build Coastguard Worker     name << spec.arrays.size();
739*35238bceSAndroid Build Coastguard Worker 
740*35238bceSAndroid Build Coastguard Worker     for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
741*35238bceSAndroid Build Coastguard Worker     {
742*35238bceSAndroid Build Coastguard Worker         name << "_" << Array::inputTypeToString(spec.arrays[arrayNdx].inputType) << spec.arrays[arrayNdx].componentCount
743*35238bceSAndroid Build Coastguard Worker              << "_" << Array::outputTypeToString(spec.arrays[arrayNdx].outputType);
744*35238bceSAndroid Build Coastguard Worker     }
745*35238bceSAndroid Build Coastguard Worker 
746*35238bceSAndroid Build Coastguard Worker     return name.str();
747*35238bceSAndroid Build Coastguard Worker }
748*35238bceSAndroid Build Coastguard Worker 
init(void)749*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayOutputTests::init(void)
750*35238bceSAndroid Build Coastguard Worker {
751*35238bceSAndroid Build Coastguard Worker     // Test different input types, with multiple arrays
752*35238bceSAndroid Build Coastguard Worker     int arrayCounts[] = {3};
753*35238bceSAndroid Build Coastguard Worker 
754*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTest::Spec spec;
755*35238bceSAndroid Build Coastguard Worker 
756*35238bceSAndroid Build Coastguard Worker     spec.primitive = Array::PRIMITIVE_TRIANGLES;
757*35238bceSAndroid Build Coastguard Worker     spec.drawCount = 256;
758*35238bceSAndroid Build Coastguard Worker     spec.first     = 0;
759*35238bceSAndroid Build Coastguard Worker 
760*35238bceSAndroid Build Coastguard Worker     for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
761*35238bceSAndroid Build Coastguard Worker         addInputTypeCases(spec, arrayCounts[arrayCountNdx]);
762*35238bceSAndroid Build Coastguard Worker }
763*35238bceSAndroid Build Coastguard Worker 
addInputTypeCases(MultiVertexArrayTest::Spec spec,int depth)764*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayOutputTests::addInputTypeCases(MultiVertexArrayTest::Spec spec, int depth)
765*35238bceSAndroid Build Coastguard Worker {
766*35238bceSAndroid Build Coastguard Worker     if (depth == 0)
767*35238bceSAndroid Build Coastguard Worker     {
768*35238bceSAndroid Build Coastguard Worker         std::string name = getTestName(spec);
769*35238bceSAndroid Build Coastguard Worker         std::string desc = getTestName(spec);
770*35238bceSAndroid Build Coastguard Worker         addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
771*35238bceSAndroid Build Coastguard Worker         return;
772*35238bceSAndroid Build Coastguard Worker     }
773*35238bceSAndroid Build Coastguard Worker 
774*35238bceSAndroid Build Coastguard Worker     Array::InputType inputTypes[] = {Array::INPUTTYPE_FIXED, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_SHORT,
775*35238bceSAndroid Build Coastguard Worker                                      Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_UNSIGNED_SHORT};
776*35238bceSAndroid Build Coastguard Worker     for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
777*35238bceSAndroid Build Coastguard Worker     {
778*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec::ArraySpec arraySpec(
779*35238bceSAndroid Build Coastguard Worker             inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
780*35238bceSAndroid Build Coastguard Worker             false, GLValue::getMinValue(inputTypes[inputTypeNdx]), GLValue::getMaxValue(inputTypes[inputTypeNdx]));
781*35238bceSAndroid Build Coastguard Worker 
782*35238bceSAndroid Build Coastguard Worker         MultiVertexArrayTest::Spec _spec = spec;
783*35238bceSAndroid Build Coastguard Worker         _spec.arrays.push_back(arraySpec);
784*35238bceSAndroid Build Coastguard Worker         addInputTypeCases(_spec, depth - 1);
785*35238bceSAndroid Build Coastguard Worker     }
786*35238bceSAndroid Build Coastguard Worker }
787*35238bceSAndroid Build Coastguard Worker 
788*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayTestGroup : public TestCaseGroup
789*35238bceSAndroid Build Coastguard Worker {
790*35238bceSAndroid Build Coastguard Worker public:
791*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTestGroup(Context &context);
792*35238bceSAndroid Build Coastguard Worker     virtual ~MultiVertexArrayTestGroup(void);
793*35238bceSAndroid Build Coastguard Worker 
794*35238bceSAndroid Build Coastguard Worker     virtual void init(void);
795*35238bceSAndroid Build Coastguard Worker 
796*35238bceSAndroid Build Coastguard Worker private:
797*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTestGroup(const MultiVertexArrayTestGroup &other);
798*35238bceSAndroid Build Coastguard Worker     MultiVertexArrayTestGroup &operator=(const MultiVertexArrayTestGroup &other);
799*35238bceSAndroid Build Coastguard Worker };
800*35238bceSAndroid Build Coastguard Worker 
MultiVertexArrayTestGroup(Context & context)801*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup::MultiVertexArrayTestGroup(Context &context)
802*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "multiple_attributes", "Multiple vertex atributes")
803*35238bceSAndroid Build Coastguard Worker {
804*35238bceSAndroid Build Coastguard Worker }
805*35238bceSAndroid Build Coastguard Worker 
~MultiVertexArrayTestGroup(void)806*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup::~MultiVertexArrayTestGroup(void)
807*35238bceSAndroid Build Coastguard Worker {
808*35238bceSAndroid Build Coastguard Worker }
809*35238bceSAndroid Build Coastguard Worker 
init(void)810*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayTestGroup::init(void)
811*35238bceSAndroid Build Coastguard Worker {
812*35238bceSAndroid Build Coastguard Worker     addChild(new MultiVertexArrayCountTests(m_context));
813*35238bceSAndroid Build Coastguard Worker     addChild(new MultiVertexArrayStorageTests(m_context));
814*35238bceSAndroid Build Coastguard Worker     addChild(new MultiVertexArrayStrideTests(m_context));
815*35238bceSAndroid Build Coastguard Worker     addChild(new MultiVertexArrayOutputTests(m_context));
816*35238bceSAndroid Build Coastguard Worker }
817*35238bceSAndroid Build Coastguard Worker 
VertexArrayTestGroup(Context & context)818*35238bceSAndroid Build Coastguard Worker VertexArrayTestGroup::VertexArrayTestGroup(Context &context)
819*35238bceSAndroid Build Coastguard Worker     : TestCaseGroup(context, "vertex_arrays", "Vertex array and array tests")
820*35238bceSAndroid Build Coastguard Worker {
821*35238bceSAndroid Build Coastguard Worker }
822*35238bceSAndroid Build Coastguard Worker 
~VertexArrayTestGroup(void)823*35238bceSAndroid Build Coastguard Worker VertexArrayTestGroup::~VertexArrayTestGroup(void)
824*35238bceSAndroid Build Coastguard Worker {
825*35238bceSAndroid Build Coastguard Worker }
826*35238bceSAndroid Build Coastguard Worker 
init(void)827*35238bceSAndroid Build Coastguard Worker void VertexArrayTestGroup::init(void)
828*35238bceSAndroid Build Coastguard Worker {
829*35238bceSAndroid Build Coastguard Worker     addChild(new SingleVertexArrayTestGroup(m_context));
830*35238bceSAndroid Build Coastguard Worker     addChild(new MultiVertexArrayTestGroup(m_context));
831*35238bceSAndroid Build Coastguard Worker }
832*35238bceSAndroid Build Coastguard Worker 
833*35238bceSAndroid Build Coastguard Worker } // namespace Functional
834*35238bceSAndroid Build Coastguard Worker } // namespace gles2
835*35238bceSAndroid Build Coastguard Worker } // namespace deqp
836