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