1*35238bceSAndroid Build Coastguard Worker #ifndef _ES2FBUFFERTESTUTIL_HPP 2*35238bceSAndroid Build Coastguard Worker #define _ES2FBUFFERTESTUTIL_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 2.0 Module 5*35238bceSAndroid Build Coastguard Worker * ------------------------------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker *//*! 22*35238bceSAndroid Build Coastguard Worker * \file 23*35238bceSAndroid Build Coastguard Worker * \brief Buffer test utilities. 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp" 28*35238bceSAndroid Build Coastguard Worker #include "gluCallLogWrapper.hpp" 29*35238bceSAndroid Build Coastguard Worker #include "tes2TestCase.hpp" 30*35238bceSAndroid Build Coastguard Worker 31*35238bceSAndroid Build Coastguard Worker #include <vector> 32*35238bceSAndroid Build Coastguard Worker #include <set> 33*35238bceSAndroid Build Coastguard Worker 34*35238bceSAndroid Build Coastguard Worker namespace glu 35*35238bceSAndroid Build Coastguard Worker { 36*35238bceSAndroid Build Coastguard Worker class ShaderProgram; 37*35238bceSAndroid Build Coastguard Worker } 38*35238bceSAndroid Build Coastguard Worker 39*35238bceSAndroid Build Coastguard Worker namespace deqp 40*35238bceSAndroid Build Coastguard Worker { 41*35238bceSAndroid Build Coastguard Worker namespace gles2 42*35238bceSAndroid Build Coastguard Worker { 43*35238bceSAndroid Build Coastguard Worker namespace Functional 44*35238bceSAndroid Build Coastguard Worker { 45*35238bceSAndroid Build Coastguard Worker namespace BufferTestUtil 46*35238bceSAndroid Build Coastguard Worker { 47*35238bceSAndroid Build Coastguard Worker 48*35238bceSAndroid Build Coastguard Worker // Helper functions. 49*35238bceSAndroid Build Coastguard Worker 50*35238bceSAndroid Build Coastguard Worker void fillWithRandomBytes(uint8_t *ptr, int numBytes, uint32_t seed); 51*35238bceSAndroid Build Coastguard Worker bool compareByteArrays(tcu::TestLog &log, const uint8_t *resPtr, const uint8_t *refPtr, int numBytes); 52*35238bceSAndroid Build Coastguard Worker const char *getBufferTargetName(uint32_t target); 53*35238bceSAndroid Build Coastguard Worker const char *getUsageHintName(uint32_t hint); 54*35238bceSAndroid Build Coastguard Worker 55*35238bceSAndroid Build Coastguard Worker // Base class for buffer cases. 56*35238bceSAndroid Build Coastguard Worker 57*35238bceSAndroid Build Coastguard Worker class BufferCase : public TestCase, public glu::CallLogWrapper 58*35238bceSAndroid Build Coastguard Worker { 59*35238bceSAndroid Build Coastguard Worker public: 60*35238bceSAndroid Build Coastguard Worker BufferCase(Context &context, const char *name, const char *description); 61*35238bceSAndroid Build Coastguard Worker virtual ~BufferCase(void); 62*35238bceSAndroid Build Coastguard Worker 63*35238bceSAndroid Build Coastguard Worker void init(void); 64*35238bceSAndroid Build Coastguard Worker void deinit(void); 65*35238bceSAndroid Build Coastguard Worker 66*35238bceSAndroid Build Coastguard Worker uint32_t genBuffer(void); 67*35238bceSAndroid Build Coastguard Worker void deleteBuffer(uint32_t buffer); 68*35238bceSAndroid Build Coastguard Worker void checkError(void); 69*35238bceSAndroid Build Coastguard Worker 70*35238bceSAndroid Build Coastguard Worker private: 71*35238bceSAndroid Build Coastguard Worker // Resource handles for cleanup in case of unexpected iterate() termination. 72*35238bceSAndroid Build Coastguard Worker std::set<uint32_t> m_allocatedBuffers; 73*35238bceSAndroid Build Coastguard Worker }; 74*35238bceSAndroid Build Coastguard Worker 75*35238bceSAndroid Build Coastguard Worker // Reference buffer. 76*35238bceSAndroid Build Coastguard Worker 77*35238bceSAndroid Build Coastguard Worker class ReferenceBuffer 78*35238bceSAndroid Build Coastguard Worker { 79*35238bceSAndroid Build Coastguard Worker public: ReferenceBuffer(void)80*35238bceSAndroid Build Coastguard Worker ReferenceBuffer(void) 81*35238bceSAndroid Build Coastguard Worker { 82*35238bceSAndroid Build Coastguard Worker } ~ReferenceBuffer(void)83*35238bceSAndroid Build Coastguard Worker ~ReferenceBuffer(void) 84*35238bceSAndroid Build Coastguard Worker { 85*35238bceSAndroid Build Coastguard Worker } 86*35238bceSAndroid Build Coastguard Worker 87*35238bceSAndroid Build Coastguard Worker void setSize(int numBytes); 88*35238bceSAndroid Build Coastguard Worker void setData(int numBytes, const uint8_t *bytes); 89*35238bceSAndroid Build Coastguard Worker void setSubData(int offset, int numBytes, const uint8_t *bytes); 90*35238bceSAndroid Build Coastguard Worker getPtr(int offset=0)91*35238bceSAndroid Build Coastguard Worker uint8_t *getPtr(int offset = 0) 92*35238bceSAndroid Build Coastguard Worker { 93*35238bceSAndroid Build Coastguard Worker return &m_data[offset]; 94*35238bceSAndroid Build Coastguard Worker } getPtr(int offset=0) const95*35238bceSAndroid Build Coastguard Worker const uint8_t *getPtr(int offset = 0) const 96*35238bceSAndroid Build Coastguard Worker { 97*35238bceSAndroid Build Coastguard Worker return &m_data[offset]; 98*35238bceSAndroid Build Coastguard Worker } 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard Worker private: 101*35238bceSAndroid Build Coastguard Worker std::vector<uint8_t> m_data; 102*35238bceSAndroid Build Coastguard Worker }; 103*35238bceSAndroid Build Coastguard Worker 104*35238bceSAndroid Build Coastguard Worker // Buffer verifier system. 105*35238bceSAndroid Build Coastguard Worker 106*35238bceSAndroid Build Coastguard Worker enum VerifyType 107*35238bceSAndroid Build Coastguard Worker { 108*35238bceSAndroid Build Coastguard Worker VERIFY_AS_VERTEX_ARRAY = 0, 109*35238bceSAndroid Build Coastguard Worker VERIFY_AS_INDEX_ARRAY, 110*35238bceSAndroid Build Coastguard Worker 111*35238bceSAndroid Build Coastguard Worker VERIFY_LAST 112*35238bceSAndroid Build Coastguard Worker }; 113*35238bceSAndroid Build Coastguard Worker 114*35238bceSAndroid Build Coastguard Worker class BufferVerifierBase : public glu::CallLogWrapper 115*35238bceSAndroid Build Coastguard Worker { 116*35238bceSAndroid Build Coastguard Worker public: 117*35238bceSAndroid Build Coastguard Worker BufferVerifierBase(Context &context); ~BufferVerifierBase(void)118*35238bceSAndroid Build Coastguard Worker virtual ~BufferVerifierBase(void) 119*35238bceSAndroid Build Coastguard Worker { 120*35238bceSAndroid Build Coastguard Worker } 121*35238bceSAndroid Build Coastguard Worker 122*35238bceSAndroid Build Coastguard Worker virtual int getMinSize(void) const = DE_NULL; 123*35238bceSAndroid Build Coastguard Worker virtual int getAlignment(void) const = DE_NULL; 124*35238bceSAndroid Build Coastguard Worker virtual bool verify(uint32_t buffer, const uint8_t *reference, int offset, int numBytes) = DE_NULL; 125*35238bceSAndroid Build Coastguard Worker 126*35238bceSAndroid Build Coastguard Worker protected: 127*35238bceSAndroid Build Coastguard Worker Context &m_context; 128*35238bceSAndroid Build Coastguard Worker 129*35238bceSAndroid Build Coastguard Worker private: 130*35238bceSAndroid Build Coastguard Worker BufferVerifierBase(const BufferVerifierBase &other); 131*35238bceSAndroid Build Coastguard Worker BufferVerifierBase &operator=(const BufferVerifierBase &other); 132*35238bceSAndroid Build Coastguard Worker }; 133*35238bceSAndroid Build Coastguard Worker 134*35238bceSAndroid Build Coastguard Worker class BufferVerifier 135*35238bceSAndroid Build Coastguard Worker { 136*35238bceSAndroid Build Coastguard Worker public: 137*35238bceSAndroid Build Coastguard Worker BufferVerifier(Context &context, VerifyType verifyType); 138*35238bceSAndroid Build Coastguard Worker ~BufferVerifier(void); 139*35238bceSAndroid Build Coastguard Worker getMinSize(void) const140*35238bceSAndroid Build Coastguard Worker int getMinSize(void) const 141*35238bceSAndroid Build Coastguard Worker { 142*35238bceSAndroid Build Coastguard Worker return m_verifier->getMinSize(); 143*35238bceSAndroid Build Coastguard Worker } getAlignment(void) const144*35238bceSAndroid Build Coastguard Worker int getAlignment(void) const 145*35238bceSAndroid Build Coastguard Worker { 146*35238bceSAndroid Build Coastguard Worker return m_verifier->getAlignment(); 147*35238bceSAndroid Build Coastguard Worker } 148*35238bceSAndroid Build Coastguard Worker 149*35238bceSAndroid Build Coastguard Worker // \note Offset is applied to reference pointer as well. 150*35238bceSAndroid Build Coastguard Worker bool verify(uint32_t buffer, const uint8_t *reference, int offset, int numBytes); 151*35238bceSAndroid Build Coastguard Worker 152*35238bceSAndroid Build Coastguard Worker private: 153*35238bceSAndroid Build Coastguard Worker BufferVerifier(const BufferVerifier &other); 154*35238bceSAndroid Build Coastguard Worker BufferVerifier &operator=(const BufferVerifier &other); 155*35238bceSAndroid Build Coastguard Worker 156*35238bceSAndroid Build Coastguard Worker BufferVerifierBase *m_verifier; 157*35238bceSAndroid Build Coastguard Worker }; 158*35238bceSAndroid Build Coastguard Worker 159*35238bceSAndroid Build Coastguard Worker class VertexArrayVerifier : public BufferVerifierBase 160*35238bceSAndroid Build Coastguard Worker { 161*35238bceSAndroid Build Coastguard Worker public: 162*35238bceSAndroid Build Coastguard Worker VertexArrayVerifier(Context &context); 163*35238bceSAndroid Build Coastguard Worker ~VertexArrayVerifier(void); 164*35238bceSAndroid Build Coastguard Worker getMinSize(void) const165*35238bceSAndroid Build Coastguard Worker int getMinSize(void) const 166*35238bceSAndroid Build Coastguard Worker { 167*35238bceSAndroid Build Coastguard Worker return 3 * 4; 168*35238bceSAndroid Build Coastguard Worker } getAlignment(void) const169*35238bceSAndroid Build Coastguard Worker int getAlignment(void) const 170*35238bceSAndroid Build Coastguard Worker { 171*35238bceSAndroid Build Coastguard Worker return 1; 172*35238bceSAndroid Build Coastguard Worker } 173*35238bceSAndroid Build Coastguard Worker bool verify(uint32_t buffer, const uint8_t *reference, int offset, int numBytes); 174*35238bceSAndroid Build Coastguard Worker 175*35238bceSAndroid Build Coastguard Worker private: 176*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram *m_program; 177*35238bceSAndroid Build Coastguard Worker uint32_t m_posLoc; 178*35238bceSAndroid Build Coastguard Worker uint32_t m_byteVecLoc; 179*35238bceSAndroid Build Coastguard Worker }; 180*35238bceSAndroid Build Coastguard Worker 181*35238bceSAndroid Build Coastguard Worker class IndexArrayVerifier : public BufferVerifierBase 182*35238bceSAndroid Build Coastguard Worker { 183*35238bceSAndroid Build Coastguard Worker public: 184*35238bceSAndroid Build Coastguard Worker IndexArrayVerifier(Context &context); 185*35238bceSAndroid Build Coastguard Worker ~IndexArrayVerifier(void); 186*35238bceSAndroid Build Coastguard Worker getMinSize(void) const187*35238bceSAndroid Build Coastguard Worker int getMinSize(void) const 188*35238bceSAndroid Build Coastguard Worker { 189*35238bceSAndroid Build Coastguard Worker return 2; 190*35238bceSAndroid Build Coastguard Worker } getAlignment(void) const191*35238bceSAndroid Build Coastguard Worker int getAlignment(void) const 192*35238bceSAndroid Build Coastguard Worker { 193*35238bceSAndroid Build Coastguard Worker return 1; 194*35238bceSAndroid Build Coastguard Worker } 195*35238bceSAndroid Build Coastguard Worker bool verify(uint32_t buffer, const uint8_t *reference, int offset, int numBytes); 196*35238bceSAndroid Build Coastguard Worker 197*35238bceSAndroid Build Coastguard Worker private: 198*35238bceSAndroid Build Coastguard Worker glu::ShaderProgram *m_program; 199*35238bceSAndroid Build Coastguard Worker uint32_t m_posLoc; 200*35238bceSAndroid Build Coastguard Worker uint32_t m_colorLoc; 201*35238bceSAndroid Build Coastguard Worker }; 202*35238bceSAndroid Build Coastguard Worker 203*35238bceSAndroid Build Coastguard Worker } // namespace BufferTestUtil 204*35238bceSAndroid Build Coastguard Worker } // namespace Functional 205*35238bceSAndroid Build Coastguard Worker } // namespace gles2 206*35238bceSAndroid Build Coastguard Worker } // namespace deqp 207*35238bceSAndroid Build Coastguard Worker 208*35238bceSAndroid Build Coastguard Worker #endif // _ES2FBUFFERTESTUTIL_HPP 209