xref: /aosp_15_r20/external/deqp/modules/gles2/performance/es2pStateChangeCallTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program OpenGL ES 2.0 Module
3  * -------------------------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief State change call performance tests.
22  *//*--------------------------------------------------------------------*/
23 
24 #include "es2pStateChangeCallTests.hpp"
25 #include "glsStateChangePerfTestCases.hpp"
26 #include "glwFunctions.hpp"
27 #include "glwEnums.hpp"
28 
29 namespace deqp
30 {
31 namespace gles2
32 {
33 namespace Performance
34 {
35 
36 using namespace glw;
37 
StateChangeCallTests(Context & context)38 StateChangeCallTests::StateChangeCallTests(Context &context)
39     : TestCaseGroup(context, "state_change_only", "Test cost of state change calls without rendering anything")
40 {
41 }
42 
~StateChangeCallTests(void)43 StateChangeCallTests::~StateChangeCallTests(void)
44 {
45 }
46 
47 #define ARG_LIST(...) __VA_ARGS__
48 
49 #define ADD_ARG_CASE1(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0)                                                  \
50     do                                                                                                            \
51     {                                                                                                             \
52         class StateChangeCallTest_##NAME : public gls::StateChangeCallPerformanceCase                             \
53         {                                                                                                         \
54         public:                                                                                                   \
55             StateChangeCallTest_##NAME(Context &context, const char *name, const char *description)               \
56                 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, \
57                                                       description)                                                \
58             {                                                                                                     \
59             }                                                                                                     \
60             virtual void execCalls(const glw::Functions &gl, int iterNdx, int callCount)                          \
61             {                                                                                                     \
62                 const TYPE0 args0[] = ARGS0;                                                                      \
63                 for (int callNdx = 0; callNdx < callCount; callNdx++)                                             \
64                 {                                                                                                 \
65                     const int baseNdx = iterNdx * callCount + callNdx;                                            \
66                     const TYPE0 arg0  = args0[baseNdx % DE_LENGTH_OF_ARRAY(args0)];                               \
67                     gl.FUNCNAME(arg0);                                                                            \
68                 }                                                                                                 \
69             }                                                                                                     \
70         };                                                                                                        \
71         addChild(new StateChangeCallTest_##NAME(m_context, #NAME, DESCRIPTION));                                  \
72     } while (0);
73 
74 #define ADD_ARG_CASE2(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1)                                    \
75     do                                                                                                            \
76     {                                                                                                             \
77         class StateChangeCallTest_##NAME : public gls::StateChangeCallPerformanceCase                             \
78         {                                                                                                         \
79         public:                                                                                                   \
80             StateChangeCallTest_##NAME(Context &context, const char *name, const char *description)               \
81                 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, \
82                                                       description)                                                \
83             {                                                                                                     \
84             }                                                                                                     \
85             virtual void execCalls(const glw::Functions &gl, int iterNdx, int callCount)                          \
86             {                                                                                                     \
87                 const TYPE0 args0[] = ARGS0;                                                                      \
88                 const TYPE1 args1[] = ARGS1;                                                                      \
89                 for (int callNdx = 0; callNdx < callCount; callNdx++)                                             \
90                 {                                                                                                 \
91                     const int baseNdx = iterNdx * callCount + callNdx;                                            \
92                     const TYPE0 arg0  = args0[baseNdx % DE_LENGTH_OF_ARRAY(args0)];                               \
93                     const TYPE1 arg1  = args1[baseNdx % DE_LENGTH_OF_ARRAY(args1)];                               \
94                     gl.FUNCNAME(arg0, arg1);                                                                      \
95                 }                                                                                                 \
96             }                                                                                                     \
97         };                                                                                                        \
98         addChild(new StateChangeCallTest_##NAME(m_context, #NAME, DESCRIPTION));                                  \
99     } while (0);
100 
101 #define ADD_ARG_CASE3(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2)                      \
102     do                                                                                                            \
103     {                                                                                                             \
104         class StateChangeCallTest_##NAME : public gls::StateChangeCallPerformanceCase                             \
105         {                                                                                                         \
106         public:                                                                                                   \
107             StateChangeCallTest_##NAME(Context &context, const char *name, const char *description)               \
108                 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, \
109                                                       description)                                                \
110             {                                                                                                     \
111             }                                                                                                     \
112             virtual void execCalls(const glw::Functions &gl, int iterNdx, int callCount)                          \
113             {                                                                                                     \
114                 const TYPE0 args0[] = ARGS0;                                                                      \
115                 const TYPE1 args1[] = ARGS1;                                                                      \
116                 const TYPE2 args2[] = ARGS2;                                                                      \
117                 for (int callNdx = 0; callNdx < callCount; callNdx++)                                             \
118                 {                                                                                                 \
119                     const int baseNdx = iterNdx * callCount + callNdx;                                            \
120                     const TYPE0 arg0  = args0[baseNdx % DE_LENGTH_OF_ARRAY(args0)];                               \
121                     const TYPE1 arg1  = args1[baseNdx % DE_LENGTH_OF_ARRAY(args1)];                               \
122                     const TYPE2 arg2  = args2[baseNdx % DE_LENGTH_OF_ARRAY(args2)];                               \
123                     gl.FUNCNAME(arg0, arg1, arg2);                                                                \
124                 }                                                                                                 \
125             }                                                                                                     \
126         };                                                                                                        \
127         addChild(new StateChangeCallTest_##NAME(m_context, #NAME, DESCRIPTION));                                  \
128     } while (0);
129 
130 #define ADD_ARG_CASE4(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3)        \
131     do                                                                                                            \
132     {                                                                                                             \
133         class StateChangeCallTest_##NAME : public gls::StateChangeCallPerformanceCase                             \
134         {                                                                                                         \
135         public:                                                                                                   \
136             StateChangeCallTest_##NAME(Context &context, const char *name, const char *description)               \
137                 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, \
138                                                       description)                                                \
139             {                                                                                                     \
140             }                                                                                                     \
141             virtual void execCalls(const glw::Functions &gl, int iterNdx, int callCount)                          \
142             {                                                                                                     \
143                 const TYPE0 args0[] = ARGS0;                                                                      \
144                 const TYPE1 args1[] = ARGS1;                                                                      \
145                 const TYPE2 args2[] = ARGS2;                                                                      \
146                 const TYPE3 args3[] = ARGS3;                                                                      \
147                 for (int callNdx = 0; callNdx < callCount; callNdx++)                                             \
148                 {                                                                                                 \
149                     const int baseNdx = iterNdx * callCount + callNdx;                                            \
150                     const TYPE0 arg0  = args0[baseNdx % DE_LENGTH_OF_ARRAY(args0)];                               \
151                     const TYPE1 arg1  = args1[baseNdx % DE_LENGTH_OF_ARRAY(args1)];                               \
152                     const TYPE2 arg2  = args2[baseNdx % DE_LENGTH_OF_ARRAY(args2)];                               \
153                     const TYPE3 arg3  = args3[baseNdx % DE_LENGTH_OF_ARRAY(args3)];                               \
154                     gl.FUNCNAME(arg0, arg1, arg2, arg3);                                                          \
155                 }                                                                                                 \
156             }                                                                                                     \
157         };                                                                                                        \
158         addChild(new StateChangeCallTest_##NAME(m_context, #NAME, DESCRIPTION));                                  \
159     } while (0);
160 
161 #define ADD_ARG_CASE6(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3, TYPE4, \
162                       ARGS4, TYPE5, ARGS5)                                                                        \
163     do                                                                                                            \
164     {                                                                                                             \
165         class StateChangeCallTest_##NAME : public gls::StateChangeCallPerformanceCase                             \
166         {                                                                                                         \
167         public:                                                                                                   \
168             StateChangeCallTest_##NAME(Context &context, const char *name, const char *description)               \
169                 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, \
170                                                       description)                                                \
171             {                                                                                                     \
172             }                                                                                                     \
173             virtual void execCalls(const glw::Functions &gl, int iterNdx, int callCount)                          \
174             {                                                                                                     \
175                 const TYPE0 args0[] = ARGS0;                                                                      \
176                 const TYPE1 args1[] = ARGS1;                                                                      \
177                 const TYPE2 args2[] = ARGS2;                                                                      \
178                 const TYPE3 args3[] = ARGS3;                                                                      \
179                 const TYPE4 args4[] = ARGS4;                                                                      \
180                 const TYPE5 args5[] = ARGS5;                                                                      \
181                 for (int callNdx = 0; callNdx < callCount; callNdx++)                                             \
182                 {                                                                                                 \
183                     const int baseNdx = iterNdx * callCount + callNdx;                                            \
184                     const TYPE0 arg0  = args0[baseNdx % DE_LENGTH_OF_ARRAY(args0)];                               \
185                     const TYPE1 arg1  = args1[baseNdx % DE_LENGTH_OF_ARRAY(args1)];                               \
186                     const TYPE2 arg2  = args2[baseNdx % DE_LENGTH_OF_ARRAY(args2)];                               \
187                     const TYPE3 arg3  = args3[baseNdx % DE_LENGTH_OF_ARRAY(args3)];                               \
188                     const TYPE4 arg4  = args4[baseNdx % DE_LENGTH_OF_ARRAY(args4)];                               \
189                     const TYPE5 arg5  = args5[baseNdx % DE_LENGTH_OF_ARRAY(args5)];                               \
190                     gl.FUNCNAME(arg0, arg1, arg2, arg3, arg4, arg5);                                              \
191                 }                                                                                                 \
192             }                                                                                                     \
193         };                                                                                                        \
194         addChild(new StateChangeCallTest_##NAME(m_context, #NAME, DESCRIPTION));                                  \
195     } while (0);
196 
init(void)197 void StateChangeCallTests::init(void)
198 {
199     ADD_ARG_CASE1(enable, "Test cost of glEnable() calls", enable, GLenum,
200                   ARG_LIST({GL_CULL_FACE, GL_POLYGON_OFFSET_FILL, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_COVERAGE,
201                             GL_SCISSOR_TEST, GL_STENCIL_TEST, GL_DEPTH_TEST, GL_BLEND, GL_DITHER}))
202 
203     ADD_ARG_CASE1(disable, "Test cost of glDisable() calls", disable, GLenum,
204                   ARG_LIST({GL_CULL_FACE, GL_POLYGON_OFFSET_FILL, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_COVERAGE,
205                             GL_SCISSOR_TEST, GL_STENCIL_TEST, GL_DEPTH_TEST, GL_BLEND, GL_DITHER}))
206 
207     ADD_ARG_CASE1(depth_func, "Test cost of glDepthFunc() calls", depthFunc, GLenum,
208                   ARG_LIST({GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GREATER, GL_GEQUAL, GL_NOTEQUAL}))
209 
210     ADD_ARG_CASE1(depth_mask, "Test cost of glDepthMask() calls", depthMask, GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}))
211 
212     ADD_ARG_CASE1(stencil_mask, "Test cost of glStencilMask() calls", stencilMask, GLboolean,
213                   ARG_LIST({GL_TRUE, GL_FALSE}))
214 
215     ADD_ARG_CASE1(clear_depth, "Test cost of glClearDepth() calls", clearDepthf, GLclampf, ARG_LIST({0.0f, 0.5f, 1.0f}))
216 
217     ADD_ARG_CASE1(clear_stencil, "Test cost of glClearStencil() calls", clearStencil, GLint, ARG_LIST({0, 128, 28}))
218 
219     ADD_ARG_CASE1(line_width, "Test cost of glLineWidth() calls", lineWidth, GLfloat, ARG_LIST({1.0f, 0.5f, 10.0f}))
220 
221     ADD_ARG_CASE1(cull_face, "Test cost of glCullFace() calls", cullFace, GLenum,
222                   ARG_LIST({GL_FRONT, GL_BACK, GL_FRONT_AND_BACK}))
223 
224     ADD_ARG_CASE1(front_face, "Test cost of glFrontFace() calls", frontFace, GLenum, ARG_LIST({GL_CCW, GL_CW}))
225 
226     ADD_ARG_CASE1(blend_equation, "Test cost of glBlendEquation() calls", blendEquation, GLenum,
227                   ARG_LIST({GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT}))
228 
229     ADD_ARG_CASE1(enable_vertex_attrib_array, "Test cost of glEnableVertexAttribArray() calls", enableVertexAttribArray,
230                   GLuint,
231                   ARG_LIST({
232                       0,
233                       1,
234                       2,
235                       3,
236                       4,
237                       5,
238                       6,
239                       7,
240                   }))
241 
242     ADD_ARG_CASE1(disable_vertex_attrib_array, "Test cost of glDisableVertexAttribArray() calls",
243                   disableVertexAttribArray, GLuint,
244                   ARG_LIST({
245                       0,
246                       1,
247                       2,
248                       3,
249                       4,
250                       5,
251                       6,
252                       7,
253                   }))
254 
255     ADD_ARG_CASE1(use_program, "Test cost of glUseProgram() calls. Note: Uses only program 0.", useProgram, GLuint,
256                   ARG_LIST({
257                       0,
258                   }))
259 
260     ADD_ARG_CASE1(active_texture, "Test cost of glActiveTexture() calls", activeTexture, GLenum,
261                   ARG_LIST({GL_TEXTURE0, GL_TEXTURE1, GL_TEXTURE2, GL_TEXTURE3, GL_TEXTURE4, GL_TEXTURE5, GL_TEXTURE6,
262                             GL_TEXTURE7}))
263 
264     ADD_ARG_CASE2(depth_range, "Test cost of glDepthRangef() calls", depthRangef, GLclampf,
265                   ARG_LIST({0.0f, 1.0f, 0.5f}), GLclampf, ARG_LIST({0.0f, 1.0f, 0.5f}))
266 
267     ADD_ARG_CASE2(polygon_offset, "Test cost of glPolygonOffset() calls", polygonOffset, GLfloat,
268                   ARG_LIST({0.0f, 1.0f, 0.5f, 10.0f}), GLfloat, ARG_LIST({0.0f, 1.0f, 0.5f, 1000.0f}))
269 
270     ADD_ARG_CASE2(sample_coverage, "Test cost of glSampleCoverage() calls", sampleCoverage, GLclampf,
271                   ARG_LIST({0.0f, 1.0f, 0.5f, 0.67f}), GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}))
272 
273     ADD_ARG_CASE2(
274         blend_func, "Test cost of glBlendFunc() calls", blendFunc, GLenum,
275         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
276                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
277                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}),
278         GLenum,
279         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
280                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
281                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}))
282 
283     ADD_ARG_CASE2(blend_equation_separate, "Test cost of glBlendEquationSeparate() calls", blendEquationSeparate,
284                   GLenum, ARG_LIST({GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT}), GLenum,
285                   ARG_LIST({GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT}))
286 
287     ADD_ARG_CASE2(stencil_mask_separate, "Test cost of glStencilMaskSeparate() calls", stencilMaskSeparate, GLenum,
288                   ARG_LIST({GL_FRONT, GL_BACK, GL_FRONT_AND_BACK}), GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}))
289 
290     ADD_ARG_CASE2(bind_buffer, "Test cost of glBindBuffer() calls. Note: Uses only buffer 0", bindBuffer, GLenum,
291                   ARG_LIST({GL_ELEMENT_ARRAY_BUFFER, GL_ARRAY_BUFFER}), GLuint, ARG_LIST({0}))
292 
293     ADD_ARG_CASE2(bind_texture, "Test cost of glBindTexture() calls. Note: Uses only texture 0", bindTexture, GLenum,
294                   ARG_LIST({GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP}), GLuint, ARG_LIST({0}))
295 
296     ADD_ARG_CASE2(hint, "Test cost of glHint() calls", hint, GLenum, ARG_LIST({GL_GENERATE_MIPMAP_HINT}), GLenum,
297                   ARG_LIST({GL_FASTEST, GL_NICEST, GL_DONT_CARE}))
298 
299     ADD_ARG_CASE3(stencil_func, "Test cost of glStencilFunc() calls", stencilFunc, GLenum,
300                   ARG_LIST({GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL}),
301                   GLint, ARG_LIST({0, 1, 255, 128, 7}), GLuint, ARG_LIST({0, 1, 255, 128, 7, 0xFFFFFFFF}))
302 
303     ADD_ARG_CASE3(
304         stencil_op, "Test cost of glStencilOp() calls", stencilOp, GLenum,
305         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}), GLenum,
306         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}), GLenum,
307         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}))
308 
309     ADD_ARG_CASE4(viewport, "Test cost of glViewport() calls", viewport, GLint, ARG_LIST({0, 1, 100, 1145235}), GLint,
310                   ARG_LIST({0, 1, 100, 1145235}), GLint, ARG_LIST({0, 1, 100, 1145235}), GLint,
311                   ARG_LIST({0, 1, 100, 1145235}))
312 
313     ADD_ARG_CASE4(scissor, "Test cost of glScissor() calls", scissor, GLint, ARG_LIST({0, 1, 100, 1145235}), GLint,
314                   ARG_LIST({0, 1, 100, 1145235}), GLint, ARG_LIST({0, 1, 100, 1145235}), GLint,
315                   ARG_LIST({0, 1, 100, 1145235}))
316 
317     ADD_ARG_CASE4(stencil_func_separate, "Test cost of glStencilFuncSeparate() calls", stencilFuncSeparate, GLenum,
318                   ARG_LIST({GL_FRONT, GL_BACK, GL_FRONT_AND_BACK}), GLenum,
319                   ARG_LIST({GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL}),
320                   GLint, ARG_LIST({0, 1, 255, 128, 7}), GLuint, ARG_LIST({0, 1, 255, 128, 7, 0xFFFFFFFF}))
321 
322     ADD_ARG_CASE4(
323         stencil_op_separatae, "Test cost of glStencilOpSeparate() calls", stencilOpSeparate, GLenum,
324         ARG_LIST({GL_FRONT, GL_BACK, GL_FRONT_AND_BACK}), GLenum,
325         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}), GLenum,
326         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}), GLenum,
327         ARG_LIST({GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP}))
328 
329     ADD_ARG_CASE4(
330         blend_func_separate, "Test cost of glBlendFuncSeparate() calls", blendFuncSeparate, GLenum,
331         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
332                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
333                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}),
334         GLenum,
335         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
336                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
337                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}),
338         GLenum,
339         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
340                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
341                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}),
342         GLenum,
343         ARG_LIST({GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
344                   GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_CONSTANT_COLOR,
345                   GL_ONE_MINUS_CONSTANT_COLOR, GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA}))
346 
347     ADD_ARG_CASE4(color_mask, "Test cost of glColorMask() calls", colorMask, GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}),
348                   GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}), GLboolean, ARG_LIST({GL_TRUE, GL_FALSE}), GLboolean,
349                   ARG_LIST({GL_TRUE, GL_FALSE}))
350 
351     ADD_ARG_CASE4(clear_color, "Test cost of glClearColor() calls", clearColor, GLclampf,
352                   ARG_LIST({0.0f, 1.0f, 0.5f, 0.33f}), GLclampf, ARG_LIST({0.0f, 1.0f, 0.5f, 0.33f}), GLclampf,
353                   ARG_LIST({0.0f, 1.0f, 0.5f, 0.33f}), GLclampf, ARG_LIST({0.0f, 1.0f, 0.5f, 0.33f}))
354 
355     ADD_ARG_CASE6(vertex_attrib_pointer, "Test cost of glVertexAttribPointer() calls", vertexAttribPointer, GLuint,
356                   ARG_LIST({0, 1, 2, 3, 4, 5, 6, 7}), GLint, ARG_LIST({1, 2, 3, 4}), GLenum,
357                   ARG_LIST({GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_FLOAT}), GLboolean,
358                   ARG_LIST({GL_FALSE, GL_TRUE}), GLsizei, ARG_LIST({0, 2, 4}), void *,
359                   ARG_LIST({(void *)(uintptr_t)(0x0FF), (void *)(uintptr_t)(0x0EF)}))
360 }
361 
362 } // namespace Performance
363 } // namespace gles2
364 } // namespace deqp
365