2 group varying "Default block varying matching"
6 desc "Variable has no matching input"
10 active_stages {vertex}
13 ${VERTEX_DECLARATIONS}
14 out mediump float v_val;
15 out mediump float v_val_no_such_input;
18 v_val = float(gl_VertexID);
19 v_val_no_such_input = 1.0;
25 active_stages {fragment}
28 ${FRAGMENT_DECLARATIONS}
29 in mediump float v_val;
32 ${FRAG_COLOR} = vec4(v_val);
40 desc "Variable has no matching output"
41 expect validation_fail
44 active_stages {vertex}
47 ${VERTEX_DECLARATIONS}
48 out mediump float v_val;
51 v_val = float(gl_VertexID);
57 active_stages {fragment}
60 ${FRAGMENT_DECLARATIONS}
61 in mediump float v_val;
62 in mediump float v_val_no_such_output;
65 ${FRAG_COLOR} = vec4(v_val + v_val_no_such_output);
73 desc "Variable type mismatch"
74 expect validation_fail
77 active_stages {vertex}
80 ${VERTEX_DECLARATIONS}
81 out mediump vec3 v_val;
84 v_val = vec3(float(gl_VertexID));
90 active_stages {fragment}
93 ${FRAGMENT_DECLARATIONS}
94 in mediump vec4 v_val;
97 ${FRAG_COLOR} = v_val;
103 case mismatch_precision
105 desc "Variable precision mismatch"
106 expect validation_fail
109 active_stages {vertex}
112 ${VERTEX_DECLARATIONS}
113 out mediump float v_val;
116 v_val = float(gl_VertexID);
122 active_stages {fragment}
125 ${FRAGMENT_DECLARATIONS}
126 in highp float v_val;
129 ${FRAG_COLOR} = vec4(v_val);
135 case mismatch_explicit_location_type
137 desc "Variable type mismatch, explicit varying locations"
138 expect validation_fail
141 active_stages {vertex}
144 ${VERTEX_DECLARATIONS}
145 layout(location = 3) out mediump vec4 v_val;
148 v_val = vec4(float(gl_VertexID));
154 active_stages {fragment}
157 ${FRAGMENT_DECLARATIONS}
158 layout(location = 3) in mediump vec2 v_val;
161 ${FRAG_COLOR} = v_val.xxyy;
167 case mismatch_explicit_location_precision
169 desc "Variable precision mismatch, explicit varying locations"
170 expect validation_fail
173 active_stages {vertex}
176 ${VERTEX_DECLARATIONS}
177 layout(location = 3) out mediump float v_val;
180 v_val = float(gl_VertexID);
186 active_stages {fragment}
189 ${FRAGMENT_DECLARATIONS}
190 layout(location = 3) in highp float v_val;
193 ${FRAG_COLOR} = vec4(v_val);
199 case mismatch_explicit_location
201 desc "Variable location mismatch"
202 expect validation_fail
205 active_stages {vertex}
208 ${VERTEX_DECLARATIONS}
209 layout(location = 3) out mediump float v_val;
212 v_val = float(gl_VertexID);
218 active_stages {fragment}
221 ${FRAGMENT_DECLARATIONS}
222 layout(location = 4) in mediump float v_val;
225 ${FRAG_COLOR} = vec4(v_val);
231 case mismatch_implicit_explicit_location_1
233 desc "Variable location mismatch"
234 expect validation_fail
237 active_stages {vertex}
240 ${VERTEX_DECLARATIONS}
241 out mediump float v_val;
244 v_val = float(gl_VertexID);
250 active_stages {fragment}
253 ${FRAGMENT_DECLARATIONS}
254 layout(location = 3) in mediump float v_val;
257 ${FRAG_COLOR} = vec4(v_val);
263 case mismatch_implicit_explicit_location_2
265 desc "Variable location mismatch"
266 expect validation_fail
269 active_stages {vertex}
272 ${VERTEX_DECLARATIONS}
273 layout(location = 3) out mediump float v_val;
276 v_val = float(gl_VertexID);
282 active_stages {fragment}
285 ${FRAGMENT_DECLARATIONS}
286 in mediump float v_val;
287 layout(location = 3) in mediump float v_val_other_name;
290 ${FRAG_COLOR} = vec4(v_val + v_val_other_name);
296 case mismatch_implicit_explicit_location_3
298 desc "Variable location mismatch"
299 expect validation_fail
302 active_stages {vertex}
305 ${VERTEX_DECLARATIONS}
306 out mediump float v_val;
307 layout(location = 3) out mediump float v_val_other_name;
310 v_val = float(gl_VertexID);
311 v_val_other_name = 1.0;
317 active_stages {fragment}
320 ${FRAGMENT_DECLARATIONS}
321 layout(location = 3) in mediump float v_val;
324 ${FRAG_COLOR} = vec4(v_val);
330 case mismatch_different_struct_names
332 desc "Variable struct names different but otherwise identical"
333 expect validation_fail
336 active_stages {vertex}
339 ${VERTEX_DECLARATIONS}
340 struct StructureNameA
342 mediump float member;
344 out StructureNameA v_val;
347 v_val.member = float(gl_VertexID);
353 active_stages {fragment}
356 ${FRAGMENT_DECLARATIONS}
357 struct StructureNameB
359 mediump float member;
361 in StructureNameB v_val;
364 // should always produce white
365 ${FRAG_COLOR} = (v_val.member > -1.0) ? (vec4(1.0)) : (vec4(0.0));
371 case mismatch_struct_member_name
373 desc "Struct member name mismatch"
374 expect validation_fail
377 active_stages {vertex}
380 ${VERTEX_DECLARATIONS}
383 mediump float member;
385 out StructureName v_val;
388 v_val.member = float(gl_VertexID);
394 active_stages {fragment}
397 ${FRAGMENT_DECLARATIONS}
400 mediump float member_different_name;
402 in StructureName v_val;
405 ${FRAG_COLOR} = vec4(v_val.member_different_name);
411 case mismatch_struct_member_type
413 desc "Struct member type mismatch"
414 expect validation_fail
417 active_stages {vertex}
420 ${VERTEX_DECLARATIONS}
423 mediump float member;
425 out StructureName v_val;
428 v_val.member = float(gl_VertexID);
434 active_stages {fragment}
437 ${FRAGMENT_DECLARATIONS}
442 in StructureName v_val;
445 ${FRAG_COLOR} = vec4(v_val.member.x);
451 case mismatch_struct_member_precision
453 desc "Struct member precision mismatch"
454 expect validation_fail
457 active_stages {vertex}
460 ${VERTEX_DECLARATIONS}
463 mediump float member;
465 out StructureName v_val;
468 v_val.member = float(gl_VertexID);
474 active_stages {fragment}
477 ${FRAGMENT_DECLARATIONS}
482 in StructureName v_val;
485 ${FRAG_COLOR} = vec4(v_val.member);
491 case mismatch_struct_member_order
493 desc "Struct member order mismatch"
494 expect validation_fail
497 active_stages {vertex}
500 ${VERTEX_DECLARATIONS}
503 mediump float memberA;
504 mediump float memberB;
506 out StructureName v_val;
509 v_val.memberA = float(gl_VertexID);
516 active_stages {fragment}
519 ${FRAGMENT_DECLARATIONS}
522 mediump float memberB;
523 mediump float memberA;
525 in StructureName v_val;
528 ${FRAG_COLOR} = vec4(v_val.memberA + v_val.memberB);
534 case mismatch_array_element_type
536 desc "Array element type mismatch"
537 expect validation_fail
540 active_stages {vertex}
543 ${VERTEX_DECLARATIONS}
544 out mediump float v_val[2];
554 active_stages {fragment}
557 ${FRAGMENT_DECLARATIONS}
558 in mediump vec2 v_val[2];
561 ${FRAG_COLOR} = vec4(v_val[0].x + v_val[1].y);
567 case mismatch_array_length
569 desc "Array length mismatch"
570 expect validation_fail
573 active_stages {vertex}
576 ${VERTEX_DECLARATIONS}
577 out mediump float v_val[2];
587 active_stages {fragment}
590 ${FRAGMENT_DECLARATIONS}
591 in mediump float v_val[3];
594 ${FRAG_COLOR} = vec4(v_val[0] + v_val[1] + v_val[2]);
600 case mismatch_array_precision
602 desc "Array length mismatch"
603 expect validation_fail
606 active_stages {vertex}
609 ${VERTEX_DECLARATIONS}
610 out mediump float v_val[2];
620 active_stages {fragment}
623 ${FRAGMENT_DECLARATIONS}
624 in highp float v_val[2];
627 ${FRAG_COLOR} = vec4(v_val[0] + v_val[1]);
633 case mismatch_qualifier_vertex_flat_fragment_none
635 desc "Interpolation qualifier mismatch"
636 expect validation_fail
639 active_stages {vertex}
642 ${VERTEX_DECLARATIONS}
643 out flat highp vec4 v_val;
646 v_val = vec4(float(gl_VertexID));
652 active_stages {fragment}
655 ${FRAGMENT_DECLARATIONS}
659 ${FRAG_COLOR} = v_val;
665 case mismatch_qualifier_vertex_flat_fragment_smooth
667 desc "Interpolation qualifier mismatch"
668 expect validation_fail
671 active_stages {vertex}
674 ${VERTEX_DECLARATIONS}
675 out flat highp vec4 v_val;
678 v_val = vec4(float(gl_VertexID));
684 active_stages {fragment}
687 ${FRAGMENT_DECLARATIONS}
688 in smooth highp vec4 v_val;
691 ${FRAG_COLOR} = v_val;
697 case mismatch_qualifier_vertex_flat_fragment_centroid
699 desc "Interpolation qualifier mismatch"
700 expect validation_fail
703 active_stages {vertex}
706 ${VERTEX_DECLARATIONS}
707 out flat highp vec4 v_val;
710 v_val = vec4(float(gl_VertexID));
716 active_stages {fragment}
719 ${FRAGMENT_DECLARATIONS}
720 in centroid highp vec4 v_val;
723 ${FRAG_COLOR} = v_val;
729 case mismatch_qualifier_vertex_smooth_fragment_flat
731 desc "Interpolation qualifier mismatch"
732 expect validation_fail
735 active_stages {vertex}
738 ${VERTEX_DECLARATIONS}
739 out smooth highp vec4 v_val;
742 v_val = vec4(float(gl_VertexID));
748 active_stages {fragment}
751 ${FRAGMENT_DECLARATIONS}
752 in flat highp vec4 v_val;
755 ${FRAG_COLOR} = v_val;
761 case mismatch_qualifier_vertex_centroid_fragment_flat
763 desc "Interpolation qualifier mismatch"
764 expect validation_fail
767 active_stages {vertex}
770 ${VERTEX_DECLARATIONS}
771 out centroid highp vec4 v_val;
774 v_val = vec4(float(gl_VertexID));
780 active_stages {fragment}
783 ${FRAGMENT_DECLARATIONS}
784 in flat highp vec4 v_val;
787 ${FRAG_COLOR} = v_val;
794 group io_blocks "shader io blocks"
798 desc "Missing input block"
799 expect validation_fail
802 active_stages {vertex}
803 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
806 ${VERTEX_DECLARATIONS}
819 active_stages {fragment}
820 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
823 ${FRAGMENT_DECLARATIONS}
826 ${FRAG_COLOR} = vec4(1.0);
834 desc "Missing output block"
835 expect validation_fail
838 active_stages {vertex}
839 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
842 ${VERTEX_DECLARATIONS}
850 active_stages {fragment}
851 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
854 ${FRAGMENT_DECLARATIONS}
861 ${FRAG_COLOR} = vec4(v_val);
867 case mismatch_number_of_declarations
869 desc "IO-blocks do not match due to mismatch in number of declarations"
870 expect validation_fail
873 active_stages {vertex}
874 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
877 ${VERTEX_DECLARATIONS}
880 mediump float v_valA;
881 mediump float v_valB;
892 active_stages {fragment}
893 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
896 ${FRAGMENT_DECLARATIONS}
899 mediump float v_valA;
903 ${FRAG_COLOR} = vec4(v_valA);
909 case mismatch_member_order
911 desc "IO-blocks do not match due to mismatch with member declaration order"
912 expect validation_fail
915 active_stages {vertex}
916 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
919 ${VERTEX_DECLARATIONS}
922 mediump float v_valA;
923 mediump float v_valB;
934 active_stages {fragment}
935 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
938 ${FRAGMENT_DECLARATIONS}
941 mediump float v_valB;
942 mediump float v_valA;
946 ${FRAG_COLOR} = vec4(v_valA+v_valB);
952 case mismatch_member_type
954 desc "IO-blocks do not match due to mismatch with member types"
955 expect validation_fail
958 active_stages {vertex}
959 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
962 ${VERTEX_DECLARATIONS}
965 mediump float v_valA;
975 active_stages {fragment}
976 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
979 ${FRAGMENT_DECLARATIONS}
986 ${FRAG_COLOR} = vec4(v_valA.xyxy);
992 case mismatch_member_name
994 desc "IO-blocks do not match due to mismatch with member names"
995 expect validation_fail
998 active_stages {vertex}
999 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1002 ${VERTEX_DECLARATIONS}
1005 mediump float v_valA;
1015 active_stages {fragment}
1016 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1019 ${FRAGMENT_DECLARATIONS}
1022 mediump vec2 v_valB;
1026 ${FRAG_COLOR} = vec4(v_valB.y);
1032 case mismatch_member_precision
1034 desc "IO-blocks do not match due to mismatch with member precisions"
1035 expect validation_fail
1038 active_stages {vertex}
1039 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1042 ${VERTEX_DECLARATIONS}
1045 mediump float v_valA;
1055 active_stages {fragment}
1056 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1059 ${FRAGMENT_DECLARATIONS}
1066 ${FRAG_COLOR} = vec4(v_valA);
1072 case mismatch_different_member_interpolation
1074 desc "IO-block members do not match due to different interpolation qualifiers"
1075 expect validation_fail
1078 active_stages {vertex}
1079 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1082 ${VERTEX_DECLARATIONS}
1085 smooth out mediump float v_val;
1095 active_stages {fragment}
1096 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1099 ${FRAGMENT_DECLARATIONS}
1102 flat in mediump float v_val;
1106 ${FRAG_COLOR} = vec4(v_val);
1112 case mismatch_member_array_size
1114 desc "IO-blocks do not match due to mismatch with member array size"
1115 expect validation_fail
1118 active_stages {vertex}
1119 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1122 ${VERTEX_DECLARATIONS}
1125 mediump float v_val_arr[2];
1136 active_stages {fragment}
1137 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1140 ${FRAGMENT_DECLARATIONS}
1143 mediump float v_val_arr[1];
1147 ${FRAG_COLOR} = vec4(v_val_arr[0]);
1153 case mismatch_different_member_struct_names
1155 desc "IO-blocks match with structs with different names"
1156 expect validation_fail
1159 active_stages {vertex}
1160 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1163 ${VERTEX_DECLARATIONS}
1181 active_stages {fragment}
1182 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1185 ${FRAGMENT_DECLARATIONS}
1196 ${FRAG_COLOR} = vec4(v_val.v);
1202 case mismatch_member_struct_member_name
1204 desc "IO-blocks do not match due to mismatch with member structs"
1205 expect validation_fail
1208 active_stages {vertex}
1209 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1212 ${VERTEX_DECLARATIONS}
1230 active_stages {fragment}
1231 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1234 ${FRAGMENT_DECLARATIONS}
1237 mediump float v_alt_name;
1245 ${FRAG_COLOR} = vec4(v_val.v_alt_name);
1251 case mismatch_member_struct_member_type
1253 desc "IO-blocks do not match due to mismatch with member structs"
1254 expect validation_fail
1257 active_stages {vertex}
1258 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1261 ${VERTEX_DECLARATIONS}
1279 active_stages {fragment}
1280 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1283 ${FRAGMENT_DECLARATIONS}
1294 ${FRAG_COLOR} = vec4(v_val.v.x);
1300 case mismatch_member_struct_member_precision
1302 desc "IO-blocks do not match due to mismatch with member structs"
1303 expect validation_fail
1306 active_stages {vertex}
1307 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1310 ${VERTEX_DECLARATIONS}
1328 active_stages {fragment}
1329 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1332 ${FRAGMENT_DECLARATIONS}
1343 ${FRAG_COLOR} = vec4(v_val.v);
1349 case mismatch_member_struct_member_order
1351 desc "IO-blocks do not match due to mismatch with member structs"
1352 expect validation_fail
1355 active_stages {vertex}
1356 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1359 ${VERTEX_DECLARATIONS}
1379 active_stages {fragment}
1380 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1383 ${FRAGMENT_DECLARATIONS}
1395 ${FRAG_COLOR} = vec4(v_val.v_a);
1401 case mismatch_array_size
1403 desc "IO-blocks do not match due to mismatch with array sizes"
1404 expect validation_fail
1407 active_stages {vertex}
1408 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1411 ${VERTEX_DECLARATIONS}
1414 mediump float v_val;
1418 ioBlock[0].v_val = 1.0;
1419 ioBlock[1].v_val = 2.0;
1425 active_stages {fragment}
1426 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1429 ${FRAGMENT_DECLARATIONS}
1432 mediump float v_val;
1436 ${FRAG_COLOR} = vec4(ioBlock[0].v_val);
1442 case mismatch_variable_and_block_member_1
1444 desc "IO-block does not match with variable"
1445 expect validation_fail
1448 active_stages {vertex}
1449 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1452 ${VERTEX_DECLARATIONS}
1455 mediump float v_val;
1466 active_stages {fragment}
1467 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1470 ${FRAGMENT_DECLARATIONS}
1471 in mediump float v_val;
1474 ${FRAG_COLOR} = vec4(v_val);
1480 case mismatch_variable_and_block_member_2
1482 desc "IO-block does not match with variable"
1483 expect validation_fail
1486 active_stages {vertex}
1487 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1490 ${VERTEX_DECLARATIONS}
1491 out VariableAndBlockName
1493 mediump float v_val;
1504 active_stages {fragment}
1505 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1508 ${FRAGMENT_DECLARATIONS}
1509 in mediump float VariableAndBlockName;
1512 ${FRAG_COLOR} = vec4(VariableAndBlockName);