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 match_different_struct_names
332 desc "Variable struct names different but otherwise identical"
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]);
634 group io_blocks "shader io blocks"
638 desc "Missing input block"
639 expect validation_fail
642 active_stages {vertex}
643 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
646 ${VERTEX_DECLARATIONS}
659 active_stages {fragment}
660 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
663 ${FRAGMENT_DECLARATIONS}
666 ${FRAG_COLOR} = vec4(1.0);
674 desc "Missing output block"
675 expect validation_fail
678 active_stages {vertex}
679 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
682 ${VERTEX_DECLARATIONS}
690 active_stages {fragment}
691 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
694 ${FRAGMENT_DECLARATIONS}
701 ${FRAG_COLOR} = vec4(v_val);
707 case mismatch_number_of_declarations
709 desc "IO-blocks do not match due to mismatch in number of declarations"
710 expect validation_fail
713 active_stages {vertex}
714 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
717 ${VERTEX_DECLARATIONS}
720 mediump float v_valA;
721 mediump float v_valB;
732 active_stages {fragment}
733 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
736 ${FRAGMENT_DECLARATIONS}
739 mediump float v_valA;
743 ${FRAG_COLOR} = vec4(v_valA);
749 case mismatch_member_order
751 desc "IO-blocks do not match due to mismatch with member declaration order"
752 expect validation_fail
755 active_stages {vertex}
756 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
759 ${VERTEX_DECLARATIONS}
762 mediump float v_valA;
763 mediump float v_valB;
774 active_stages {fragment}
775 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
778 ${FRAGMENT_DECLARATIONS}
781 mediump float v_valB;
782 mediump float v_valA;
786 ${FRAG_COLOR} = vec4(v_valA+v_valB);
792 case mismatch_member_type
794 desc "IO-blocks do not match due to mismatch with member types"
795 expect validation_fail
798 active_stages {vertex}
799 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
802 ${VERTEX_DECLARATIONS}
805 mediump float v_valA;
815 active_stages {fragment}
816 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
819 ${FRAGMENT_DECLARATIONS}
826 ${FRAG_COLOR} = vec4(v_valA.xyxy);
832 case mismatch_member_name
834 desc "IO-blocks do not match due to mismatch with member names"
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}
845 mediump float v_valA;
855 active_stages {fragment}
856 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
859 ${FRAGMENT_DECLARATIONS}
866 ${FRAG_COLOR} = vec4(v_valB.y);
872 case mismatch_member_precision
874 desc "IO-blocks do not match due to mismatch with member precisions"
875 expect validation_fail
878 active_stages {vertex}
879 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
882 ${VERTEX_DECLARATIONS}
885 mediump float v_valA;
895 active_stages {fragment}
896 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
899 ${FRAGMENT_DECLARATIONS}
906 ${FRAG_COLOR} = vec4(v_valA);
912 case match_different_member_interpolation
914 desc "IO-block members match with different interpolation qualifiers"
918 active_stages {vertex}
919 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
922 ${VERTEX_DECLARATIONS}
925 smooth out mediump float v_val;
935 active_stages {fragment}
936 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
939 ${FRAGMENT_DECLARATIONS}
942 flat in mediump float v_val;
946 ${FRAG_COLOR} = vec4(v_val);
952 case mismatch_member_array_size
954 desc "IO-blocks do not match due to mismatch with member array size"
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_val_arr[2];
976 active_stages {fragment}
977 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
980 ${FRAGMENT_DECLARATIONS}
983 mediump float v_val_arr[1];
987 ${FRAG_COLOR} = vec4(v_val_arr[0]);
993 case match_different_member_struct_names
995 desc "IO-blocks match with structs with different names"
999 active_stages {vertex}
1000 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1003 ${VERTEX_DECLARATIONS}
1021 active_stages {fragment}
1022 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1025 ${FRAGMENT_DECLARATIONS}
1036 ${FRAG_COLOR} = vec4(v_val.v);
1042 case mismatch_member_struct_member_name
1044 desc "IO-blocks do not match due to mismatch with member structs"
1045 expect validation_fail
1048 active_stages {vertex}
1049 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1052 ${VERTEX_DECLARATIONS}
1070 active_stages {fragment}
1071 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1074 ${FRAGMENT_DECLARATIONS}
1077 mediump float v_alt_name;
1085 ${FRAG_COLOR} = vec4(v_val.v_alt_name);
1091 case mismatch_member_struct_member_type
1093 desc "IO-blocks do not match due to mismatch with member structs"
1094 expect validation_fail
1097 active_stages {vertex}
1098 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1101 ${VERTEX_DECLARATIONS}
1119 active_stages {fragment}
1120 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1123 ${FRAGMENT_DECLARATIONS}
1134 ${FRAG_COLOR} = vec4(v_val.v.x);
1140 case mismatch_member_struct_member_precision
1142 desc "IO-blocks do not match due to mismatch with member structs"
1143 expect validation_fail
1146 active_stages {vertex}
1147 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1150 ${VERTEX_DECLARATIONS}
1168 active_stages {fragment}
1169 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1172 ${FRAGMENT_DECLARATIONS}
1183 ${FRAG_COLOR} = vec4(v_val.v);
1189 case mismatch_member_struct_member_order
1191 desc "IO-blocks do not match due to mismatch with member structs"
1192 expect validation_fail
1195 active_stages {vertex}
1196 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1199 ${VERTEX_DECLARATIONS}
1219 active_stages {fragment}
1220 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1223 ${FRAGMENT_DECLARATIONS}
1235 ${FRAG_COLOR} = vec4(v_val.v_a);
1241 case mismatch_array_size
1243 desc "IO-blocks do not match due to mismatch with array sizes"
1244 expect validation_fail
1247 active_stages {vertex}
1248 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1251 ${VERTEX_DECLARATIONS}
1254 mediump float v_val;
1258 ioBlock[0].v_val = 1.0;
1259 ioBlock[1].v_val = 2.0;
1265 active_stages {fragment}
1266 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1269 ${FRAGMENT_DECLARATIONS}
1272 mediump float v_val;
1276 ${FRAG_COLOR} = vec4(ioBlock[0].v_val);
1282 case mismatch_variable_and_block_member_1
1284 desc "IO-block does not match with variable"
1285 expect validation_fail
1288 active_stages {vertex}
1289 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1292 ${VERTEX_DECLARATIONS}
1295 mediump float v_val;
1306 active_stages {fragment}
1307 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1310 ${FRAGMENT_DECLARATIONS}
1311 in mediump float v_val;
1314 ${FRAG_COLOR} = vec4(v_val);
1320 case mismatch_variable_and_block_member_2
1322 desc "IO-block does not match with variable"
1323 expect validation_fail
1326 active_stages {vertex}
1327 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1330 ${VERTEX_DECLARATIONS}
1331 out VariableAndBlockName
1333 mediump float v_val;
1344 active_stages {fragment}
1345 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1348 ${FRAGMENT_DECLARATIONS}
1349 in mediump float VariableAndBlockName;
1352 ${FRAG_COLOR} = vec4(VariableAndBlockName);