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 Buffer copying tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es3fBufferCopyTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsBufferTestUtil.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deMemory.h"
28*35238bceSAndroid Build Coastguard Worker #include "deString.h"
29*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
31*35238bceSAndroid Build Coastguard Worker
32*35238bceSAndroid Build Coastguard Worker #include <algorithm>
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker using std::string;
35*35238bceSAndroid Build Coastguard Worker using std::vector;
36*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
37*35238bceSAndroid Build Coastguard Worker
38*35238bceSAndroid Build Coastguard Worker namespace deqp
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker namespace gles3
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker namespace Functional
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker
45*35238bceSAndroid Build Coastguard Worker using namespace gls::BufferTestUtil;
46*35238bceSAndroid Build Coastguard Worker
47*35238bceSAndroid Build Coastguard Worker class BasicBufferCopyCase : public BufferCase
48*35238bceSAndroid Build Coastguard Worker {
49*35238bceSAndroid Build Coastguard Worker public:
BasicBufferCopyCase(Context & context,const char * name,const char * desc,uint32_t srcTarget,int srcSize,uint32_t srcHint,uint32_t dstTarget,int dstSize,uint32_t dstHint,int copySrcOffset,int copyDstOffset,int copySize,VerifyType verifyType)50*35238bceSAndroid Build Coastguard Worker BasicBufferCopyCase(Context &context, const char *name, const char *desc, uint32_t srcTarget, int srcSize,
51*35238bceSAndroid Build Coastguard Worker uint32_t srcHint, uint32_t dstTarget, int dstSize, uint32_t dstHint, int copySrcOffset,
52*35238bceSAndroid Build Coastguard Worker int copyDstOffset, int copySize, VerifyType verifyType)
53*35238bceSAndroid Build Coastguard Worker : BufferCase(context.getTestContext(), context.getRenderContext(), name, desc)
54*35238bceSAndroid Build Coastguard Worker , m_srcTarget(srcTarget)
55*35238bceSAndroid Build Coastguard Worker , m_srcSize(srcSize)
56*35238bceSAndroid Build Coastguard Worker , m_srcHint(srcHint)
57*35238bceSAndroid Build Coastguard Worker , m_dstTarget(dstTarget)
58*35238bceSAndroid Build Coastguard Worker , m_dstSize(dstSize)
59*35238bceSAndroid Build Coastguard Worker , m_dstHint(dstHint)
60*35238bceSAndroid Build Coastguard Worker , m_copySrcOffset(copySrcOffset)
61*35238bceSAndroid Build Coastguard Worker , m_copyDstOffset(copyDstOffset)
62*35238bceSAndroid Build Coastguard Worker , m_copySize(copySize)
63*35238bceSAndroid Build Coastguard Worker , m_verifyType(verifyType)
64*35238bceSAndroid Build Coastguard Worker {
65*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inBounds(m_copySrcOffset, 0, m_srcSize) &&
66*35238bceSAndroid Build Coastguard Worker de::inRange(m_copySrcOffset + m_copySize, m_copySrcOffset, m_srcSize));
67*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inBounds(m_copyDstOffset, 0, m_dstSize) &&
68*35238bceSAndroid Build Coastguard Worker de::inRange(m_copyDstOffset + m_copySize, m_copyDstOffset, m_dstSize));
69*35238bceSAndroid Build Coastguard Worker }
70*35238bceSAndroid Build Coastguard Worker
iterate(void)71*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker BufferVerifier verifier(m_renderCtx, m_testCtx.getLog(), m_verifyType);
74*35238bceSAndroid Build Coastguard Worker ReferenceBuffer srcRef;
75*35238bceSAndroid Build Coastguard Worker ReferenceBuffer dstRef;
76*35238bceSAndroid Build Coastguard Worker uint32_t srcBuf = 0;
77*35238bceSAndroid Build Coastguard Worker uint32_t dstBuf = 0;
78*35238bceSAndroid Build Coastguard Worker uint32_t srcSeed = deStringHash(getName()) ^ 0xabcd;
79*35238bceSAndroid Build Coastguard Worker uint32_t dstSeed = deStringHash(getName()) ^ 0xef01;
80*35238bceSAndroid Build Coastguard Worker bool isOk = true;
81*35238bceSAndroid Build Coastguard Worker
82*35238bceSAndroid Build Coastguard Worker srcRef.setSize(m_srcSize);
83*35238bceSAndroid Build Coastguard Worker fillWithRandomBytes(srcRef.getPtr(), m_srcSize, srcSeed);
84*35238bceSAndroid Build Coastguard Worker
85*35238bceSAndroid Build Coastguard Worker dstRef.setSize(m_dstSize);
86*35238bceSAndroid Build Coastguard Worker fillWithRandomBytes(dstRef.getPtr(), m_dstSize, dstSeed);
87*35238bceSAndroid Build Coastguard Worker
88*35238bceSAndroid Build Coastguard Worker // Create source buffer and fill with data.
89*35238bceSAndroid Build Coastguard Worker srcBuf = genBuffer();
90*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_srcTarget, srcBuf);
91*35238bceSAndroid Build Coastguard Worker glBufferData(m_srcTarget, m_srcSize, srcRef.getPtr(), m_srcHint);
92*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("glBufferData");
93*35238bceSAndroid Build Coastguard Worker
94*35238bceSAndroid Build Coastguard Worker // Create destination buffer and fill with data.
95*35238bceSAndroid Build Coastguard Worker dstBuf = genBuffer();
96*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_dstTarget, dstBuf);
97*35238bceSAndroid Build Coastguard Worker glBufferData(m_dstTarget, m_dstSize, dstRef.getPtr(), m_dstHint);
98*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("glBufferData");
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker // Verify both buffers before executing copy.
101*35238bceSAndroid Build Coastguard Worker isOk = verifier.verify(srcBuf, srcRef.getPtr(), 0, m_srcSize, m_srcTarget) && isOk;
102*35238bceSAndroid Build Coastguard Worker isOk = verifier.verify(dstBuf, dstRef.getPtr(), 0, m_dstSize, m_dstTarget) && isOk;
103*35238bceSAndroid Build Coastguard Worker
104*35238bceSAndroid Build Coastguard Worker // Execute copy.
105*35238bceSAndroid Build Coastguard Worker deMemcpy(dstRef.getPtr() + m_copyDstOffset, srcRef.getPtr() + m_copySrcOffset, m_copySize);
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_srcTarget, srcBuf);
108*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_dstTarget, dstBuf);
109*35238bceSAndroid Build Coastguard Worker glCopyBufferSubData(m_srcTarget, m_dstTarget, m_copySrcOffset, m_copyDstOffset, m_copySize);
110*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("glCopyBufferSubData");
111*35238bceSAndroid Build Coastguard Worker
112*35238bceSAndroid Build Coastguard Worker // Verify both buffers after copy.
113*35238bceSAndroid Build Coastguard Worker isOk = verifier.verify(srcBuf, srcRef.getPtr(), 0, m_srcSize, m_srcTarget) && isOk;
114*35238bceSAndroid Build Coastguard Worker isOk = verifier.verify(dstBuf, dstRef.getPtr(), 0, m_dstSize, m_dstTarget) && isOk;
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL,
117*35238bceSAndroid Build Coastguard Worker isOk ? "Pass" : "Buffer verification failed");
118*35238bceSAndroid Build Coastguard Worker return STOP;
119*35238bceSAndroid Build Coastguard Worker }
120*35238bceSAndroid Build Coastguard Worker
121*35238bceSAndroid Build Coastguard Worker private:
122*35238bceSAndroid Build Coastguard Worker uint32_t m_srcTarget;
123*35238bceSAndroid Build Coastguard Worker int m_srcSize;
124*35238bceSAndroid Build Coastguard Worker uint32_t m_srcHint;
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker uint32_t m_dstTarget;
127*35238bceSAndroid Build Coastguard Worker int m_dstSize;
128*35238bceSAndroid Build Coastguard Worker uint32_t m_dstHint;
129*35238bceSAndroid Build Coastguard Worker
130*35238bceSAndroid Build Coastguard Worker int m_copySrcOffset;
131*35238bceSAndroid Build Coastguard Worker int m_copyDstOffset;
132*35238bceSAndroid Build Coastguard Worker int m_copySize;
133*35238bceSAndroid Build Coastguard Worker
134*35238bceSAndroid Build Coastguard Worker VerifyType m_verifyType;
135*35238bceSAndroid Build Coastguard Worker };
136*35238bceSAndroid Build Coastguard Worker
137*35238bceSAndroid Build Coastguard Worker // Case B: same buffer, take range as parameter
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker class SingleBufferCopyCase : public BufferCase
140*35238bceSAndroid Build Coastguard Worker {
141*35238bceSAndroid Build Coastguard Worker public:
SingleBufferCopyCase(Context & context,const char * name,const char * desc,uint32_t srcTarget,uint32_t dstTarget,uint32_t hint,VerifyType verifyType)142*35238bceSAndroid Build Coastguard Worker SingleBufferCopyCase(Context &context, const char *name, const char *desc, uint32_t srcTarget, uint32_t dstTarget,
143*35238bceSAndroid Build Coastguard Worker uint32_t hint, VerifyType verifyType)
144*35238bceSAndroid Build Coastguard Worker : BufferCase(context.getTestContext(), context.getRenderContext(), name, desc)
145*35238bceSAndroid Build Coastguard Worker , m_srcTarget(srcTarget)
146*35238bceSAndroid Build Coastguard Worker , m_dstTarget(dstTarget)
147*35238bceSAndroid Build Coastguard Worker , m_hint(hint)
148*35238bceSAndroid Build Coastguard Worker , m_verifyType(verifyType)
149*35238bceSAndroid Build Coastguard Worker {
150*35238bceSAndroid Build Coastguard Worker }
151*35238bceSAndroid Build Coastguard Worker
iterate(void)152*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
153*35238bceSAndroid Build Coastguard Worker {
154*35238bceSAndroid Build Coastguard Worker const int size = 1000;
155*35238bceSAndroid Build Coastguard Worker BufferVerifier verifier(m_renderCtx, m_testCtx.getLog(), m_verifyType);
156*35238bceSAndroid Build Coastguard Worker ReferenceBuffer ref;
157*35238bceSAndroid Build Coastguard Worker uint32_t buf = 0;
158*35238bceSAndroid Build Coastguard Worker uint32_t baseSeed = deStringHash(getName());
159*35238bceSAndroid Build Coastguard Worker bool isOk = true;
160*35238bceSAndroid Build Coastguard Worker
161*35238bceSAndroid Build Coastguard Worker ref.setSize(size);
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker // Create buffer.
164*35238bceSAndroid Build Coastguard Worker buf = genBuffer();
165*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_srcTarget, buf);
166*35238bceSAndroid Build Coastguard Worker
167*35238bceSAndroid Build Coastguard Worker static const struct
168*35238bceSAndroid Build Coastguard Worker {
169*35238bceSAndroid Build Coastguard Worker int srcOffset;
170*35238bceSAndroid Build Coastguard Worker int dstOffset;
171*35238bceSAndroid Build Coastguard Worker int copySize;
172*35238bceSAndroid Build Coastguard Worker } copyRanges[] = {
173*35238bceSAndroid Build Coastguard Worker {57, 701, 101}, // Non-adjecent, from low to high.
174*35238bceSAndroid Build Coastguard Worker {640, 101, 101}, // Non-adjecent, from high to low.
175*35238bceSAndroid Build Coastguard Worker {0, 500, 500}, // Lower half to upper half.
176*35238bceSAndroid Build Coastguard Worker {500, 0, 500} // Upper half to lower half.
177*35238bceSAndroid Build Coastguard Worker };
178*35238bceSAndroid Build Coastguard Worker
179*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(copyRanges) && isOk; ndx++)
180*35238bceSAndroid Build Coastguard Worker {
181*35238bceSAndroid Build Coastguard Worker int srcOffset = copyRanges[ndx].srcOffset;
182*35238bceSAndroid Build Coastguard Worker int dstOffset = copyRanges[ndx].dstOffset;
183*35238bceSAndroid Build Coastguard Worker int copySize = copyRanges[ndx].copySize;
184*35238bceSAndroid Build Coastguard Worker
185*35238bceSAndroid Build Coastguard Worker fillWithRandomBytes(ref.getPtr(), size, baseSeed ^ deInt32Hash(ndx));
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker // Fill with data.
188*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_srcTarget, buf);
189*35238bceSAndroid Build Coastguard Worker glBufferData(m_srcTarget, size, ref.getPtr(), m_hint);
190*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("glBufferData");
191*35238bceSAndroid Build Coastguard Worker
192*35238bceSAndroid Build Coastguard Worker // Execute copy.
193*35238bceSAndroid Build Coastguard Worker deMemcpy(ref.getPtr() + dstOffset, ref.getPtr() + srcOffset, copySize);
194*35238bceSAndroid Build Coastguard Worker
195*35238bceSAndroid Build Coastguard Worker glBindBuffer(m_dstTarget, buf);
196*35238bceSAndroid Build Coastguard Worker glCopyBufferSubData(m_srcTarget, m_dstTarget, srcOffset, dstOffset, copySize);
197*35238bceSAndroid Build Coastguard Worker GLU_CHECK_MSG("glCopyBufferSubData");
198*35238bceSAndroid Build Coastguard Worker
199*35238bceSAndroid Build Coastguard Worker // Verify buffer after copy.
200*35238bceSAndroid Build Coastguard Worker isOk = verifier.verify(buf, ref.getPtr(), 0, size, m_dstTarget) && isOk;
201*35238bceSAndroid Build Coastguard Worker }
202*35238bceSAndroid Build Coastguard Worker
203*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(isOk ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL,
204*35238bceSAndroid Build Coastguard Worker isOk ? "Pass" : "Buffer verification failed");
205*35238bceSAndroid Build Coastguard Worker return STOP;
206*35238bceSAndroid Build Coastguard Worker }
207*35238bceSAndroid Build Coastguard Worker
208*35238bceSAndroid Build Coastguard Worker private:
209*35238bceSAndroid Build Coastguard Worker uint32_t m_srcTarget;
210*35238bceSAndroid Build Coastguard Worker uint32_t m_dstTarget;
211*35238bceSAndroid Build Coastguard Worker uint32_t m_hint;
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker VerifyType m_verifyType;
214*35238bceSAndroid Build Coastguard Worker };
215*35238bceSAndroid Build Coastguard Worker
BufferCopyTests(Context & context)216*35238bceSAndroid Build Coastguard Worker BufferCopyTests::BufferCopyTests(Context &context) : TestCaseGroup(context, "copy", "Buffer copy tests")
217*35238bceSAndroid Build Coastguard Worker {
218*35238bceSAndroid Build Coastguard Worker }
219*35238bceSAndroid Build Coastguard Worker
~BufferCopyTests(void)220*35238bceSAndroid Build Coastguard Worker BufferCopyTests::~BufferCopyTests(void)
221*35238bceSAndroid Build Coastguard Worker {
222*35238bceSAndroid Build Coastguard Worker }
223*35238bceSAndroid Build Coastguard Worker
init(void)224*35238bceSAndroid Build Coastguard Worker void BufferCopyTests::init(void)
225*35238bceSAndroid Build Coastguard Worker {
226*35238bceSAndroid Build Coastguard Worker static const uint32_t bufferTargets[] = {
227*35238bceSAndroid Build Coastguard Worker GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER,
228*35238bceSAndroid Build Coastguard Worker GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER};
229*35238bceSAndroid Build Coastguard Worker
230*35238bceSAndroid Build Coastguard Worker // .basic
231*35238bceSAndroid Build Coastguard Worker {
232*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *basicGroup = new tcu::TestCaseGroup(m_testCtx, "basic", "Basic buffer copy cases");
233*35238bceSAndroid Build Coastguard Worker addChild(basicGroup);
234*35238bceSAndroid Build Coastguard Worker
235*35238bceSAndroid Build Coastguard Worker for (int srcTargetNdx = 0; srcTargetNdx < DE_LENGTH_OF_ARRAY(bufferTargets); srcTargetNdx++)
236*35238bceSAndroid Build Coastguard Worker {
237*35238bceSAndroid Build Coastguard Worker for (int dstTargetNdx = 0; dstTargetNdx < DE_LENGTH_OF_ARRAY(bufferTargets); dstTargetNdx++)
238*35238bceSAndroid Build Coastguard Worker {
239*35238bceSAndroid Build Coastguard Worker if (srcTargetNdx == dstTargetNdx)
240*35238bceSAndroid Build Coastguard Worker continue;
241*35238bceSAndroid Build Coastguard Worker
242*35238bceSAndroid Build Coastguard Worker uint32_t srcTarget = bufferTargets[srcTargetNdx];
243*35238bceSAndroid Build Coastguard Worker uint32_t dstTarget = bufferTargets[dstTargetNdx];
244*35238bceSAndroid Build Coastguard Worker const int size = 1017;
245*35238bceSAndroid Build Coastguard Worker const uint32_t hint = GL_STATIC_DRAW;
246*35238bceSAndroid Build Coastguard Worker VerifyType verify = VERIFY_AS_VERTEX_ARRAY;
247*35238bceSAndroid Build Coastguard Worker string name = string(getBufferTargetName(srcTarget)) + "_" + getBufferTargetName(dstTarget);
248*35238bceSAndroid Build Coastguard Worker
249*35238bceSAndroid Build Coastguard Worker basicGroup->addChild(new BasicBufferCopyCase(m_context, name.c_str(), "", srcTarget, size, hint,
250*35238bceSAndroid Build Coastguard Worker dstTarget, size, hint, 0, 0, size, verify));
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 // .subrange
256*35238bceSAndroid Build Coastguard Worker {
257*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *subrangeGroup = new tcu::TestCaseGroup(m_testCtx, "subrange", "Buffer subrange copy tests");
258*35238bceSAndroid Build Coastguard Worker addChild(subrangeGroup);
259*35238bceSAndroid Build Coastguard Worker
260*35238bceSAndroid Build Coastguard Worker static const struct
261*35238bceSAndroid Build Coastguard Worker {
262*35238bceSAndroid Build Coastguard Worker const char *name;
263*35238bceSAndroid Build Coastguard Worker int srcSize;
264*35238bceSAndroid Build Coastguard Worker int dstSize;
265*35238bceSAndroid Build Coastguard Worker int srcOffset;
266*35238bceSAndroid Build Coastguard Worker int dstOffset;
267*35238bceSAndroid Build Coastguard Worker int copySize;
268*35238bceSAndroid Build Coastguard Worker } cases[] = {// srcSize dstSize srcOffs dstOffs copySize
269*35238bceSAndroid Build Coastguard Worker {"middle", 1000, 1000, 250, 250, 500}, {"small_to_large", 100, 1000, 0, 409, 100},
270*35238bceSAndroid Build Coastguard Worker {"large_to_small", 1000, 100, 409, 0, 100}, {"low_to_high_1", 1000, 1000, 0, 500, 500},
271*35238bceSAndroid Build Coastguard Worker {"low_to_high_2", 997, 1027, 0, 701, 111}, {"high_to_low_1", 1000, 1000, 500, 0, 500},
272*35238bceSAndroid Build Coastguard Worker {"high_to_low_2", 1027, 997, 701, 17, 111}};
273*35238bceSAndroid Build Coastguard Worker
274*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(cases); ndx++)
275*35238bceSAndroid Build Coastguard Worker {
276*35238bceSAndroid Build Coastguard Worker uint32_t srcTarget = GL_COPY_READ_BUFFER;
277*35238bceSAndroid Build Coastguard Worker uint32_t dstTarget = GL_COPY_WRITE_BUFFER;
278*35238bceSAndroid Build Coastguard Worker uint32_t hint = GL_STATIC_DRAW;
279*35238bceSAndroid Build Coastguard Worker VerifyType verify = VERIFY_AS_VERTEX_ARRAY;
280*35238bceSAndroid Build Coastguard Worker
281*35238bceSAndroid Build Coastguard Worker subrangeGroup->addChild(new BasicBufferCopyCase(
282*35238bceSAndroid Build Coastguard Worker m_context, cases[ndx].name, "", srcTarget, cases[ndx].srcSize, hint, dstTarget, cases[ndx].dstSize,
283*35238bceSAndroid Build Coastguard Worker hint, cases[ndx].srcOffset, cases[ndx].dstOffset, cases[ndx].copySize, verify));
284*35238bceSAndroid Build Coastguard Worker }
285*35238bceSAndroid Build Coastguard Worker }
286*35238bceSAndroid Build Coastguard Worker
287*35238bceSAndroid Build Coastguard Worker // .single_buffer
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *singleBufGroup =
290*35238bceSAndroid Build Coastguard Worker new tcu::TestCaseGroup(m_testCtx, "single_buffer", "Copies within single buffer");
291*35238bceSAndroid Build Coastguard Worker addChild(singleBufGroup);
292*35238bceSAndroid Build Coastguard Worker
293*35238bceSAndroid Build Coastguard Worker for (int srcTargetNdx = 0; srcTargetNdx < DE_LENGTH_OF_ARRAY(bufferTargets); srcTargetNdx++)
294*35238bceSAndroid Build Coastguard Worker {
295*35238bceSAndroid Build Coastguard Worker for (int dstTargetNdx = 0; dstTargetNdx < DE_LENGTH_OF_ARRAY(bufferTargets); dstTargetNdx++)
296*35238bceSAndroid Build Coastguard Worker {
297*35238bceSAndroid Build Coastguard Worker if (srcTargetNdx == dstTargetNdx)
298*35238bceSAndroid Build Coastguard Worker continue;
299*35238bceSAndroid Build Coastguard Worker
300*35238bceSAndroid Build Coastguard Worker uint32_t srcTarget = bufferTargets[srcTargetNdx];
301*35238bceSAndroid Build Coastguard Worker uint32_t dstTarget = bufferTargets[dstTargetNdx];
302*35238bceSAndroid Build Coastguard Worker const uint32_t hint = GL_STATIC_DRAW;
303*35238bceSAndroid Build Coastguard Worker VerifyType verify = VERIFY_AS_VERTEX_ARRAY;
304*35238bceSAndroid Build Coastguard Worker string name = string(getBufferTargetName(srcTarget)) + "_" + getBufferTargetName(dstTarget);
305*35238bceSAndroid Build Coastguard Worker
306*35238bceSAndroid Build Coastguard Worker singleBufGroup->addChild(
307*35238bceSAndroid Build Coastguard Worker new SingleBufferCopyCase(m_context, name.c_str(), "", srcTarget, dstTarget, hint, verify));
308*35238bceSAndroid Build Coastguard Worker }
309*35238bceSAndroid Build Coastguard Worker }
310*35238bceSAndroid Build Coastguard Worker }
311*35238bceSAndroid Build Coastguard Worker }
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker } // namespace Functional
314*35238bceSAndroid Build Coastguard Worker } // namespace gles3
315*35238bceSAndroid Build Coastguard Worker } // namespace deqp
316