3 group varying "Varying linkage"
6 group rules "Varying linking rules"
7 # not declared in vertex shader, declared in fragment shader
10 desc "varying declared in fragment shader, no reference in vertex shader"
11 values { output float out0 = 1.0; }
14 ${VERTEX_DECLARATIONS}
22 precision mediump float;
23 layout(location = 0) in mediump float var;
24 ${FRAGMENT_DECLARATIONS}
33 # declared in vertex shader, no reference in frag shader
36 desc "varying declared in vertex shader, no reference in fragment shader"
39 ${VERTEX_DECLARATIONS}
40 layout(location = 0) out mediump float var;
48 ${FRAGMENT_DECLARATIONS}
51 ${FRAG_COLOR} = vec4(1.0);
56 # declared in vertex shader, declared in frag shader
59 desc "varying declared in both vertex and fragment shader, but not used"
62 ${VERTEX_DECLARATIONS}
63 layout(location = 0) out mediump float var;
71 layout(location = 0) in mediump float var;
72 ${FRAGMENT_DECLARATIONS}
75 ${FRAG_COLOR} = vec4(1.0);
80 # declared in vertex shader, static use in frag shader
81 case vertex_declare_fragment_use
83 desc "varying declared in both shaders, statically used in fragment shader"
84 values { uniform bool u_false = false; }
87 ${VERTEX_DECLARATIONS}
88 layout(location = 0) out mediump float var;
96 layout(location = 0) in mediump float var;
97 ${FRAGMENT_DECLARATIONS}
101 ${FRAG_COLOR} = vec4(var);
103 ${FRAG_COLOR} = vec4(1.0);
108 # static use in vertex shader, no reference in fragment shader
109 case vertex_use_fragment_declare
111 desc "varying declared and statically used in vertex shader, no reference in fragment shader"
112 values { uniform bool u_false = false; }
115 ${VERTEX_DECLARATIONS}
116 layout(location = 0) out mediump float var;
126 ${FRAGMENT_DECLARATIONS}
129 ${FRAG_COLOR} = vec4(1.0);
134 # static use in vertex shader, declared in fragment shader
135 case vertex_use_declare_fragment
137 desc "varying declared and statically used in vertex shader, only declared in fragment shader"
138 values { uniform bool u_false = false; }
141 ${VERTEX_DECLARATIONS}
142 layout(location = 0) out mediump float var;
152 layout(location = 0) in mediump float var;
153 ${FRAGMENT_DECLARATIONS}
156 ${FRAG_COLOR} = vec4(1.0);
161 # static use in vertex shader, used in fragment shader
162 case vertex_use_fragment_use
164 desc "varying statically used in both vertex and fragment shader"
165 values { uniform bool u_false = false; }
168 ${VERTEX_DECLARATIONS}
169 layout(location = 0) out mediump float var;
179 ${FRAGMENT_DECLARATIONS}
180 layout(location = 0) in mediump float var;
184 ${FRAG_COLOR} = vec4(var);
186 ${FRAG_COLOR} = vec4(1.0);
191 # differing precision tests
192 case differing_precision_1
194 desc "varying declared as highp in vertex shader, but mediump in fragment shader"
197 input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
198 output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
203 ${VERTEX_DECLARATIONS}
204 layout(location = 0) out highp float var;
213 precision mediump float;
214 ${FRAGMENT_DECLARATIONS}
215 layout(location = 0) in mediump float var;
224 # differing precision tests
225 case differing_precision_2
227 desc "varying declared as highp in vertex shader, but lowp in fragment shader"
230 input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
231 output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
236 ${VERTEX_DECLARATIONS}
237 layout(location = 0) out highp vec2 var;
240 var = vec2(in0, 2.0*in0);
246 precision mediump float;
247 ${FRAGMENT_DECLARATIONS}
248 layout(location = 0) in lowp vec2 var;
251 out0 = var.y - var.x;
257 # differing precision tests
258 case differing_precision_3
260 desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
263 input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
264 output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
269 ${VERTEX_DECLARATIONS}
270 layout(location = 0) out lowp vec4 var;
273 var = vec4(in0, 2.0*in0, -in0, -in0);
279 precision mediump float;
280 ${FRAGMENT_DECLARATIONS}
281 layout(location = 0) in mediump vec4 var;
284 out0 = var.x + var.y + var.z + var.w;
290 # different interpolation
291 case differing_interpolation_2
293 desc "varying interpolation different (smooth vs. centroid)"
296 input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
297 output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
302 ${VERTEX_DECLARATIONS}
303 layout(location = 0) smooth out mediump float var;
312 precision mediump float;
313 ${FRAGMENT_DECLARATIONS}
314 layout(location = 0) centroid in mediump float var;
325 group basic_types "Basic varying types"
328 desc "varying of type float"
331 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
332 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
336 ${VERTEX_DECLARATIONS}
337 layout(location = 0) out mediump float var;
346 precision mediump float;
347 ${FRAGMENT_DECLARATIONS}
348 layout(location = 0) in float var;
359 desc "varying of type vec2"
362 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) ];
363 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) ];
367 ${VERTEX_DECLARATIONS}
368 layout(location = 0) out mediump vec2 var;
377 precision mediump float;
378 ${FRAGMENT_DECLARATIONS}
379 layout(location = 0) in vec2 var;
390 desc "varying of type vec3"
393 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) ];
394 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) ];
398 ${VERTEX_DECLARATIONS}
399 layout(location = 0) out mediump vec3 var;
408 precision mediump float;
409 ${FRAGMENT_DECLARATIONS}
410 layout(location = 0) in vec3 var;
421 desc "varying of type vec4"
424 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) ];
425 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) ];
429 ${VERTEX_DECLARATIONS}
430 layout(location = 0) out mediump vec4 var;
439 precision mediump float;
440 ${FRAGMENT_DECLARATIONS}
441 layout(location = 0) in vec4 var;
452 desc "varying of type mat2"
455 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) ];
456 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) ];
460 ${VERTEX_DECLARATIONS}
461 layout(location = 0) out mediump mat2 var;
470 precision mediump float;
471 ${FRAGMENT_DECLARATIONS}
472 layout(location = 0) in mat2 var;
483 desc "varying of type mat2x3"
486 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
487 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
491 ${VERTEX_DECLARATIONS}
492 layout(location = 0) out mediump mat2x3 var;
501 precision mediump float;
502 ${FRAGMENT_DECLARATIONS}
503 layout(location = 0) in mat2x3 var;
514 desc "varying of type mat2x4"
517 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
518 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
522 ${VERTEX_DECLARATIONS}
523 layout(location = 0) out mediump mat2x4 var;
532 precision mediump float;
533 ${FRAGMENT_DECLARATIONS}
534 layout(location = 0) in mat2x4 var;
545 desc "varying of type mat3x2"
548 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
549 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
553 ${VERTEX_DECLARATIONS}
554 layout(location = 0) out mediump mat3x2 var;
563 precision mediump float;
564 ${FRAGMENT_DECLARATIONS}
565 layout(location = 0) in mat3x2 var;
576 desc "varying of type mat3"
579 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) ];
580 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) ];
584 ${VERTEX_DECLARATIONS}
585 layout(location = 0) out mediump mat3 var;
594 precision mediump float;
595 ${FRAGMENT_DECLARATIONS}
596 layout(location = 0) in mat3 var;
607 desc "varying of type mat3x4"
610 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) ];
611 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) ];
615 ${VERTEX_DECLARATIONS}
616 layout(location = 0) out mediump mat3x4 var;
625 precision mediump float;
626 ${FRAGMENT_DECLARATIONS}
627 layout(location = 0) in mat3x4 var;
638 desc "varying of type mat4x2"
641 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
642 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
646 ${VERTEX_DECLARATIONS}
647 layout(location = 0) out mediump mat4x2 var;
656 precision mediump float;
657 ${FRAGMENT_DECLARATIONS}
658 layout(location = 0) in mat4x2 var;
669 desc "varying of type mat4x3"
672 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) ];
673 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) ];
677 ${VERTEX_DECLARATIONS}
678 layout(location = 0) out mediump mat4x3 var;
687 precision mediump float;
688 ${FRAGMENT_DECLARATIONS}
689 layout(location = 0) in mat4x3 var;
700 desc "varying of type mat4"
703 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) ];
704 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) ];
708 ${VERTEX_DECLARATIONS}
709 layout(location = 0) out mediump mat4 var;
718 precision mediump float;
719 ${FRAGMENT_DECLARATIONS}
720 layout(location = 0) in mat4 var;
731 desc "varying of type int"
734 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
735 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
739 ${VERTEX_DECLARATIONS}
740 layout(location = 0) flat out mediump int var;
750 ${FRAGMENT_DECLARATIONS}
751 layout(location = 0) flat in int var;
762 desc "varying of type ivec2"
765 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
766 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
770 ${VERTEX_DECLARATIONS}
771 layout(location = 0) flat out mediump ivec2 var;
781 ${FRAGMENT_DECLARATIONS}
782 layout(location = 0) flat in ivec2 var;
793 desc "varying of type ivec3"
796 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
797 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
801 ${VERTEX_DECLARATIONS}
802 layout(location = 0) flat out mediump ivec3 var;
812 ${FRAGMENT_DECLARATIONS}
813 layout(location = 0) flat in ivec3 var;
824 desc "varying of type ivec4"
827 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) ];
828 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) ];
832 ${VERTEX_DECLARATIONS}
833 layout(location = 0) flat out mediump ivec4 var;
843 ${FRAGMENT_DECLARATIONS}
844 layout(location = 0) flat in ivec4 var;
855 desc "varying of type int"
858 input uint in0 = [ 1 | 2 | 3 | 16 ];
859 output uint out0 = [ 1 | 2 | 3 | 16 ];
863 ${VERTEX_DECLARATIONS}
864 layout(location = 0) flat out mediump uint var;
874 ${FRAGMENT_DECLARATIONS}
875 layout(location = 0) flat in uint var;
886 desc "varying of type uvec2"
889 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
890 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
894 ${VERTEX_DECLARATIONS}
895 layout(location = 0) flat out mediump uvec2 var;
905 ${FRAGMENT_DECLARATIONS}
906 layout(location = 0) flat in uvec2 var;
917 desc "varying of type uvec3"
920 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
921 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
925 ${VERTEX_DECLARATIONS}
926 layout(location = 0) flat out mediump uvec3 var;
936 ${FRAGMENT_DECLARATIONS}
937 layout(location = 0) flat in uvec3 var;
948 desc "varying of type uvec4"
951 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) ];
952 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) ];
956 ${VERTEX_DECLARATIONS}
957 layout(location = 0) flat out mediump uvec4 var;
967 ${FRAGMENT_DECLARATIONS}
968 layout(location = 0) flat in uvec4 var;
978 group struct "Structure varyings"
981 desc "varying of type float inside struct"
984 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
985 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
989 ${VERTEX_DECLARATIONS}
990 struct S { mediump float a; };
991 layout(location = 0) out S var;
1000 precision mediump float;
1001 ${FRAGMENT_DECLARATIONS}
1002 struct S { mediump float a; };
1003 layout(location = 0) in S var;
1014 desc "varying of type vec2 inside struct"
1017 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) ];
1018 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) ];
1022 ${VERTEX_DECLARATIONS}
1023 struct S { mediump vec2 a; };
1024 layout(location = 0) out S var;
1033 precision mediump float;
1034 ${FRAGMENT_DECLARATIONS}
1035 struct S { mediump vec2 a; };
1036 layout(location = 0) in S var;
1047 desc "varying of type vec3 inside struct"
1050 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) ];
1051 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) ];
1055 ${VERTEX_DECLARATIONS}
1056 struct S { mediump vec3 a; };
1057 layout(location = 0) out S var;
1066 precision mediump float;
1067 ${FRAGMENT_DECLARATIONS}
1068 struct S { mediump vec3 a; };
1069 layout(location = 0) in S var;
1080 desc "varying of type vec4 inside struct"
1083 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) ];
1084 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) ];
1088 ${VERTEX_DECLARATIONS}
1089 struct S { mediump vec4 a; };
1090 layout(location = 0) out S var;
1099 precision mediump float;
1100 ${FRAGMENT_DECLARATIONS}
1101 struct S { mediump vec4 a; };
1102 layout(location = 0) in S var;
1113 desc "varying of type mat2 inside struct"
1116 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) ];
1117 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) ];
1121 ${VERTEX_DECLARATIONS}
1122 struct S { mediump mat2 a; };
1123 layout(location = 0) out S var;
1132 precision mediump float;
1133 ${FRAGMENT_DECLARATIONS}
1134 struct S { mediump mat2 a; };
1135 layout(location = 0) in S var;
1146 desc "varying of type mat2x3 inside struct"
1149 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1150 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1154 ${VERTEX_DECLARATIONS}
1155 struct S { mediump mat2x3 a; };
1156 layout(location = 0) out S var;
1165 precision mediump float;
1166 ${FRAGMENT_DECLARATIONS}
1167 struct S { mediump mat2x3 a; };
1168 layout(location = 0) in S var;
1179 desc "varying of type mat2x4 inside struct"
1182 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1183 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1187 ${VERTEX_DECLARATIONS}
1188 struct S { mediump mat2x4 a; };
1189 layout(location = 0) out S var;
1198 precision mediump float;
1199 ${FRAGMENT_DECLARATIONS}
1200 struct S { mediump mat2x4 a; };
1201 layout(location = 0) in S var;
1212 desc "varying of type mat3x2 inside struct"
1215 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1216 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1220 ${VERTEX_DECLARATIONS}
1221 struct S { mediump mat3x2 a; };
1222 layout(location = 0) out S var;
1231 precision mediump float;
1232 ${FRAGMENT_DECLARATIONS}
1233 struct S { mediump mat3x2 a; };
1234 layout(location = 0) in S var;
1245 desc "varying of type mat3 inside struct"
1248 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) ];
1249 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) ];
1253 ${VERTEX_DECLARATIONS}
1254 struct S { mediump mat3 a; };
1255 layout(location = 0) out S var;
1264 precision mediump float;
1265 ${FRAGMENT_DECLARATIONS}
1266 struct S { mediump mat3 a; };
1267 layout(location = 0) in S var;
1278 desc "varying of type mat3x4 inside struct"
1281 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) ];
1282 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) ];
1286 ${VERTEX_DECLARATIONS}
1287 struct S { mediump mat3x4 a; };
1288 layout(location = 0) out S var;
1297 precision mediump float;
1298 ${FRAGMENT_DECLARATIONS}
1299 struct S { mediump mat3x4 a; };
1300 layout(location = 0) in S var;
1311 desc "varying of type mat4x2 inside struct"
1314 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1315 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1319 ${VERTEX_DECLARATIONS}
1320 struct S { mediump mat4x2 a; };
1321 layout(location = 0) out S var;
1330 precision mediump float;
1331 ${FRAGMENT_DECLARATIONS}
1332 struct S { mediump mat4x2 a; };
1333 layout(location = 0) in S var;
1344 desc "varying of type mat4x3 inside struct"
1347 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) ];
1348 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) ];
1352 ${VERTEX_DECLARATIONS}
1353 struct S { mediump mat4x3 a; };
1354 layout(location = 0) out S var;
1363 precision mediump float;
1364 ${FRAGMENT_DECLARATIONS}
1365 struct S { mediump mat4x3 a; };
1366 layout(location = 0) in S var;
1377 desc "varying of type mat4 inside struct"
1380 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) ];
1381 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) ];
1385 ${VERTEX_DECLARATIONS}
1386 struct S { mediump mat4 a; };
1387 layout(location = 0) out S var;
1396 precision mediump float;
1397 ${FRAGMENT_DECLARATIONS}
1398 struct S { mediump mat4 a; };
1399 layout(location = 0) in S var;
1410 desc "varying of type int inside struct"
1413 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1414 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1418 ${VERTEX_DECLARATIONS}
1419 struct S { mediump int a; };
1420 layout(location = 0) flat out S var;
1430 ${FRAGMENT_DECLARATIONS}
1431 struct S { mediump int a; };
1432 layout(location = 0) flat in S var;
1443 desc "varying of type ivec2 inside struct"
1446 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1447 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1451 ${VERTEX_DECLARATIONS}
1452 struct S { mediump ivec2 a; };
1453 layout(location = 0) flat out S var;
1463 ${FRAGMENT_DECLARATIONS}
1464 struct S { mediump ivec2 a; };
1465 layout(location = 0) flat in S var;
1476 desc "varying of type ivec3 inside struct"
1479 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1480 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1484 ${VERTEX_DECLARATIONS}
1485 struct S { mediump ivec3 a; };
1486 layout(location = 0) flat out S var;
1496 ${FRAGMENT_DECLARATIONS}
1497 struct S { mediump ivec3 a; };
1498 layout(location = 0) flat in S var;
1509 desc "varying of type ivec4 inside struct"
1512 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) ];
1513 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) ];
1517 ${VERTEX_DECLARATIONS}
1518 struct S { mediump ivec4 a; };
1519 layout(location = 0) flat out S var;
1529 ${FRAGMENT_DECLARATIONS}
1530 struct S { mediump ivec4 a; };
1531 layout(location = 0) flat in S var;
1542 desc "varying of type uint in struct"
1545 input uint in0 = [ 1 | 2 | 3 | 16 ];
1546 output uint out0 = [ 1 | 2 | 3 | 16 ];
1550 ${VERTEX_DECLARATIONS}
1551 struct S { mediump uint a; };
1552 layout(location = 0) flat out S var;
1562 ${FRAGMENT_DECLARATIONS}
1563 struct S { mediump uint a; };
1564 layout(location = 0) flat in S var;
1575 desc "varying of type uvec2 inside struct"
1578 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1579 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1583 ${VERTEX_DECLARATIONS}
1584 struct S { mediump uvec2 a; };
1585 layout(location = 0) flat out S var;
1595 ${FRAGMENT_DECLARATIONS}
1596 struct S { mediump uvec2 a; };
1597 layout(location = 0) flat in S var;
1608 desc "varying of type uvec3 inside struct"
1611 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1612 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1616 ${VERTEX_DECLARATIONS}
1617 struct S { mediump uvec3 a; };
1618 layout(location = 0) flat out S var;
1628 ${FRAGMENT_DECLARATIONS}
1629 struct S { mediump uvec3 a; };
1630 layout(location = 0) flat in S var;
1641 desc "varying of type uvec4 inside struct"
1644 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) ];
1645 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) ];
1649 ${VERTEX_DECLARATIONS}
1650 struct S { mediump uvec4 a; };
1651 layout(location = 0) flat out S var;
1661 ${FRAGMENT_DECLARATIONS}
1662 struct S { mediump uvec4 a; };
1663 layout(location = 0) flat in S var;
1674 desc "varyings of type float and vec3 inside struct"
1677 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1678 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1679 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) ];
1680 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) ];
1684 ${VERTEX_DECLARATIONS}
1685 struct S { mediump float a; highp vec3 b; };
1686 layout(location = 0) out S var;
1696 precision mediump float;
1697 ${FRAGMENT_DECLARATIONS}
1698 struct S { mediump float a; highp vec3 b; };
1699 layout(location = 0) in S var;
1709 case float_uvec2_vec3
1711 desc "varyings of type float and vec3 inside struct"
1714 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1715 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1716 input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1717 output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1718 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) ];
1719 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) ];
1723 ${VERTEX_DECLARATIONS}
1724 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1725 layout(location = 0) flat out S var;
1737 precision mediump float;
1738 ${FRAGMENT_DECLARATIONS}
1739 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1740 layout(location = 0) flat in S var;
1752 group interpolation "Varying interpolation modes"
1755 desc "varying of type vec4"
1758 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) ];
1759 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) ];
1763 ${VERTEX_DECLARATIONS}
1764 layout(location = 0) smooth out mediump vec4 var;
1773 precision mediump float;
1774 ${FRAGMENT_DECLARATIONS}
1775 layout(location = 0) smooth in vec4 var;
1786 desc "varying of type vec4"
1789 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) ];
1790 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) ];
1794 ${VERTEX_DECLARATIONS}
1795 layout(location = 0) centroid out mediump vec4 var;
1804 precision mediump float;
1805 ${FRAGMENT_DECLARATIONS}
1806 layout(location = 0) centroid in vec4 var;
1817 desc "varying of type vec4"
1820 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) ];
1821 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) ];
1825 ${VERTEX_DECLARATIONS}
1826 layout(location = 0) flat out mediump vec4 var;
1835 precision mediump float;
1836 ${FRAGMENT_DECLARATIONS}
1837 layout(location = 0) flat in vec4 var;
1847 group usage "Varying usage in shaders"
1850 desc "read back (an already written) varying in the vertex shader"
1853 input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
1854 output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ];
1858 precision mediump float;
1859 ${VERTEX_DECLARATIONS}
1860 layout(location = 0) out float var1;
1861 layout(location = 1) out float var2;
1872 precision mediump float;
1873 ${FRAGMENT_DECLARATIONS}
1874 layout(location = 0) in float var1;
1875 layout(location = 1) in float var2;