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.
282 lines
7.3 KiB
282 lines
7.3 KiB
#ifndef _GLSDRAWTEST_HPP |
|
#define _GLSDRAWTEST_HPP |
|
/*------------------------------------------------------------------------- |
|
* drawElements Quality Program OpenGL (ES) 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 Draw tests |
|
*//*--------------------------------------------------------------------*/ |
|
|
|
#include "tcuTestCase.hpp" |
|
#include "tcuResultCollector.hpp" |
|
#include "gluRenderContext.hpp" |
|
|
|
namespace sglr |
|
{ |
|
|
|
class ReferenceContextBuffers; |
|
class ReferenceContext; |
|
class Context; |
|
|
|
} // sglr |
|
|
|
namespace deqp |
|
{ |
|
namespace gls |
|
{ |
|
|
|
class AttributePack; |
|
|
|
struct DrawTestSpec |
|
{ |
|
enum Target |
|
{ |
|
TARGET_ELEMENT_ARRAY = 0, |
|
TARGET_ARRAY, |
|
|
|
TARGET_LAST |
|
}; |
|
|
|
enum InputType |
|
{ |
|
INPUTTYPE_FLOAT = 0, |
|
INPUTTYPE_FIXED, |
|
INPUTTYPE_DOUBLE, |
|
|
|
INPUTTYPE_BYTE, |
|
INPUTTYPE_SHORT, |
|
|
|
INPUTTYPE_UNSIGNED_BYTE, |
|
INPUTTYPE_UNSIGNED_SHORT, |
|
|
|
INPUTTYPE_INT, |
|
INPUTTYPE_UNSIGNED_INT, |
|
INPUTTYPE_HALF, |
|
INPUTTYPE_UNSIGNED_INT_2_10_10_10, |
|
INPUTTYPE_INT_2_10_10_10, |
|
|
|
INPUTTYPE_LAST |
|
}; |
|
|
|
enum OutputType |
|
{ |
|
OUTPUTTYPE_FLOAT = 0, |
|
OUTPUTTYPE_VEC2, |
|
OUTPUTTYPE_VEC3, |
|
OUTPUTTYPE_VEC4, |
|
|
|
OUTPUTTYPE_INT, |
|
OUTPUTTYPE_UINT, |
|
|
|
OUTPUTTYPE_IVEC2, |
|
OUTPUTTYPE_IVEC3, |
|
OUTPUTTYPE_IVEC4, |
|
|
|
OUTPUTTYPE_UVEC2, |
|
OUTPUTTYPE_UVEC3, |
|
OUTPUTTYPE_UVEC4, |
|
|
|
OUTPUTTYPE_LAST |
|
}; |
|
|
|
enum Usage |
|
{ |
|
USAGE_DYNAMIC_DRAW = 0, |
|
USAGE_STATIC_DRAW, |
|
USAGE_STREAM_DRAW, |
|
|
|
USAGE_STREAM_READ, |
|
USAGE_STREAM_COPY, |
|
|
|
USAGE_STATIC_READ, |
|
USAGE_STATIC_COPY, |
|
|
|
USAGE_DYNAMIC_READ, |
|
USAGE_DYNAMIC_COPY, |
|
|
|
USAGE_LAST |
|
}; |
|
|
|
enum Storage |
|
{ |
|
STORAGE_USER = 0, |
|
STORAGE_BUFFER, |
|
|
|
STORAGE_LAST |
|
}; |
|
|
|
enum Primitive |
|
{ |
|
PRIMITIVE_POINTS = 0, |
|
PRIMITIVE_TRIANGLES, |
|
PRIMITIVE_TRIANGLE_FAN, |
|
PRIMITIVE_TRIANGLE_STRIP, |
|
PRIMITIVE_LINES, |
|
PRIMITIVE_LINE_STRIP, |
|
PRIMITIVE_LINE_LOOP, |
|
|
|
PRIMITIVE_LINES_ADJACENCY, |
|
PRIMITIVE_LINE_STRIP_ADJACENCY, |
|
PRIMITIVE_TRIANGLES_ADJACENCY, |
|
PRIMITIVE_TRIANGLE_STRIP_ADJACENCY, |
|
|
|
PRIMITIVE_LAST |
|
}; |
|
|
|
enum IndexType |
|
{ |
|
INDEXTYPE_BYTE = 0, |
|
INDEXTYPE_SHORT, |
|
INDEXTYPE_INT, |
|
|
|
INDEXTYPE_LAST |
|
}; |
|
|
|
enum DrawMethod |
|
{ |
|
DRAWMETHOD_DRAWARRAYS = 0, |
|
DRAWMETHOD_DRAWARRAYS_INSTANCED, |
|
DRAWMETHOD_DRAWARRAYS_INDIRECT, |
|
DRAWMETHOD_DRAWELEMENTS, |
|
DRAWMETHOD_DRAWELEMENTS_RANGED, |
|
DRAWMETHOD_DRAWELEMENTS_INSTANCED, |
|
DRAWMETHOD_DRAWELEMENTS_INDIRECT, |
|
DRAWMETHOD_DRAWELEMENTS_BASEVERTEX, |
|
DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX, |
|
DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX, |
|
|
|
DRAWMETHOD_LAST |
|
}; |
|
|
|
enum CompatibilityTestType |
|
{ |
|
COMPATIBILITY_NONE = 0, |
|
COMPATIBILITY_UNALIGNED_OFFSET, |
|
COMPATIBILITY_UNALIGNED_STRIDE, |
|
|
|
COMPATIBILITY_LAST |
|
}; |
|
|
|
static std::string targetToString (Target target); |
|
static std::string inputTypeToString (InputType type); |
|
static std::string outputTypeToString (OutputType type); |
|
static std::string usageTypeToString (Usage usage); |
|
static std::string storageToString (Storage storage); |
|
static std::string primitiveToString (Primitive primitive); |
|
static std::string indexTypeToString (IndexType type); |
|
static std::string drawMethodToString (DrawMethod method); |
|
static int inputTypeSize (InputType type); |
|
static int indexTypeSize (IndexType type); |
|
|
|
struct AttributeSpec |
|
{ |
|
static AttributeSpec createAttributeArray (InputType inputType, OutputType outputType, Storage storage, Usage usage, int componentCount, int offset, int stride, bool normalize, int instanceDivisor); |
|
static AttributeSpec createDefaultAttribute (InputType inputType, OutputType outputType, int componentCount); //!< allowed inputType values: INPUTTYPE_INT, INPUTTYPE_UNSIGNED_INT, INPUTTYPE_FLOAT |
|
|
|
InputType inputType; |
|
OutputType outputType; |
|
Storage storage; |
|
Usage usage; |
|
int componentCount; |
|
int offset; |
|
int stride; |
|
bool normalize; |
|
int instanceDivisor; //!< used only if drawMethod = Draw*Instanced |
|
bool useDefaultAttribute; |
|
|
|
bool additionalPositionAttribute; //!< treat this attribute as position attribute. Attribute at index 0 is alway treated as such. False by default |
|
bool bgraComponentOrder; //!< component order of this attribute is bgra, valid only for 4-component targets. False by default. |
|
|
|
AttributeSpec (void); |
|
|
|
int hash (void) const; |
|
bool valid (glu::ApiType apiType) const; |
|
bool isBufferAligned (void) const; |
|
bool isBufferStrideAligned (void) const; |
|
}; |
|
|
|
std::string getName (void) const; |
|
std::string getDesc (void) const; |
|
std::string getMultilineDesc (void) const; |
|
|
|
glu::ApiType apiType; //!< needed in spec validation |
|
Primitive primitive; |
|
int primitiveCount; //!< number of primitives to draw (per instance) |
|
|
|
DrawMethod drawMethod; |
|
IndexType indexType; //!< used only if drawMethod = DrawElements* |
|
int indexPointerOffset; //!< used only if drawMethod = DrawElements* |
|
Storage indexStorage; //!< used only if drawMethod = DrawElements* |
|
int first; //!< used only if drawMethod = DrawArrays* |
|
int indexMin; //!< used only if drawMethod = Draw*Ranged |
|
int indexMax; //!< used only if drawMethod = Draw*Ranged |
|
int instanceCount; //!< used only if drawMethod = Draw*Instanced or Draw*Indirect |
|
int indirectOffset; //!< used only if drawMethod = Draw*Indirect |
|
int baseVertex; //!< used only if drawMethod = DrawElementsIndirect or *BaseVertex |
|
|
|
std::vector<AttributeSpec> attribs; |
|
|
|
DrawTestSpec (void); |
|
|
|
int hash (void) const; |
|
bool valid (void) const; |
|
CompatibilityTestType isCompatibilityTest (void) const; |
|
}; |
|
|
|
class DrawTest : public tcu::TestCase |
|
{ |
|
public: |
|
DrawTest (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const DrawTestSpec& spec, const char* name, const char* desc); |
|
DrawTest (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* desc); |
|
virtual ~DrawTest (void); |
|
|
|
void addIteration (const DrawTestSpec& spec, const char* description = DE_NULL); |
|
|
|
private: |
|
void init (void); |
|
void deinit (void); |
|
IterateResult iterate (void); |
|
|
|
bool compare (gls::DrawTestSpec::Primitive primitiveType); |
|
float getCoordScale (const DrawTestSpec& spec) const; |
|
float getColorScale (const DrawTestSpec& spec) const; |
|
|
|
glu::RenderContext& m_renderCtx; |
|
|
|
sglr::ReferenceContextBuffers* m_refBuffers; |
|
sglr::ReferenceContext* m_refContext; |
|
sglr::Context* m_glesContext; |
|
|
|
AttributePack* m_glArrayPack; |
|
AttributePack* m_rrArrayPack; |
|
|
|
int m_maxDiffRed; |
|
int m_maxDiffGreen; |
|
int m_maxDiffBlue; |
|
|
|
std::vector<DrawTestSpec> m_specs; |
|
std::vector<std::string> m_iteration_descriptions; |
|
int m_iteration; |
|
tcu::ResultCollector m_result; |
|
}; |
|
|
|
} // gls |
|
} // deqp |
|
|
|
#endif // _GLSDRAWTEST_HPP
|
|
|