1 #ifndef _ES2FBUFFERTESTUTIL_HPP
2 #define _ES2FBUFFERTESTUTIL_HPP
3 /*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES 2.0 Module
5 * -------------------------------------------------
7 * Copyright 2014 The Android Open Source Project
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
23 * \brief Buffer test utilities.
24 *//*--------------------------------------------------------------------*/
26 #include "tcuDefs.hpp"
27 #include "tcuTestLog.hpp"
28 #include "gluCallLogWrapper.hpp"
29 #include "tes2TestCase.hpp"
45 namespace BufferTestUtil
50 void fillWithRandomBytes (deUint8* ptr, int numBytes, deUint32 seed);
51 bool compareByteArrays (tcu::TestLog& log, const deUint8* resPtr, const deUint8* refPtr, int numBytes);
52 const char* getBufferTargetName (deUint32 target);
53 const char* getUsageHintName (deUint32 hint);
55 // Base class for buffer cases.
57 class BufferCase : public TestCase, public glu::CallLogWrapper
60 BufferCase (Context& context, const char* name, const char* description);
61 virtual ~BufferCase (void);
66 deUint32 genBuffer (void);
67 void deleteBuffer (deUint32 buffer);
68 void checkError (void);
71 // Resource handles for cleanup in case of unexpected iterate() termination.
72 std::set<deUint32> m_allocatedBuffers;
80 ReferenceBuffer (void) {}
81 ~ReferenceBuffer (void) {}
83 void setSize (int numBytes);
84 void setData (int numBytes, const deUint8* bytes);
85 void setSubData (int offset, int numBytes, const deUint8* bytes);
87 deUint8* getPtr (int offset = 0) { return &m_data[offset]; }
88 const deUint8* getPtr (int offset = 0) const { return &m_data[offset]; }
91 std::vector<deUint8> m_data;
94 // Buffer verifier system.
98 VERIFY_AS_VERTEX_ARRAY = 0,
99 VERIFY_AS_INDEX_ARRAY,
104 class BufferVerifierBase : public glu::CallLogWrapper
107 BufferVerifierBase (Context& context);
108 virtual ~BufferVerifierBase (void) {}
110 virtual int getMinSize (void) const = DE_NULL;
111 virtual int getAlignment (void) const = DE_NULL;
112 virtual bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes) = DE_NULL;
118 BufferVerifierBase (const BufferVerifierBase& other);
119 BufferVerifierBase& operator= (const BufferVerifierBase& other);
125 BufferVerifier (Context& context, VerifyType verifyType);
126 ~BufferVerifier (void);
128 int getMinSize (void) const { return m_verifier->getMinSize(); }
129 int getAlignment (void) const { return m_verifier->getAlignment(); }
131 // \note Offset is applied to reference pointer as well.
132 bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
135 BufferVerifier (const BufferVerifier& other);
136 BufferVerifier& operator= (const BufferVerifier& other);
138 BufferVerifierBase* m_verifier;
141 class VertexArrayVerifier : public BufferVerifierBase
144 VertexArrayVerifier (Context& context);
145 ~VertexArrayVerifier (void);
147 int getMinSize (void) const { return 3*4; }
148 int getAlignment (void) const { return 1; }
149 bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
152 glu::ShaderProgram* m_program;
154 deUint32 m_byteVecLoc;
157 class IndexArrayVerifier : public BufferVerifierBase
160 IndexArrayVerifier (Context& context);
161 ~IndexArrayVerifier (void);
163 int getMinSize (void) const { return 2; }
164 int getAlignment (void) const { return 1; }
165 bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
168 glu::ShaderProgram* m_program;
178 #endif // _ES2FBUFFERTESTUTIL_HPP