xref: /aosp_15_r20/external/deqp/modules/glshared/glsDrawTest.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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