1*35238bceSAndroid Build Coastguard Worker #ifndef _GLSDRAWTEST_HPP 2*35238bceSAndroid Build Coastguard Worker #define _GLSDRAWTEST_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL (ES) 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 Draw tests 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "tcuTestCase.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "tcuResultCollector.hpp" 28*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp" 29*35238bceSAndroid Build Coastguard Worker 30*35238bceSAndroid Build Coastguard Worker namespace glu 31*35238bceSAndroid Build Coastguard Worker { 32*35238bceSAndroid Build Coastguard Worker class ContextInfo; 33*35238bceSAndroid Build Coastguard Worker } 34*35238bceSAndroid Build Coastguard Worker 35*35238bceSAndroid Build Coastguard Worker namespace sglr 36*35238bceSAndroid Build Coastguard Worker { 37*35238bceSAndroid Build Coastguard Worker 38*35238bceSAndroid Build Coastguard Worker class ReferenceContextBuffers; 39*35238bceSAndroid Build Coastguard Worker class ReferenceContext; 40*35238bceSAndroid Build Coastguard Worker class Context; 41*35238bceSAndroid Build Coastguard Worker 42*35238bceSAndroid Build Coastguard Worker } // namespace sglr 43*35238bceSAndroid Build Coastguard Worker 44*35238bceSAndroid Build Coastguard Worker namespace deqp 45*35238bceSAndroid Build Coastguard Worker { 46*35238bceSAndroid Build Coastguard Worker namespace gls 47*35238bceSAndroid Build Coastguard Worker { 48*35238bceSAndroid Build Coastguard Worker 49*35238bceSAndroid Build Coastguard Worker class AttributePack; 50*35238bceSAndroid Build Coastguard Worker 51*35238bceSAndroid Build Coastguard Worker struct DrawTestSpec 52*35238bceSAndroid Build Coastguard Worker { 53*35238bceSAndroid Build Coastguard Worker enum Target 54*35238bceSAndroid Build Coastguard Worker { 55*35238bceSAndroid Build Coastguard Worker TARGET_ELEMENT_ARRAY = 0, 56*35238bceSAndroid Build Coastguard Worker TARGET_ARRAY, 57*35238bceSAndroid Build Coastguard Worker 58*35238bceSAndroid Build Coastguard Worker TARGET_LAST 59*35238bceSAndroid Build Coastguard Worker }; 60*35238bceSAndroid Build Coastguard Worker 61*35238bceSAndroid Build Coastguard Worker enum InputType 62*35238bceSAndroid Build Coastguard Worker { 63*35238bceSAndroid Build Coastguard Worker INPUTTYPE_FLOAT = 0, 64*35238bceSAndroid Build Coastguard Worker INPUTTYPE_FIXED, 65*35238bceSAndroid Build Coastguard Worker INPUTTYPE_DOUBLE, 66*35238bceSAndroid Build Coastguard Worker 67*35238bceSAndroid Build Coastguard Worker INPUTTYPE_BYTE, 68*35238bceSAndroid Build Coastguard Worker INPUTTYPE_SHORT, 69*35238bceSAndroid Build Coastguard Worker 70*35238bceSAndroid Build Coastguard Worker INPUTTYPE_UNSIGNED_BYTE, 71*35238bceSAndroid Build Coastguard Worker INPUTTYPE_UNSIGNED_SHORT, 72*35238bceSAndroid Build Coastguard Worker 73*35238bceSAndroid Build Coastguard Worker INPUTTYPE_INT, 74*35238bceSAndroid Build Coastguard Worker INPUTTYPE_UNSIGNED_INT, 75*35238bceSAndroid Build Coastguard Worker INPUTTYPE_HALF, 76*35238bceSAndroid Build Coastguard Worker INPUTTYPE_UNSIGNED_INT_2_10_10_10, 77*35238bceSAndroid Build Coastguard Worker INPUTTYPE_INT_2_10_10_10, 78*35238bceSAndroid Build Coastguard Worker 79*35238bceSAndroid Build Coastguard Worker INPUTTYPE_LAST 80*35238bceSAndroid Build Coastguard Worker }; 81*35238bceSAndroid Build Coastguard Worker 82*35238bceSAndroid Build Coastguard Worker enum OutputType 83*35238bceSAndroid Build Coastguard Worker { 84*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_FLOAT = 0, 85*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_VEC2, 86*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_VEC3, 87*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_VEC4, 88*35238bceSAndroid Build Coastguard Worker 89*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_INT, 90*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_UINT, 91*35238bceSAndroid Build Coastguard Worker 92*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_IVEC2, 93*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_IVEC3, 94*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_IVEC4, 95*35238bceSAndroid Build Coastguard Worker 96*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_UVEC2, 97*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_UVEC3, 98*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_UVEC4, 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard Worker OUTPUTTYPE_LAST 101*35238bceSAndroid Build Coastguard Worker }; 102*35238bceSAndroid Build Coastguard Worker 103*35238bceSAndroid Build Coastguard Worker enum Usage 104*35238bceSAndroid Build Coastguard Worker { 105*35238bceSAndroid Build Coastguard Worker USAGE_DYNAMIC_DRAW = 0, 106*35238bceSAndroid Build Coastguard Worker USAGE_STATIC_DRAW, 107*35238bceSAndroid Build Coastguard Worker USAGE_STREAM_DRAW, 108*35238bceSAndroid Build Coastguard Worker 109*35238bceSAndroid Build Coastguard Worker USAGE_STREAM_READ, 110*35238bceSAndroid Build Coastguard Worker USAGE_STREAM_COPY, 111*35238bceSAndroid Build Coastguard Worker 112*35238bceSAndroid Build Coastguard Worker USAGE_STATIC_READ, 113*35238bceSAndroid Build Coastguard Worker USAGE_STATIC_COPY, 114*35238bceSAndroid Build Coastguard Worker 115*35238bceSAndroid Build Coastguard Worker USAGE_DYNAMIC_READ, 116*35238bceSAndroid Build Coastguard Worker USAGE_DYNAMIC_COPY, 117*35238bceSAndroid Build Coastguard Worker 118*35238bceSAndroid Build Coastguard Worker USAGE_LAST 119*35238bceSAndroid Build Coastguard Worker }; 120*35238bceSAndroid Build Coastguard Worker 121*35238bceSAndroid Build Coastguard Worker enum Storage 122*35238bceSAndroid Build Coastguard Worker { 123*35238bceSAndroid Build Coastguard Worker STORAGE_USER = 0, 124*35238bceSAndroid Build Coastguard Worker STORAGE_BUFFER, 125*35238bceSAndroid Build Coastguard Worker 126*35238bceSAndroid Build Coastguard Worker STORAGE_LAST 127*35238bceSAndroid Build Coastguard Worker }; 128*35238bceSAndroid Build Coastguard Worker 129*35238bceSAndroid Build Coastguard Worker enum Primitive 130*35238bceSAndroid Build Coastguard Worker { 131*35238bceSAndroid Build Coastguard Worker PRIMITIVE_POINTS = 0, 132*35238bceSAndroid Build Coastguard Worker PRIMITIVE_TRIANGLES, 133*35238bceSAndroid Build Coastguard Worker PRIMITIVE_TRIANGLE_FAN, 134*35238bceSAndroid Build Coastguard Worker PRIMITIVE_TRIANGLE_STRIP, 135*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LINES, 136*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LINE_STRIP, 137*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LINE_LOOP, 138*35238bceSAndroid Build Coastguard Worker 139*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LINES_ADJACENCY, 140*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LINE_STRIP_ADJACENCY, 141*35238bceSAndroid Build Coastguard Worker PRIMITIVE_TRIANGLES_ADJACENCY, 142*35238bceSAndroid Build Coastguard Worker PRIMITIVE_TRIANGLE_STRIP_ADJACENCY, 143*35238bceSAndroid Build Coastguard Worker 144*35238bceSAndroid Build Coastguard Worker PRIMITIVE_LAST 145*35238bceSAndroid Build Coastguard Worker }; 146*35238bceSAndroid Build Coastguard Worker 147*35238bceSAndroid Build Coastguard Worker enum IndexType 148*35238bceSAndroid Build Coastguard Worker { 149*35238bceSAndroid Build Coastguard Worker INDEXTYPE_BYTE = 0, 150*35238bceSAndroid Build Coastguard Worker INDEXTYPE_SHORT, 151*35238bceSAndroid Build Coastguard Worker INDEXTYPE_INT, 152*35238bceSAndroid Build Coastguard Worker 153*35238bceSAndroid Build Coastguard Worker INDEXTYPE_LAST 154*35238bceSAndroid Build Coastguard Worker }; 155*35238bceSAndroid Build Coastguard Worker 156*35238bceSAndroid Build Coastguard Worker enum DrawMethod 157*35238bceSAndroid Build Coastguard Worker { 158*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWARRAYS = 0, 159*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWARRAYS_INSTANCED, 160*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWARRAYS_INDIRECT, 161*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS, 162*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_RANGED, 163*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_INSTANCED, 164*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_INDIRECT, 165*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_BASEVERTEX, 166*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_INSTANCED_BASEVERTEX, 167*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_DRAWELEMENTS_RANGED_BASEVERTEX, 168*35238bceSAndroid Build Coastguard Worker 169*35238bceSAndroid Build Coastguard Worker DRAWMETHOD_LAST 170*35238bceSAndroid Build Coastguard Worker }; 171*35238bceSAndroid Build Coastguard Worker 172*35238bceSAndroid Build Coastguard Worker enum CompatibilityTestType 173*35238bceSAndroid Build Coastguard Worker { 174*35238bceSAndroid Build Coastguard Worker COMPATIBILITY_NONE = 0, 175*35238bceSAndroid Build Coastguard Worker COMPATIBILITY_UNALIGNED_OFFSET, 176*35238bceSAndroid Build Coastguard Worker COMPATIBILITY_UNALIGNED_STRIDE, 177*35238bceSAndroid Build Coastguard Worker 178*35238bceSAndroid Build Coastguard Worker COMPATIBILITY_LAST 179*35238bceSAndroid Build Coastguard Worker }; 180*35238bceSAndroid Build Coastguard Worker 181*35238bceSAndroid Build Coastguard Worker static std::string targetToString(Target target); 182*35238bceSAndroid Build Coastguard Worker static std::string inputTypeToString(InputType type); 183*35238bceSAndroid Build Coastguard Worker static std::string outputTypeToString(OutputType type); 184*35238bceSAndroid Build Coastguard Worker static std::string usageTypeToString(Usage usage); 185*35238bceSAndroid Build Coastguard Worker static std::string storageToString(Storage storage); 186*35238bceSAndroid Build Coastguard Worker static std::string primitiveToString(Primitive primitive); 187*35238bceSAndroid Build Coastguard Worker static std::string indexTypeToString(IndexType type); 188*35238bceSAndroid Build Coastguard Worker static std::string drawMethodToString(DrawMethod method); 189*35238bceSAndroid Build Coastguard Worker static int inputTypeSize(InputType type); 190*35238bceSAndroid Build Coastguard Worker static int indexTypeSize(IndexType type); 191*35238bceSAndroid Build Coastguard Worker 192*35238bceSAndroid Build Coastguard Worker struct AttributeSpec 193*35238bceSAndroid Build Coastguard Worker { 194*35238bceSAndroid Build Coastguard Worker static AttributeSpec createAttributeArray(InputType inputType, OutputType outputType, Storage storage, 195*35238bceSAndroid Build Coastguard Worker Usage usage, int componentCount, int offset, int stride, 196*35238bceSAndroid Build Coastguard Worker bool normalize, int instanceDivisor); 197*35238bceSAndroid Build Coastguard Worker static AttributeSpec createDefaultAttribute( 198*35238bceSAndroid Build Coastguard Worker InputType inputType, OutputType outputType, 199*35238bceSAndroid Build Coastguard Worker int componentCount); //!< allowed inputType values: INPUTTYPE_INT, INPUTTYPE_UNSIGNED_INT, INPUTTYPE_FLOAT 200*35238bceSAndroid Build Coastguard Worker 201*35238bceSAndroid Build Coastguard Worker InputType inputType; 202*35238bceSAndroid Build Coastguard Worker OutputType outputType; 203*35238bceSAndroid Build Coastguard Worker Storage storage; 204*35238bceSAndroid Build Coastguard Worker Usage usage; 205*35238bceSAndroid Build Coastguard Worker int componentCount; 206*35238bceSAndroid Build Coastguard Worker int offset; 207*35238bceSAndroid Build Coastguard Worker int stride; 208*35238bceSAndroid Build Coastguard Worker bool normalize; 209*35238bceSAndroid Build Coastguard Worker int instanceDivisor; //!< used only if drawMethod = Draw*Instanced 210*35238bceSAndroid Build Coastguard Worker bool useDefaultAttribute; 211*35238bceSAndroid Build Coastguard Worker 212*35238bceSAndroid Build Coastguard Worker bool 213*35238bceSAndroid Build Coastguard Worker additionalPositionAttribute; //!< treat this attribute as position attribute. Attribute at index 0 is alway treated as such. False by default 214*35238bceSAndroid Build Coastguard Worker bool 215*35238bceSAndroid Build Coastguard Worker bgraComponentOrder; //!< component order of this attribute is bgra, valid only for 4-component targets. False by default. 216*35238bceSAndroid Build Coastguard Worker 217*35238bceSAndroid Build Coastguard Worker AttributeSpec(void); 218*35238bceSAndroid Build Coastguard Worker 219*35238bceSAndroid Build Coastguard Worker int hash(void) const; 220*35238bceSAndroid Build Coastguard Worker bool valid(glu::ApiType apiType) const; 221*35238bceSAndroid Build Coastguard Worker bool isBufferAligned(void) const; 222*35238bceSAndroid Build Coastguard Worker bool isBufferStrideAligned(void) const; 223*35238bceSAndroid Build Coastguard Worker }; 224*35238bceSAndroid Build Coastguard Worker 225*35238bceSAndroid Build Coastguard Worker std::string getName(void) const; 226*35238bceSAndroid Build Coastguard Worker std::string getDesc(void) const; 227*35238bceSAndroid Build Coastguard Worker std::string getMultilineDesc(void) const; 228*35238bceSAndroid Build Coastguard Worker 229*35238bceSAndroid Build Coastguard Worker glu::ApiType apiType; //!< needed in spec validation 230*35238bceSAndroid Build Coastguard Worker Primitive primitive; 231*35238bceSAndroid Build Coastguard Worker int primitiveCount; //!< number of primitives to draw (per instance) 232*35238bceSAndroid Build Coastguard Worker 233*35238bceSAndroid Build Coastguard Worker DrawMethod drawMethod; 234*35238bceSAndroid Build Coastguard Worker IndexType indexType; //!< used only if drawMethod = DrawElements* 235*35238bceSAndroid Build Coastguard Worker int indexPointerOffset; //!< used only if drawMethod = DrawElements* 236*35238bceSAndroid Build Coastguard Worker Storage indexStorage; //!< used only if drawMethod = DrawElements* 237*35238bceSAndroid Build Coastguard Worker int first; //!< used only if drawMethod = DrawArrays* 238*35238bceSAndroid Build Coastguard Worker int indexMin; //!< used only if drawMethod = Draw*Ranged 239*35238bceSAndroid Build Coastguard Worker int indexMax; //!< used only if drawMethod = Draw*Ranged 240*35238bceSAndroid Build Coastguard Worker int instanceCount; //!< used only if drawMethod = Draw*Instanced or Draw*Indirect 241*35238bceSAndroid Build Coastguard Worker int indirectOffset; //!< used only if drawMethod = Draw*Indirect 242*35238bceSAndroid Build Coastguard Worker int baseVertex; //!< used only if drawMethod = DrawElementsIndirect or *BaseVertex 243*35238bceSAndroid Build Coastguard Worker 244*35238bceSAndroid Build Coastguard Worker std::vector<AttributeSpec> attribs; 245*35238bceSAndroid Build Coastguard Worker 246*35238bceSAndroid Build Coastguard Worker DrawTestSpec(void); 247*35238bceSAndroid Build Coastguard Worker 248*35238bceSAndroid Build Coastguard Worker int hash(void) const; 249*35238bceSAndroid Build Coastguard Worker bool valid(void) const; 250*35238bceSAndroid Build Coastguard Worker CompatibilityTestType isCompatibilityTest(void) const; 251*35238bceSAndroid Build Coastguard Worker }; 252*35238bceSAndroid Build Coastguard Worker 253*35238bceSAndroid Build Coastguard Worker class DrawTest : public tcu::TestCase 254*35238bceSAndroid Build Coastguard Worker { 255*35238bceSAndroid Build Coastguard Worker public: 256*35238bceSAndroid Build Coastguard Worker DrawTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const DrawTestSpec &spec, const char *name, 257*35238bceSAndroid Build Coastguard Worker const char *desc); 258*35238bceSAndroid Build Coastguard Worker DrawTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const char *name, const char *desc); 259*35238bceSAndroid Build Coastguard Worker virtual ~DrawTest(void); 260*35238bceSAndroid Build Coastguard Worker 261*35238bceSAndroid Build Coastguard Worker void addIteration(const DrawTestSpec &spec, const char *description = DE_NULL); 262*35238bceSAndroid Build Coastguard Worker 263*35238bceSAndroid Build Coastguard Worker private: 264*35238bceSAndroid Build Coastguard Worker void init(void); 265*35238bceSAndroid Build Coastguard Worker void deinit(void); 266*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void); 267*35238bceSAndroid Build Coastguard Worker 268*35238bceSAndroid Build Coastguard Worker bool compare(gls::DrawTestSpec::Primitive primitiveType); 269*35238bceSAndroid Build Coastguard Worker float getCoordScale(const DrawTestSpec &spec) const; 270*35238bceSAndroid Build Coastguard Worker float getColorScale(const DrawTestSpec &spec) const; 271*35238bceSAndroid Build Coastguard Worker 272*35238bceSAndroid Build Coastguard Worker glu::RenderContext &m_renderCtx; 273*35238bceSAndroid Build Coastguard Worker 274*35238bceSAndroid Build Coastguard Worker glu::ContextInfo *m_contextInfo; 275*35238bceSAndroid Build Coastguard Worker sglr::ReferenceContextBuffers *m_refBuffers; 276*35238bceSAndroid Build Coastguard Worker sglr::ReferenceContext *m_refContext; 277*35238bceSAndroid Build Coastguard Worker sglr::Context *m_glesContext; 278*35238bceSAndroid Build Coastguard Worker 279*35238bceSAndroid Build Coastguard Worker AttributePack *m_glArrayPack; 280*35238bceSAndroid Build Coastguard Worker AttributePack *m_rrArrayPack; 281*35238bceSAndroid Build Coastguard Worker 282*35238bceSAndroid Build Coastguard Worker int m_maxDiffRed; 283*35238bceSAndroid Build Coastguard Worker int m_maxDiffGreen; 284*35238bceSAndroid Build Coastguard Worker int m_maxDiffBlue; 285*35238bceSAndroid Build Coastguard Worker 286*35238bceSAndroid Build Coastguard Worker std::vector<DrawTestSpec> m_specs; 287*35238bceSAndroid Build Coastguard Worker std::vector<std::string> m_iteration_descriptions; 288*35238bceSAndroid Build Coastguard Worker int m_iteration; 289*35238bceSAndroid Build Coastguard Worker tcu::ResultCollector m_result; 290*35238bceSAndroid Build Coastguard Worker }; 291*35238bceSAndroid Build Coastguard Worker 292*35238bceSAndroid Build Coastguard Worker } // namespace gls 293*35238bceSAndroid Build Coastguard Worker } // namespace deqp 294*35238bceSAndroid Build Coastguard Worker 295*35238bceSAndroid Build Coastguard Worker #endif // _GLSDRAWTEST_HPP 296