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