1# ------------------------------------------------- 2# drawElements Quality Program OpenGL ES 3.2 Module 3# ------------------------------------------------- 4# 5# Copyright 2016 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 20group varying "Default block varying matching" 21 22 case missing_input 23 version 320 es 24 desc "Variable has no matching input" 25 expect validation_fail 26 27 pipeline_program 28 active_stages {vertex} 29 vertex "" 30 #version 320 es 31 ${VERTEX_DECLARATIONS} 32 out mediump float v_val; 33 out mediump float v_val_no_such_input; 34 void main() 35 { 36 v_val = float(gl_VertexID); 37 v_val_no_such_input = 1.0; 38 ${VERTEX_OUTPUT} 39 } 40 "" 41 end 42 pipeline_program 43 active_stages {fragment} 44 fragment "" 45 #version 320 es 46 ${FRAGMENT_DECLARATIONS} 47 in mediump float v_val; 48 void main() 49 { 50 ${FRAG_COLOR} = vec4(v_val); 51 } 52 "" 53 end 54 end 55 56 case missing_output 57 version 320 es 58 desc "Variable has no matching output" 59 expect validation_fail 60 61 pipeline_program 62 active_stages {vertex} 63 vertex "" 64 #version 320 es 65 ${VERTEX_DECLARATIONS} 66 out mediump float v_val; 67 void main() 68 { 69 v_val = float(gl_VertexID); 70 ${VERTEX_OUTPUT} 71 } 72 "" 73 end 74 pipeline_program 75 active_stages {fragment} 76 fragment "" 77 #version 320 es 78 ${FRAGMENT_DECLARATIONS} 79 in mediump float v_val; 80 in mediump float v_val_no_such_output; 81 void main() 82 { 83 ${FRAG_COLOR} = vec4(v_val + v_val_no_such_output); 84 } 85 "" 86 end 87 end 88 89 case mismatch_type 90 version 320 es 91 desc "Variable type mismatch" 92 expect validation_fail 93 94 pipeline_program 95 active_stages {vertex} 96 vertex "" 97 #version 320 es 98 ${VERTEX_DECLARATIONS} 99 out mediump vec3 v_val; 100 void main() 101 { 102 v_val = vec3(float(gl_VertexID)); 103 ${VERTEX_OUTPUT} 104 } 105 "" 106 end 107 pipeline_program 108 active_stages {fragment} 109 fragment "" 110 #version 320 es 111 ${FRAGMENT_DECLARATIONS} 112 in mediump vec4 v_val; 113 void main() 114 { 115 ${FRAG_COLOR} = v_val; 116 } 117 "" 118 end 119 end 120 121 case mismatch_precision 122 version 320 es 123 desc "Variable precision mismatch" 124 expect validation_fail 125 126 pipeline_program 127 active_stages {vertex} 128 vertex "" 129 #version 320 es 130 ${VERTEX_DECLARATIONS} 131 out mediump float v_val; 132 void main() 133 { 134 v_val = float(gl_VertexID); 135 ${VERTEX_OUTPUT} 136 } 137 "" 138 end 139 pipeline_program 140 active_stages {fragment} 141 fragment "" 142 #version 320 es 143 ${FRAGMENT_DECLARATIONS} 144 in highp float v_val; 145 void main() 146 { 147 ${FRAG_COLOR} = vec4(v_val); 148 } 149 "" 150 end 151 end 152 153 case mismatch_explicit_location_type 154 version 320 es 155 desc "Variable type mismatch, explicit varying locations" 156 expect validation_fail 157 158 pipeline_program 159 active_stages {vertex} 160 vertex "" 161 #version 320 es 162 ${VERTEX_DECLARATIONS} 163 layout(location = 3) out mediump vec4 v_val; 164 void main() 165 { 166 v_val = vec4(float(gl_VertexID)); 167 ${VERTEX_OUTPUT} 168 } 169 "" 170 end 171 pipeline_program 172 active_stages {fragment} 173 fragment "" 174 #version 320 es 175 ${FRAGMENT_DECLARATIONS} 176 layout(location = 3) in mediump vec2 v_val; 177 void main() 178 { 179 ${FRAG_COLOR} = v_val.xxyy; 180 } 181 "" 182 end 183 end 184 185 case mismatch_explicit_location_precision 186 version 320 es 187 desc "Variable precision mismatch, explicit varying locations" 188 expect validation_fail 189 190 pipeline_program 191 active_stages {vertex} 192 vertex "" 193 #version 320 es 194 ${VERTEX_DECLARATIONS} 195 layout(location = 3) out mediump float v_val; 196 void main() 197 { 198 v_val = float(gl_VertexID); 199 ${VERTEX_OUTPUT} 200 } 201 "" 202 end 203 pipeline_program 204 active_stages {fragment} 205 fragment "" 206 #version 320 es 207 ${FRAGMENT_DECLARATIONS} 208 layout(location = 3) in highp float v_val; 209 void main() 210 { 211 ${FRAG_COLOR} = vec4(v_val); 212 } 213 "" 214 end 215 end 216 217 case mismatch_explicit_location 218 version 320 es 219 desc "Variable location mismatch" 220 expect validation_fail 221 222 pipeline_program 223 active_stages {vertex} 224 vertex "" 225 #version 320 es 226 ${VERTEX_DECLARATIONS} 227 layout(location = 3) out mediump float v_val; 228 void main() 229 { 230 v_val = float(gl_VertexID); 231 ${VERTEX_OUTPUT} 232 } 233 "" 234 end 235 pipeline_program 236 active_stages {fragment} 237 fragment "" 238 #version 320 es 239 ${FRAGMENT_DECLARATIONS} 240 layout(location = 4) in mediump float v_val; 241 void main() 242 { 243 ${FRAG_COLOR} = vec4(v_val); 244 } 245 "" 246 end 247 end 248 249 case mismatch_implicit_explicit_location_1 250 version 320 es 251 desc "Variable location mismatch" 252 expect validation_fail 253 254 pipeline_program 255 active_stages {vertex} 256 vertex "" 257 #version 320 es 258 ${VERTEX_DECLARATIONS} 259 out mediump float v_val; 260 void main() 261 { 262 v_val = float(gl_VertexID); 263 ${VERTEX_OUTPUT} 264 } 265 "" 266 end 267 pipeline_program 268 active_stages {fragment} 269 fragment "" 270 #version 320 es 271 ${FRAGMENT_DECLARATIONS} 272 layout(location = 3) in mediump float v_val; 273 void main() 274 { 275 ${FRAG_COLOR} = vec4(v_val); 276 } 277 "" 278 end 279 end 280 281 case mismatch_implicit_explicit_location_2 282 version 320 es 283 desc "Variable location mismatch" 284 expect validation_fail 285 286 pipeline_program 287 active_stages {vertex} 288 vertex "" 289 #version 320 es 290 ${VERTEX_DECLARATIONS} 291 layout(location = 3) out mediump float v_val; 292 void main() 293 { 294 v_val = float(gl_VertexID); 295 ${VERTEX_OUTPUT} 296 } 297 "" 298 end 299 pipeline_program 300 active_stages {fragment} 301 fragment "" 302 #version 320 es 303 ${FRAGMENT_DECLARATIONS} 304 in mediump float v_val; 305 layout(location = 3) in mediump float v_val_other_name; 306 void main() 307 { 308 ${FRAG_COLOR} = vec4(v_val + v_val_other_name); 309 } 310 "" 311 end 312 end 313 314 case mismatch_implicit_explicit_location_3 315 version 320 es 316 desc "Variable location mismatch" 317 expect validation_fail 318 319 pipeline_program 320 active_stages {vertex} 321 vertex "" 322 #version 320 es 323 ${VERTEX_DECLARATIONS} 324 out mediump float v_val; 325 layout(location = 3) out mediump float v_val_other_name; 326 void main() 327 { 328 v_val = float(gl_VertexID); 329 v_val_other_name = 1.0; 330 ${VERTEX_OUTPUT} 331 } 332 "" 333 end 334 pipeline_program 335 active_stages {fragment} 336 fragment "" 337 #version 320 es 338 ${FRAGMENT_DECLARATIONS} 339 layout(location = 3) in mediump float v_val; 340 void main() 341 { 342 ${FRAG_COLOR} = vec4(v_val); 343 } 344 "" 345 end 346 end 347 348 case match_different_struct_names 349 version 320 es 350 desc "Variable struct names different but otherwise identical" 351 expect validation_fail 352 353 pipeline_program 354 active_stages {vertex} 355 vertex "" 356 #version 320 es 357 ${VERTEX_DECLARATIONS} 358 struct StructureNameA 359 { 360 mediump float member; 361 }; 362 out StructureNameA v_val; 363 void main() 364 { 365 v_val.member = float(gl_VertexID); 366 ${VERTEX_OUTPUT} 367 } 368 "" 369 end 370 pipeline_program 371 active_stages {fragment} 372 fragment "" 373 #version 320 es 374 ${FRAGMENT_DECLARATIONS} 375 struct StructureNameB 376 { 377 mediump float member; 378 }; 379 in StructureNameB v_val; 380 void main() 381 { 382 // should always produce white 383 ${FRAG_COLOR} = (v_val.member > -1.0) ? (vec4(1.0)) : (vec4(0.0)); 384 } 385 "" 386 end 387 end 388 389 case mismatch_struct_member_name 390 version 320 es 391 desc "Struct member name mismatch" 392 expect validation_fail 393 394 pipeline_program 395 active_stages {vertex} 396 vertex "" 397 #version 320 es 398 ${VERTEX_DECLARATIONS} 399 struct StructureName 400 { 401 mediump float member; 402 }; 403 out StructureName v_val; 404 void main() 405 { 406 v_val.member = float(gl_VertexID); 407 ${VERTEX_OUTPUT} 408 } 409 "" 410 end 411 pipeline_program 412 active_stages {fragment} 413 fragment "" 414 #version 320 es 415 ${FRAGMENT_DECLARATIONS} 416 struct StructureName 417 { 418 mediump float member_different_name; 419 }; 420 in StructureName v_val; 421 void main() 422 { 423 ${FRAG_COLOR} = vec4(v_val.member_different_name); 424 } 425 "" 426 end 427 end 428 429 case mismatch_struct_member_type 430 version 320 es 431 desc "Struct member type mismatch" 432 expect validation_fail 433 434 pipeline_program 435 active_stages {vertex} 436 vertex "" 437 #version 320 es 438 ${VERTEX_DECLARATIONS} 439 struct StructureName 440 { 441 mediump float member; 442 }; 443 out StructureName v_val; 444 void main() 445 { 446 v_val.member = float(gl_VertexID); 447 ${VERTEX_OUTPUT} 448 } 449 "" 450 end 451 pipeline_program 452 active_stages {fragment} 453 fragment "" 454 #version 320 es 455 ${FRAGMENT_DECLARATIONS} 456 struct StructureName 457 { 458 mediump vec2 member; 459 }; 460 in StructureName v_val; 461 void main() 462 { 463 ${FRAG_COLOR} = vec4(v_val.member.x); 464 } 465 "" 466 end 467 end 468 469 case mismatch_struct_member_precision 470 version 320 es 471 desc "Struct member precision mismatch" 472 expect validation_fail 473 474 pipeline_program 475 active_stages {vertex} 476 vertex "" 477 #version 320 es 478 ${VERTEX_DECLARATIONS} 479 struct StructureName 480 { 481 mediump float member; 482 }; 483 out StructureName v_val; 484 void main() 485 { 486 v_val.member = float(gl_VertexID); 487 ${VERTEX_OUTPUT} 488 } 489 "" 490 end 491 pipeline_program 492 active_stages {fragment} 493 fragment "" 494 #version 320 es 495 ${FRAGMENT_DECLARATIONS} 496 struct StructureName 497 { 498 highp float member; 499 }; 500 in StructureName v_val; 501 void main() 502 { 503 ${FRAG_COLOR} = vec4(v_val.member); 504 } 505 "" 506 end 507 end 508 509 case mismatch_struct_member_order 510 version 320 es 511 desc "Struct member order mismatch" 512 expect validation_fail 513 514 pipeline_program 515 active_stages {vertex} 516 vertex "" 517 #version 320 es 518 ${VERTEX_DECLARATIONS} 519 struct StructureName 520 { 521 mediump float memberA; 522 mediump float memberB; 523 }; 524 out StructureName v_val; 525 void main() 526 { 527 v_val.memberA = float(gl_VertexID); 528 v_val.memberB = 1.0; 529 ${VERTEX_OUTPUT} 530 } 531 "" 532 end 533 pipeline_program 534 active_stages {fragment} 535 fragment "" 536 #version 320 es 537 ${FRAGMENT_DECLARATIONS} 538 struct StructureName 539 { 540 mediump float memberB; 541 mediump float memberA; 542 }; 543 in StructureName v_val; 544 void main() 545 { 546 ${FRAG_COLOR} = vec4(v_val.memberA + v_val.memberB); 547 } 548 "" 549 end 550 end 551 552 case mismatch_array_element_type 553 version 320 es 554 desc "Array element type mismatch" 555 expect validation_fail 556 557 pipeline_program 558 active_stages {vertex} 559 vertex "" 560 #version 320 es 561 ${VERTEX_DECLARATIONS} 562 out mediump float v_val[2]; 563 void main() 564 { 565 v_val[0] = 1.0; 566 v_val[1] = 2.0; 567 ${VERTEX_OUTPUT} 568 } 569 "" 570 end 571 pipeline_program 572 active_stages {fragment} 573 fragment "" 574 #version 320 es 575 ${FRAGMENT_DECLARATIONS} 576 in mediump vec2 v_val[2]; 577 void main() 578 { 579 ${FRAG_COLOR} = vec4(v_val[0].x + v_val[1].y); 580 } 581 "" 582 end 583 end 584 585 case mismatch_array_length 586 version 320 es 587 desc "Array length mismatch" 588 expect validation_fail 589 590 pipeline_program 591 active_stages {vertex} 592 vertex "" 593 #version 320 es 594 ${VERTEX_DECLARATIONS} 595 out mediump float v_val[2]; 596 void main() 597 { 598 v_val[0] = 1.0; 599 v_val[1] = 2.0; 600 ${VERTEX_OUTPUT} 601 } 602 "" 603 end 604 pipeline_program 605 active_stages {fragment} 606 fragment "" 607 #version 320 es 608 ${FRAGMENT_DECLARATIONS} 609 in mediump float v_val[3]; 610 void main() 611 { 612 ${FRAG_COLOR} = vec4(v_val[0] + v_val[1] + v_val[2]); 613 } 614 "" 615 end 616 end 617 618 case mismatch_array_precision 619 version 320 es 620 desc "Array length mismatch" 621 expect validation_fail 622 623 pipeline_program 624 active_stages {vertex} 625 vertex "" 626 #version 320 es 627 ${VERTEX_DECLARATIONS} 628 out mediump float v_val[2]; 629 void main() 630 { 631 v_val[0] = 1.0; 632 v_val[1] = 2.0; 633 ${VERTEX_OUTPUT} 634 } 635 "" 636 end 637 pipeline_program 638 active_stages {fragment} 639 fragment "" 640 #version 320 es 641 ${FRAGMENT_DECLARATIONS} 642 in highp float v_val[2]; 643 void main() 644 { 645 ${FRAG_COLOR} = vec4(v_val[0] + v_val[1]); 646 } 647 "" 648 end 649 end 650 651 case mismatch_qualifier_vertex_flat_fragment_none 652 version 320 es 653 desc "Interpolation qualifier mismatch" 654 expect validation_fail 655 656 pipeline_program 657 active_stages {vertex} 658 vertex "" 659 #version 320 es 660 ${VERTEX_DECLARATIONS} 661 out flat highp vec4 v_val; 662 void main() 663 { 664 v_val = vec4(float(gl_VertexID)); 665 ${VERTEX_OUTPUT} 666 } 667 "" 668 end 669 pipeline_program 670 active_stages {fragment} 671 fragment "" 672 #version 320 es 673 ${FRAGMENT_DECLARATIONS} 674 in highp vec4 v_val; 675 void main() 676 { 677 ${FRAG_COLOR} = v_val; 678 } 679 "" 680 end 681 end 682 683 case mismatch_qualifier_vertex_flat_fragment_smooth 684 version 320 es 685 desc "Interpolation qualifier mismatch" 686 expect validation_fail 687 688 pipeline_program 689 active_stages {vertex} 690 vertex "" 691 #version 320 es 692 ${VERTEX_DECLARATIONS} 693 out flat highp vec4 v_val; 694 void main() 695 { 696 v_val = vec4(float(gl_VertexID)); 697 ${VERTEX_OUTPUT} 698 } 699 "" 700 end 701 pipeline_program 702 active_stages {fragment} 703 fragment "" 704 #version 320 es 705 ${FRAGMENT_DECLARATIONS} 706 in smooth highp vec4 v_val; 707 void main() 708 { 709 ${FRAG_COLOR} = v_val; 710 } 711 "" 712 end 713 end 714 715 case mismatch_qualifier_vertex_flat_fragment_centroid 716 version 320 es 717 desc "Interpolation qualifier mismatch" 718 expect validation_fail 719 720 pipeline_program 721 active_stages {vertex} 722 vertex "" 723 #version 320 es 724 ${VERTEX_DECLARATIONS} 725 out flat highp vec4 v_val; 726 void main() 727 { 728 v_val = vec4(float(gl_VertexID)); 729 ${VERTEX_OUTPUT} 730 } 731 "" 732 end 733 pipeline_program 734 active_stages {fragment} 735 fragment "" 736 #version 320 es 737 ${FRAGMENT_DECLARATIONS} 738 in centroid highp vec4 v_val; 739 void main() 740 { 741 ${FRAG_COLOR} = v_val; 742 } 743 "" 744 end 745 end 746 747 case mismatch_qualifier_vertex_smooth_fragment_flat 748 version 320 es 749 desc "Interpolation qualifier mismatch" 750 expect validation_fail 751 752 pipeline_program 753 active_stages {vertex} 754 vertex "" 755 #version 320 es 756 ${VERTEX_DECLARATIONS} 757 out smooth highp vec4 v_val; 758 void main() 759 { 760 v_val = vec4(float(gl_VertexID)); 761 ${VERTEX_OUTPUT} 762 } 763 "" 764 end 765 pipeline_program 766 active_stages {fragment} 767 fragment "" 768 #version 320 es 769 ${FRAGMENT_DECLARATIONS} 770 in flat highp vec4 v_val; 771 void main() 772 { 773 ${FRAG_COLOR} = v_val; 774 } 775 "" 776 end 777 end 778 779 case mismatch_qualifier_vertex_centroid_fragment_flat 780 version 320 es 781 desc "Interpolation qualifier mismatch" 782 expect validation_fail 783 784 pipeline_program 785 active_stages {vertex} 786 vertex "" 787 #version 320 es 788 ${VERTEX_DECLARATIONS} 789 out centroid highp vec4 v_val; 790 void main() 791 { 792 v_val = vec4(float(gl_VertexID)); 793 ${VERTEX_OUTPUT} 794 } 795 "" 796 end 797 pipeline_program 798 active_stages {fragment} 799 fragment "" 800 #version 320 es 801 ${FRAGMENT_DECLARATIONS} 802 in flat highp vec4 v_val; 803 void main() 804 { 805 ${FRAG_COLOR} = v_val; 806 } 807 "" 808 end 809 end 810end 811 812group io_blocks "shader io blocks" 813 814 case missing_input 815 version 320 es 816 desc "Missing input block" 817 expect validation_fail 818 819 pipeline_program 820 active_stages {vertex} 821 vertex "" 822 #version 320 es 823 ${VERTEX_DECLARATIONS} 824 out IOBlockName 825 { 826 mediump float v_val; 827 }; 828 void main() 829 { 830 v_val = 1.0; 831 ${VERTEX_OUTPUT} 832 } 833 "" 834 end 835 pipeline_program 836 active_stages {fragment} 837 fragment "" 838 #version 320 es 839 ${FRAGMENT_DECLARATIONS} 840 void main() 841 { 842 ${FRAG_COLOR} = vec4(1.0); 843 } 844 "" 845 end 846 end 847 848 case missing_output 849 version 320 es 850 desc "Missing output block" 851 expect validation_fail 852 853 pipeline_program 854 active_stages {vertex} 855 vertex "" 856 #version 320 es 857 ${VERTEX_DECLARATIONS} 858 void main() 859 { 860 ${VERTEX_OUTPUT} 861 } 862 "" 863 end 864 pipeline_program 865 active_stages {fragment} 866 fragment "" 867 #version 320 es 868 ${FRAGMENT_DECLARATIONS} 869 in IOBlockName 870 { 871 mediump float v_val; 872 }; 873 void main() 874 { 875 ${FRAG_COLOR} = vec4(v_val); 876 } 877 "" 878 end 879 end 880 881 case mismatch_number_of_declarations 882 version 320 es 883 desc "IO-blocks do not match due to mismatch in number of declarations" 884 expect validation_fail 885 886 pipeline_program 887 active_stages {vertex} 888 vertex "" 889 #version 320 es 890 ${VERTEX_DECLARATIONS} 891 out IOBlockName 892 { 893 mediump float v_valA; 894 mediump float v_valB; 895 }; 896 void main() 897 { 898 v_valA = 1.0; 899 v_valB = 2.0; 900 ${VERTEX_OUTPUT} 901 } 902 "" 903 end 904 pipeline_program 905 active_stages {fragment} 906 fragment "" 907 #version 320 es 908 ${FRAGMENT_DECLARATIONS} 909 in IOBlockName 910 { 911 mediump float v_valA; 912 }; 913 void main() 914 { 915 ${FRAG_COLOR} = vec4(v_valA); 916 } 917 "" 918 end 919 end 920 921 case mismatch_member_order 922 version 320 es 923 desc "IO-blocks do not match due to mismatch with member declaration order" 924 expect validation_fail 925 926 pipeline_program 927 active_stages {vertex} 928 vertex "" 929 #version 320 es 930 ${VERTEX_DECLARATIONS} 931 out IOBlockName 932 { 933 mediump float v_valA; 934 mediump float v_valB; 935 }; 936 void main() 937 { 938 v_valA = 1.0; 939 v_valB = 2.0; 940 ${VERTEX_OUTPUT} 941 } 942 "" 943 end 944 pipeline_program 945 active_stages {fragment} 946 fragment "" 947 #version 320 es 948 ${FRAGMENT_DECLARATIONS} 949 in IOBlockName 950 { 951 mediump float v_valB; 952 mediump float v_valA; 953 }; 954 void main() 955 { 956 ${FRAG_COLOR} = vec4(v_valA+v_valB); 957 } 958 "" 959 end 960 end 961 962 case mismatch_member_type 963 version 320 es 964 desc "IO-blocks do not match due to mismatch with member types" 965 expect validation_fail 966 967 pipeline_program 968 active_stages {vertex} 969 vertex "" 970 #version 320 es 971 ${VERTEX_DECLARATIONS} 972 out IOBlockName 973 { 974 mediump float v_valA; 975 }; 976 void main() 977 { 978 v_valA = 1.0; 979 ${VERTEX_OUTPUT} 980 } 981 "" 982 end 983 pipeline_program 984 active_stages {fragment} 985 fragment "" 986 #version 320 es 987 ${FRAGMENT_DECLARATIONS} 988 in IOBlockName 989 { 990 mediump vec2 v_valA; 991 }; 992 void main() 993 { 994 ${FRAG_COLOR} = vec4(v_valA.xyxy); 995 } 996 "" 997 end 998 end 999 1000 case mismatch_member_name 1001 version 320 es 1002 desc "IO-blocks do not match due to mismatch with member names" 1003 expect validation_fail 1004 1005 pipeline_program 1006 active_stages {vertex} 1007 vertex "" 1008 #version 320 es 1009 ${VERTEX_DECLARATIONS} 1010 out IOBlockName 1011 { 1012 mediump float v_valA; 1013 }; 1014 void main() 1015 { 1016 v_valA = 1.0; 1017 ${VERTEX_OUTPUT} 1018 } 1019 "" 1020 end 1021 pipeline_program 1022 active_stages {fragment} 1023 fragment "" 1024 #version 320 es 1025 ${FRAGMENT_DECLARATIONS} 1026 in IOBlockName 1027 { 1028 mediump vec2 v_valB; 1029 }; 1030 void main() 1031 { 1032 ${FRAG_COLOR} = vec4(v_valB.y); 1033 } 1034 "" 1035 end 1036 end 1037 1038 case mismatch_member_precision 1039 version 320 es 1040 desc "IO-blocks do not match due to mismatch with member precisions" 1041 expect validation_fail 1042 1043 pipeline_program 1044 active_stages {vertex} 1045 vertex "" 1046 #version 320 es 1047 ${VERTEX_DECLARATIONS} 1048 out IOBlockName 1049 { 1050 mediump float v_valA; 1051 }; 1052 void main() 1053 { 1054 v_valA = 1.0; 1055 ${VERTEX_OUTPUT} 1056 } 1057 "" 1058 end 1059 pipeline_program 1060 active_stages {fragment} 1061 fragment "" 1062 #version 320 es 1063 ${FRAGMENT_DECLARATIONS} 1064 in IOBlockName 1065 { 1066 highp float v_valA; 1067 }; 1068 void main() 1069 { 1070 ${FRAG_COLOR} = vec4(v_valA); 1071 } 1072 "" 1073 end 1074 end 1075 1076 case mismatch_different_member_interpolation 1077 version 320 es 1078 desc "IO-block members do not match due to different interpolation qualifiers" 1079 expect validation_fail 1080 1081 pipeline_program 1082 active_stages {vertex} 1083 vertex "" 1084 #version 320 es 1085 ${VERTEX_DECLARATIONS} 1086 out IOBlockName 1087 { 1088 smooth out mediump float v_val; 1089 }; 1090 void main() 1091 { 1092 v_val = 1.0; 1093 ${VERTEX_OUTPUT} 1094 } 1095 "" 1096 end 1097 pipeline_program 1098 active_stages {fragment} 1099 fragment "" 1100 #version 320 es 1101 ${FRAGMENT_DECLARATIONS} 1102 in IOBlockName 1103 { 1104 flat in mediump float v_val; 1105 }; 1106 void main() 1107 { 1108 ${FRAG_COLOR} = vec4(v_val); 1109 } 1110 "" 1111 end 1112 end 1113 1114 case mismatch_member_array_size 1115 version 320 es 1116 desc "IO-blocks do not match due to mismatch with member array size" 1117 expect validation_fail 1118 1119 pipeline_program 1120 active_stages {vertex} 1121 vertex "" 1122 #version 320 es 1123 ${VERTEX_DECLARATIONS} 1124 out IOBlockName 1125 { 1126 mediump float v_val_arr[2]; 1127 }; 1128 void main() 1129 { 1130 v_val_arr[0] = 1.0; 1131 v_val_arr[1] = 2.0; 1132 ${VERTEX_OUTPUT} 1133 } 1134 "" 1135 end 1136 pipeline_program 1137 active_stages {fragment} 1138 fragment "" 1139 #version 320 es 1140 ${FRAGMENT_DECLARATIONS} 1141 in IOBlockName 1142 { 1143 mediump float v_val_arr[1]; 1144 }; 1145 void main() 1146 { 1147 ${FRAG_COLOR} = vec4(v_val_arr[0]); 1148 } 1149 "" 1150 end 1151 end 1152 1153 case match_different_member_struct_names 1154 version 320 es 1155 desc "IO-blocks match with structs with different names" 1156 expect validation_fail 1157 1158 pipeline_program 1159 active_stages {vertex} 1160 vertex "" 1161 #version 320 es 1162 ${VERTEX_DECLARATIONS} 1163 struct StructNameA 1164 { 1165 mediump float v; 1166 }; 1167 out IOBlockName 1168 { 1169 StructNameA v_val; 1170 }; 1171 1172 void main() 1173 { 1174 v_val.v = 1.0; 1175 ${VERTEX_OUTPUT} 1176 } 1177 "" 1178 end 1179 pipeline_program 1180 active_stages {fragment} 1181 fragment "" 1182 #version 320 es 1183 ${FRAGMENT_DECLARATIONS} 1184 struct StructNameB 1185 { 1186 mediump float v; 1187 }; 1188 in IOBlockName 1189 { 1190 StructNameB v_val; 1191 }; 1192 void main() 1193 { 1194 ${FRAG_COLOR} = vec4(v_val.v); 1195 } 1196 "" 1197 end 1198 end 1199 1200 case mismatch_member_struct_member_name 1201 version 320 es 1202 desc "IO-blocks do not match due to mismatch with member structs" 1203 expect validation_fail 1204 1205 pipeline_program 1206 active_stages {vertex} 1207 vertex "" 1208 #version 320 es 1209 ${VERTEX_DECLARATIONS} 1210 struct StructName 1211 { 1212 mediump float v; 1213 }; 1214 out IOBlockName 1215 { 1216 StructName v_val; 1217 }; 1218 1219 void main() 1220 { 1221 v_val.v = 1.0; 1222 ${VERTEX_OUTPUT} 1223 } 1224 "" 1225 end 1226 pipeline_program 1227 active_stages {fragment} 1228 fragment "" 1229 #version 320 es 1230 ${FRAGMENT_DECLARATIONS} 1231 struct StructName 1232 { 1233 mediump float v_alt_name; 1234 }; 1235 in IOBlockName 1236 { 1237 StructName v_val; 1238 }; 1239 void main() 1240 { 1241 ${FRAG_COLOR} = vec4(v_val.v_alt_name); 1242 } 1243 "" 1244 end 1245 end 1246 1247 case mismatch_member_struct_member_type 1248 version 320 es 1249 desc "IO-blocks do not match due to mismatch with member structs" 1250 expect validation_fail 1251 1252 pipeline_program 1253 active_stages {vertex} 1254 vertex "" 1255 #version 320 es 1256 ${VERTEX_DECLARATIONS} 1257 struct StructName 1258 { 1259 mediump float v; 1260 }; 1261 out IOBlockName 1262 { 1263 StructName v_val; 1264 }; 1265 1266 void main() 1267 { 1268 v_val.v = 1.0; 1269 ${VERTEX_OUTPUT} 1270 } 1271 "" 1272 end 1273 pipeline_program 1274 active_stages {fragment} 1275 fragment "" 1276 #version 320 es 1277 ${FRAGMENT_DECLARATIONS} 1278 struct StructName 1279 { 1280 mediump vec2 v; 1281 }; 1282 in IOBlockName 1283 { 1284 StructName v_val; 1285 }; 1286 void main() 1287 { 1288 ${FRAG_COLOR} = vec4(v_val.v.x); 1289 } 1290 "" 1291 end 1292 end 1293 1294 case mismatch_member_struct_member_precision 1295 version 320 es 1296 desc "IO-blocks do not match due to mismatch with member structs" 1297 expect validation_fail 1298 1299 pipeline_program 1300 active_stages {vertex} 1301 vertex "" 1302 #version 320 es 1303 ${VERTEX_DECLARATIONS} 1304 struct StructName 1305 { 1306 mediump float v; 1307 }; 1308 out IOBlockName 1309 { 1310 StructName v_val; 1311 }; 1312 1313 void main() 1314 { 1315 v_val.v = 1.0; 1316 ${VERTEX_OUTPUT} 1317 } 1318 "" 1319 end 1320 pipeline_program 1321 active_stages {fragment} 1322 fragment "" 1323 #version 320 es 1324 ${FRAGMENT_DECLARATIONS} 1325 struct StructName 1326 { 1327 highp float v; 1328 }; 1329 in IOBlockName 1330 { 1331 StructName v_val; 1332 }; 1333 void main() 1334 { 1335 ${FRAG_COLOR} = vec4(v_val.v); 1336 } 1337 "" 1338 end 1339 end 1340 1341 case mismatch_member_struct_member_order 1342 version 320 es 1343 desc "IO-blocks do not match due to mismatch with member structs" 1344 expect validation_fail 1345 1346 pipeline_program 1347 active_stages {vertex} 1348 vertex "" 1349 #version 320 es 1350 ${VERTEX_DECLARATIONS} 1351 struct StructName 1352 { 1353 mediump float v_a; 1354 mediump float v_b; 1355 }; 1356 out IOBlockName 1357 { 1358 StructName v_val; 1359 }; 1360 1361 void main() 1362 { 1363 v_val.v_a = 1.0; 1364 v_val.v_b = 1.0; 1365 ${VERTEX_OUTPUT} 1366 } 1367 "" 1368 end 1369 pipeline_program 1370 active_stages {fragment} 1371 fragment "" 1372 #version 320 es 1373 ${FRAGMENT_DECLARATIONS} 1374 struct StructName 1375 { 1376 mediump float v_b; 1377 mediump float v_a; 1378 }; 1379 in IOBlockName 1380 { 1381 StructName v_val; 1382 }; 1383 void main() 1384 { 1385 ${FRAG_COLOR} = vec4(v_val.v_a); 1386 } 1387 "" 1388 end 1389 end 1390 1391 case mismatch_array_size 1392 version 320 es 1393 desc "IO-blocks do not match due to mismatch with array sizes" 1394 expect validation_fail 1395 1396 pipeline_program 1397 active_stages {vertex} 1398 vertex "" 1399 #version 320 es 1400 ${VERTEX_DECLARATIONS} 1401 out IOBlockName 1402 { 1403 mediump float v_val; 1404 } ioBlock[2]; 1405 void main() 1406 { 1407 ioBlock[0].v_val = 1.0; 1408 ioBlock[1].v_val = 2.0; 1409 ${VERTEX_OUTPUT} 1410 } 1411 "" 1412 end 1413 pipeline_program 1414 active_stages {fragment} 1415 fragment "" 1416 #version 320 es 1417 ${FRAGMENT_DECLARATIONS} 1418 in IOBlockName 1419 { 1420 mediump float v_val; 1421 } ioBlock[1]; 1422 void main() 1423 { 1424 ${FRAG_COLOR} = vec4(ioBlock[0].v_val); 1425 } 1426 "" 1427 end 1428 end 1429 1430 case mismatch_variable_and_block_member_1 1431 version 320 es 1432 desc "IO-block does not match with variable" 1433 expect validation_fail 1434 1435 pipeline_program 1436 active_stages {vertex} 1437 vertex "" 1438 #version 320 es 1439 ${VERTEX_DECLARATIONS} 1440 out IOBlockName 1441 { 1442 mediump float v_val; 1443 }; 1444 1445 void main() 1446 { 1447 v_val = 1.0; 1448 ${VERTEX_OUTPUT} 1449 } 1450 "" 1451 end 1452 pipeline_program 1453 active_stages {fragment} 1454 fragment "" 1455 #version 320 es 1456 ${FRAGMENT_DECLARATIONS} 1457 in mediump float v_val; 1458 void main() 1459 { 1460 ${FRAG_COLOR} = vec4(v_val); 1461 } 1462 "" 1463 end 1464 end 1465 1466 case mismatch_variable_and_block_member_2 1467 version 320 es 1468 desc "IO-block does not match with variable" 1469 expect validation_fail 1470 1471 pipeline_program 1472 active_stages {vertex} 1473 vertex "" 1474 #version 320 es 1475 ${VERTEX_DECLARATIONS} 1476 out VariableAndBlockName 1477 { 1478 mediump float v_val; 1479 }; 1480 1481 void main() 1482 { 1483 v_val = 1.0; 1484 ${VERTEX_OUTPUT} 1485 } 1486 "" 1487 end 1488 pipeline_program 1489 active_stages {fragment} 1490 fragment "" 1491 #version 320 es 1492 ${FRAGMENT_DECLARATIONS} 1493 in mediump float VariableAndBlockName; 1494 void main() 1495 { 1496 ${FRAG_COLOR} = vec4(VariableAndBlockName); 1497 } 1498 "" 1499 end 1500 end 1501end 1502