You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
4.7 KiB
179 lines
4.7 KiB
#ifndef _ES2FBUFFERTESTUTIL_HPP
|
|
#define _ES2FBUFFERTESTUTIL_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program OpenGL ES 2.0 Module
|
|
* -------------------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Buffer test utilities.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
#include "tcuTestLog.hpp"
|
|
#include "gluCallLogWrapper.hpp"
|
|
#include "tes2TestCase.hpp"
|
|
|
|
#include <vector>
|
|
#include <set>
|
|
|
|
namespace glu
|
|
{
|
|
class ShaderProgram;
|
|
}
|
|
|
|
namespace deqp
|
|
{
|
|
namespace gles2
|
|
{
|
|
namespace Functional
|
|
{
|
|
namespace BufferTestUtil
|
|
{
|
|
|
|
// Helper functions.
|
|
|
|
void fillWithRandomBytes (deUint8* ptr, int numBytes, deUint32 seed);
|
|
bool compareByteArrays (tcu::TestLog& log, const deUint8* resPtr, const deUint8* refPtr, int numBytes);
|
|
const char* getBufferTargetName (deUint32 target);
|
|
const char* getUsageHintName (deUint32 hint);
|
|
|
|
// Base class for buffer cases.
|
|
|
|
class BufferCase : public TestCase, public glu::CallLogWrapper
|
|
{
|
|
public:
|
|
BufferCase (Context& context, const char* name, const char* description);
|
|
virtual ~BufferCase (void);
|
|
|
|
void init (void);
|
|
void deinit (void);
|
|
|
|
deUint32 genBuffer (void);
|
|
void deleteBuffer (deUint32 buffer);
|
|
void checkError (void);
|
|
|
|
private:
|
|
// Resource handles for cleanup in case of unexpected iterate() termination.
|
|
std::set<deUint32> m_allocatedBuffers;
|
|
};
|
|
|
|
// Reference buffer.
|
|
|
|
class ReferenceBuffer
|
|
{
|
|
public:
|
|
ReferenceBuffer (void) {}
|
|
~ReferenceBuffer (void) {}
|
|
|
|
void setSize (int numBytes);
|
|
void setData (int numBytes, const deUint8* bytes);
|
|
void setSubData (int offset, int numBytes, const deUint8* bytes);
|
|
|
|
deUint8* getPtr (int offset = 0) { return &m_data[offset]; }
|
|
const deUint8* getPtr (int offset = 0) const { return &m_data[offset]; }
|
|
|
|
private:
|
|
std::vector<deUint8> m_data;
|
|
};
|
|
|
|
// Buffer verifier system.
|
|
|
|
enum VerifyType
|
|
{
|
|
VERIFY_AS_VERTEX_ARRAY = 0,
|
|
VERIFY_AS_INDEX_ARRAY,
|
|
|
|
VERIFY_LAST
|
|
};
|
|
|
|
class BufferVerifierBase : public glu::CallLogWrapper
|
|
{
|
|
public:
|
|
BufferVerifierBase (Context& context);
|
|
virtual ~BufferVerifierBase (void) {}
|
|
|
|
virtual int getMinSize (void) const = DE_NULL;
|
|
virtual int getAlignment (void) const = DE_NULL;
|
|
virtual bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes) = DE_NULL;
|
|
|
|
protected:
|
|
Context& m_context;
|
|
|
|
private:
|
|
BufferVerifierBase (const BufferVerifierBase& other);
|
|
BufferVerifierBase& operator= (const BufferVerifierBase& other);
|
|
};
|
|
|
|
class BufferVerifier
|
|
{
|
|
public:
|
|
BufferVerifier (Context& context, VerifyType verifyType);
|
|
~BufferVerifier (void);
|
|
|
|
int getMinSize (void) const { return m_verifier->getMinSize(); }
|
|
int getAlignment (void) const { return m_verifier->getAlignment(); }
|
|
|
|
// \note Offset is applied to reference pointer as well.
|
|
bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
|
|
|
|
private:
|
|
BufferVerifier (const BufferVerifier& other);
|
|
BufferVerifier& operator= (const BufferVerifier& other);
|
|
|
|
BufferVerifierBase* m_verifier;
|
|
};
|
|
|
|
class VertexArrayVerifier : public BufferVerifierBase
|
|
{
|
|
public:
|
|
VertexArrayVerifier (Context& context);
|
|
~VertexArrayVerifier (void);
|
|
|
|
int getMinSize (void) const { return 3*4; }
|
|
int getAlignment (void) const { return 1; }
|
|
bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
|
|
|
|
private:
|
|
glu::ShaderProgram* m_program;
|
|
deUint32 m_posLoc;
|
|
deUint32 m_byteVecLoc;
|
|
};
|
|
|
|
class IndexArrayVerifier : public BufferVerifierBase
|
|
{
|
|
public:
|
|
IndexArrayVerifier (Context& context);
|
|
~IndexArrayVerifier (void);
|
|
|
|
int getMinSize (void) const { return 2; }
|
|
int getAlignment (void) const { return 1; }
|
|
bool verify (deUint32 buffer, const deUint8* reference, int offset, int numBytes);
|
|
|
|
private:
|
|
glu::ShaderProgram* m_program;
|
|
deUint32 m_posLoc;
|
|
deUint32 m_colorLoc;
|
|
};
|
|
|
|
} // BufferTestUtil
|
|
} // Functional
|
|
} // gles2
|
|
} // deqp
|
|
|
|
#endif // _ES2FBUFFERTESTUTIL_HPP
|