2 group varying "Varying linkage"
5 case input_type_mismatch
7 desc "Tessellation control shader input type mismatch"
9 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
12 input float in0 = 1.0;
13 output float out0 = 1.0;
17 ${VERTEX_DECLARATIONS}
18 out mediump float tc_in;
25 tessellation_control ""
27 ${TESSELLATION_CONTROL_DECLARATIONS}
28 in mediump vec2 tc_in[];
29 out mediump float tc_out[];
32 tc_out[gl_InvocationID] = tc_in[gl_InvocationID].x;
33 ${TESSELLATION_CONTROL_OUTPUT}
36 tessellation_evaluation ""
38 ${TESSELLATION_EVALUATION_DECLARATIONS}
39 in mediump float tc_out[];
40 out mediump float te_out;
44 ${TESSELLATION_EVALUATION_OUTPUT}
49 precision mediump float;
50 ${FRAGMENT_DECLARATIONS}
51 in mediump float te_out;
60 case output_type_mismatch
62 desc "Tessellation evaluation shader output type mismatch"
64 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
67 input float in0 = 1.0;
68 output float out0 = 1.0;
72 ${VERTEX_DECLARATIONS}
73 out mediump float tc_in;
80 tessellation_control ""
82 ${TESSELLATION_CONTROL_DECLARATIONS}
83 in mediump float tc_in[];
84 out mediump float tc_out[];
87 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
88 ${TESSELLATION_CONTROL_OUTPUT}
91 tessellation_evaluation ""
93 ${TESSELLATION_EVALUATION_DECLARATIONS}
94 in mediump float tc_out[];
95 out mediump float te_out;
99 ${TESSELLATION_EVALUATION_OUTPUT}
104 precision mediump float;
105 ${FRAGMENT_DECLARATIONS}
106 in mediump vec2 te_out;
109 out0 = te_out.x + te_out.y;
115 case internal_type_mismatch
117 desc "Tessellation control and evaluation shader varying type mismatch"
119 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
122 input float in0 = 1.0;
123 output float out0 = 1.0;
127 ${VERTEX_DECLARATIONS}
128 out mediump float tc_in;
135 tessellation_control ""
137 ${TESSELLATION_CONTROL_DECLARATIONS}
138 in mediump float tc_in[];
139 out mediump float tc_out[];
142 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
143 ${TESSELLATION_CONTROL_OUTPUT}
146 tessellation_evaluation ""
148 ${TESSELLATION_EVALUATION_DECLARATIONS}
149 in mediump vec2 tc_out[];
150 out mediump float te_out;
153 te_out = tc_out[2].x + tc_out[0].y;
154 ${TESSELLATION_EVALUATION_OUTPUT}
159 precision mediump float;
160 ${FRAGMENT_DECLARATIONS}
161 in mediump float te_out;
170 case input_different_precision
172 desc "Tessellation control shader input precisions different"
173 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
176 input float in0 = 1.0;
177 output float out0 = 1.0;
181 ${VERTEX_DECLARATIONS}
182 out highp float tc_in;
189 tessellation_control ""
191 ${TESSELLATION_CONTROL_DECLARATIONS}
192 in lowp float tc_in[];
193 out mediump float tc_out[];
196 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
197 ${TESSELLATION_CONTROL_OUTPUT}
200 tessellation_evaluation ""
202 ${TESSELLATION_EVALUATION_DECLARATIONS}
203 in mediump float tc_out[];
204 out mediump float te_out;
208 ${TESSELLATION_EVALUATION_OUTPUT}
213 precision mediump float;
214 ${FRAGMENT_DECLARATIONS}
215 in mediump float te_out;
224 case output_different_precision
226 desc "Tessellation evaluation shader output precisions different"
227 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
230 input float in0 = 1.0;
231 output float out0 = 1.0;
235 ${VERTEX_DECLARATIONS}
236 out mediump float tc_in;
243 tessellation_control ""
245 ${TESSELLATION_CONTROL_DECLARATIONS}
246 in mediump float tc_in[];
247 out mediump float tc_out[];
250 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
251 ${TESSELLATION_CONTROL_OUTPUT}
254 tessellation_evaluation ""
256 ${TESSELLATION_EVALUATION_DECLARATIONS}
257 in mediump float tc_out[];
258 out highp float te_out;
262 ${TESSELLATION_EVALUATION_OUTPUT}
267 precision mediump float;
268 ${FRAGMENT_DECLARATIONS}
269 in lowp float te_out;
278 case internal_different_precision
280 desc "Tessellation control and evaluation shader varying precisions different"
281 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
284 input float in0 = 1.0;
285 output float out0 = 1.0;
289 ${VERTEX_DECLARATIONS}
290 out mediump float tc_in;
297 tessellation_control ""
299 ${TESSELLATION_CONTROL_DECLARATIONS}
300 in mediump float tc_in[];
301 out highp float tc_out[];
304 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
305 ${TESSELLATION_CONTROL_OUTPUT}
308 tessellation_evaluation ""
310 ${TESSELLATION_EVALUATION_DECLARATIONS}
311 in lowp float tc_out[];
312 out mediump float te_out;
316 ${TESSELLATION_EVALUATION_OUTPUT}
321 precision mediump float;
322 ${FRAGMENT_DECLARATIONS}
323 in mediump float te_out;
332 case input_no_declaration
334 desc "Tessellation control shader input with no matching output"
336 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
339 input float in0 = 1.0;
340 output float out0 = 1.0;
344 ${VERTEX_DECLARATIONS}
350 tessellation_control ""
352 ${TESSELLATION_CONTROL_DECLARATIONS}
353 in mediump float tc_in[];
354 out mediump float tc_out[];
357 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
358 ${TESSELLATION_CONTROL_OUTPUT}
361 tessellation_evaluation ""
363 ${TESSELLATION_EVALUATION_DECLARATIONS}
364 in mediump float tc_out[];
365 out mediump float te_out;
369 ${TESSELLATION_EVALUATION_OUTPUT}
374 precision mediump float;
375 ${FRAGMENT_DECLARATIONS}
376 in mediump float te_out;
385 case output_no_declaration
387 desc "Tessellation evaluation shader without output for an fragment shader input"
389 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
392 output float out0 = 1.0;
396 ${VERTEX_DECLARATIONS}
402 tessellation_control ""
404 ${TESSELLATION_CONTROL_DECLARATIONS}
407 ${TESSELLATION_CONTROL_OUTPUT}
410 tessellation_evaluation ""
412 ${TESSELLATION_EVALUATION_DECLARATIONS}
415 ${TESSELLATION_EVALUATION_OUTPUT}
420 precision mediump float;
421 ${FRAGMENT_DECLARATIONS}
422 in mediump float te_out;
431 case internal_no_declaration
433 desc "Tessellation evaluation shader input without matching output"
435 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
438 output float out0 = 1.0;
442 ${VERTEX_DECLARATIONS}
448 tessellation_control ""
450 ${TESSELLATION_CONTROL_DECLARATIONS}
453 ${TESSELLATION_CONTROL_OUTPUT}
456 tessellation_evaluation ""
458 ${TESSELLATION_EVALUATION_DECLARATIONS}
459 in mediump float tc_out[];
460 out mediump float te_out;
464 ${TESSELLATION_EVALUATION_OUTPUT}
469 precision mediump float;
470 ${FRAGMENT_DECLARATIONS}
471 in mediump float te_out;
480 case input_superfluous_declaration
482 desc "Tessellation control has no input for an output"
483 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
486 input float in0 = 1.0;
487 output float out0 = 1.0;
491 ${VERTEX_DECLARATIONS}
492 out mediump float tc_in;
493 out mediump float tc_in_unused;
497 tc_in_unused = in0 + 1.0;
501 tessellation_control ""
503 ${TESSELLATION_CONTROL_DECLARATIONS}
504 in mediump float tc_in[];
505 out mediump float tc_out[];
508 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
509 ${TESSELLATION_CONTROL_OUTPUT}
512 tessellation_evaluation ""
514 ${TESSELLATION_EVALUATION_DECLARATIONS}
515 in mediump float tc_out[];
516 out mediump float te_out;
520 ${TESSELLATION_EVALUATION_OUTPUT}
525 precision mediump float;
526 ${FRAGMENT_DECLARATIONS}
527 in mediump float te_out;
536 case output_superfluous_declaration
538 desc "Tessellation has an output without a matching input"
539 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
542 input float in0 = 1.0;
543 output float out0 = 1.0;
547 ${VERTEX_DECLARATIONS}
548 out mediump float tc_in;
555 tessellation_control ""
557 ${TESSELLATION_CONTROL_DECLARATIONS}
558 in mediump float tc_in[];
559 out mediump float tc_out[];
562 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
563 ${TESSELLATION_CONTROL_OUTPUT}
566 tessellation_evaluation ""
568 ${TESSELLATION_EVALUATION_DECLARATIONS}
569 in mediump float tc_out[];
570 out mediump float te_out;
571 out mediump float te_out_unused;
575 te_out_unused = tc_out[0];
576 ${TESSELLATION_EVALUATION_OUTPUT}
581 precision mediump float;
582 ${FRAGMENT_DECLARATIONS}
583 in mediump float te_out;
592 case internal_superfluous_declaration
594 desc "Tessellation control has an output without a matching input"
595 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
598 input float in0 = 1.0;
599 output float out0 = 1.0;
603 ${VERTEX_DECLARATIONS}
604 out mediump float tc_in;
611 tessellation_control ""
613 ${TESSELLATION_CONTROL_DECLARATIONS}
614 in mediump float tc_in[];
615 out mediump float tc_out[];
616 out mediump float tc_out_unused[];
619 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
620 tc_out_unused[gl_InvocationID] = tc_in[gl_InvocationID] + 1.0;
621 ${TESSELLATION_CONTROL_OUTPUT}
624 tessellation_evaluation ""
626 ${TESSELLATION_EVALUATION_DECLARATIONS}
627 in mediump float tc_out[];
628 out mediump float te_out;
632 ${TESSELLATION_EVALUATION_OUTPUT}
637 precision mediump float;
638 ${FRAGMENT_DECLARATIONS}
639 in mediump float te_out;
648 case vertex_fragment_same_varying_name_1
650 desc "Tessellation control has an output without a matching input"
651 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
654 input float in0 = 1.0;
655 output float out0 = 2.0;
659 ${VERTEX_DECLARATIONS}
660 out mediump float sharedVaringName;
663 sharedVaringName = in0;
667 tessellation_control ""
669 ${TESSELLATION_CONTROL_DECLARATIONS}
670 in mediump float sharedVaringName[];
671 out mediump float tc_out[];
674 tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID];
675 ${TESSELLATION_CONTROL_OUTPUT}
678 tessellation_evaluation ""
680 ${TESSELLATION_EVALUATION_DECLARATIONS}
681 in mediump float tc_out[];
682 out mediump float sharedVaringName;
685 sharedVaringName = 2.0 * tc_out[2];
686 ${TESSELLATION_EVALUATION_OUTPUT}
691 precision mediump float;
692 ${FRAGMENT_DECLARATIONS}
693 in mediump float sharedVaringName;
696 out0 = sharedVaringName;
702 case vertex_fragment_same_varying_name_2
704 desc "Tessellation control has an output without a matching input"
705 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
708 input vec2 in0 = vec2(1.0, 3.0);
709 output float out0 = 4.0;
713 ${VERTEX_DECLARATIONS}
714 out mediump vec2 sharedVaringName;
717 sharedVaringName = in0;
721 tessellation_control ""
723 ${TESSELLATION_CONTROL_DECLARATIONS}
724 in mediump vec2 sharedVaringName[];
725 out mediump float tc_out[];
728 tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID].x + sharedVaringName[gl_InvocationID].y;
729 ${TESSELLATION_CONTROL_OUTPUT}
732 tessellation_evaluation ""
734 ${TESSELLATION_EVALUATION_DECLARATIONS}
735 in mediump float tc_out[];
736 out mediump float sharedVaringName;
739 sharedVaringName = tc_out[2];
740 ${TESSELLATION_EVALUATION_OUTPUT}
745 precision mediump float;
746 ${FRAGMENT_DECLARATIONS}
747 in mediump float sharedVaringName;
750 out0 = sharedVaringName;
756 case invalid_vertex_index
758 desc "Tessellation control output not indexed with gl_InvocationID"
759 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
760 expect compile_or_link_fail
763 ${VERTEX_DECLARATIONS}
769 tessellation_control ""
771 ${TESSELLATION_CONTROL_DECLARATIONS}
772 out mediump float tc_out[];
775 tc_out[2 - gl_InvocationID] = float(gl_InvocationID);
776 ${TESSELLATION_CONTROL_OUTPUT}
779 tessellation_evaluation ""
781 ${TESSELLATION_EVALUATION_DECLARATIONS}
782 in mediump float tc_out[];
783 out mediump float te_out;
787 ${TESSELLATION_EVALUATION_OUTPUT}
792 precision mediump float;
793 ${FRAGMENT_DECLARATIONS}
794 in mediump float te_out;
797 ${FRAG_COLOR} = vec4(te_out);
804 desc "Tessellation control input in not an array"
805 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
806 expect compile_or_link_fail
809 input float in0 = 1.0;
810 output float out0 = 1.0;
814 ${VERTEX_DECLARATIONS}
815 out mediump float tc_in;
822 tessellation_control ""
824 ${TESSELLATION_CONTROL_DECLARATIONS}
825 in mediump float tc_in;
826 out mediump float tc_out[];
829 tc_out[gl_InvocationID] = tc_in;
830 ${TESSELLATION_CONTROL_OUTPUT}
833 tessellation_evaluation ""
835 ${TESSELLATION_EVALUATION_DECLARATIONS}
836 in mediump float tc_out[];
837 out mediump float te_out;
841 ${TESSELLATION_EVALUATION_OUTPUT}
846 precision mediump float;
847 ${FRAGMENT_DECLARATIONS}
848 in mediump float te_out;
857 case output_non_array
859 desc "Tessellation control output out not an array"
860 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
861 expect compile_or_link_fail
864 input float in0 = 1.0;
865 output float out0 = 1.0;
869 ${VERTEX_DECLARATIONS}
870 out mediump float tc_in;
877 tessellation_control ""
879 ${TESSELLATION_CONTROL_DECLARATIONS}
880 in mediump float tc_in[];
881 out mediump float tc_out; // not an array
884 tc_out = tc_in[gl_InvocationID];
885 ${TESSELLATION_CONTROL_OUTPUT}
888 tessellation_evaluation ""
890 ${TESSELLATION_EVALUATION_DECLARATIONS}
891 in mediump float tc_out[];
892 out mediump float te_out;
896 ${TESSELLATION_EVALUATION_OUTPUT}
901 precision mediump float;
902 ${FRAGMENT_DECLARATIONS}
903 in mediump float te_out;
912 case input_array_size_mismatch
914 desc "Tessellation control input array size is not gl_MaxPatchVertices"
915 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
916 expect compile_or_link_fail
919 input float in0 = 1.0;
920 output float out0 = 1.0;
924 ${VERTEX_DECLARATIONS}
925 out mediump float tc_in;
932 tessellation_control ""
934 ${TESSELLATION_CONTROL_DECLARATIONS}
935 in mediump float tc_in[2]; // not gl_MaxPatchVertices
936 out mediump float tc_out[];
939 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
940 ${TESSELLATION_CONTROL_OUTPUT}
943 tessellation_evaluation ""
945 ${TESSELLATION_EVALUATION_DECLARATIONS}
946 in mediump float tc_out[];
947 out mediump float te_out;
951 ${TESSELLATION_EVALUATION_OUTPUT}
956 precision mediump float;
957 ${FRAGMENT_DECLARATIONS}
958 in mediump float te_out;
967 case internal_array_size_mismatch
969 desc "Tessellation control output array size is not consistent with layout qualifier"
970 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
971 expect compile_or_link_fail
974 input float in0 = 1.0;
975 output float out0 = 1.0;
979 ${VERTEX_DECLARATIONS}
980 out mediump float tc_in;
987 tessellation_control ""
989 ${TESSELLATION_CONTROL_DECLARATIONS}
990 in mediump float tc_in[];
991 out mediump float tc_out[2]; // does not match output layout qualifier
994 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
995 ${TESSELLATION_CONTROL_OUTPUT}
998 tessellation_evaluation ""
1000 ${TESSELLATION_EVALUATION_DECLARATIONS}
1001 in mediump float tc_out[2];
1002 out mediump float te_out;
1006 ${TESSELLATION_EVALUATION_OUTPUT}
1011 precision mediump float;
1012 ${FRAGMENT_DECLARATIONS}
1013 in mediump float te_out;
1022 case invalid_patch_in_usage
1024 desc "Invalid use of the patch_in qualifier in a non-tessellation shader"
1025 expect compile_or_link_fail
1026 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1029 input float in0 = 1.0;
1030 output float out0 = 1.0;
1034 ${VERTEX_DECLARATIONS}
1035 out mediump float frag_in;
1036 out mediump float var;
1046 precision mediump float;
1047 ${FRAGMENT_DECLARATIONS}
1048 patch in mediump float var; // invalid use of patch_in
1049 in mediump float frag_in;
1052 out0 = frag_in * var;
1058 case invalid_patch_out_usage
1060 desc "Invalid use of the patch_out qualifier in a non-tessellation shader"
1061 expect compile_or_link_fail
1062 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1065 input float in0 = 1.0;
1066 output float out0 = 1.0;
1070 ${VERTEX_DECLARATIONS}
1071 out mediump float frag_in;
1072 patch out mediump float var;
1082 precision mediump float;
1083 ${FRAGMENT_DECLARATIONS}
1084 in mediump float var; // invalid use of patch_out
1085 in mediump float frag_in;
1088 out0 = frag_in * var;
1094 case invalid_per_patch_qualifier_usage
1096 desc "Invalid use of per-patch qualifier on input variable in tessellation control shader"
1097 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1098 expect compile_or_link_fail
1101 input float in0 = 1.0;
1102 output float out0 = 1.0;
1106 ${VERTEX_DECLARATIONS}
1107 out mediump float tc_in;
1114 tessellation_control ""
1116 ${TESSELLATION_CONTROL_DECLARATIONS}
1117 patch in mediump float tc_in; // patch in not allowed in TCS
1118 patch out mediump float tc_out;
1122 ${TESSELLATION_CONTROL_OUTPUT}
1125 tessellation_evaluation ""
1127 ${TESSELLATION_EVALUATION_DECLARATIONS}
1128 patch in mediump float tc_out;
1129 out mediump float te_out;
1133 ${TESSELLATION_EVALUATION_OUTPUT}
1138 precision mediump float;
1139 ${FRAGMENT_DECLARATIONS}
1140 in mediump float te_out;
1149 case per_patch_qualifier_mismatch_1
1151 desc "Tessellation control output is per-patch qualified, evaluation input is not"
1152 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1153 expect compile_or_link_fail
1156 input float in0 = 1.0;
1157 output float out0 = 1.0;
1161 ${VERTEX_DECLARATIONS}
1162 out mediump float tc_in;
1169 tessellation_control ""
1171 ${TESSELLATION_CONTROL_DECLARATIONS}
1172 in mediump float tc_in[];
1173 patch out mediump float tc_out[gl_MaxPatchVertices];
1176 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1177 ${TESSELLATION_CONTROL_OUTPUT}
1180 tessellation_evaluation ""
1182 ${TESSELLATION_EVALUATION_DECLARATIONS}
1183 in mediump float tc_out[gl_MaxPatchVertices];
1184 out mediump float te_out;
1188 ${TESSELLATION_EVALUATION_OUTPUT}
1193 precision mediump float;
1194 ${FRAGMENT_DECLARATIONS}
1195 in mediump float te_out;
1204 case per_patch_qualifier_mismatch_2
1206 desc "Tessellation control output is not per-patch qualified, evaluation input is"
1207 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1208 expect compile_or_link_fail
1211 input float in0 = 1.0;
1212 output float out0 = 1.0;
1216 ${VERTEX_DECLARATIONS}
1217 out mediump float tc_in;
1224 tessellation_control ""
1226 ${TESSELLATION_CONTROL_DECLARATIONS}
1227 in mediump float tc_in[];
1228 out mediump float tc_out[gl_MaxPatchVertices];
1231 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1232 ${TESSELLATION_CONTROL_OUTPUT}
1235 tessellation_evaluation ""
1237 ${TESSELLATION_EVALUATION_DECLARATIONS}
1238 patch in mediump float tc_out[gl_MaxPatchVertices];
1239 out mediump float te_out;
1243 ${TESSELLATION_EVALUATION_OUTPUT}
1248 precision mediump float;
1249 ${FRAGMENT_DECLARATIONS}
1250 in mediump float te_out;
1261 desc "Tessellation control shader input block"
1262 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1263 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1264 values { output float out0 = 1.0; }
1267 ${VERTEX_DECLARATIONS}
1271 } outputInstanceName;
1274 outputInstanceName.var = 1.0;
1278 tessellation_control ""
1280 ${TESSELLATION_CONTROL_DECLARATIONS}
1284 } inputInstanceName[];
1285 out mediump float tc_out[];
1288 tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID].var;
1289 ${TESSELLATION_CONTROL_OUTPUT}
1292 tessellation_evaluation ""
1294 ${TESSELLATION_EVALUATION_DECLARATIONS}
1295 in mediump float tc_out[];
1296 out mediump float te_out;
1300 ${TESSELLATION_EVALUATION_OUTPUT}
1305 precision mediump float;
1306 ${FRAGMENT_DECLARATIONS}
1307 in mediump float te_out;
1316 case input_block_non_array
1318 desc "Tessellation control shader input block without explicit array"
1319 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1320 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1321 expect compile_or_link_fail
1322 values { output float out0 = 1.0; }
1325 ${VERTEX_DECLARATIONS}
1329 } outputInstanceName;
1332 outputInstanceName.var = 1.0;
1336 tessellation_control ""
1338 ${TESSELLATION_CONTROL_DECLARATIONS}
1342 } inputInstanceName;
1343 out mediump float tc_out[];
1346 tc_out[gl_InvocationID] = inputInstanceName.var;
1347 ${TESSELLATION_CONTROL_OUTPUT}
1350 tessellation_evaluation ""
1352 ${TESSELLATION_EVALUATION_DECLARATIONS}
1353 in mediump float tc_out[];
1354 out mediump float te_out;
1358 ${TESSELLATION_EVALUATION_OUTPUT}
1363 precision mediump float;
1364 ${FRAGMENT_DECLARATIONS}
1365 in mediump float geo_out;
1374 case output_block_non_array
1376 desc "Tessellation control shader output block without explicit array"
1377 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1378 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1379 expect compile_or_link_fail
1380 values { output float out0 = 1.0; }
1383 ${VERTEX_DECLARATIONS}
1384 out mediump float tc_in;
1391 tessellation_control ""
1393 ${TESSELLATION_CONTROL_DECLARATIONS}
1394 in mediump float tc_in[];
1398 } outputInstanceName; // not an array
1401 outputInstanceName.var = tc_in[gl_InvocationID];
1402 ${TESSELLATION_CONTROL_OUTPUT}
1405 tessellation_evaluation ""
1407 ${TESSELLATION_EVALUATION_DECLARATIONS}
1411 } outputInstanceName[];
1412 out mediump float te_out;
1415 te_out = outputInstanceName[2].var;
1416 ${TESSELLATION_EVALUATION_OUTPUT}
1421 precision mediump float;
1422 ${FRAGMENT_DECLARATIONS}
1423 in mediump float te_out;
1432 case input_block_array_size_mismatch
1434 desc "Tessellation control shader input block array, size not gl_MaxPatchVertices"
1435 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1436 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
1437 expect compile_or_link_fail
1438 values { output float out0 = 1.0; }
1441 ${VERTEX_DECLARATIONS}
1445 } outputInstanceName;
1448 outputInstanceName.var = 1.0;
1452 tessellation_control ""
1454 ${TESSELLATION_CONTROL_DECLARATIONS}
1458 } inputInstanceName[4]; // not gl_MaxPatchVertices
1459 out mediump float tc_out[];
1462 tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID + 1].var;
1463 ${TESSELLATION_CONTROL_OUTPUT}
1466 tessellation_evaluation ""
1468 ${TESSELLATION_EVALUATION_DECLARATIONS}
1469 in mediump float tc_out[];
1470 out mediump float te_out;
1474 ${TESSELLATION_EVALUATION_OUTPUT}
1479 precision mediump float;
1480 ${FRAGMENT_DECLARATIONS}
1481 in mediump float geo_out;
1492 desc "Tessellation shader output block"
1493 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1494 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1495 values { output float out0 = 1.0; }
1498 ${VERTEX_DECLARATIONS}
1504 tessellation_control ""
1506 ${TESSELLATION_CONTROL_DECLARATIONS}
1509 ${TESSELLATION_CONTROL_OUTPUT}
1512 tessellation_evaluation ""
1514 ${TESSELLATION_EVALUATION_DECLARATIONS}
1518 } outputInstanceName;
1521 outputInstanceName.var = 1.0;
1522 ${TESSELLATION_EVALUATION_OUTPUT}
1527 precision mediump float;
1528 ${FRAGMENT_DECLARATIONS}
1532 } inputInstanceName;
1535 out0 = inputInstanceName.var;
1541 case output_block_array
1543 desc "Tessellation shader output block array"
1544 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1545 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
1546 values { output float out0 = 1.0; }
1549 ${VERTEX_DECLARATIONS}
1555 tessellation_control ""
1557 ${TESSELLATION_CONTROL_DECLARATIONS}
1560 ${TESSELLATION_CONTROL_OUTPUT}
1563 tessellation_evaluation ""
1565 ${TESSELLATION_EVALUATION_DECLARATIONS}
1569 } outputInstanceName[2];
1572 outputInstanceName[0].var = 2.0;
1573 outputInstanceName[1].var = 1.0;
1574 ${TESSELLATION_EVALUATION_OUTPUT}
1579 precision mediump float;
1580 ${FRAGMENT_DECLARATIONS}
1584 } inputInstanceName[2];
1587 out0 = inputInstanceName[0].var - inputInstanceName[1].var;
1593 case unspecified_vertex_count
1595 desc "Tessellation shader unspecified vertex count"
1596 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1597 expect compile_or_link_fail
1600 ${VERTEX_DECLARATIONS}
1606 tessellation_control ""
1610 ${TESSELLATION_CONTROL_OUTPUT}
1613 tessellation_evaluation ""
1615 ${TESSELLATION_EVALUATION_DECLARATIONS}
1618 ${TESSELLATION_EVALUATION_OUTPUT}
1623 precision mediump float;
1624 ${FRAGMENT_DECLARATIONS}
1632 case unspecified_primitive_mode
1634 desc "Tessellation shader unspecified vertex count"
1635 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1636 expect compile_or_link_fail
1639 ${VERTEX_DECLARATIONS}
1645 tessellation_control ""
1647 ${TESSELLATION_CONTROL_DECLARATIONS}
1650 ${TESSELLATION_CONTROL_OUTPUT}
1653 tessellation_evaluation ""
1657 ${TESSELLATION_EVALUATION_OUTPUT}
1662 precision mediump float;
1663 ${FRAGMENT_DECLARATIONS}
1672 group qualifiers "Varying qualifiers"
1675 desc "Smooth varying"
1676 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1679 input float in0 = 1.0;
1680 output float out0 = 1.0;
1684 ${VERTEX_DECLARATIONS}
1685 smooth out mediump float tc_in;
1692 tessellation_control ""
1694 ${TESSELLATION_CONTROL_DECLARATIONS}
1695 smooth in mediump float tc_in[];
1696 smooth out mediump float tc_out[];
1699 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1700 ${TESSELLATION_CONTROL_OUTPUT}
1703 tessellation_evaluation ""
1705 ${TESSELLATION_EVALUATION_DECLARATIONS}
1706 smooth in mediump float tc_out[];
1707 smooth out mediump float te_out;
1711 ${TESSELLATION_EVALUATION_OUTPUT}
1716 precision mediump float;
1717 ${FRAGMENT_DECLARATIONS}
1718 smooth in mediump float te_out;
1730 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1733 input float in0 = 1.0;
1734 output float out0 = 1.0;
1738 ${VERTEX_DECLARATIONS}
1739 flat out mediump float tc_in;
1746 tessellation_control ""
1748 ${TESSELLATION_CONTROL_DECLARATIONS}
1749 flat in mediump float tc_in[];
1750 flat out mediump float tc_out[];
1753 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1754 ${TESSELLATION_CONTROL_OUTPUT}
1757 tessellation_evaluation ""
1759 ${TESSELLATION_EVALUATION_DECLARATIONS}
1760 flat in mediump float tc_out[];
1761 flat out mediump float te_out;
1765 ${TESSELLATION_EVALUATION_OUTPUT}
1770 precision mediump float;
1771 ${FRAGMENT_DECLARATIONS}
1772 flat in mediump float te_out;
1783 desc "Centroid varying"
1784 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1787 input float in0 = 1.0;
1788 output float out0 = 1.0;
1792 ${VERTEX_DECLARATIONS}
1793 centroid out mediump float tc_in;
1800 tessellation_control ""
1802 ${TESSELLATION_CONTROL_DECLARATIONS}
1803 centroid in mediump float tc_in[];
1804 centroid out mediump float tc_out[];
1807 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1808 ${TESSELLATION_CONTROL_OUTPUT}
1811 tessellation_evaluation ""
1813 ${TESSELLATION_EVALUATION_DECLARATIONS}
1814 centroid in mediump float tc_out[];
1815 centroid out mediump float te_out;
1819 ${TESSELLATION_EVALUATION_OUTPUT}
1824 precision mediump float;
1825 ${FRAGMENT_DECLARATIONS}
1826 centroid in mediump float te_out;
1837 desc "Sample varying"
1838 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1839 require extension { "GL_OES_shader_multisample_interpolation" }
1842 input float in0 = 1.0;
1843 output float out0 = 1.0;
1847 ${VERTEX_DECLARATIONS}
1848 sample out mediump float tc_in;
1855 tessellation_control ""
1857 ${TESSELLATION_CONTROL_DECLARATIONS}
1858 sample in mediump float tc_in[];
1859 sample out mediump float tc_out[];
1862 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
1863 ${TESSELLATION_CONTROL_OUTPUT}
1866 tessellation_evaluation ""
1868 ${TESSELLATION_EVALUATION_DECLARATIONS}
1869 sample in mediump float tc_out[];
1870 sample out mediump float te_out;
1874 ${TESSELLATION_EVALUATION_OUTPUT}
1879 precision mediump float;
1880 ${FRAGMENT_DECLARATIONS}
1881 sample in mediump float te_out;
1892 desc "Pre-patch varying"
1893 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1896 input float in0 = 1.0;
1897 output float out0 = 1.0;
1901 ${VERTEX_DECLARATIONS}
1902 out mediump float tc_in;
1909 tessellation_control ""
1911 ${TESSELLATION_CONTROL_DECLARATIONS}
1912 in mediump float tc_in[];
1913 patch out mediump float tc_out;
1916 tc_out = tc_in[gl_InvocationID];
1917 ${TESSELLATION_CONTROL_OUTPUT}
1920 tessellation_evaluation ""
1922 ${TESSELLATION_EVALUATION_DECLARATIONS}
1923 patch in mediump float tc_out;
1924 out mediump float te_out;
1928 ${TESSELLATION_EVALUATION_OUTPUT}
1933 precision mediump float;
1934 ${FRAGMENT_DECLARATIONS}
1935 in mediump float te_out;
1945 import "linkage_tessellation_varying_types.test"
1948 group uniform "Uniform"
1950 case type_mismatch_1
1952 desc "uniform type mismatch between vertex and tessellation control shaders"
1954 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
1957 ${VERTEX_DECLARATIONS}
1958 uniform mediump float val;
1959 out mediump float vtx_out;
1966 tessellation_control ""
1968 ${TESSELLATION_CONTROL_DECLARATIONS}
1969 uniform mediump vec2 val;
1970 in mediump float vtx_out[];
1971 out mediump float tc_out[];
1974 tc_out[gl_InvocationID] = vtx_out[0] + val.x + val.y;
1975 ${TESSELLATION_CONTROL_OUTPUT}
1978 tessellation_evaluation ""
1980 ${TESSELLATION_EVALUATION_DECLARATIONS}
1981 in mediump float tc_out[];
1982 out mediump float te_out;
1986 ${TESSELLATION_EVALUATION_OUTPUT}
1991 precision mediump float;
1992 ${FRAGMENT_DECLARATIONS}
1993 in mediump float te_out;
1996 ${FRAG_COLOR} = vec4(te_out);
2001 case type_mismatch_2
2003 desc "uniform type mismatch between fragment and tessellation eval shaders"
2005 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2008 ${VERTEX_DECLARATIONS}
2009 out mediump float vtx_out;
2015 tessellation_control ""
2017 ${TESSELLATION_CONTROL_DECLARATIONS}
2020 ${TESSELLATION_CONTROL_OUTPUT}
2023 tessellation_evaluation ""
2025 ${TESSELLATION_EVALUATION_DECLARATIONS}
2026 uniform mediump vec3 val;
2027 out mediump float te_out;
2030 te_out = val.x + val.y + val.z;
2031 ${TESSELLATION_EVALUATION_OUTPUT}
2036 precision mediump float;
2037 ${FRAGMENT_DECLARATIONS}
2038 uniform mediump vec4 val;
2039 in mediump float te_out;
2042 ${FRAG_COLOR} = vec4(te_out) + val;
2047 case type_mismatch_3
2049 desc "uniform type mismatch between tessellation control and eval shaders"
2051 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2054 ${VERTEX_DECLARATIONS}
2055 out mediump float vtx_out;
2061 tessellation_control ""
2063 ${TESSELLATION_CONTROL_DECLARATIONS}
2064 uniform mediump vec4 val;
2065 out mediump vec4 tc_out[];
2068 tc_out[gl_InvocationID] = val;
2069 ${TESSELLATION_CONTROL_OUTPUT}
2072 tessellation_evaluation ""
2074 ${TESSELLATION_EVALUATION_DECLARATIONS}
2075 uniform mediump vec3 val;
2076 in mediump vec4 tc_out[];
2077 out mediump float te_out;
2080 te_out = tc_out[0].w * val.z;
2081 ${TESSELLATION_EVALUATION_OUTPUT}
2086 precision mediump float;
2087 ${FRAGMENT_DECLARATIONS}
2088 in mediump float te_out;
2091 ${FRAG_COLOR} = vec4(te_out);
2096 case type_mismatch_4
2098 desc "uniform type mismatch between vertex and tessellation control shaders"
2100 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2101 require limit "GL_MAX_VERTEX_ATOMIC_COUNTERS" > 0
2104 ${VERTEX_DECLARATIONS}
2105 layout(binding=0) uniform atomic_uint u_var;
2106 out mediump float vtx_out;
2109 uint result = atomicCounterIncrement(u_var);
2110 vtx_out = float(result);
2114 tessellation_control ""
2116 ${TESSELLATION_CONTROL_DECLARATIONS}
2117 uniform mediump float u_var;
2118 in mediump float vtx_out[];
2119 out mediump float tc_out[];
2122 tc_out[gl_InvocationID] = vtx_out[0] + u_var;
2123 ${TESSELLATION_CONTROL_OUTPUT}
2126 tessellation_evaluation ""
2128 ${TESSELLATION_EVALUATION_DECLARATIONS}
2129 in mediump float tc_out[];
2130 out mediump float te_out;
2134 ${TESSELLATION_EVALUATION_OUTPUT}
2139 precision mediump float;
2140 ${FRAGMENT_DECLARATIONS}
2141 in mediump float te_out;
2144 ${FRAG_COLOR} = vec4(te_out);
2149 case type_mismatch_5
2151 desc "uniform type mismatch between vertex and tessellation control shaders"
2153 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2154 require limit "GL_MAX_VERTEX_IMAGE_UNIFORMS" > 0
2157 ${VERTEX_DECLARATIONS}
2158 layout(binding=0) layout(rgba8i) uniform readonly highp iimage2D u_var;
2159 out mediump float vtx_out;
2162 int result = imageSize(u_var).x;
2163 vtx_out = float(result);
2167 tessellation_control ""
2169 ${TESSELLATION_CONTROL_DECLARATIONS}
2170 uniform mediump float u_var;
2171 in mediump float vtx_out[];
2172 out mediump float tc_out[];
2175 tc_out[gl_InvocationID] = vtx_out[0] + u_var;
2176 ${TESSELLATION_CONTROL_OUTPUT}
2179 tessellation_evaluation ""
2181 ${TESSELLATION_EVALUATION_DECLARATIONS}
2182 in mediump float tc_out[];
2183 out mediump float te_out;
2187 ${TESSELLATION_EVALUATION_OUTPUT}
2192 precision mediump float;
2193 ${FRAGMENT_DECLARATIONS}
2194 in mediump float te_out;
2197 ${FRAG_COLOR} = vec4(te_out);
2202 case precision_mismatch_1
2204 desc "uniform precision mismatch between tessellation control and eval shaders"
2206 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2209 ${VERTEX_DECLARATIONS}
2210 out mediump float vtx_out;
2216 tessellation_control ""
2218 ${TESSELLATION_CONTROL_DECLARATIONS}
2219 uniform mediump vec4 val;
2220 out mediump vec4 tc_out[];
2223 tc_out[gl_InvocationID] = val;
2224 ${TESSELLATION_CONTROL_OUTPUT}
2227 tessellation_evaluation ""
2229 ${TESSELLATION_EVALUATION_DECLARATIONS}
2230 uniform highp vec4 val;
2231 in mediump vec4 tc_out[];
2232 out mediump float te_out;
2235 te_out = tc_out[0].w * val.z;
2236 ${TESSELLATION_EVALUATION_OUTPUT}
2241 precision mediump float;
2242 ${FRAGMENT_DECLARATIONS}
2243 in mediump float te_out;
2246 ${FRAG_COLOR} = vec4(te_out);
2251 case precision_mismatch_2
2253 desc "uniform precision mismatch between vertex and tessellation control shaders"
2255 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2258 ${VERTEX_DECLARATIONS}
2259 uniform highp float val;
2260 out mediump float vtx_out;
2267 tessellation_control ""
2269 ${TESSELLATION_CONTROL_DECLARATIONS}
2270 uniform mediump float val;
2271 in mediump float vtx_out[];
2272 out mediump float tc_out[];
2275 tc_out[gl_InvocationID] = vtx_out[0] + val;
2276 ${TESSELLATION_CONTROL_OUTPUT}
2279 tessellation_evaluation ""
2281 ${TESSELLATION_EVALUATION_DECLARATIONS}
2282 in mediump float tc_out[];
2283 out mediump float te_out;
2287 ${TESSELLATION_EVALUATION_OUTPUT}
2292 precision mediump float;
2293 ${FRAGMENT_DECLARATIONS}
2294 in mediump float te_out;
2297 ${FRAG_COLOR} = vec4(te_out);
2302 case struct_partial_usage
2304 desc "uniform is partially used in different shader stages"
2305 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2308 uniform float val.vtxVal = 1.5;
2309 uniform float val.tcVal = 2.5;
2310 uniform float val.teVal = 6.0;
2311 uniform float val.fragVal = 11.0;
2312 output float out0 = 68.5;
2316 ${VERTEX_DECLARATIONS}
2319 mediump float vtxVal;
2320 mediump float tcVal;
2321 mediump float teVal;
2322 mediump float fragVal;
2325 out mediump float vtx_out;
2328 vtx_out = val.vtxVal;
2332 tessellation_control ""
2334 ${TESSELLATION_CONTROL_DECLARATIONS}
2337 mediump float vtxVal;
2338 mediump float tcVal;
2339 mediump float teVal;
2340 mediump float fragVal;
2343 in mediump float vtx_out[];
2344 out mediump float tc_out[];
2347 tc_out[gl_InvocationID] = vtx_out[0] + 2.0 * val.tcVal;
2348 ${TESSELLATION_CONTROL_OUTPUT}
2351 tessellation_evaluation ""
2353 ${TESSELLATION_EVALUATION_DECLARATIONS}
2356 mediump float vtxVal;
2357 mediump float tcVal;
2358 mediump float teVal;
2359 mediump float fragVal;
2362 in mediump float tc_out[];
2363 out mediump float te_out;
2366 te_out = tc_out[2] + 3.0 * val.teVal;
2367 ${TESSELLATION_EVALUATION_OUTPUT}
2372 precision mediump float;
2373 ${FRAGMENT_DECLARATIONS}
2376 mediump float vtxVal;
2377 mediump float tcVal;
2378 mediump float teVal;
2379 mediump float fragVal;
2382 in mediump float te_out;
2385 out0 = te_out + 4.0 * val.fragVal;
2392 import "linkage_tessellation_uniform_types.test"
2395 group layout_declarations "Layout linkage"
2398 case primitive_mode_mismatch
2400 desc "Tessellation evaluation shader primitive mode mismatch"
2401 expect compile_or_link_fail
2402 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2405 input float in0 = 1.0;
2406 output float out0 = 1.0;
2410 ${VERTEX_DECLARATIONS}
2411 out mediump float tc_in;
2418 tessellation_control ""
2420 ${TESSELLATION_CONTROL_DECLARATIONS}
2421 in mediump float tc_in[];
2422 out mediump float tc_out[];
2425 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2426 ${TESSELLATION_CONTROL_OUTPUT}
2429 tessellation_evaluation ""
2431 layout (triangles) in;
2432 layout (isolines) in;
2433 in mediump float tc_out[];
2434 out mediump float te_out;
2438 ${TESSELLATION_EVALUATION_OUTPUT}
2443 precision mediump float;
2444 ${FRAGMENT_DECLARATIONS}
2445 in mediump float te_out;
2454 case spacing_mode_mismatch
2456 desc "Tessellation evaluation shader spacing mode mismatch"
2457 expect compile_or_link_fail
2458 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2461 input float in0 = 1.0;
2462 output float out0 = 1.0;
2466 ${VERTEX_DECLARATIONS}
2467 out mediump float tc_in;
2474 tessellation_control ""
2476 ${TESSELLATION_CONTROL_DECLARATIONS}
2477 in mediump float tc_in[];
2478 out mediump float tc_out[];
2481 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2482 ${TESSELLATION_CONTROL_OUTPUT}
2485 tessellation_evaluation ""
2487 layout (triangles, equal_spacing) in;
2488 layout (triangles, fractional_odd_spacing) in;
2489 in mediump float tc_out[];
2490 out mediump float te_out;
2494 ${TESSELLATION_EVALUATION_OUTPUT}
2499 precision mediump float;
2500 ${FRAGMENT_DECLARATIONS}
2501 in mediump float te_out;
2510 case vertex_order_mismatch
2512 desc "Tessellation evaluation shader vertex order mismatch"
2513 expect compile_or_link_fail
2514 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2517 input float in0 = 1.0;
2518 output float out0 = 1.0;
2522 ${VERTEX_DECLARATIONS}
2523 out mediump float tc_in;
2530 tessellation_control ""
2532 ${TESSELLATION_CONTROL_DECLARATIONS}
2533 in mediump float tc_in[];
2534 out mediump float tc_out[];
2537 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2538 ${TESSELLATION_CONTROL_OUTPUT}
2541 tessellation_evaluation ""
2543 layout (triangles, cw) in;
2544 layout (triangles, ccw) in;
2545 in mediump float tc_out[];
2546 out mediump float te_out;
2550 ${TESSELLATION_EVALUATION_OUTPUT}
2555 precision mediump float;
2556 ${FRAGMENT_DECLARATIONS}
2557 in mediump float te_out;
2566 case vertex_count_mismatch
2568 desc "Tessellation control shader vertex count mismatch"
2569 expect compile_or_link_fail
2570 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2573 input float in0 = 1.0;
2574 output float out0 = 1.0;
2578 ${VERTEX_DECLARATIONS}
2579 out mediump float tc_in;
2586 tessellation_control ""
2588 layout (vertices=3) out;
2589 layout (vertices=4) out;
2590 in mediump float tc_in[];
2591 out mediump float tc_out[];
2594 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2595 ${TESSELLATION_CONTROL_OUTPUT}
2598 tessellation_evaluation ""
2600 ${TESSELLATION_EVALUATION_DECLARATIONS}
2601 in mediump float tc_out[];
2602 out mediump float te_out;
2606 ${TESSELLATION_EVALUATION_OUTPUT}
2611 precision mediump float;
2612 ${FRAGMENT_DECLARATIONS}
2613 in mediump float te_out;
2624 group barriers "Barriers"
2627 case invalid_barrier_usage_within_control_flow
2629 desc "Tessellation control shader invalid barrier usage within control flow statement"
2630 expect compile_or_link_fail
2631 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2634 input float in0 = 1.0;
2635 output float out0 = 1.0;
2639 ${VERTEX_DECLARATIONS}
2640 out mediump float tc_in;
2647 tessellation_control ""
2649 ${TESSELLATION_CONTROL_DECLARATIONS}
2650 in mediump float tc_in[];
2651 out mediump float tc_out[];
2655 if (gl_InvocationID == 0)
2656 barrier(); // error: within control flow
2658 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2659 ${TESSELLATION_CONTROL_OUTPUT}
2662 tessellation_evaluation ""
2664 ${TESSELLATION_EVALUATION_DECLARATIONS}
2665 in mediump float tc_out[];
2666 out mediump float te_out;
2670 ${TESSELLATION_EVALUATION_OUTPUT}
2675 precision mediump float;
2676 ${FRAGMENT_DECLARATIONS}
2677 in mediump float te_out;
2686 case invalid_barrier_usage_after_return
2688 desc "Tessellation control shader invalid barrier usage after main() returns"
2689 expect compile_or_link_fail
2690 require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
2693 input float in0 = 1.0;
2694 output float out0 = 1.0;
2698 ${VERTEX_DECLARATIONS}
2699 out mediump float tc_in;
2706 tessellation_control ""
2708 ${TESSELLATION_CONTROL_DECLARATIONS}
2709 in mediump float tc_in[];
2710 out mediump float tc_out[];
2714 tc_out[gl_InvocationID] = tc_in[gl_InvocationID];
2715 ${TESSELLATION_CONTROL_OUTPUT}
2718 barrier(); // error: barrier() after return
2721 tessellation_evaluation ""
2723 ${TESSELLATION_EVALUATION_DECLARATIONS}
2724 in mediump float tc_out[];
2725 out mediump float te_out;
2729 ${TESSELLATION_EVALUATION_OUTPUT}
2734 precision mediump float;
2735 ${FRAGMENT_DECLARATIONS}
2736 in mediump float te_out;