1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Vertex array and buffer tests
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es3fVertexArrayTest.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsVertexArrayTests.hpp"
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard Worker #include <sstream>
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 gles3
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 class SingleVertexArrayUsageGroup : public TestCaseGroup
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker public:
41*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageGroup(Context &context, Array::Usage usage);
42*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayUsageGroup(void);
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker virtual void init(void);
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker private:
47*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageGroup(const SingleVertexArrayUsageGroup &other);
48*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageGroup &operator=(const SingleVertexArrayUsageGroup &other);
49*35238bceSAndroid Build Coastguard Worker
50*35238bceSAndroid Build Coastguard Worker Array::Usage m_usage;
51*35238bceSAndroid Build Coastguard Worker };
52*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayUsageGroup(Context & context,Array::Usage usage)53*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageGroup::SingleVertexArrayUsageGroup(Context &context, Array::Usage usage)
54*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::usageTypeToString(usage).c_str(), Array::usageTypeToString(usage).c_str())
55*35238bceSAndroid Build Coastguard Worker , m_usage(usage)
56*35238bceSAndroid Build Coastguard Worker {
57*35238bceSAndroid Build Coastguard Worker }
58*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayUsageGroup(void)59*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageGroup::~SingleVertexArrayUsageGroup(void)
60*35238bceSAndroid Build Coastguard Worker {
61*35238bceSAndroid Build Coastguard Worker }
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker template <class T>
typeToString(T t)64*35238bceSAndroid Build Coastguard Worker static std::string typeToString(T t)
65*35238bceSAndroid Build Coastguard Worker {
66*35238bceSAndroid Build Coastguard Worker std::stringstream strm;
67*35238bceSAndroid Build Coastguard Worker strm << t;
68*35238bceSAndroid Build Coastguard Worker return strm.str();
69*35238bceSAndroid Build Coastguard Worker }
70*35238bceSAndroid Build Coastguard Worker
init(void)71*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayUsageGroup::init(void)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker int counts[] = {1, 256};
74*35238bceSAndroid Build Coastguard Worker int strides[] = {0, -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
75*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_FIXED, Array::INPUTTYPE_SHORT,
76*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_BYTE};
77*35238bceSAndroid Build Coastguard Worker
78*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
81*35238bceSAndroid Build Coastguard Worker {
82*35238bceSAndroid Build Coastguard Worker for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
83*35238bceSAndroid Build Coastguard Worker {
84*35238bceSAndroid Build Coastguard Worker const int stride =
85*35238bceSAndroid Build Coastguard Worker (strides[strideNdx] < 0 ? Array::inputTypeSize(inputTypes[inputTypeNdx]) * 2 : strides[strideNdx]);
86*35238bceSAndroid Build Coastguard Worker const bool aligned = (stride % Array::inputTypeSize(inputTypes[inputTypeNdx])) == 0;
87*35238bceSAndroid Build Coastguard Worker const std::string name = "stride" + typeToString(stride) + "_" +
88*35238bceSAndroid Build Coastguard Worker Array::inputTypeToString(inputTypes[inputTypeNdx]) + "_quads" +
89*35238bceSAndroid Build Coastguard Worker typeToString(counts[countNdx]);
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2,
92*35238bceSAndroid Build Coastguard Worker Array::STORAGE_BUFFER, m_usage, 2, 0, stride, false,
93*35238bceSAndroid Build Coastguard Worker GLValue::getMinValue(inputTypes[inputTypeNdx]),
94*35238bceSAndroid Build Coastguard Worker GLValue::getMaxValue(inputTypes[inputTypeNdx]));
95*35238bceSAndroid Build Coastguard Worker
96*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
97*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
98*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
99*35238bceSAndroid Build Coastguard Worker spec.first = 0;
100*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Worker if (aligned)
103*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
104*35238bceSAndroid Build Coastguard Worker name.c_str()));
105*35238bceSAndroid Build Coastguard Worker }
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 class SingleVertexArrayUsageTests : public TestCaseGroup
111*35238bceSAndroid Build Coastguard Worker {
112*35238bceSAndroid Build Coastguard Worker public:
113*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests(Context &context);
114*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayUsageTests(void);
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker virtual void init(void);
117*35238bceSAndroid Build Coastguard Worker
118*35238bceSAndroid Build Coastguard Worker private:
119*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests(const SingleVertexArrayUsageTests &other);
120*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests &operator=(const SingleVertexArrayUsageTests &other);
121*35238bceSAndroid Build Coastguard Worker };
122*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayUsageTests(Context & context)123*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests::SingleVertexArrayUsageTests(Context &context)
124*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "usages", "Single vertex atribute, usage")
125*35238bceSAndroid Build Coastguard Worker {
126*35238bceSAndroid Build Coastguard Worker }
127*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayUsageTests(void)128*35238bceSAndroid Build Coastguard Worker SingleVertexArrayUsageTests::~SingleVertexArrayUsageTests(void)
129*35238bceSAndroid Build Coastguard Worker {
130*35238bceSAndroid Build Coastguard Worker }
131*35238bceSAndroid Build Coastguard Worker
init(void)132*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayUsageTests::init(void)
133*35238bceSAndroid Build Coastguard Worker {
134*35238bceSAndroid Build Coastguard Worker // Test usage
135*35238bceSAndroid Build Coastguard Worker Array::Usage usages[] = {Array::USAGE_STATIC_DRAW, Array::USAGE_STREAM_DRAW, Array::USAGE_DYNAMIC_DRAW,
136*35238bceSAndroid Build Coastguard Worker Array::USAGE_STATIC_COPY, Array::USAGE_STREAM_COPY, Array::USAGE_DYNAMIC_COPY,
137*35238bceSAndroid Build Coastguard Worker Array::USAGE_STATIC_READ, Array::USAGE_STREAM_READ, Array::USAGE_DYNAMIC_READ};
138*35238bceSAndroid Build Coastguard Worker for (int usageNdx = 0; usageNdx < DE_LENGTH_OF_ARRAY(usages); usageNdx++)
139*35238bceSAndroid Build Coastguard Worker {
140*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayUsageGroup(m_context, usages[usageNdx]));
141*35238bceSAndroid Build Coastguard Worker }
142*35238bceSAndroid Build Coastguard Worker }
143*35238bceSAndroid Build Coastguard Worker
144*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayStrideGroup : public TestCaseGroup
145*35238bceSAndroid Build Coastguard Worker {
146*35238bceSAndroid Build Coastguard Worker public:
147*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideGroup(Context &context, Array::InputType type);
148*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayStrideGroup(void);
149*35238bceSAndroid Build Coastguard Worker
150*35238bceSAndroid Build Coastguard Worker virtual void init(void);
151*35238bceSAndroid Build Coastguard Worker
152*35238bceSAndroid Build Coastguard Worker private:
153*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideGroup(const SingleVertexArrayStrideGroup &other);
154*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideGroup &operator=(const SingleVertexArrayStrideGroup &other);
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker Array::InputType m_type;
157*35238bceSAndroid Build Coastguard Worker };
158*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayStrideGroup(Context & context,Array::InputType type)159*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideGroup::SingleVertexArrayStrideGroup(Context &context, Array::InputType type)
160*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::inputTypeToString(type).c_str(), Array::inputTypeToString(type).c_str())
161*35238bceSAndroid Build Coastguard Worker , m_type(type)
162*35238bceSAndroid Build Coastguard Worker {
163*35238bceSAndroid Build Coastguard Worker }
164*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayStrideGroup(void)165*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideGroup::~SingleVertexArrayStrideGroup(void)
166*35238bceSAndroid Build Coastguard Worker {
167*35238bceSAndroid Build Coastguard Worker }
168*35238bceSAndroid Build Coastguard Worker
init(void)169*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayStrideGroup::init(void)
170*35238bceSAndroid Build Coastguard Worker {
171*35238bceSAndroid Build Coastguard Worker Array::Storage storages[] = {Array::STORAGE_USER, Array::STORAGE_BUFFER};
172*35238bceSAndroid Build Coastguard Worker int counts[] = {1, 256};
173*35238bceSAndroid Build Coastguard Worker int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
174*35238bceSAndroid Build Coastguard Worker
175*35238bceSAndroid Build Coastguard Worker for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
176*35238bceSAndroid Build Coastguard Worker {
177*35238bceSAndroid Build Coastguard Worker for (int componentCount = 2; componentCount < 5; componentCount++)
178*35238bceSAndroid Build Coastguard Worker {
179*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
180*35238bceSAndroid Build Coastguard Worker {
181*35238bceSAndroid Build Coastguard Worker for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
182*35238bceSAndroid Build Coastguard Worker {
183*35238bceSAndroid Build Coastguard Worker const bool packed =
184*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 || m_type == Array::INPUTTYPE_INT_2_10_10_10;
185*35238bceSAndroid Build Coastguard Worker const int stride = (strides[strideNdx] < 0) ?
186*35238bceSAndroid Build Coastguard Worker ((packed) ? (16) : (Array::inputTypeSize(m_type) * componentCount)) :
187*35238bceSAndroid Build Coastguard Worker (strides[strideNdx]);
188*35238bceSAndroid Build Coastguard Worker const int alignment =
189*35238bceSAndroid Build Coastguard Worker (packed) ? (Array::inputTypeSize(m_type) * componentCount) : (Array::inputTypeSize(m_type));
190*35238bceSAndroid Build Coastguard Worker const bool bufferUnaligned =
191*35238bceSAndroid Build Coastguard Worker (storages[storageNdx] == Array::STORAGE_BUFFER) && (stride % alignment) != 0;
192*35238bceSAndroid Build Coastguard Worker
193*35238bceSAndroid Build Coastguard Worker std::string name = Array::storageToString(storages[storageNdx]) + "_stride" + typeToString(stride) +
194*35238bceSAndroid Build Coastguard Worker "_components" + typeToString(componentCount) + "_quads" +
195*35238bceSAndroid Build Coastguard Worker typeToString(counts[countNdx]);
196*35238bceSAndroid Build Coastguard Worker
197*35238bceSAndroid Build Coastguard Worker if ((m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 ||
198*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_INT_2_10_10_10) &&
199*35238bceSAndroid Build Coastguard Worker componentCount != 4)
200*35238bceSAndroid Build Coastguard Worker continue;
201*35238bceSAndroid Build Coastguard Worker
202*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
203*35238bceSAndroid Build Coastguard Worker m_type, Array::OUTPUTTYPE_VEC4, storages[storageNdx], Array::USAGE_DYNAMIC_DRAW, componentCount,
204*35238bceSAndroid Build Coastguard Worker 0, stride, false, GLValue::getMinValue(m_type), GLValue::getMaxValue(m_type));
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
207*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
208*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
209*35238bceSAndroid Build Coastguard Worker spec.first = 0;
210*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
211*35238bceSAndroid Build Coastguard Worker
212*35238bceSAndroid Build Coastguard Worker if (!bufferUnaligned)
213*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
214*35238bceSAndroid Build Coastguard Worker name.c_str()));
215*35238bceSAndroid Build Coastguard Worker }
216*35238bceSAndroid Build Coastguard Worker }
217*35238bceSAndroid Build Coastguard Worker }
218*35238bceSAndroid Build Coastguard Worker }
219*35238bceSAndroid Build Coastguard Worker }
220*35238bceSAndroid Build Coastguard Worker
221*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayStrideTests : public TestCaseGroup
222*35238bceSAndroid Build Coastguard Worker {
223*35238bceSAndroid Build Coastguard Worker public:
224*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests(Context &context);
225*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayStrideTests(void);
226*35238bceSAndroid Build Coastguard Worker
227*35238bceSAndroid Build Coastguard Worker virtual void init(void);
228*35238bceSAndroid Build Coastguard Worker
229*35238bceSAndroid Build Coastguard Worker private:
230*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests(const SingleVertexArrayStrideTests &other);
231*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests &operator=(const SingleVertexArrayStrideTests &other);
232*35238bceSAndroid Build Coastguard Worker };
233*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayStrideTests(Context & context)234*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests::SingleVertexArrayStrideTests(Context &context)
235*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "strides", "Single stride vertex atribute")
236*35238bceSAndroid Build Coastguard Worker {
237*35238bceSAndroid Build Coastguard Worker }
238*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayStrideTests(void)239*35238bceSAndroid Build Coastguard Worker SingleVertexArrayStrideTests::~SingleVertexArrayStrideTests(void)
240*35238bceSAndroid Build Coastguard Worker {
241*35238bceSAndroid Build Coastguard Worker }
242*35238bceSAndroid Build Coastguard Worker
init(void)243*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayStrideTests::init(void)
244*35238bceSAndroid Build Coastguard Worker {
245*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {
246*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_SHORT, Array::INPUTTYPE_BYTE,
247*35238bceSAndroid Build Coastguard Worker /*Array::INPUTTYPE_UNSIGNED_SHORT, Array::INPUTTYPE_UNSIGNED_BYTE,*/ Array::INPUTTYPE_FIXED,
248*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_INT_2_10_10_10};
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
251*35238bceSAndroid Build Coastguard Worker {
252*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayStrideGroup(m_context, inputTypes[inputTypeNdx]));
253*35238bceSAndroid Build Coastguard Worker }
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker
256*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayFirstGroup : public TestCaseGroup
257*35238bceSAndroid Build Coastguard Worker {
258*35238bceSAndroid Build Coastguard Worker public:
259*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstGroup(Context &context, Array::InputType type);
260*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayFirstGroup(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 SingleVertexArrayFirstGroup(const SingleVertexArrayFirstGroup &other);
266*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstGroup &operator=(const SingleVertexArrayFirstGroup &other);
267*35238bceSAndroid Build Coastguard Worker Array::InputType m_type;
268*35238bceSAndroid Build Coastguard Worker };
269*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayFirstGroup(Context & context,Array::InputType type)270*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstGroup::SingleVertexArrayFirstGroup(Context &context, Array::InputType type)
271*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::inputTypeToString(type).c_str(), Array::inputTypeToString(type).c_str())
272*35238bceSAndroid Build Coastguard Worker , m_type(type)
273*35238bceSAndroid Build Coastguard Worker {
274*35238bceSAndroid Build Coastguard Worker }
275*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayFirstGroup(void)276*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstGroup::~SingleVertexArrayFirstGroup(void)
277*35238bceSAndroid Build Coastguard Worker {
278*35238bceSAndroid Build Coastguard Worker }
279*35238bceSAndroid Build Coastguard Worker
init(void)280*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayFirstGroup::init(void)
281*35238bceSAndroid Build Coastguard Worker {
282*35238bceSAndroid Build Coastguard Worker int counts[] = {5, 256};
283*35238bceSAndroid Build Coastguard Worker int firsts[] = {6, 24};
284*35238bceSAndroid Build Coastguard Worker int offsets[] = {1, 16, 17};
285*35238bceSAndroid Build Coastguard Worker int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
286*35238bceSAndroid Build Coastguard Worker
287*35238bceSAndroid Build Coastguard Worker for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
290*35238bceSAndroid Build Coastguard Worker {
291*35238bceSAndroid Build Coastguard Worker for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
292*35238bceSAndroid Build Coastguard Worker {
293*35238bceSAndroid Build Coastguard Worker for (int firstNdx = 0; firstNdx < DE_LENGTH_OF_ARRAY(firsts); firstNdx++)
294*35238bceSAndroid Build Coastguard Worker {
295*35238bceSAndroid Build Coastguard Worker const bool packed =
296*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 || m_type == Array::INPUTTYPE_INT_2_10_10_10;
297*35238bceSAndroid Build Coastguard Worker const int componentCount = (packed) ? (4) : (2);
298*35238bceSAndroid Build Coastguard Worker const int stride = (strides[strideNdx] < 0) ?
299*35238bceSAndroid Build Coastguard Worker ((packed) ? (8) : (Array::inputTypeSize(m_type) * componentCount)) :
300*35238bceSAndroid Build Coastguard Worker (strides[strideNdx]);
301*35238bceSAndroid Build Coastguard Worker const int alignment =
302*35238bceSAndroid Build Coastguard Worker (packed) ? (Array::inputTypeSize(m_type) * componentCount) : (Array::inputTypeSize(m_type));
303*35238bceSAndroid Build Coastguard Worker const bool aligned = ((stride % alignment) == 0) && ((offsets[offsetNdx] % alignment) == 0);
304*35238bceSAndroid Build Coastguard Worker std::string name = "first" + typeToString(firsts[firstNdx]) + "_offset" +
305*35238bceSAndroid Build Coastguard Worker typeToString(offsets[offsetNdx]) + "_stride" + typeToString(stride) + "_quads" +
306*35238bceSAndroid Build Coastguard Worker typeToString(counts[countNdx]);
307*35238bceSAndroid Build Coastguard Worker
308*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
309*35238bceSAndroid Build Coastguard Worker m_type, Array::OUTPUTTYPE_VEC2, Array::STORAGE_BUFFER, Array::USAGE_DYNAMIC_DRAW,
310*35238bceSAndroid Build Coastguard Worker componentCount, offsets[offsetNdx], stride, false, GLValue::getMinValue(m_type),
311*35238bceSAndroid Build Coastguard Worker GLValue::getMaxValue(m_type));
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
314*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
315*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
316*35238bceSAndroid Build Coastguard Worker spec.first = firsts[firstNdx];
317*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
318*35238bceSAndroid Build Coastguard Worker
319*35238bceSAndroid Build Coastguard Worker if (aligned)
320*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
321*35238bceSAndroid Build Coastguard Worker name.c_str()));
322*35238bceSAndroid Build Coastguard Worker }
323*35238bceSAndroid Build Coastguard Worker }
324*35238bceSAndroid Build Coastguard Worker }
325*35238bceSAndroid Build Coastguard Worker }
326*35238bceSAndroid Build Coastguard Worker }
327*35238bceSAndroid Build Coastguard Worker
328*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayFirstTests : public TestCaseGroup
329*35238bceSAndroid Build Coastguard Worker {
330*35238bceSAndroid Build Coastguard Worker public:
331*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests(Context &context);
332*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayFirstTests(void);
333*35238bceSAndroid Build Coastguard Worker
334*35238bceSAndroid Build Coastguard Worker virtual void init(void);
335*35238bceSAndroid Build Coastguard Worker
336*35238bceSAndroid Build Coastguard Worker private:
337*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests(const SingleVertexArrayFirstTests &other);
338*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests &operator=(const SingleVertexArrayFirstTests &other);
339*35238bceSAndroid Build Coastguard Worker };
340*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayFirstTests(Context & context)341*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests::SingleVertexArrayFirstTests(Context &context)
342*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "first", "Single vertex attribute, different first values to drawArrays")
343*35238bceSAndroid Build Coastguard Worker {
344*35238bceSAndroid Build Coastguard Worker }
345*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayFirstTests(void)346*35238bceSAndroid Build Coastguard Worker SingleVertexArrayFirstTests::~SingleVertexArrayFirstTests(void)
347*35238bceSAndroid Build Coastguard Worker {
348*35238bceSAndroid Build Coastguard Worker }
349*35238bceSAndroid Build Coastguard Worker
init(void)350*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayFirstTests::init(void)
351*35238bceSAndroid Build Coastguard Worker {
352*35238bceSAndroid Build Coastguard Worker // Test offset with different input types, component counts and storage, Usage(?)
353*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_INT_2_10_10_10};
354*35238bceSAndroid Build Coastguard Worker
355*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
356*35238bceSAndroid Build Coastguard Worker {
357*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayFirstGroup(m_context, inputTypes[inputTypeNdx]));
358*35238bceSAndroid Build Coastguard Worker }
359*35238bceSAndroid Build Coastguard Worker }
360*35238bceSAndroid Build Coastguard Worker
361*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOffsetGroup : public TestCaseGroup
362*35238bceSAndroid Build Coastguard Worker {
363*35238bceSAndroid Build Coastguard Worker public:
364*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetGroup(Context &context, Array::InputType type);
365*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayOffsetGroup(void);
366*35238bceSAndroid Build Coastguard Worker
367*35238bceSAndroid Build Coastguard Worker virtual void init(void);
368*35238bceSAndroid Build Coastguard Worker
369*35238bceSAndroid Build Coastguard Worker private:
370*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetGroup(const SingleVertexArrayOffsetGroup &other);
371*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetGroup &operator=(const SingleVertexArrayOffsetGroup &other);
372*35238bceSAndroid Build Coastguard Worker Array::InputType m_type;
373*35238bceSAndroid Build Coastguard Worker };
374*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayOffsetGroup(Context & context,Array::InputType type)375*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetGroup::SingleVertexArrayOffsetGroup(Context &context, Array::InputType type)
376*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::inputTypeToString(type).c_str(), Array::inputTypeToString(type).c_str())
377*35238bceSAndroid Build Coastguard Worker , m_type(type)
378*35238bceSAndroid Build Coastguard Worker {
379*35238bceSAndroid Build Coastguard Worker }
380*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayOffsetGroup(void)381*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetGroup::~SingleVertexArrayOffsetGroup(void)
382*35238bceSAndroid Build Coastguard Worker {
383*35238bceSAndroid Build Coastguard Worker }
384*35238bceSAndroid Build Coastguard Worker
init(void)385*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOffsetGroup::init(void)
386*35238bceSAndroid Build Coastguard Worker {
387*35238bceSAndroid Build Coastguard Worker int counts[] = {1, 256};
388*35238bceSAndroid Build Coastguard Worker int offsets[] = {1, 4, 17, 32};
389*35238bceSAndroid Build Coastguard Worker int strides[] = {/*0,*/ -1, 17, 32}; // Tread negative value as sizeof input. Same as 0, but done outside of GL.
390*35238bceSAndroid Build Coastguard Worker
391*35238bceSAndroid Build Coastguard Worker for (int offsetNdx = 0; offsetNdx < DE_LENGTH_OF_ARRAY(offsets); offsetNdx++)
392*35238bceSAndroid Build Coastguard Worker {
393*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
394*35238bceSAndroid Build Coastguard Worker {
395*35238bceSAndroid Build Coastguard Worker for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
396*35238bceSAndroid Build Coastguard Worker {
397*35238bceSAndroid Build Coastguard Worker const bool packed =
398*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 || m_type == Array::INPUTTYPE_INT_2_10_10_10;
399*35238bceSAndroid Build Coastguard Worker const int componentCount = (packed) ? (4) : (2);
400*35238bceSAndroid Build Coastguard Worker const int stride =
401*35238bceSAndroid Build Coastguard Worker (strides[strideNdx] < 0 ? Array::inputTypeSize(m_type) * componentCount : strides[strideNdx]);
402*35238bceSAndroid Build Coastguard Worker const int alignment =
403*35238bceSAndroid Build Coastguard Worker (packed) ? (Array::inputTypeSize(m_type) * componentCount) : (Array::inputTypeSize(m_type));
404*35238bceSAndroid Build Coastguard Worker const bool aligned = ((stride % alignment) == 0) && ((offsets[offsetNdx] % alignment) == 0);
405*35238bceSAndroid Build Coastguard Worker const std::string name = "offset" + typeToString(offsets[offsetNdx]) + "_stride" +
406*35238bceSAndroid Build Coastguard Worker typeToString(stride) + "_quads" + typeToString(counts[countNdx]);
407*35238bceSAndroid Build Coastguard Worker
408*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
409*35238bceSAndroid Build Coastguard Worker m_type, Array::OUTPUTTYPE_VEC2, Array::STORAGE_BUFFER, Array::USAGE_DYNAMIC_DRAW, componentCount,
410*35238bceSAndroid Build Coastguard Worker offsets[offsetNdx], stride, false, GLValue::getMinValue(m_type), GLValue::getMaxValue(m_type));
411*35238bceSAndroid Build Coastguard Worker
412*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
413*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
414*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
415*35238bceSAndroid Build Coastguard Worker spec.first = 0;
416*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
417*35238bceSAndroid Build Coastguard Worker
418*35238bceSAndroid Build Coastguard Worker if (aligned)
419*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
420*35238bceSAndroid Build Coastguard Worker name.c_str()));
421*35238bceSAndroid Build Coastguard Worker }
422*35238bceSAndroid Build Coastguard Worker }
423*35238bceSAndroid Build Coastguard Worker }
424*35238bceSAndroid Build Coastguard Worker }
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOffsetTests : public TestCaseGroup
427*35238bceSAndroid Build Coastguard Worker {
428*35238bceSAndroid Build Coastguard Worker public:
429*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests(Context &context);
430*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayOffsetTests(void);
431*35238bceSAndroid Build Coastguard Worker
432*35238bceSAndroid Build Coastguard Worker virtual void init(void);
433*35238bceSAndroid Build Coastguard Worker
434*35238bceSAndroid Build Coastguard Worker private:
435*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests(const SingleVertexArrayOffsetTests &other);
436*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests &operator=(const SingleVertexArrayOffsetTests &other);
437*35238bceSAndroid Build Coastguard Worker };
438*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayOffsetTests(Context & context)439*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests::SingleVertexArrayOffsetTests(Context &context)
440*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "offset", "Single vertex atribute offset element")
441*35238bceSAndroid Build Coastguard Worker {
442*35238bceSAndroid Build Coastguard Worker }
443*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayOffsetTests(void)444*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOffsetTests::~SingleVertexArrayOffsetTests(void)
445*35238bceSAndroid Build Coastguard Worker {
446*35238bceSAndroid Build Coastguard Worker }
447*35238bceSAndroid Build Coastguard Worker
init(void)448*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOffsetTests::init(void)
449*35238bceSAndroid Build Coastguard Worker {
450*35238bceSAndroid Build Coastguard Worker // Test offset with different input types, component counts and storage, Usage(?)
451*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_INT_2_10_10_10};
452*35238bceSAndroid Build Coastguard Worker
453*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
454*35238bceSAndroid Build Coastguard Worker {
455*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayOffsetGroup(m_context, inputTypes[inputTypeNdx]));
456*35238bceSAndroid Build Coastguard Worker }
457*35238bceSAndroid Build Coastguard Worker }
458*35238bceSAndroid Build Coastguard Worker
459*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayNormalizeGroup : public TestCaseGroup
460*35238bceSAndroid Build Coastguard Worker {
461*35238bceSAndroid Build Coastguard Worker public:
462*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeGroup(Context &context, Array::InputType type);
463*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayNormalizeGroup(void);
464*35238bceSAndroid Build Coastguard Worker
465*35238bceSAndroid Build Coastguard Worker virtual void init(void);
466*35238bceSAndroid Build Coastguard Worker
467*35238bceSAndroid Build Coastguard Worker private:
468*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeGroup(const SingleVertexArrayNormalizeGroup &other);
469*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeGroup &operator=(const SingleVertexArrayNormalizeGroup &other);
470*35238bceSAndroid Build Coastguard Worker Array::InputType m_type;
471*35238bceSAndroid Build Coastguard Worker };
472*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayNormalizeGroup(Context & context,Array::InputType type)473*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeGroup::SingleVertexArrayNormalizeGroup(Context &context, Array::InputType type)
474*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::inputTypeToString(type).c_str(), Array::inputTypeToString(type).c_str())
475*35238bceSAndroid Build Coastguard Worker , m_type(type)
476*35238bceSAndroid Build Coastguard Worker {
477*35238bceSAndroid Build Coastguard Worker }
478*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayNormalizeGroup(void)479*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeGroup::~SingleVertexArrayNormalizeGroup(void)
480*35238bceSAndroid Build Coastguard Worker {
481*35238bceSAndroid Build Coastguard Worker }
482*35238bceSAndroid Build Coastguard Worker
init(void)483*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayNormalizeGroup::init(void)
484*35238bceSAndroid Build Coastguard Worker {
485*35238bceSAndroid Build Coastguard Worker int counts[] = {1, 256};
486*35238bceSAndroid Build Coastguard Worker
487*35238bceSAndroid Build Coastguard Worker for (int componentCount = 2; componentCount < 5; componentCount++)
488*35238bceSAndroid Build Coastguard Worker {
489*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
490*35238bceSAndroid Build Coastguard Worker {
491*35238bceSAndroid Build Coastguard Worker if ((m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 || m_type == Array::INPUTTYPE_INT_2_10_10_10) &&
492*35238bceSAndroid Build Coastguard Worker componentCount != 4)
493*35238bceSAndroid Build Coastguard Worker continue;
494*35238bceSAndroid Build Coastguard Worker
495*35238bceSAndroid Build Coastguard Worker std::string name = "components" + typeToString(componentCount) + "_quads" + typeToString(counts[countNdx]);
496*35238bceSAndroid Build Coastguard Worker
497*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(m_type, Array::OUTPUTTYPE_VEC4, Array::STORAGE_USER,
498*35238bceSAndroid Build Coastguard Worker Array::USAGE_DYNAMIC_DRAW, componentCount, 0, 0, true,
499*35238bceSAndroid Build Coastguard Worker GLValue::getMinValue(m_type), GLValue::getMaxValue(m_type));
500*35238bceSAndroid Build Coastguard Worker
501*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
502*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
503*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
504*35238bceSAndroid Build Coastguard Worker spec.first = 0;
505*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
506*35238bceSAndroid Build Coastguard Worker
507*35238bceSAndroid Build Coastguard Worker addChild(
508*35238bceSAndroid Build Coastguard Worker new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), name.c_str()));
509*35238bceSAndroid Build Coastguard Worker }
510*35238bceSAndroid Build Coastguard Worker }
511*35238bceSAndroid Build Coastguard Worker }
512*35238bceSAndroid Build Coastguard Worker
513*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayNormalizeTests : public TestCaseGroup
514*35238bceSAndroid Build Coastguard Worker {
515*35238bceSAndroid Build Coastguard Worker public:
516*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests(Context &context);
517*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayNormalizeTests(void);
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker virtual void init(void);
520*35238bceSAndroid Build Coastguard Worker
521*35238bceSAndroid Build Coastguard Worker private:
522*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests(const SingleVertexArrayNormalizeTests &other);
523*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests &operator=(const SingleVertexArrayNormalizeTests &other);
524*35238bceSAndroid Build Coastguard Worker };
525*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayNormalizeTests(Context & context)526*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests::SingleVertexArrayNormalizeTests(Context &context)
527*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "normalize", "Single normalize vertex atribute")
528*35238bceSAndroid Build Coastguard Worker {
529*35238bceSAndroid Build Coastguard Worker }
530*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayNormalizeTests(void)531*35238bceSAndroid Build Coastguard Worker SingleVertexArrayNormalizeTests::~SingleVertexArrayNormalizeTests(void)
532*35238bceSAndroid Build Coastguard Worker {
533*35238bceSAndroid Build Coastguard Worker }
534*35238bceSAndroid Build Coastguard Worker
init(void)535*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayNormalizeTests::init(void)
536*35238bceSAndroid Build Coastguard Worker {
537*35238bceSAndroid Build Coastguard Worker // Test normalization with different input types, component counts and storage
538*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_SHORT,
539*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_BYTE, Array::INPUTTYPE_UNSIGNED_SHORT,
540*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_FIXED,
541*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_UNSIGNED_INT, Array::INPUTTYPE_INT,
542*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_HALF, Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10,
543*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_INT_2_10_10_10};
544*35238bceSAndroid Build Coastguard Worker
545*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
546*35238bceSAndroid Build Coastguard Worker {
547*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayNormalizeGroup(m_context, inputTypes[inputTypeNdx]));
548*35238bceSAndroid Build Coastguard Worker }
549*35238bceSAndroid Build Coastguard Worker }
550*35238bceSAndroid Build Coastguard Worker
551*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOutputTypeGroup : public TestCaseGroup
552*35238bceSAndroid Build Coastguard Worker {
553*35238bceSAndroid Build Coastguard Worker public:
554*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeGroup(Context &context, Array::InputType type);
555*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayOutputTypeGroup(void);
556*35238bceSAndroid Build Coastguard Worker
557*35238bceSAndroid Build Coastguard Worker virtual void init(void);
558*35238bceSAndroid Build Coastguard Worker
559*35238bceSAndroid Build Coastguard Worker private:
560*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeGroup(const SingleVertexArrayOutputTypeGroup &other);
561*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeGroup &operator=(const SingleVertexArrayOutputTypeGroup &other);
562*35238bceSAndroid Build Coastguard Worker Array::InputType m_type;
563*35238bceSAndroid Build Coastguard Worker };
564*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayOutputTypeGroup(Context & context,Array::InputType type)565*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeGroup::SingleVertexArrayOutputTypeGroup(Context &context, Array::InputType type)
566*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, Array::inputTypeToString(type).c_str(), Array::inputTypeToString(type).c_str())
567*35238bceSAndroid Build Coastguard Worker , m_type(type)
568*35238bceSAndroid Build Coastguard Worker {
569*35238bceSAndroid Build Coastguard Worker }
570*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayOutputTypeGroup(void)571*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeGroup::~SingleVertexArrayOutputTypeGroup(void)
572*35238bceSAndroid Build Coastguard Worker {
573*35238bceSAndroid Build Coastguard Worker }
574*35238bceSAndroid Build Coastguard Worker
init(void)575*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOutputTypeGroup::init(void)
576*35238bceSAndroid Build Coastguard Worker {
577*35238bceSAndroid Build Coastguard Worker Array::OutputType outputTypes[] = {Array::OUTPUTTYPE_VEC2, Array::OUTPUTTYPE_VEC3, Array::OUTPUTTYPE_VEC4,
578*35238bceSAndroid Build Coastguard Worker Array::OUTPUTTYPE_IVEC2, Array::OUTPUTTYPE_IVEC3, Array::OUTPUTTYPE_IVEC4,
579*35238bceSAndroid Build Coastguard Worker Array::OUTPUTTYPE_UVEC2, Array::OUTPUTTYPE_UVEC3, Array::OUTPUTTYPE_UVEC4};
580*35238bceSAndroid Build Coastguard Worker Array::Storage storages[] = {Array::STORAGE_USER};
581*35238bceSAndroid Build Coastguard Worker int counts[] = {1, 256};
582*35238bceSAndroid Build Coastguard Worker
583*35238bceSAndroid Build Coastguard Worker for (int outputTypeNdx = 0; outputTypeNdx < DE_LENGTH_OF_ARRAY(outputTypes); outputTypeNdx++)
584*35238bceSAndroid Build Coastguard Worker {
585*35238bceSAndroid Build Coastguard Worker for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
586*35238bceSAndroid Build Coastguard Worker {
587*35238bceSAndroid Build Coastguard Worker for (int componentCount = 2; componentCount < 5; componentCount++)
588*35238bceSAndroid Build Coastguard Worker {
589*35238bceSAndroid Build Coastguard Worker for (int countNdx = 0; countNdx < DE_LENGTH_OF_ARRAY(counts); countNdx++)
590*35238bceSAndroid Build Coastguard Worker {
591*35238bceSAndroid Build Coastguard Worker std::string name = "components" + typeToString(componentCount) + "_" +
592*35238bceSAndroid Build Coastguard Worker Array::outputTypeToString(outputTypes[outputTypeNdx]) + "_quads" +
593*35238bceSAndroid Build Coastguard Worker typeToString(counts[countNdx]);
594*35238bceSAndroid Build Coastguard Worker
595*35238bceSAndroid Build Coastguard Worker const bool inputIsSignedInteger = m_type == Array::INPUTTYPE_INT ||
596*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_SHORT ||
597*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_BYTE;
598*35238bceSAndroid Build Coastguard Worker const bool inputIsUnignedInteger = m_type == Array::INPUTTYPE_UNSIGNED_INT ||
599*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_UNSIGNED_SHORT ||
600*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_UNSIGNED_BYTE;
601*35238bceSAndroid Build Coastguard Worker const bool outputIsSignedInteger = outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_IVEC2 ||
602*35238bceSAndroid Build Coastguard Worker outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_IVEC3 ||
603*35238bceSAndroid Build Coastguard Worker outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_IVEC4;
604*35238bceSAndroid Build Coastguard Worker const bool outputIsUnsignedInteger = outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_UVEC2 ||
605*35238bceSAndroid Build Coastguard Worker outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_UVEC3 ||
606*35238bceSAndroid Build Coastguard Worker outputTypes[outputTypeNdx] == Array::OUTPUTTYPE_UVEC4;
607*35238bceSAndroid Build Coastguard Worker
608*35238bceSAndroid Build Coastguard Worker // If input type is float type and output type is int type skip
609*35238bceSAndroid Build Coastguard Worker if ((m_type == Array::INPUTTYPE_FLOAT || m_type == Array::INPUTTYPE_HALF ||
610*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_FIXED) &&
611*35238bceSAndroid Build Coastguard Worker (outputTypes[outputTypeNdx] >= Array::OUTPUTTYPE_INT))
612*35238bceSAndroid Build Coastguard Worker continue;
613*35238bceSAndroid Build Coastguard Worker
614*35238bceSAndroid Build Coastguard Worker if ((m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 ||
615*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_INT_2_10_10_10) &&
616*35238bceSAndroid Build Coastguard Worker (outputTypes[outputTypeNdx] >= Array::OUTPUTTYPE_INT))
617*35238bceSAndroid Build Coastguard Worker continue;
618*35238bceSAndroid Build Coastguard Worker
619*35238bceSAndroid Build Coastguard Worker if ((m_type == Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10 ||
620*35238bceSAndroid Build Coastguard Worker m_type == Array::INPUTTYPE_INT_2_10_10_10) &&
621*35238bceSAndroid Build Coastguard Worker componentCount != 4)
622*35238bceSAndroid Build Coastguard Worker continue;
623*35238bceSAndroid Build Coastguard Worker
624*35238bceSAndroid Build Coastguard Worker // Loading signed data as unsigned causes undefined values and vice versa
625*35238bceSAndroid Build Coastguard Worker if (inputIsSignedInteger && outputIsUnsignedInteger)
626*35238bceSAndroid Build Coastguard Worker continue;
627*35238bceSAndroid Build Coastguard Worker if (inputIsUnignedInteger && outputIsSignedInteger)
628*35238bceSAndroid Build Coastguard Worker continue;
629*35238bceSAndroid Build Coastguard Worker
630*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
631*35238bceSAndroid Build Coastguard Worker m_type, outputTypes[outputTypeNdx], storages[storageNdx], Array::USAGE_DYNAMIC_DRAW,
632*35238bceSAndroid Build Coastguard Worker componentCount, 0, 0, false, GLValue::getMinValue(m_type), GLValue::getMaxValue(m_type));
633*35238bceSAndroid Build Coastguard Worker
634*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
635*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
636*35238bceSAndroid Build Coastguard Worker spec.drawCount = counts[countNdx];
637*35238bceSAndroid Build Coastguard Worker spec.first = 0;
638*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
639*35238bceSAndroid Build Coastguard Worker
640*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(),
641*35238bceSAndroid Build Coastguard Worker name.c_str()));
642*35238bceSAndroid Build Coastguard Worker }
643*35238bceSAndroid Build Coastguard Worker }
644*35238bceSAndroid Build Coastguard Worker }
645*35238bceSAndroid Build Coastguard Worker }
646*35238bceSAndroid Build Coastguard Worker }
647*35238bceSAndroid Build Coastguard Worker
648*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayOutputTypeTests : public TestCaseGroup
649*35238bceSAndroid Build Coastguard Worker {
650*35238bceSAndroid Build Coastguard Worker public:
651*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests(Context &context);
652*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayOutputTypeTests(void);
653*35238bceSAndroid Build Coastguard Worker
654*35238bceSAndroid Build Coastguard Worker virtual void init(void);
655*35238bceSAndroid Build Coastguard Worker
656*35238bceSAndroid Build Coastguard Worker private:
657*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests(const SingleVertexArrayOutputTypeTests &other);
658*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests &operator=(const SingleVertexArrayOutputTypeTests &other);
659*35238bceSAndroid Build Coastguard Worker };
660*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayOutputTypeTests(Context & context)661*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests::SingleVertexArrayOutputTypeTests(Context &context)
662*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "output_types", "Single output type vertex atribute")
663*35238bceSAndroid Build Coastguard Worker {
664*35238bceSAndroid Build Coastguard Worker }
665*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayOutputTypeTests(void)666*35238bceSAndroid Build Coastguard Worker SingleVertexArrayOutputTypeTests::~SingleVertexArrayOutputTypeTests(void)
667*35238bceSAndroid Build Coastguard Worker {
668*35238bceSAndroid Build Coastguard Worker }
669*35238bceSAndroid Build Coastguard Worker
init(void)670*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayOutputTypeTests::init(void)
671*35238bceSAndroid Build Coastguard Worker {
672*35238bceSAndroid Build Coastguard Worker // Test output types with different input types, component counts and storage, Usage?, Precision?, float?
673*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FLOAT, Array::INPUTTYPE_SHORT,
674*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_BYTE, Array::INPUTTYPE_UNSIGNED_SHORT,
675*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_FIXED,
676*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_UNSIGNED_INT, Array::INPUTTYPE_INT,
677*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_HALF, Array::INPUTTYPE_UNSIGNED_INT_2_10_10_10,
678*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_INT_2_10_10_10};
679*35238bceSAndroid Build Coastguard Worker
680*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
681*35238bceSAndroid Build Coastguard Worker {
682*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayOutputTypeGroup(m_context, inputTypes[inputTypeNdx]));
683*35238bceSAndroid Build Coastguard Worker }
684*35238bceSAndroid Build Coastguard Worker }
685*35238bceSAndroid Build Coastguard Worker
686*35238bceSAndroid Build Coastguard Worker class SingleVertexArrayTestGroup : public TestCaseGroup
687*35238bceSAndroid Build Coastguard Worker {
688*35238bceSAndroid Build Coastguard Worker public:
689*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup(Context &context);
690*35238bceSAndroid Build Coastguard Worker virtual ~SingleVertexArrayTestGroup(void);
691*35238bceSAndroid Build Coastguard Worker
692*35238bceSAndroid Build Coastguard Worker virtual void init(void);
693*35238bceSAndroid Build Coastguard Worker
694*35238bceSAndroid Build Coastguard Worker private:
695*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup(const SingleVertexArrayTestGroup &other);
696*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup &operator=(const SingleVertexArrayTestGroup &other);
697*35238bceSAndroid Build Coastguard Worker };
698*35238bceSAndroid Build Coastguard Worker
SingleVertexArrayTestGroup(Context & context)699*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup::SingleVertexArrayTestGroup(Context &context)
700*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "single_attribute", "Single vertex atribute")
701*35238bceSAndroid Build Coastguard Worker {
702*35238bceSAndroid Build Coastguard Worker }
703*35238bceSAndroid Build Coastguard Worker
~SingleVertexArrayTestGroup(void)704*35238bceSAndroid Build Coastguard Worker SingleVertexArrayTestGroup::~SingleVertexArrayTestGroup(void)
705*35238bceSAndroid Build Coastguard Worker {
706*35238bceSAndroid Build Coastguard Worker }
707*35238bceSAndroid Build Coastguard Worker
init(void)708*35238bceSAndroid Build Coastguard Worker void SingleVertexArrayTestGroup::init(void)
709*35238bceSAndroid Build Coastguard Worker {
710*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayStrideTests(m_context));
711*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayNormalizeTests(m_context));
712*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayOutputTypeTests(m_context));
713*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayUsageTests(m_context));
714*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayOffsetTests(m_context));
715*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayFirstTests(m_context));
716*35238bceSAndroid Build Coastguard Worker }
717*35238bceSAndroid Build Coastguard Worker
718*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayCountTests : public TestCaseGroup
719*35238bceSAndroid Build Coastguard Worker {
720*35238bceSAndroid Build Coastguard Worker public:
721*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests(Context &context);
722*35238bceSAndroid Build Coastguard Worker virtual ~MultiVertexArrayCountTests(void);
723*35238bceSAndroid Build Coastguard Worker
724*35238bceSAndroid Build Coastguard Worker virtual void init(void);
725*35238bceSAndroid Build Coastguard Worker
726*35238bceSAndroid Build Coastguard Worker private:
727*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests(const MultiVertexArrayCountTests &other);
728*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests &operator=(const MultiVertexArrayCountTests &other);
729*35238bceSAndroid Build Coastguard Worker
730*35238bceSAndroid Build Coastguard Worker std::string getTestName(const MultiVertexArrayTest::Spec &spec);
731*35238bceSAndroid Build Coastguard Worker };
732*35238bceSAndroid Build Coastguard Worker
MultiVertexArrayCountTests(Context & context)733*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests::MultiVertexArrayCountTests(Context &context)
734*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "attribute_count", "Attribute counts")
735*35238bceSAndroid Build Coastguard Worker {
736*35238bceSAndroid Build Coastguard Worker }
737*35238bceSAndroid Build Coastguard Worker
~MultiVertexArrayCountTests(void)738*35238bceSAndroid Build Coastguard Worker MultiVertexArrayCountTests::~MultiVertexArrayCountTests(void)
739*35238bceSAndroid Build Coastguard Worker {
740*35238bceSAndroid Build Coastguard Worker }
741*35238bceSAndroid Build Coastguard Worker
getTestName(const MultiVertexArrayTest::Spec & spec)742*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayCountTests::getTestName(const MultiVertexArrayTest::Spec &spec)
743*35238bceSAndroid Build Coastguard Worker {
744*35238bceSAndroid Build Coastguard Worker std::stringstream name;
745*35238bceSAndroid Build Coastguard Worker name << spec.arrays.size();
746*35238bceSAndroid Build Coastguard Worker
747*35238bceSAndroid Build Coastguard Worker return name.str();
748*35238bceSAndroid Build Coastguard Worker }
749*35238bceSAndroid Build Coastguard Worker
init(void)750*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayCountTests::init(void)
751*35238bceSAndroid Build Coastguard Worker {
752*35238bceSAndroid Build Coastguard Worker // Test attribute counts
753*35238bceSAndroid Build Coastguard Worker int arrayCounts[] = {2, 3, 4, 5, 6, 7, 8};
754*35238bceSAndroid Build Coastguard Worker
755*35238bceSAndroid Build Coastguard Worker for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
756*35238bceSAndroid Build Coastguard Worker {
757*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
758*35238bceSAndroid Build Coastguard Worker
759*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
760*35238bceSAndroid Build Coastguard Worker spec.drawCount = 256;
761*35238bceSAndroid Build Coastguard Worker spec.first = 0;
762*35238bceSAndroid Build Coastguard Worker
763*35238bceSAndroid Build Coastguard Worker for (int arrayNdx = 0; arrayNdx < arrayCounts[arrayCountNdx]; arrayNdx++)
764*35238bceSAndroid Build Coastguard Worker {
765*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
766*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
767*35238bceSAndroid Build Coastguard Worker false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
768*35238bceSAndroid Build Coastguard Worker
769*35238bceSAndroid Build Coastguard Worker spec.arrays.push_back(arraySpec);
770*35238bceSAndroid Build Coastguard Worker }
771*35238bceSAndroid Build Coastguard Worker
772*35238bceSAndroid Build Coastguard Worker std::string name = getTestName(spec);
773*35238bceSAndroid Build Coastguard Worker std::string desc = getTestName(spec);
774*35238bceSAndroid Build Coastguard Worker
775*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
776*35238bceSAndroid Build Coastguard Worker }
777*35238bceSAndroid Build Coastguard Worker }
778*35238bceSAndroid Build Coastguard Worker
779*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayStorageTests : public TestCaseGroup
780*35238bceSAndroid Build Coastguard Worker {
781*35238bceSAndroid Build Coastguard Worker public:
782*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests(Context &context);
783*35238bceSAndroid Build Coastguard Worker virtual ~MultiVertexArrayStorageTests(void);
784*35238bceSAndroid Build Coastguard Worker
785*35238bceSAndroid Build Coastguard Worker virtual void init(void);
786*35238bceSAndroid Build Coastguard Worker
787*35238bceSAndroid Build Coastguard Worker private:
788*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests(const MultiVertexArrayStorageTests &other);
789*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests &operator=(const MultiVertexArrayStorageTests &other);
790*35238bceSAndroid Build Coastguard Worker
791*35238bceSAndroid Build Coastguard Worker void addStorageCases(MultiVertexArrayTest::Spec spec, int depth);
792*35238bceSAndroid Build Coastguard Worker std::string getTestName(const MultiVertexArrayTest::Spec &spec);
793*35238bceSAndroid Build Coastguard Worker };
794*35238bceSAndroid Build Coastguard Worker
MultiVertexArrayStorageTests(Context & context)795*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests::MultiVertexArrayStorageTests(Context &context)
796*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "storage", "Attribute storages")
797*35238bceSAndroid Build Coastguard Worker {
798*35238bceSAndroid Build Coastguard Worker }
799*35238bceSAndroid Build Coastguard Worker
~MultiVertexArrayStorageTests(void)800*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStorageTests::~MultiVertexArrayStorageTests(void)
801*35238bceSAndroid Build Coastguard Worker {
802*35238bceSAndroid Build Coastguard Worker }
803*35238bceSAndroid Build Coastguard Worker
getTestName(const MultiVertexArrayTest::Spec & spec)804*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayStorageTests::getTestName(const MultiVertexArrayTest::Spec &spec)
805*35238bceSAndroid Build Coastguard Worker {
806*35238bceSAndroid Build Coastguard Worker std::stringstream name;
807*35238bceSAndroid Build Coastguard Worker name << spec.arrays.size();
808*35238bceSAndroid Build Coastguard Worker
809*35238bceSAndroid Build Coastguard Worker for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
810*35238bceSAndroid Build Coastguard Worker {
811*35238bceSAndroid Build Coastguard Worker name << "_" << Array::storageToString(spec.arrays[arrayNdx].storage);
812*35238bceSAndroid Build Coastguard Worker }
813*35238bceSAndroid Build Coastguard Worker
814*35238bceSAndroid Build Coastguard Worker return name.str();
815*35238bceSAndroid Build Coastguard Worker }
816*35238bceSAndroid Build Coastguard Worker
addStorageCases(MultiVertexArrayTest::Spec spec,int depth)817*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStorageTests::addStorageCases(MultiVertexArrayTest::Spec spec, int depth)
818*35238bceSAndroid Build Coastguard Worker {
819*35238bceSAndroid Build Coastguard Worker if (depth == 0)
820*35238bceSAndroid Build Coastguard Worker {
821*35238bceSAndroid Build Coastguard Worker // Skip trivial case, used elsewhere
822*35238bceSAndroid Build Coastguard Worker bool ok = false;
823*35238bceSAndroid Build Coastguard Worker for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
824*35238bceSAndroid Build Coastguard Worker {
825*35238bceSAndroid Build Coastguard Worker if (spec.arrays[arrayNdx].storage != Array::STORAGE_USER)
826*35238bceSAndroid Build Coastguard Worker {
827*35238bceSAndroid Build Coastguard Worker ok = true;
828*35238bceSAndroid Build Coastguard Worker break;
829*35238bceSAndroid Build Coastguard Worker }
830*35238bceSAndroid Build Coastguard Worker }
831*35238bceSAndroid Build Coastguard Worker
832*35238bceSAndroid Build Coastguard Worker if (!ok)
833*35238bceSAndroid Build Coastguard Worker return;
834*35238bceSAndroid Build Coastguard Worker
835*35238bceSAndroid Build Coastguard Worker std::string name = getTestName(spec);
836*35238bceSAndroid Build Coastguard Worker std::string desc = getTestName(spec);
837*35238bceSAndroid Build Coastguard Worker
838*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
839*35238bceSAndroid Build Coastguard Worker return;
840*35238bceSAndroid Build Coastguard Worker }
841*35238bceSAndroid Build Coastguard Worker
842*35238bceSAndroid Build Coastguard Worker Array::Storage storages[] = {Array::STORAGE_USER, Array::STORAGE_BUFFER};
843*35238bceSAndroid Build Coastguard Worker for (int storageNdx = 0; storageNdx < DE_LENGTH_OF_ARRAY(storages); storageNdx++)
844*35238bceSAndroid Build Coastguard Worker {
845*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
846*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, storages[storageNdx], Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
847*35238bceSAndroid Build Coastguard Worker false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
848*35238bceSAndroid Build Coastguard Worker
849*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec _spec = spec;
850*35238bceSAndroid Build Coastguard Worker _spec.arrays.push_back(arraySpec);
851*35238bceSAndroid Build Coastguard Worker addStorageCases(_spec, depth - 1);
852*35238bceSAndroid Build Coastguard Worker }
853*35238bceSAndroid Build Coastguard Worker }
854*35238bceSAndroid Build Coastguard Worker
init(void)855*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStorageTests::init(void)
856*35238bceSAndroid Build Coastguard Worker {
857*35238bceSAndroid Build Coastguard Worker // Test different storages
858*35238bceSAndroid Build Coastguard Worker int arrayCounts[] = {3};
859*35238bceSAndroid Build Coastguard Worker
860*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
861*35238bceSAndroid Build Coastguard Worker
862*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
863*35238bceSAndroid Build Coastguard Worker spec.drawCount = 256;
864*35238bceSAndroid Build Coastguard Worker spec.first = 0;
865*35238bceSAndroid Build Coastguard Worker
866*35238bceSAndroid Build Coastguard Worker for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
867*35238bceSAndroid Build Coastguard Worker addStorageCases(spec, arrayCounts[arrayCountNdx]);
868*35238bceSAndroid Build Coastguard Worker }
869*35238bceSAndroid Build Coastguard Worker
870*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayStrideTests : public TestCaseGroup
871*35238bceSAndroid Build Coastguard Worker {
872*35238bceSAndroid Build Coastguard Worker public:
873*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests(Context &context);
874*35238bceSAndroid Build Coastguard Worker virtual ~MultiVertexArrayStrideTests(void);
875*35238bceSAndroid Build Coastguard Worker
876*35238bceSAndroid Build Coastguard Worker virtual void init(void);
877*35238bceSAndroid Build Coastguard Worker
878*35238bceSAndroid Build Coastguard Worker private:
879*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests(const MultiVertexArrayStrideTests &other);
880*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests &operator=(const MultiVertexArrayStrideTests &other);
881*35238bceSAndroid Build Coastguard Worker
882*35238bceSAndroid Build Coastguard Worker void addStrideCases(MultiVertexArrayTest::Spec spec, int depth);
883*35238bceSAndroid Build Coastguard Worker std::string getTestName(const MultiVertexArrayTest::Spec &spec);
884*35238bceSAndroid Build Coastguard Worker };
885*35238bceSAndroid Build Coastguard Worker
MultiVertexArrayStrideTests(Context & context)886*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests::MultiVertexArrayStrideTests(Context &context) : TestCaseGroup(context, "stride", "Strides")
887*35238bceSAndroid Build Coastguard Worker {
888*35238bceSAndroid Build Coastguard Worker }
889*35238bceSAndroid Build Coastguard Worker
~MultiVertexArrayStrideTests(void)890*35238bceSAndroid Build Coastguard Worker MultiVertexArrayStrideTests::~MultiVertexArrayStrideTests(void)
891*35238bceSAndroid Build Coastguard Worker {
892*35238bceSAndroid Build Coastguard Worker }
893*35238bceSAndroid Build Coastguard Worker
getTestName(const MultiVertexArrayTest::Spec & spec)894*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayStrideTests::getTestName(const MultiVertexArrayTest::Spec &spec)
895*35238bceSAndroid Build Coastguard Worker {
896*35238bceSAndroid Build Coastguard Worker std::stringstream name;
897*35238bceSAndroid Build Coastguard Worker
898*35238bceSAndroid Build Coastguard Worker name << spec.arrays.size();
899*35238bceSAndroid Build Coastguard Worker
900*35238bceSAndroid Build Coastguard Worker for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
901*35238bceSAndroid Build Coastguard Worker {
902*35238bceSAndroid Build Coastguard Worker name << "_" << Array::inputTypeToString(spec.arrays[arrayNdx].inputType) << spec.arrays[arrayNdx].componentCount
903*35238bceSAndroid Build Coastguard Worker << "_" << spec.arrays[arrayNdx].stride;
904*35238bceSAndroid Build Coastguard Worker }
905*35238bceSAndroid Build Coastguard Worker
906*35238bceSAndroid Build Coastguard Worker return name.str();
907*35238bceSAndroid Build Coastguard Worker }
908*35238bceSAndroid Build Coastguard Worker
init(void)909*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStrideTests::init(void)
910*35238bceSAndroid Build Coastguard Worker {
911*35238bceSAndroid Build Coastguard Worker // Test different strides, with multiple arrays, input types??
912*35238bceSAndroid Build Coastguard Worker int arrayCounts[] = {3};
913*35238bceSAndroid Build Coastguard Worker
914*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
915*35238bceSAndroid Build Coastguard Worker
916*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
917*35238bceSAndroid Build Coastguard Worker spec.drawCount = 256;
918*35238bceSAndroid Build Coastguard Worker spec.first = 0;
919*35238bceSAndroid Build Coastguard Worker
920*35238bceSAndroid Build Coastguard Worker for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
921*35238bceSAndroid Build Coastguard Worker addStrideCases(spec, arrayCounts[arrayCountNdx]);
922*35238bceSAndroid Build Coastguard Worker }
923*35238bceSAndroid Build Coastguard Worker
addStrideCases(MultiVertexArrayTest::Spec spec,int depth)924*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayStrideTests::addStrideCases(MultiVertexArrayTest::Spec spec, int depth)
925*35238bceSAndroid Build Coastguard Worker {
926*35238bceSAndroid Build Coastguard Worker if (depth == 0)
927*35238bceSAndroid Build Coastguard Worker {
928*35238bceSAndroid Build Coastguard Worker std::string name = getTestName(spec);
929*35238bceSAndroid Build Coastguard Worker std::string desc = getTestName(spec);
930*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
931*35238bceSAndroid Build Coastguard Worker return;
932*35238bceSAndroid Build Coastguard Worker }
933*35238bceSAndroid Build Coastguard Worker
934*35238bceSAndroid Build Coastguard Worker int strides[] = {0, -1, 17, 32};
935*35238bceSAndroid Build Coastguard Worker
936*35238bceSAndroid Build Coastguard Worker for (int strideNdx = 0; strideNdx < DE_LENGTH_OF_ARRAY(strides); strideNdx++)
937*35238bceSAndroid Build Coastguard Worker {
938*35238bceSAndroid Build Coastguard Worker const int componentCount = 2;
939*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
940*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_FLOAT, Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW,
941*35238bceSAndroid Build Coastguard Worker componentCount, 0,
942*35238bceSAndroid Build Coastguard Worker (strides[strideNdx] >= 0 ? strides[strideNdx] :
943*35238bceSAndroid Build Coastguard Worker componentCount * Array::inputTypeSize(Array::INPUTTYPE_FLOAT)),
944*35238bceSAndroid Build Coastguard Worker false, GLValue::getMinValue(Array::INPUTTYPE_FLOAT), GLValue::getMaxValue(Array::INPUTTYPE_FLOAT));
945*35238bceSAndroid Build Coastguard Worker
946*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec _spec = spec;
947*35238bceSAndroid Build Coastguard Worker _spec.arrays.push_back(arraySpec);
948*35238bceSAndroid Build Coastguard Worker addStrideCases(_spec, depth - 1);
949*35238bceSAndroid Build Coastguard Worker }
950*35238bceSAndroid Build Coastguard Worker }
951*35238bceSAndroid Build Coastguard Worker
952*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayOutputTests : public TestCaseGroup
953*35238bceSAndroid Build Coastguard Worker {
954*35238bceSAndroid Build Coastguard Worker public:
955*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests(Context &context);
956*35238bceSAndroid Build Coastguard Worker virtual ~MultiVertexArrayOutputTests(void);
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker virtual void init(void);
959*35238bceSAndroid Build Coastguard Worker
960*35238bceSAndroid Build Coastguard Worker private:
961*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests(const MultiVertexArrayOutputTests &other);
962*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests &operator=(const MultiVertexArrayOutputTests &other);
963*35238bceSAndroid Build Coastguard Worker
964*35238bceSAndroid Build Coastguard Worker void addInputTypeCases(MultiVertexArrayTest::Spec spec, int depth);
965*35238bceSAndroid Build Coastguard Worker std::string getTestName(const MultiVertexArrayTest::Spec &spec);
966*35238bceSAndroid Build Coastguard Worker };
967*35238bceSAndroid Build Coastguard Worker
MultiVertexArrayOutputTests(Context & context)968*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests::MultiVertexArrayOutputTests(Context &context)
969*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "input_types", "input types")
970*35238bceSAndroid Build Coastguard Worker {
971*35238bceSAndroid Build Coastguard Worker }
972*35238bceSAndroid Build Coastguard Worker
~MultiVertexArrayOutputTests(void)973*35238bceSAndroid Build Coastguard Worker MultiVertexArrayOutputTests::~MultiVertexArrayOutputTests(void)
974*35238bceSAndroid Build Coastguard Worker {
975*35238bceSAndroid Build Coastguard Worker }
976*35238bceSAndroid Build Coastguard Worker
getTestName(const MultiVertexArrayTest::Spec & spec)977*35238bceSAndroid Build Coastguard Worker std::string MultiVertexArrayOutputTests::getTestName(const MultiVertexArrayTest::Spec &spec)
978*35238bceSAndroid Build Coastguard Worker {
979*35238bceSAndroid Build Coastguard Worker std::stringstream name;
980*35238bceSAndroid Build Coastguard Worker
981*35238bceSAndroid Build Coastguard Worker name << spec.arrays.size();
982*35238bceSAndroid Build Coastguard Worker
983*35238bceSAndroid Build Coastguard Worker for (int arrayNdx = 0; arrayNdx < (int)spec.arrays.size(); arrayNdx++)
984*35238bceSAndroid Build Coastguard Worker {
985*35238bceSAndroid Build Coastguard Worker name << "_" << Array::inputTypeToString(spec.arrays[arrayNdx].inputType) << spec.arrays[arrayNdx].componentCount
986*35238bceSAndroid Build Coastguard Worker << "_" << Array::outputTypeToString(spec.arrays[arrayNdx].outputType);
987*35238bceSAndroid Build Coastguard Worker }
988*35238bceSAndroid Build Coastguard Worker
989*35238bceSAndroid Build Coastguard Worker return name.str();
990*35238bceSAndroid Build Coastguard Worker }
991*35238bceSAndroid Build Coastguard Worker
init(void)992*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayOutputTests::init(void)
993*35238bceSAndroid Build Coastguard Worker {
994*35238bceSAndroid Build Coastguard Worker // Test different input types, with multiple arrays
995*35238bceSAndroid Build Coastguard Worker int arrayCounts[] = {3};
996*35238bceSAndroid Build Coastguard Worker
997*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec spec;
998*35238bceSAndroid Build Coastguard Worker
999*35238bceSAndroid Build Coastguard Worker spec.primitive = Array::PRIMITIVE_TRIANGLES;
1000*35238bceSAndroid Build Coastguard Worker spec.drawCount = 256;
1001*35238bceSAndroid Build Coastguard Worker spec.first = 0;
1002*35238bceSAndroid Build Coastguard Worker
1003*35238bceSAndroid Build Coastguard Worker for (int arrayCountNdx = 0; arrayCountNdx < DE_LENGTH_OF_ARRAY(arrayCounts); arrayCountNdx++)
1004*35238bceSAndroid Build Coastguard Worker addInputTypeCases(spec, arrayCounts[arrayCountNdx]);
1005*35238bceSAndroid Build Coastguard Worker }
1006*35238bceSAndroid Build Coastguard Worker
addInputTypeCases(MultiVertexArrayTest::Spec spec,int depth)1007*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayOutputTests::addInputTypeCases(MultiVertexArrayTest::Spec spec, int depth)
1008*35238bceSAndroid Build Coastguard Worker {
1009*35238bceSAndroid Build Coastguard Worker if (depth == 0)
1010*35238bceSAndroid Build Coastguard Worker {
1011*35238bceSAndroid Build Coastguard Worker std::string name = getTestName(spec);
1012*35238bceSAndroid Build Coastguard Worker std::string desc = getTestName(spec);
1013*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTest(m_testCtx, m_context.getRenderContext(), spec, name.c_str(), desc.c_str()));
1014*35238bceSAndroid Build Coastguard Worker return;
1015*35238bceSAndroid Build Coastguard Worker }
1016*35238bceSAndroid Build Coastguard Worker
1017*35238bceSAndroid Build Coastguard Worker Array::InputType inputTypes[] = {Array::INPUTTYPE_FIXED, Array::INPUTTYPE_BYTE, Array::INPUTTYPE_SHORT,
1018*35238bceSAndroid Build Coastguard Worker Array::INPUTTYPE_UNSIGNED_BYTE, Array::INPUTTYPE_UNSIGNED_SHORT};
1019*35238bceSAndroid Build Coastguard Worker for (int inputTypeNdx = 0; inputTypeNdx < DE_LENGTH_OF_ARRAY(inputTypes); inputTypeNdx++)
1020*35238bceSAndroid Build Coastguard Worker {
1021*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec::ArraySpec arraySpec(
1022*35238bceSAndroid Build Coastguard Worker inputTypes[inputTypeNdx], Array::OUTPUTTYPE_VEC2, Array::STORAGE_USER, Array::USAGE_DYNAMIC_DRAW, 2, 0, 0,
1023*35238bceSAndroid Build Coastguard Worker false, GLValue::getMinValue(inputTypes[inputTypeNdx]), GLValue::getMaxValue(inputTypes[inputTypeNdx]));
1024*35238bceSAndroid Build Coastguard Worker
1025*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTest::Spec _spec = spec;
1026*35238bceSAndroid Build Coastguard Worker _spec.arrays.push_back(arraySpec);
1027*35238bceSAndroid Build Coastguard Worker addInputTypeCases(_spec, depth - 1);
1028*35238bceSAndroid Build Coastguard Worker }
1029*35238bceSAndroid Build Coastguard Worker }
1030*35238bceSAndroid Build Coastguard Worker
1031*35238bceSAndroid Build Coastguard Worker class MultiVertexArrayTestGroup : public TestCaseGroup
1032*35238bceSAndroid Build Coastguard Worker {
1033*35238bceSAndroid Build Coastguard Worker public:
1034*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup(Context &context);
1035*35238bceSAndroid Build Coastguard Worker virtual ~MultiVertexArrayTestGroup(void);
1036*35238bceSAndroid Build Coastguard Worker
1037*35238bceSAndroid Build Coastguard Worker virtual void init(void);
1038*35238bceSAndroid Build Coastguard Worker
1039*35238bceSAndroid Build Coastguard Worker private:
1040*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup(const MultiVertexArrayTestGroup &other);
1041*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup &operator=(const MultiVertexArrayTestGroup &other);
1042*35238bceSAndroid Build Coastguard Worker };
1043*35238bceSAndroid Build Coastguard Worker
MultiVertexArrayTestGroup(Context & context)1044*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup::MultiVertexArrayTestGroup(Context &context)
1045*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "multiple_attributes", "Multiple vertex atributes")
1046*35238bceSAndroid Build Coastguard Worker {
1047*35238bceSAndroid Build Coastguard Worker }
1048*35238bceSAndroid Build Coastguard Worker
~MultiVertexArrayTestGroup(void)1049*35238bceSAndroid Build Coastguard Worker MultiVertexArrayTestGroup::~MultiVertexArrayTestGroup(void)
1050*35238bceSAndroid Build Coastguard Worker {
1051*35238bceSAndroid Build Coastguard Worker }
1052*35238bceSAndroid Build Coastguard Worker
init(void)1053*35238bceSAndroid Build Coastguard Worker void MultiVertexArrayTestGroup::init(void)
1054*35238bceSAndroid Build Coastguard Worker {
1055*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayCountTests(m_context));
1056*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayStorageTests(m_context));
1057*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayStrideTests(m_context));
1058*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayOutputTests(m_context));
1059*35238bceSAndroid Build Coastguard Worker }
1060*35238bceSAndroid Build Coastguard Worker
VertexArrayTestGroup(Context & context)1061*35238bceSAndroid Build Coastguard Worker VertexArrayTestGroup::VertexArrayTestGroup(Context &context)
1062*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "vertex_arrays", "Vertex array and array tests")
1063*35238bceSAndroid Build Coastguard Worker {
1064*35238bceSAndroid Build Coastguard Worker }
1065*35238bceSAndroid Build Coastguard Worker
~VertexArrayTestGroup(void)1066*35238bceSAndroid Build Coastguard Worker VertexArrayTestGroup::~VertexArrayTestGroup(void)
1067*35238bceSAndroid Build Coastguard Worker {
1068*35238bceSAndroid Build Coastguard Worker }
1069*35238bceSAndroid Build Coastguard Worker
init(void)1070*35238bceSAndroid Build Coastguard Worker void VertexArrayTestGroup::init(void)
1071*35238bceSAndroid Build Coastguard Worker {
1072*35238bceSAndroid Build Coastguard Worker addChild(new SingleVertexArrayTestGroup(m_context));
1073*35238bceSAndroid Build Coastguard Worker addChild(new MultiVertexArrayTestGroup(m_context));
1074*35238bceSAndroid Build Coastguard Worker }
1075*35238bceSAndroid Build Coastguard Worker
1076*35238bceSAndroid Build Coastguard Worker } // namespace Functional
1077*35238bceSAndroid Build Coastguard Worker } // namespace gles3
1078*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1079