3 group varying "Varying linkage"
6 group rules "Varying linking rules"
7 # declared in vertex shader, no reference in frag shader
10 desc "varying declared in vertex shader, no reference in fragment shader"
13 ${VERTEX_DECLARATIONS}
14 layout(location = 0) out mediump float var;
22 ${FRAGMENT_DECLARATIONS}
25 ${FRAG_COLOR} = vec4(1.0);
30 # declared in vertex shader, declared in frag shader
33 desc "varying declared in both vertex and fragment shader, but not used"
36 ${VERTEX_DECLARATIONS}
37 layout(location = 0) out mediump float var;
45 layout(location = 0) in mediump float var;
46 ${FRAGMENT_DECLARATIONS}
49 ${FRAG_COLOR} = vec4(1.0);
54 # declared in vertex shader, static use in frag shader
55 case vertex_declare_fragment_use
57 desc "varying declared in both shaders, statically used in fragment shader"
58 values { uniform bool u_false = false; }
61 ${VERTEX_DECLARATIONS}
62 layout(location = 0) out mediump float var;
70 layout(location = 0) in mediump float var;
71 ${FRAGMENT_DECLARATIONS}
75 ${FRAG_COLOR} = vec4(var);
77 ${FRAG_COLOR} = vec4(1.0);
82 # static use in vertex shader, no reference in fragment shader
83 case vertex_use_fragment_declare
85 desc "varying declared and statically used in vertex shader, no reference in fragment shader"
86 values { uniform bool u_false = false; }
89 ${VERTEX_DECLARATIONS}
90 layout(location = 0) out mediump float var;
100 ${FRAGMENT_DECLARATIONS}
103 ${FRAG_COLOR} = vec4(1.0);
108 # static use in vertex shader, declared in fragment shader
109 case vertex_use_declare_fragment
111 desc "varying declared and statically used in vertex shader, only declared in fragment shader"
112 values { uniform bool u_false = false; }
115 ${VERTEX_DECLARATIONS}
116 layout(location = 0) out mediump float var;
126 layout(location = 0) in mediump float var;
127 ${FRAGMENT_DECLARATIONS}
130 ${FRAG_COLOR} = vec4(1.0);
135 # static use in vertex shader, used in fragment shader
136 case vertex_use_fragment_use
138 desc "varying statically used in both vertex and fragment shader"
139 values { uniform bool u_false = false; }
142 ${VERTEX_DECLARATIONS}
143 layout(location = 0) out mediump float var;
153 ${FRAGMENT_DECLARATIONS}
154 layout(location = 0) in mediump float var;
158 ${FRAG_COLOR} = vec4(var);
160 ${FRAG_COLOR} = vec4(1.0);
165 # differing precision tests
166 case differing_precision_1
168 desc "varying declared as highp in vertex shader, but mediump in fragment shader"
171 input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
172 output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
177 ${VERTEX_DECLARATIONS}
178 layout(location = 0) out highp float var;
187 precision mediump float;
188 ${FRAGMENT_DECLARATIONS}
189 layout(location = 0) in mediump float var;
198 # differing precision tests
199 case differing_precision_2
201 desc "varying declared as highp in vertex shader, but lowp in fragment shader"
204 input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
205 output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
210 ${VERTEX_DECLARATIONS}
211 layout(location = 0) out highp vec2 var;
214 var = vec2(in0, 2.0*in0);
220 precision mediump float;
221 ${FRAGMENT_DECLARATIONS}
222 layout(location = 0) in lowp vec2 var;
225 out0 = var.y - var.x;
231 # differing precision tests
232 case differing_precision_3
234 desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
237 input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
238 output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
243 ${VERTEX_DECLARATIONS}
244 layout(location = 0) out lowp vec4 var;
247 var = vec4(in0, 2.0*in0, -in0, -in0);
253 precision mediump float;
254 ${FRAGMENT_DECLARATIONS}
255 layout(location = 0) in mediump vec4 var;
258 out0 = var.x + var.y + var.z + var.w;
264 # different interpolation
265 case differing_interpolation_2
267 desc "varying interpolation different (smooth vs. centroid)"
270 input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
271 output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
276 ${VERTEX_DECLARATIONS}
277 layout(location = 0) smooth out mediump float var;
286 precision mediump float;
287 ${FRAGMENT_DECLARATIONS}
288 layout(location = 0) centroid in mediump float var;
299 group basic_types "Basic varying types"
302 desc "varying of type float"
305 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
306 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
310 ${VERTEX_DECLARATIONS}
311 layout(location = 0) out mediump float var;
320 precision mediump float;
321 ${FRAGMENT_DECLARATIONS}
322 layout(location = 0) in float var;
333 desc "varying of type vec2"
336 input vec2 in0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
337 output vec2 out0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
341 ${VERTEX_DECLARATIONS}
342 layout(location = 0) out mediump vec2 var;
351 precision mediump float;
352 ${FRAGMENT_DECLARATIONS}
353 layout(location = 0) in vec2 var;
364 desc "varying of type vec3"
367 input vec3 in0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
368 output vec3 out0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
372 ${VERTEX_DECLARATIONS}
373 layout(location = 0) out mediump vec3 var;
382 precision mediump float;
383 ${FRAGMENT_DECLARATIONS}
384 layout(location = 0) in vec3 var;
395 desc "varying of type vec4"
398 input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
399 output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
403 ${VERTEX_DECLARATIONS}
404 layout(location = 0) out mediump vec4 var;
413 precision mediump float;
414 ${FRAGMENT_DECLARATIONS}
415 layout(location = 0) in vec4 var;
426 desc "varying of type mat2"
429 input mat2 in0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
430 output mat2 out0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
434 ${VERTEX_DECLARATIONS}
435 layout(location = 0) out mediump mat2 var;
444 precision mediump float;
445 ${FRAGMENT_DECLARATIONS}
446 layout(location = 0) in mat2 var;
457 desc "varying of type mat2x3"
460 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
461 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
465 ${VERTEX_DECLARATIONS}
466 layout(location = 0) out mediump mat2x3 var;
475 precision mediump float;
476 ${FRAGMENT_DECLARATIONS}
477 layout(location = 0) in mat2x3 var;
488 desc "varying of type mat2x4"
491 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
492 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
496 ${VERTEX_DECLARATIONS}
497 layout(location = 0) out mediump mat2x4 var;
506 precision mediump float;
507 ${FRAGMENT_DECLARATIONS}
508 layout(location = 0) in mat2x4 var;
519 desc "varying of type mat3x2"
522 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
523 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
527 ${VERTEX_DECLARATIONS}
528 layout(location = 0) out mediump mat3x2 var;
537 precision mediump float;
538 ${FRAGMENT_DECLARATIONS}
539 layout(location = 0) in mat3x2 var;
550 desc "varying of type mat3"
553 input mat3 in0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
554 output mat3 out0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
558 ${VERTEX_DECLARATIONS}
559 layout(location = 0) out mediump mat3 var;
568 precision mediump float;
569 ${FRAGMENT_DECLARATIONS}
570 layout(location = 0) in mat3 var;
581 desc "varying of type mat3x4"
584 input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
585 output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
589 ${VERTEX_DECLARATIONS}
590 layout(location = 0) out mediump mat3x4 var;
599 precision mediump float;
600 ${FRAGMENT_DECLARATIONS}
601 layout(location = 0) in mat3x4 var;
612 desc "varying of type mat4x2"
615 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
616 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
620 ${VERTEX_DECLARATIONS}
621 layout(location = 0) out mediump mat4x2 var;
630 precision mediump float;
631 ${FRAGMENT_DECLARATIONS}
632 layout(location = 0) in mat4x2 var;
643 desc "varying of type mat4x3"
646 input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
647 output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
651 ${VERTEX_DECLARATIONS}
652 layout(location = 0) out mediump mat4x3 var;
661 precision mediump float;
662 ${FRAGMENT_DECLARATIONS}
663 layout(location = 0) in mat4x3 var;
674 desc "varying of type mat4"
677 input mat4 in0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
678 output mat4 out0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
682 ${VERTEX_DECLARATIONS}
683 layout(location = 0) out mediump mat4 var;
692 precision mediump float;
693 ${FRAGMENT_DECLARATIONS}
694 layout(location = 0) in mat4 var;
705 desc "varying of type int"
708 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
709 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
713 ${VERTEX_DECLARATIONS}
714 layout(location = 0) flat out mediump int var;
724 ${FRAGMENT_DECLARATIONS}
725 layout(location = 0) flat in int var;
736 desc "varying of type ivec2"
739 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
740 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
744 ${VERTEX_DECLARATIONS}
745 layout(location = 0) flat out mediump ivec2 var;
755 ${FRAGMENT_DECLARATIONS}
756 layout(location = 0) flat in ivec2 var;
767 desc "varying of type ivec3"
770 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
771 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
775 ${VERTEX_DECLARATIONS}
776 layout(location = 0) flat out mediump ivec3 var;
786 ${FRAGMENT_DECLARATIONS}
787 layout(location = 0) flat in ivec3 var;
798 desc "varying of type ivec4"
801 input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
802 output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
806 ${VERTEX_DECLARATIONS}
807 layout(location = 0) flat out mediump ivec4 var;
817 ${FRAGMENT_DECLARATIONS}
818 layout(location = 0) flat in ivec4 var;
829 desc "varying of type int"
832 input uint in0 = [ 1 | 2 | 3 | 16 ];
833 output uint out0 = [ 1 | 2 | 3 | 16 ];
837 ${VERTEX_DECLARATIONS}
838 layout(location = 0) flat out mediump uint var;
848 ${FRAGMENT_DECLARATIONS}
849 layout(location = 0) flat in uint var;
860 desc "varying of type uvec2"
863 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
864 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
868 ${VERTEX_DECLARATIONS}
869 layout(location = 0) flat out mediump uvec2 var;
879 ${FRAGMENT_DECLARATIONS}
880 layout(location = 0) flat in uvec2 var;
891 desc "varying of type uvec3"
894 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
895 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
899 ${VERTEX_DECLARATIONS}
900 layout(location = 0) flat out mediump uvec3 var;
910 ${FRAGMENT_DECLARATIONS}
911 layout(location = 0) flat in uvec3 var;
922 desc "varying of type uvec4"
925 input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
926 output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
930 ${VERTEX_DECLARATIONS}
931 layout(location = 0) flat out mediump uvec4 var;
941 ${FRAGMENT_DECLARATIONS}
942 layout(location = 0) flat in uvec4 var;
952 group struct "Structure varyings"
955 desc "varying of type float inside struct"
958 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
959 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
963 ${VERTEX_DECLARATIONS}
964 struct S { mediump float a; };
965 layout(location = 0) out S var;
974 precision mediump float;
975 ${FRAGMENT_DECLARATIONS}
976 struct S { mediump float a; };
977 layout(location = 0) in S var;
988 desc "varying of type vec2 inside struct"
991 input vec2 in0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
992 output vec2 out0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
996 ${VERTEX_DECLARATIONS}
997 struct S { mediump vec2 a; };
998 layout(location = 0) out S var;
1007 precision mediump float;
1008 ${FRAGMENT_DECLARATIONS}
1009 struct S { mediump vec2 a; };
1010 layout(location = 0) in S var;
1021 desc "varying of type vec3 inside struct"
1024 input vec3 in0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1025 output vec3 out0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1029 ${VERTEX_DECLARATIONS}
1030 struct S { mediump vec3 a; };
1031 layout(location = 0) out S var;
1040 precision mediump float;
1041 ${FRAGMENT_DECLARATIONS}
1042 struct S { mediump vec3 a; };
1043 layout(location = 0) in S var;
1054 desc "varying of type vec4 inside struct"
1057 input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1058 output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1062 ${VERTEX_DECLARATIONS}
1063 struct S { mediump vec4 a; };
1064 layout(location = 0) out S var;
1073 precision mediump float;
1074 ${FRAGMENT_DECLARATIONS}
1075 struct S { mediump vec4 a; };
1076 layout(location = 0) in S var;
1087 desc "varying of type mat2 inside struct"
1090 input mat2 in0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
1091 output mat2 out0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
1095 ${VERTEX_DECLARATIONS}
1096 struct S { mediump mat2 a; };
1097 layout(location = 0) out S var;
1106 precision mediump float;
1107 ${FRAGMENT_DECLARATIONS}
1108 struct S { mediump mat2 a; };
1109 layout(location = 0) in S var;
1120 desc "varying of type mat2x3 inside struct"
1123 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1124 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1128 ${VERTEX_DECLARATIONS}
1129 struct S { mediump mat2x3 a; };
1130 layout(location = 0) out S var;
1139 precision mediump float;
1140 ${FRAGMENT_DECLARATIONS}
1141 struct S { mediump mat2x3 a; };
1142 layout(location = 0) in S var;
1153 desc "varying of type mat2x4 inside struct"
1156 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1157 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1161 ${VERTEX_DECLARATIONS}
1162 struct S { mediump mat2x4 a; };
1163 layout(location = 0) out S var;
1172 precision mediump float;
1173 ${FRAGMENT_DECLARATIONS}
1174 struct S { mediump mat2x4 a; };
1175 layout(location = 0) in S var;
1186 desc "varying of type mat3x2 inside struct"
1189 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1190 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1194 ${VERTEX_DECLARATIONS}
1195 struct S { mediump mat3x2 a; };
1196 layout(location = 0) out S var;
1205 precision mediump float;
1206 ${FRAGMENT_DECLARATIONS}
1207 struct S { mediump mat3x2 a; };
1208 layout(location = 0) in S var;
1219 desc "varying of type mat3 inside struct"
1222 input mat3 in0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
1223 output mat3 out0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
1227 ${VERTEX_DECLARATIONS}
1228 struct S { mediump mat3 a; };
1229 layout(location = 0) out S var;
1238 precision mediump float;
1239 ${FRAGMENT_DECLARATIONS}
1240 struct S { mediump mat3 a; };
1241 layout(location = 0) in S var;
1252 desc "varying of type mat3x4 inside struct"
1255 input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1256 output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1260 ${VERTEX_DECLARATIONS}
1261 struct S { mediump mat3x4 a; };
1262 layout(location = 0) out S var;
1271 precision mediump float;
1272 ${FRAGMENT_DECLARATIONS}
1273 struct S { mediump mat3x4 a; };
1274 layout(location = 0) in S var;
1285 desc "varying of type mat4x2 inside struct"
1288 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1289 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1293 ${VERTEX_DECLARATIONS}
1294 struct S { mediump mat4x2 a; };
1295 layout(location = 0) out S var;
1304 precision mediump float;
1305 ${FRAGMENT_DECLARATIONS}
1306 struct S { mediump mat4x2 a; };
1307 layout(location = 0) in S var;
1318 desc "varying of type mat4x3 inside struct"
1321 input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1322 output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
1326 ${VERTEX_DECLARATIONS}
1327 struct S { mediump mat4x3 a; };
1328 layout(location = 0) out S var;
1337 precision mediump float;
1338 ${FRAGMENT_DECLARATIONS}
1339 struct S { mediump mat4x3 a; };
1340 layout(location = 0) in S var;
1351 desc "varying of type mat4 inside struct"
1354 input mat4 in0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1355 output mat4 out0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
1359 ${VERTEX_DECLARATIONS}
1360 struct S { mediump mat4 a; };
1361 layout(location = 0) out S var;
1370 precision mediump float;
1371 ${FRAGMENT_DECLARATIONS}
1372 struct S { mediump mat4 a; };
1373 layout(location = 0) in S var;
1384 desc "varying of type int inside struct"
1387 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1388 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1392 ${VERTEX_DECLARATIONS}
1393 struct S { mediump int a; };
1394 layout(location = 0) flat out S var;
1404 ${FRAGMENT_DECLARATIONS}
1405 struct S { mediump int a; };
1406 layout(location = 0) flat in S var;
1417 desc "varying of type ivec2 inside struct"
1420 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1421 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1425 ${VERTEX_DECLARATIONS}
1426 struct S { mediump ivec2 a; };
1427 layout(location = 0) flat out S var;
1437 ${FRAGMENT_DECLARATIONS}
1438 struct S { mediump ivec2 a; };
1439 layout(location = 0) flat in S var;
1450 desc "varying of type ivec3 inside struct"
1453 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1454 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1458 ${VERTEX_DECLARATIONS}
1459 struct S { mediump ivec3 a; };
1460 layout(location = 0) flat out S var;
1470 ${FRAGMENT_DECLARATIONS}
1471 struct S { mediump ivec3 a; };
1472 layout(location = 0) flat in S var;
1483 desc "varying of type ivec4 inside struct"
1486 input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1487 output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
1491 ${VERTEX_DECLARATIONS}
1492 struct S { mediump ivec4 a; };
1493 layout(location = 0) flat out S var;
1503 ${FRAGMENT_DECLARATIONS}
1504 struct S { mediump ivec4 a; };
1505 layout(location = 0) flat in S var;
1516 desc "varying of type uint in struct"
1519 input uint in0 = [ 1 | 2 | 3 | 16 ];
1520 output uint out0 = [ 1 | 2 | 3 | 16 ];
1524 ${VERTEX_DECLARATIONS}
1525 struct S { mediump uint a; };
1526 layout(location = 0) flat out S var;
1536 ${FRAGMENT_DECLARATIONS}
1537 struct S { mediump uint a; };
1538 layout(location = 0) flat in S var;
1549 desc "varying of type uvec2 inside struct"
1552 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1553 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1557 ${VERTEX_DECLARATIONS}
1558 struct S { mediump uvec2 a; };
1559 layout(location = 0) flat out S var;
1569 ${FRAGMENT_DECLARATIONS}
1570 struct S { mediump uvec2 a; };
1571 layout(location = 0) flat in S var;
1582 desc "varying of type uvec3 inside struct"
1585 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1586 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1590 ${VERTEX_DECLARATIONS}
1591 struct S { mediump uvec3 a; };
1592 layout(location = 0) flat out S var;
1602 ${FRAGMENT_DECLARATIONS}
1603 struct S { mediump uvec3 a; };
1604 layout(location = 0) flat in S var;
1615 desc "varying of type uvec4 inside struct"
1618 input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
1619 output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
1623 ${VERTEX_DECLARATIONS}
1624 struct S { mediump uvec4 a; };
1625 layout(location = 0) flat out S var;
1635 ${FRAGMENT_DECLARATIONS}
1636 struct S { mediump uvec4 a; };
1637 layout(location = 0) flat in S var;
1648 desc "varyings of type float and vec3 inside struct"
1651 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1652 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1653 input vec3 in1 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1654 output vec3 out1 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1658 ${VERTEX_DECLARATIONS}
1659 struct S { mediump float a; highp vec3 b; };
1660 layout(location = 0) out S var;
1670 precision mediump float;
1671 ${FRAGMENT_DECLARATIONS}
1672 struct S { mediump float a; highp vec3 b; };
1673 layout(location = 0) in S var;
1683 case float_uvec2_vec3
1685 desc "varyings of type float and vec3 inside struct"
1688 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1689 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1690 input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1691 output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1692 input vec3 in2 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1693 output vec3 out2 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
1697 ${VERTEX_DECLARATIONS}
1698 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1699 layout(location = 0) flat out S var;
1711 precision mediump float;
1712 ${FRAGMENT_DECLARATIONS}
1713 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1714 layout(location = 0) flat in S var;
1726 group interpolation "Varying interpolation modes"
1729 desc "varying of type vec4"
1732 input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1733 output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1737 ${VERTEX_DECLARATIONS}
1738 layout(location = 0) smooth out mediump vec4 var;
1747 precision mediump float;
1748 ${FRAGMENT_DECLARATIONS}
1749 layout(location = 0) smooth in vec4 var;
1760 desc "varying of type vec4"
1763 input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1764 output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1768 ${VERTEX_DECLARATIONS}
1769 layout(location = 0) centroid out mediump vec4 var;
1778 precision mediump float;
1779 ${FRAGMENT_DECLARATIONS}
1780 layout(location = 0) centroid in vec4 var;
1791 desc "varying of type vec4"
1794 input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1795 output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
1799 ${VERTEX_DECLARATIONS}
1800 layout(location = 0) flat out mediump vec4 var;
1809 precision mediump float;
1810 ${FRAGMENT_DECLARATIONS}
1811 layout(location = 0) flat in vec4 var;
1821 group usage "Varying usage in shaders"
1824 desc "read back (an already written) varying in the vertex shader"
1827 input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
1828 output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ];
1832 precision mediump float;
1833 ${VERTEX_DECLARATIONS}
1834 layout(location = 0) out float var1;
1835 layout(location = 1) out float var2;
1846 precision mediump float;
1847 ${FRAGMENT_DECLARATIONS}
1848 layout(location = 0) in float var1;
1849 layout(location = 1) in float var2;