1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.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 "es3pStateChangeCallTests.hpp" 25#include "glsStateChangePerfTestCases.hpp" 26#include "glwFunctions.hpp" 27#include "glwEnums.hpp" 28 29namespace deqp 30{ 31namespace gles3 32{ 33namespace Performance 34{ 35 36using namespace glw; 37 38StateChangeCallTests::StateChangeCallTests (Context& context) 39 : TestCaseGroup(context, "state_change_only", "Test cost of state change calls without rendering anything") 40{ 41} 42 43StateChangeCallTests::~StateChangeCallTests (void) 44{ 45} 46 47#define ARG_LIST(...) __VA_ARGS__ 48 49#define ADD_ARG_CASE1(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0)\ 50do {\ 51 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 52 {\ 53 public:\ 54 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 55 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 56 {\ 57 }\ 58 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 59 {\ 60 const TYPE0 args0[] = ARGS0;\ 61 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 62 {\ 63 const int baseNdx = iterNdx*callCount + callNdx;\ 64 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 65 gl.FUNCNAME(arg0);\ 66 }\ 67 }\ 68 };\ 69 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 70}while (0); 71 72#define ADD_ARG_CASE2(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1)\ 73do {\ 74 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 75 {\ 76 public:\ 77 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 78 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 79 {\ 80 }\ 81 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 82 {\ 83 const TYPE0 args0[] = ARGS0;\ 84 const TYPE1 args1[] = ARGS1;\ 85 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 86 {\ 87 const int baseNdx = iterNdx*callCount + callNdx;\ 88 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 89 const TYPE1 arg1 = args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\ 90 gl.FUNCNAME(arg0, arg1);\ 91 }\ 92 }\ 93 };\ 94 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 95}while (0); 96 97#define ADD_ARG_CASE3(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2)\ 98do {\ 99 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 100 {\ 101 public:\ 102 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 103 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 104 {\ 105 }\ 106 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 107 {\ 108 const TYPE0 args0[] = ARGS0;\ 109 const TYPE1 args1[] = ARGS1;\ 110 const TYPE2 args2[] = ARGS2;\ 111 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 112 {\ 113 const int baseNdx = iterNdx*callCount + callNdx;\ 114 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 115 const TYPE1 arg1 = args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\ 116 const TYPE2 arg2 = args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\ 117 gl.FUNCNAME(arg0, arg1, arg2);\ 118 }\ 119 }\ 120 };\ 121 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 122}while (0); 123 124#define ADD_ARG_CASE4(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3)\ 125do {\ 126 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 127 {\ 128 public:\ 129 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 130 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 131 {\ 132 }\ 133 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 134 {\ 135 const TYPE0 args0[] = ARGS0;\ 136 const TYPE1 args1[] = ARGS1;\ 137 const TYPE2 args2[] = ARGS2;\ 138 const TYPE3 args3[] = ARGS3;\ 139 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 140 {\ 141 const int baseNdx = iterNdx*callCount + callNdx;\ 142 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 143 const TYPE1 arg1 = args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\ 144 const TYPE2 arg2 = args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\ 145 const TYPE3 arg3 = args3[baseNdx%DE_LENGTH_OF_ARRAY(args3)];\ 146 gl.FUNCNAME(arg0, arg1, arg2, arg3);\ 147 }\ 148 }\ 149 };\ 150 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 151}while (0); 152 153#define ADD_ARG_CASE5(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3, TYPE4, ARGS4)\ 154do {\ 155 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 156 {\ 157 public:\ 158 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 159 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 160 {\ 161 }\ 162 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 163 {\ 164 const TYPE0 args0[] = ARGS0;\ 165 const TYPE1 args1[] = ARGS1;\ 166 const TYPE2 args2[] = ARGS2;\ 167 const TYPE3 args3[] = ARGS3;\ 168 const TYPE4 args4[] = ARGS4;\ 169 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 170 {\ 171 const int baseNdx = iterNdx*callCount + callNdx;\ 172 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 173 const TYPE1 arg1 = args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\ 174 const TYPE2 arg2 = args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\ 175 const TYPE3 arg3 = args3[baseNdx%DE_LENGTH_OF_ARRAY(args3)];\ 176 const TYPE4 arg4 = args4[baseNdx%DE_LENGTH_OF_ARRAY(args4)];\ 177 gl.FUNCNAME(arg0, arg1, arg2, arg3, arg4);\ 178 }\ 179 }\ 180 };\ 181 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 182}while (0); 183 184#define ADD_ARG_CASE6(NAME, DESCRIPTION, FUNCNAME, TYPE0, ARGS0, TYPE1, ARGS1, TYPE2, ARGS2, TYPE3, ARGS3, TYPE4, ARGS4, TYPE5, ARGS5)\ 185do {\ 186 class StateChangeCallTest_ ## NAME : public gls::StateChangeCallPerformanceCase\ 187 {\ 188 public:\ 189 StateChangeCallTest_ ## NAME (Context& context, const char* name, const char* description)\ 190 : gls::StateChangeCallPerformanceCase(context.getTestContext(), context.getRenderContext(), name, description)\ 191 {\ 192 }\ 193 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount)\ 194 {\ 195 const TYPE0 args0[] = ARGS0;\ 196 const TYPE1 args1[] = ARGS1;\ 197 const TYPE2 args2[] = ARGS2;\ 198 const TYPE3 args3[] = ARGS3;\ 199 const TYPE4 args4[] = ARGS4;\ 200 const TYPE5 args5[] = ARGS5;\ 201 for (int callNdx = 0; callNdx < callCount; callNdx++)\ 202 {\ 203 const int baseNdx = iterNdx*callCount + callNdx;\ 204 const TYPE0 arg0 = args0[baseNdx%DE_LENGTH_OF_ARRAY(args0)];\ 205 const TYPE1 arg1 = args1[baseNdx%DE_LENGTH_OF_ARRAY(args1)];\ 206 const TYPE2 arg2 = args2[baseNdx%DE_LENGTH_OF_ARRAY(args2)];\ 207 const TYPE3 arg3 = args3[baseNdx%DE_LENGTH_OF_ARRAY(args3)];\ 208 const TYPE4 arg4 = args4[baseNdx%DE_LENGTH_OF_ARRAY(args4)];\ 209 const TYPE5 arg5 = args5[baseNdx%DE_LENGTH_OF_ARRAY(args5)];\ 210 gl.FUNCNAME(arg0, arg1, arg2, arg3, arg4, arg5);\ 211 }\ 212 }\ 213 };\ 214 addChild(new StateChangeCallTest_ ## NAME (m_context, #NAME, DESCRIPTION));\ 215}while (0); 216 217void StateChangeCallTests::init (void) 218{ 219 ADD_ARG_CASE1(enable, "Test cost of glEnable() calls", 220 enable, 221 GLenum, 222 ARG_LIST({ 223 GL_CULL_FACE, 224 GL_POLYGON_OFFSET_FILL, 225 GL_SAMPLE_ALPHA_TO_COVERAGE, 226 GL_SAMPLE_COVERAGE, 227 GL_SCISSOR_TEST, 228 GL_STENCIL_TEST, 229 GL_DEPTH_TEST, 230 GL_BLEND, 231 GL_DITHER, 232 GL_RASTERIZER_DISCARD, 233 GL_PRIMITIVE_RESTART_FIXED_INDEX 234 }) 235 ); 236 237 ADD_ARG_CASE1(disable, "Test cost of glDisable() calls", 238 disable, 239 GLenum, 240 ARG_LIST({ 241 GL_CULL_FACE, 242 GL_POLYGON_OFFSET_FILL, 243 GL_SAMPLE_ALPHA_TO_COVERAGE, 244 GL_SAMPLE_COVERAGE, 245 GL_SCISSOR_TEST, 246 GL_STENCIL_TEST, 247 GL_DEPTH_TEST, 248 GL_BLEND, 249 GL_DITHER, 250 GL_RASTERIZER_DISCARD, 251 GL_PRIMITIVE_RESTART_FIXED_INDEX 252 }) 253 ); 254 255 ADD_ARG_CASE1(depth_func, "Test cost of glDepthFunc() calls", 256 depthFunc, 257 GLenum, 258 ARG_LIST({ 259 GL_NEVER, 260 GL_ALWAYS, 261 GL_LESS, 262 GL_LEQUAL, 263 GL_EQUAL, 264 GL_GREATER, 265 GL_GEQUAL, 266 GL_NOTEQUAL 267 }) 268 ); 269 270 ADD_ARG_CASE1(depth_mask, "Test cost of glDepthMask() calls", 271 depthMask, 272 GLboolean, 273 ARG_LIST({ 274 GL_TRUE, 275 GL_FALSE 276 }) 277 ); 278 279 ADD_ARG_CASE1(stencil_mask, "Test cost of glStencilMask() calls", 280 stencilMask, 281 GLboolean, 282 ARG_LIST({ 283 GL_TRUE, 284 GL_FALSE 285 }) 286 ); 287 288 ADD_ARG_CASE1(clear_depth, "Test cost of glClearDepth() calls", 289 clearDepthf, 290 GLclampf, 291 ARG_LIST({ 292 0.0f, 293 0.5f, 294 1.0f 295 }) 296 ); 297 298 ADD_ARG_CASE1(clear_stencil, "Test cost of glClearStencil() calls", 299 clearStencil, 300 GLint, 301 ARG_LIST({ 302 0, 303 128, 304 28 305 }) 306 ); 307 308 ADD_ARG_CASE1(line_width, "Test cost of glLineWidth() calls", 309 lineWidth, 310 GLfloat, 311 ARG_LIST({ 312 1.0f, 313 0.5f, 314 10.0f 315 }) 316 ); 317 318 ADD_ARG_CASE1(cull_face, "Test cost of glCullFace() calls", 319 cullFace, 320 GLenum, 321 ARG_LIST({ 322 GL_FRONT, 323 GL_BACK, 324 GL_FRONT_AND_BACK 325 }) 326 ); 327 328 ADD_ARG_CASE1(front_face, "Test cost of glFrontFace() calls", 329 frontFace, 330 GLenum, 331 ARG_LIST({ 332 GL_CCW, 333 GL_CW 334 }) 335 ); 336 337 ADD_ARG_CASE1(blend_equation, "Test cost of glBlendEquation() calls", 338 blendEquation, 339 GLenum, 340 ARG_LIST({ 341 GL_FUNC_ADD, 342 GL_FUNC_SUBTRACT, 343 GL_FUNC_REVERSE_SUBTRACT 344 }) 345 ); 346 347 ADD_ARG_CASE1(enable_vertex_attrib_array, "Test cost of glEnableVertexAttribArray() calls", 348 enableVertexAttribArray, 349 GLuint, 350 ARG_LIST({ 351 0, 352 1, 353 2, 354 3, 355 4, 356 5, 357 6, 358 7, 359 }) 360 ); 361 362 ADD_ARG_CASE1(disable_vertex_attrib_array, "Test cost of glDisableVertexAttribArray() calls", 363 disableVertexAttribArray, 364 GLuint, 365 ARG_LIST({ 366 0, 367 1, 368 2, 369 3, 370 4, 371 5, 372 6, 373 7, 374 }) 375 ); 376 377 ADD_ARG_CASE1(use_program, "Test cost of glUseProgram() calls. Note: Uses only program 0.", 378 useProgram, 379 GLuint, 380 ARG_LIST({ 381 0, 382 }) 383 ); 384 385 ADD_ARG_CASE1(active_texture, "Test cost of glActiveTexture() calls", 386 activeTexture, 387 GLenum, 388 ARG_LIST({ 389 GL_TEXTURE0, 390 GL_TEXTURE1, 391 GL_TEXTURE2, 392 GL_TEXTURE3, 393 GL_TEXTURE4, 394 GL_TEXTURE5, 395 GL_TEXTURE6, 396 GL_TEXTURE7 397 }) 398 ); 399 400 ADD_ARG_CASE2(depth_range, "Test cost of glDepthRangef() calls", 401 depthRangef, 402 GLclampf, 403 ARG_LIST({ 404 0.0f, 405 1.0f, 406 0.5f 407 }), 408 GLclampf, 409 ARG_LIST({ 410 0.0f, 411 1.0f, 412 0.5f 413 }) 414 ); 415 416 ADD_ARG_CASE2(polygon_offset, "Test cost of glPolygonOffset() calls", 417 polygonOffset, 418 GLfloat, 419 ARG_LIST({ 420 0.0f, 421 1.0f, 422 0.5f, 423 10.0f 424 }), 425 GLfloat, 426 ARG_LIST({ 427 0.0f, 428 1.0f, 429 0.5f, 430 1000.0f 431 }) 432 ); 433 434 ADD_ARG_CASE2(sample_coverage, "Test cost of glSampleCoverage() calls", 435 sampleCoverage, 436 GLclampf, 437 ARG_LIST({ 438 0.0f, 439 1.0f, 440 0.5f, 441 0.67f 442 }), 443 GLboolean, 444 ARG_LIST({ 445 GL_TRUE, 446 GL_FALSE 447 }) 448 ); 449 450 ADD_ARG_CASE2(blend_func, "Test cost of glBlendFunc() calls", 451 blendFunc, 452 GLenum, 453 ARG_LIST({ 454 GL_ZERO, 455 GL_ONE, 456 GL_SRC_COLOR, 457 GL_ONE_MINUS_SRC_COLOR, 458 GL_DST_COLOR, 459 GL_ONE_MINUS_DST_COLOR, 460 GL_SRC_ALPHA, 461 GL_ONE_MINUS_SRC_ALPHA, 462 GL_DST_ALPHA, 463 GL_ONE_MINUS_DST_ALPHA, 464 GL_CONSTANT_COLOR, 465 GL_ONE_MINUS_CONSTANT_COLOR, 466 GL_CONSTANT_ALPHA, 467 GL_ONE_MINUS_CONSTANT_ALPHA 468 }), 469 GLenum, 470 ARG_LIST({ 471 GL_ZERO, 472 GL_ONE, 473 GL_SRC_COLOR, 474 GL_ONE_MINUS_SRC_COLOR, 475 GL_DST_COLOR, 476 GL_ONE_MINUS_DST_COLOR, 477 GL_SRC_ALPHA, 478 GL_ONE_MINUS_SRC_ALPHA, 479 GL_DST_ALPHA, 480 GL_ONE_MINUS_DST_ALPHA, 481 GL_CONSTANT_COLOR, 482 GL_ONE_MINUS_CONSTANT_COLOR, 483 GL_CONSTANT_ALPHA, 484 GL_ONE_MINUS_CONSTANT_ALPHA 485 }) 486 ); 487 488 ADD_ARG_CASE2(blend_equation_separate, "Test cost of glBlendEquationSeparate() calls", 489 blendEquationSeparate, 490 GLenum, 491 ARG_LIST({ 492 GL_FUNC_ADD, 493 GL_FUNC_SUBTRACT, 494 GL_FUNC_REVERSE_SUBTRACT 495 }), 496 GLenum, 497 ARG_LIST({ 498 GL_FUNC_ADD, 499 GL_FUNC_SUBTRACT, 500 GL_FUNC_REVERSE_SUBTRACT 501 }) 502 ); 503 504 ADD_ARG_CASE2(stencil_mask_separate, "Test cost of glStencilMaskSeparate() calls", 505 stencilMaskSeparate, 506 GLenum, 507 ARG_LIST({ 508 GL_FRONT, 509 GL_BACK, 510 GL_FRONT_AND_BACK 511 }), 512 GLboolean, 513 ARG_LIST({ 514 GL_TRUE, 515 GL_FALSE 516 }) 517 ); 518 519 ADD_ARG_CASE2(bind_buffer, "Test cost of glBindBuffer() calls. Note: Uses only buffer 0", 520 bindBuffer, 521 GLenum, 522 ARG_LIST({ 523 GL_ELEMENT_ARRAY_BUFFER, 524 GL_ARRAY_BUFFER 525 }), 526 GLuint, 527 ARG_LIST({ 528 0 529 }) 530 ); 531 532 ADD_ARG_CASE2(bind_texture, "Test cost of glBindTexture() calls. Note: Uses only texture 0", 533 bindTexture, 534 GLenum, 535 ARG_LIST({ 536 GL_TEXTURE_2D, 537 GL_TEXTURE_CUBE_MAP 538 }), 539 GLuint, 540 ARG_LIST({ 541 0 542 }) 543 ); 544 545 ADD_ARG_CASE2(bind_sampler, "Test cost of glBindSampler() calls. Note: Uses only sampler 0", 546 bindSampler, 547 GLuint, 548 ARG_LIST({ 549 0, 550 1, 551 2, 552 3, 553 4, 554 5, 555 6, 556 7 557 }), 558 GLuint, 559 ARG_LIST({ 560 0 561 }) 562 ); 563 564 ADD_ARG_CASE1(bind_vertex_array, "Test cost of glBindVertexArray() calls. Note: Uses only VAO 0", 565 bindVertexArray, 566 GLuint, 567 ARG_LIST({ 568 0 569 }) 570 ); 571 572 ADD_ARG_CASE2(hint, "Test cost of glHint() calls", 573 hint, 574 GLenum, 575 ARG_LIST({ 576 GL_GENERATE_MIPMAP_HINT 577 }), 578 GLenum, 579 ARG_LIST({ 580 GL_FASTEST, 581 GL_NICEST, 582 GL_DONT_CARE 583 }) 584 ); 585 586 ADD_ARG_CASE3(stencil_func, "Test cost of glStencilFunc() calls", 587 stencilFunc, 588 GLenum, 589 ARG_LIST({ 590 GL_NEVER, 591 GL_ALWAYS, 592 GL_LESS, 593 GL_LEQUAL, 594 GL_EQUAL, 595 GL_GEQUAL, 596 GL_GREATER, 597 GL_NOTEQUAL 598 }), 599 GLint, 600 ARG_LIST({ 601 0, 602 1, 603 255, 604 128, 605 7 606 }), 607 GLuint, 608 ARG_LIST({ 609 0, 610 1, 611 255, 612 128, 613 7, 614 0xFFFFFFFF 615 }) 616 ); 617 618 ADD_ARG_CASE3(stencil_op, "Test cost of glStencilOp() calls", 619 stencilOp, 620 GLenum, 621 ARG_LIST({ 622 GL_KEEP, 623 GL_ZERO, 624 GL_REPLACE, 625 GL_INCR, 626 GL_DECR, 627 GL_INVERT, 628 GL_INCR_WRAP, 629 GL_DECR_WRAP 630 }), 631 GLenum, 632 ARG_LIST({ 633 GL_KEEP, 634 GL_ZERO, 635 GL_REPLACE, 636 GL_INCR, 637 GL_DECR, 638 GL_INVERT, 639 GL_INCR_WRAP, 640 GL_DECR_WRAP 641 }), 642 GLenum, 643 ARG_LIST({ 644 GL_KEEP, 645 GL_ZERO, 646 GL_REPLACE, 647 GL_INCR, 648 GL_DECR, 649 GL_INVERT, 650 GL_INCR_WRAP, 651 GL_DECR_WRAP 652 }) 653 ); 654 655 ADD_ARG_CASE4(viewport, "Test cost of glViewport() calls", 656 viewport, 657 GLint, 658 ARG_LIST({ 659 0, 660 1, 661 100, 662 1145235 663 }), 664 GLint, 665 ARG_LIST({ 666 0, 667 1, 668 100, 669 1145235 670 }), 671 GLint, 672 ARG_LIST({ 673 0, 674 1, 675 100, 676 1145235 677 }), 678 GLint, 679 ARG_LIST({ 680 0, 681 1, 682 100, 683 1145235 684 }) 685 ); 686 687 ADD_ARG_CASE4(scissor, "Test cost of glScissor() calls", 688 scissor, 689 GLint, 690 ARG_LIST({ 691 0, 692 1, 693 100, 694 1145235 695 }), 696 GLint, 697 ARG_LIST({ 698 0, 699 1, 700 100, 701 1145235 702 }), 703 GLint, 704 ARG_LIST({ 705 0, 706 1, 707 100, 708 1145235 709 }), 710 GLint, 711 ARG_LIST({ 712 0, 713 1, 714 100, 715 1145235 716 }) 717 ); 718 719 ADD_ARG_CASE4(stencil_func_separate, "Test cost of glStencilFuncSeparate() calls", 720 stencilFuncSeparate, 721 GLenum, 722 ARG_LIST({ 723 GL_FRONT, 724 GL_BACK, 725 GL_FRONT_AND_BACK 726 }), 727 GLenum, 728 ARG_LIST({ 729 GL_NEVER, 730 GL_ALWAYS, 731 GL_LESS, 732 GL_LEQUAL, 733 GL_EQUAL, 734 GL_GEQUAL, 735 GL_GREATER, 736 GL_NOTEQUAL 737 }), 738 GLint, 739 ARG_LIST({ 740 0, 741 1, 742 255, 743 128, 744 7 745 }), 746 GLuint, 747 ARG_LIST({ 748 0, 749 1, 750 255, 751 128, 752 7, 753 0xFFFFFFFF 754 }) 755 ); 756 757 ADD_ARG_CASE4(stencil_op_separatae, "Test cost of glStencilOpSeparate() calls", 758 stencilOpSeparate, 759 GLenum, 760 ARG_LIST({ 761 GL_FRONT, 762 GL_BACK, 763 GL_FRONT_AND_BACK 764 }), 765 GLenum, 766 ARG_LIST({ 767 GL_KEEP, 768 GL_ZERO, 769 GL_REPLACE, 770 GL_INCR, 771 GL_DECR, 772 GL_INVERT, 773 GL_INCR_WRAP, 774 GL_DECR_WRAP 775 }), 776 GLenum, 777 ARG_LIST({ 778 GL_KEEP, 779 GL_ZERO, 780 GL_REPLACE, 781 GL_INCR, 782 GL_DECR, 783 GL_INVERT, 784 GL_INCR_WRAP, 785 GL_DECR_WRAP 786 }), 787 GLenum, 788 ARG_LIST({ 789 GL_KEEP, 790 GL_ZERO, 791 GL_REPLACE, 792 GL_INCR, 793 GL_DECR, 794 GL_INVERT, 795 GL_INCR_WRAP, 796 GL_DECR_WRAP 797 }) 798 ); 799 800 ADD_ARG_CASE4(blend_func_separate, "Test cost of glBlendFuncSeparate() calls", 801 blendFuncSeparate, 802 GLenum, 803 ARG_LIST({ 804 GL_ZERO, 805 GL_ONE, 806 GL_SRC_COLOR, 807 GL_ONE_MINUS_SRC_COLOR, 808 GL_DST_COLOR, 809 GL_ONE_MINUS_DST_COLOR, 810 GL_SRC_ALPHA, 811 GL_ONE_MINUS_SRC_ALPHA, 812 GL_DST_ALPHA, 813 GL_ONE_MINUS_DST_ALPHA, 814 GL_CONSTANT_COLOR, 815 GL_ONE_MINUS_CONSTANT_COLOR, 816 GL_CONSTANT_ALPHA, 817 GL_ONE_MINUS_CONSTANT_ALPHA 818 }), 819 GLenum, 820 ARG_LIST({ 821 GL_ZERO, 822 GL_ONE, 823 GL_SRC_COLOR, 824 GL_ONE_MINUS_SRC_COLOR, 825 GL_DST_COLOR, 826 GL_ONE_MINUS_DST_COLOR, 827 GL_SRC_ALPHA, 828 GL_ONE_MINUS_SRC_ALPHA, 829 GL_DST_ALPHA, 830 GL_ONE_MINUS_DST_ALPHA, 831 GL_CONSTANT_COLOR, 832 GL_ONE_MINUS_CONSTANT_COLOR, 833 GL_CONSTANT_ALPHA, 834 GL_ONE_MINUS_CONSTANT_ALPHA 835 }), 836 GLenum, 837 ARG_LIST({ 838 GL_ZERO, 839 GL_ONE, 840 GL_SRC_COLOR, 841 GL_ONE_MINUS_SRC_COLOR, 842 GL_DST_COLOR, 843 GL_ONE_MINUS_DST_COLOR, 844 GL_SRC_ALPHA, 845 GL_ONE_MINUS_SRC_ALPHA, 846 GL_DST_ALPHA, 847 GL_ONE_MINUS_DST_ALPHA, 848 GL_CONSTANT_COLOR, 849 GL_ONE_MINUS_CONSTANT_COLOR, 850 GL_CONSTANT_ALPHA, 851 GL_ONE_MINUS_CONSTANT_ALPHA 852 }), 853 GLenum, 854 ARG_LIST({ 855 GL_ZERO, 856 GL_ONE, 857 GL_SRC_COLOR, 858 GL_ONE_MINUS_SRC_COLOR, 859 GL_DST_COLOR, 860 GL_ONE_MINUS_DST_COLOR, 861 GL_SRC_ALPHA, 862 GL_ONE_MINUS_SRC_ALPHA, 863 GL_DST_ALPHA, 864 GL_ONE_MINUS_DST_ALPHA, 865 GL_CONSTANT_COLOR, 866 GL_ONE_MINUS_CONSTANT_COLOR, 867 GL_CONSTANT_ALPHA, 868 GL_ONE_MINUS_CONSTANT_ALPHA 869 }) 870 ); 871 872 ADD_ARG_CASE4(color_mask, "Test cost of glColorMask() calls", 873 colorMask, 874 GLboolean, 875 ARG_LIST({ 876 GL_TRUE, 877 GL_FALSE 878 }), 879 GLboolean, 880 ARG_LIST({ 881 GL_TRUE, 882 GL_FALSE 883 }), 884 GLboolean, 885 ARG_LIST({ 886 GL_TRUE, 887 GL_FALSE 888 }), 889 GLboolean, 890 ARG_LIST({ 891 GL_TRUE, 892 GL_FALSE 893 }) 894 ); 895 896 ADD_ARG_CASE4(clear_color, "Test cost of glClearColor() calls", 897 clearColor, 898 GLclampf, 899 ARG_LIST({ 900 0.0f, 901 1.0f, 902 0.5f, 903 0.33f 904 }), 905 GLclampf, 906 ARG_LIST({ 907 0.0f, 908 1.0f, 909 0.5f, 910 0.33f 911 }), 912 GLclampf, 913 ARG_LIST({ 914 0.0f, 915 1.0f, 916 0.5f, 917 0.33f 918 }), 919 GLclampf, 920 ARG_LIST({ 921 0.0f, 922 1.0f, 923 0.5f, 924 0.33f 925 }) 926 ); 927 928 ADD_ARG_CASE6(vertex_attrib_pointer, "Test cost of glVertexAttribPointer() calls", 929 vertexAttribPointer, 930 GLuint, 931 ARG_LIST({ 932 0, 933 1, 934 2, 935 3, 936 4, 937 5, 938 6, 939 7 940 }), 941 GLint, 942 ARG_LIST({ 943 1, 944 2, 945 3, 946 4 947 }), 948 GLenum, 949 ARG_LIST({ 950 GL_UNSIGNED_BYTE, 951 GL_BYTE, 952 GL_UNSIGNED_SHORT, 953 GL_SHORT, 954 GL_FLOAT 955 }), 956 GLboolean, 957 ARG_LIST({ 958 GL_FALSE, 959 GL_TRUE 960 }), 961 GLsizei, 962 ARG_LIST({ 963 0, 964 2, 965 4 966 }), 967 void*, 968 ARG_LIST({ 969 (void*)(deUintptr)(0x0FF), 970 (void*)(deUintptr)(0x0EF) 971 }) 972 ); 973 974 ADD_ARG_CASE2(vertex_attrib_divisor, "Test cost of glVertexAttribDivisor() calls", 975 vertexAttribDivisor, 976 GLuint, 977 ARG_LIST({ 978 0, 979 1, 980 2, 981 3, 982 4, 983 5, 984 6, 985 7 986 }), 987 GLuint, 988 ARG_LIST({ 989 0, 990 1, 991 3, 992 7, 993 11, 994 127, 995 256 996 }) 997 ); 998 999 ADD_ARG_CASE3(bind_buffer_base, "Test cost of glBindBufferBase() calls. Note: uses only buffer 0.", 1000 bindBufferBase, 1001 GLuint, 1002 ARG_LIST({ 1003 GL_UNIFORM_BUFFER 1004 }), 1005 GLuint, 1006 ARG_LIST({ 1007 0, 1008 1, 1009 2, 1010 3 1011 }), 1012 GLuint, 1013 ARG_LIST({ 1014 0 1015 }) 1016 ); 1017 1018 ADD_ARG_CASE5(bind_buffer_range, "Test cost of glBindBufferRange() calls. Note: uses only buffer 0.", 1019 bindBufferRange, 1020 GLuint, 1021 ARG_LIST({ 1022 GL_UNIFORM_BUFFER 1023 }), 1024 GLuint, 1025 ARG_LIST({ 1026 0, 1027 1, 1028 2, 1029 3 1030 }), 1031 GLuint, 1032 ARG_LIST({ 1033 0 1034 }), 1035 GLintptr, 1036 ARG_LIST({ 1037 0 1038 }), 1039 GLsizeiptr, 1040 ARG_LIST({ 1041 0 1042 }) 1043 ); 1044} 1045 1046} // Performance 1047} // gles3 1048} // deqp 1049