xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cShaderDrawParametersTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _GL4CSHADERDRAWPARAMETERSTESTS_HPP
2 #define _GL4CSHADERDRAWPARAMETERSTESTS_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2016 The Khronos Group Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */ /*!
22  * \file
23  * \brief
24  */ /*-------------------------------------------------------------------*/
25 
26 /**
27  */ /*!
28  * \file  gl4cShaderDrawParametersTests.hpp
29  * \brief Conformance tests for the GL_ARB_shader_draw_parameters functionality.
30  */ /*-------------------------------------------------------------------*/
31 #include "glcTestCase.hpp"
32 #include "glwDefs.hpp"
33 #include "tcuDefs.hpp"
34 
35 using namespace glw;
36 using namespace glu;
37 
38 namespace gl4cts
39 {
40 
41 typedef struct
42 {
43     GLuint count;
44     GLuint instanceCount;
45     GLuint first;
46     GLuint baseInstance;
47 } SDPDrawArraysIndirectCommand;
48 
49 typedef struct
50 {
51     GLuint count;
52     GLuint instanceCount;
53     GLuint firstIndex;
54     GLuint baseVertex;
55     GLuint baseInstance;
56 } SDPDrawElementsIndirectCommand;
57 
58 struct ResultPoint
59 {
60     GLfloat x;
61     GLfloat y;
62     GLfloat red;
63     GLfloat green;
64     GLfloat blue;
65 
ResultPointgl4cts::ResultPoint66     ResultPoint(GLfloat _x, GLfloat _y, GLfloat _red, GLfloat _green, GLfloat _blue)
67         : x(_x)
68         , y(_y)
69         , red(_red)
70         , green(_green)
71         , blue(_blue)
72     {
73         // Left blank
74     }
75 };
76 
77 /** Test verifies if extension is available for GLSL
78  **/
79 class ShaderDrawParametersExtensionTestCase : public deqp::TestCase
80 {
81 public:
82     /* Public methods */
83     ShaderDrawParametersExtensionTestCase(deqp::Context &context);
84 
85     tcu::TestNode::IterateResult iterate();
86 
87 private:
88     /* Private members */
89 };
90 
91 /** This is base class for drawing commands tests
92  **/
93 class ShaderDrawParametersTestBase : public deqp::TestCase
94 {
95 public:
96     /* Public methods */
97     ShaderDrawParametersTestBase(deqp::Context &context, const char *name, const char *description);
98 
99     virtual void init();
100     virtual void deinit();
101     tcu::TestNode::IterateResult iterate();
102 
103 private:
104     /* Private methods */
105     bool draw();
106     bool verify();
107 
108 protected:
109     /* Protected members */
110     GLuint m_vao;
111     GLuint m_arrayBuffer;
112     GLuint m_elementBuffer;
113     GLuint m_drawIndirectBuffer;
114     GLuint m_parameterBuffer;
115 
116     std::vector<ResultPoint> m_resultPoints;
117 
118     /* Protected methods */
119     virtual void initChild();
120     virtual void deinitChild();
121     virtual void drawCommand();
122 };
123 
124 class ShaderDrawArraysParametersTestCase : public ShaderDrawParametersTestBase
125 {
126 public:
127     /* Public methods */
ShaderDrawArraysParametersTestCase(deqp::Context & context)128     ShaderDrawArraysParametersTestCase(deqp::Context &context)
129         : ShaderDrawParametersTestBase(context, "ShaderDrawArraysParameters",
130                                        "Verifies shader draw parameters with DrawArrays command")
131     {
132     }
133 
134 private:
135     /* Private methods */
136     virtual void initChild();
137     virtual void deinitChild();
138     virtual void drawCommand();
139 };
140 
141 class ShaderDrawElementsParametersTestCase : public ShaderDrawParametersTestBase
142 {
143 public:
144     /* Public methods */
ShaderDrawElementsParametersTestCase(deqp::Context & context)145     ShaderDrawElementsParametersTestCase(deqp::Context &context)
146         : ShaderDrawParametersTestBase(context, "ShaderDrawElementsParameters",
147                                        "Verifies shader draw parameters with DrawElements command")
148     {
149     }
150 
151 private:
152     /* Private methods */
153     virtual void initChild();
154     virtual void deinitChild();
155     virtual void drawCommand();
156 };
157 
158 class ShaderDrawArraysIndirectParametersTestCase : public ShaderDrawParametersTestBase
159 {
160 public:
161     /* Public methods */
ShaderDrawArraysIndirectParametersTestCase(deqp::Context & context)162     ShaderDrawArraysIndirectParametersTestCase(deqp::Context &context)
163         : ShaderDrawParametersTestBase(context, "ShaderDrawArraysIndirectParameters",
164                                        "Verifies shader draw parameters with DrawArraysIndirect command")
165     {
166     }
167 
168 private:
169     /* Private methods */
170     virtual void initChild();
171     virtual void deinitChild();
172     virtual void drawCommand();
173 };
174 
175 class ShaderDrawElementsIndirectParametersTestCase : public ShaderDrawParametersTestBase
176 {
177 public:
178     /* Public methods */
ShaderDrawElementsIndirectParametersTestCase(deqp::Context & context)179     ShaderDrawElementsIndirectParametersTestCase(deqp::Context &context)
180         : ShaderDrawParametersTestBase(context, "ShaderDrawElementsIndirectParameters",
181                                        "Verifies shader draw parameters with DrawElementsIndirect command")
182     {
183     }
184 
185 private:
186     /* Private methods */
187     virtual void initChild();
188     virtual void deinitChild();
189     virtual void drawCommand();
190 };
191 
192 class ShaderDrawArraysInstancedParametersTestCase : public ShaderDrawParametersTestBase
193 {
194 public:
195     /* Public methods */
ShaderDrawArraysInstancedParametersTestCase(deqp::Context & context)196     ShaderDrawArraysInstancedParametersTestCase(deqp::Context &context)
197         : ShaderDrawParametersTestBase(context, "ShaderDrawArraysInstancedParameters",
198                                        "Verifies shader draw parameters with DrawArraysInstanced command")
199     {
200     }
201 
202 private:
203     /* Private methods */
204     virtual void initChild();
205     virtual void deinitChild();
206     virtual void drawCommand();
207 };
208 
209 class ShaderDrawElementsInstancedParametersTestCase : public ShaderDrawParametersTestBase
210 {
211 public:
212     /* Public methods */
ShaderDrawElementsInstancedParametersTestCase(deqp::Context & context)213     ShaderDrawElementsInstancedParametersTestCase(deqp::Context &context)
214         : ShaderDrawParametersTestBase(context, "ShaderDrawElementsInstancedParameters",
215                                        "Verifies shader draw parameters with DrawElementsInstanced command")
216     {
217     }
218 
219 private:
220     /* Private methods */
221     virtual void initChild();
222     virtual void deinitChild();
223     virtual void drawCommand();
224 };
225 
226 class ShaderMultiDrawArraysParametersTestCase : public ShaderDrawParametersTestBase
227 {
228 public:
229     /* Public methods */
ShaderMultiDrawArraysParametersTestCase(deqp::Context & context)230     ShaderMultiDrawArraysParametersTestCase(deqp::Context &context)
231         : ShaderDrawParametersTestBase(context, "ShaderMultiDrawArraysParameters",
232                                        "Verifies shader draw parameters with MultiDrawArrays command")
233     {
234     }
235 
236 private:
237     /* Private methods */
238     virtual void initChild();
239     virtual void deinitChild();
240     virtual void drawCommand();
241 };
242 
243 class ShaderMultiDrawElementsParametersTestCase : public ShaderDrawParametersTestBase
244 {
245 public:
246     /* Public methods */
ShaderMultiDrawElementsParametersTestCase(deqp::Context & context)247     ShaderMultiDrawElementsParametersTestCase(deqp::Context &context)
248         : ShaderDrawParametersTestBase(context, "ShaderMultiDrawElementsParameters",
249                                        "Verifies shader draw parameters with MultiDrawElements command")
250     {
251     }
252 
253 private:
254     /* Private methods */
255     virtual void initChild();
256     virtual void deinitChild();
257     virtual void drawCommand();
258 };
259 
260 class ShaderMultiDrawArraysIndirectParametersTestCase : public ShaderDrawParametersTestBase
261 {
262 public:
263     /* Public methods */
ShaderMultiDrawArraysIndirectParametersTestCase(deqp::Context & context)264     ShaderMultiDrawArraysIndirectParametersTestCase(deqp::Context &context)
265         : ShaderDrawParametersTestBase(context, "ShaderMultiDrawArraysIndirectParameters",
266                                        "Verifies shader draw parameters with MultiDrawArraysIndirect command")
267     {
268     }
269 
270 private:
271     /* Private methods */
272     virtual void initChild();
273     virtual void deinitChild();
274     virtual void drawCommand();
275 };
276 
277 class ShaderMultiDrawElementsIndirectParametersTestCase : public ShaderDrawParametersTestBase
278 {
279 public:
280     /* Public methods */
ShaderMultiDrawElementsIndirectParametersTestCase(deqp::Context & context)281     ShaderMultiDrawElementsIndirectParametersTestCase(deqp::Context &context)
282         : ShaderDrawParametersTestBase(context, "ShaderMultiDrawElementsIndirectParameters",
283                                        "Verifies shader draw parameters with MultiDrawElementsIndirect command")
284     {
285     }
286 
287 private:
288     /* Private methods */
289     virtual void initChild();
290     virtual void deinitChild();
291     virtual void drawCommand();
292 };
293 
294 class ShaderMultiDrawArraysIndirectCountParametersTestCase : public ShaderDrawParametersTestBase
295 {
296 public:
297     /* Public methods */
ShaderMultiDrawArraysIndirectCountParametersTestCase(deqp::Context & context)298     ShaderMultiDrawArraysIndirectCountParametersTestCase(deqp::Context &context)
299         : ShaderDrawParametersTestBase(context, "MultiDrawArraysIndirectCountParameters",
300                                        "Verifies shader draw parameters with MultiDrawArraysIndirectCount command")
301     {
302     }
303 
304 private:
305     /* Private methods */
306     virtual void initChild();
307     virtual void deinitChild();
308     virtual void drawCommand();
309 };
310 
311 class ShaderMultiDrawElementsIndirectCountParametersTestCase : public ShaderDrawParametersTestBase
312 {
313 public:
314     /* Public methods */
ShaderMultiDrawElementsIndirectCountParametersTestCase(deqp::Context & context)315     ShaderMultiDrawElementsIndirectCountParametersTestCase(deqp::Context &context)
316         : ShaderDrawParametersTestBase(context, "MultiDrawElementIndirectCountParameters",
317                                        "Verifies shader draw parameters with MultiDrawElementIndirectCount command")
318     {
319     }
320 
321 private:
322     /* Private methods */
323     virtual void initChild();
324     virtual void deinitChild();
325     virtual void drawCommand();
326 };
327 
328 /** Test group which encapsulates all sparse buffer conformance tests */
329 class ShaderDrawParametersTests : public deqp::TestCaseGroup
330 {
331 public:
332     /* Public methods */
333     ShaderDrawParametersTests(deqp::Context &context);
334 
335     void init();
336 
337 private:
338     ShaderDrawParametersTests(const ShaderDrawParametersTests &other);
339     ShaderDrawParametersTests &operator=(const ShaderDrawParametersTests &other);
340 };
341 
342 } // namespace gl4cts
343 
344 #endif // _GL4CSHADERDRAWPARAMETERSTESTS_HPP
345