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;
297 # differing name (linking is done by location only in SPIR-V)
298 case differing_name_1
300 desc "varying declared with matching location but different name"
303 input float in0 = [ 2.0 | 5.0 | -3.0 | 4.0 ];
304 input float in1 = [ 4.0 | 1.0 | -0.5 | 2.0 ];
305 output float out0 = [ -2.0 | 4.0 | -2.5 | 2.0 ];
310 ${VERTEX_DECLARATIONS}
311 layout(location = 0) out highp float vtxVarB;
312 layout(location = 2) out highp float vtxVarA;
322 precision mediump float;
323 ${FRAGMENT_DECLARATIONS}
324 layout(location = 2) in highp float fragVarA;
325 layout(location = 0) in highp float fragVarB;
328 out0 = fragVarA - fragVarB;
334 # differing name (linking is done by location only in SPIR-V)
335 case differing_name_2
337 desc "varying declared with matching location but different name"
340 input float in0 = [ 2.0 | 5.0 | -3.0 | 4.0 ];
341 input float in1 = [ 4.0 | 1.0 | -0.5 | 2.0 ];
342 output float out0 = [ -2.0 | 4.0 | -2.5 | 2.0 ];
347 ${VERTEX_DECLARATIONS}
348 layout(location = 0) out highp float varA;
349 layout(location = 2) out highp float varB;
359 precision mediump float;
360 ${FRAGMENT_DECLARATIONS}
361 layout(location = 2) in highp float varA;
362 layout(location = 0) in highp float varB;
372 group basic_types "Basic varying types"
375 desc "varying of type float"
378 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
379 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
383 ${VERTEX_DECLARATIONS}
384 layout(location = 0) out mediump float var;
393 precision mediump float;
394 ${FRAGMENT_DECLARATIONS}
395 layout(location = 0) in float var;
406 desc "varying of type vec2"
409 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) ];
410 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) ];
414 ${VERTEX_DECLARATIONS}
415 layout(location = 0) out mediump vec2 var;
424 precision mediump float;
425 ${FRAGMENT_DECLARATIONS}
426 layout(location = 0) in vec2 var;
437 desc "varying of type vec3"
440 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) ];
441 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) ];
445 ${VERTEX_DECLARATIONS}
446 layout(location = 0) out mediump vec3 var;
455 precision mediump float;
456 ${FRAGMENT_DECLARATIONS}
457 layout(location = 0) in vec3 var;
468 desc "varying of type vec4"
471 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) ];
472 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) ];
476 ${VERTEX_DECLARATIONS}
477 layout(location = 0) out mediump vec4 var;
486 precision mediump float;
487 ${FRAGMENT_DECLARATIONS}
488 layout(location = 0) in vec4 var;
499 desc "varying of type mat2"
502 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) ];
503 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) ];
507 ${VERTEX_DECLARATIONS}
508 layout(location = 0) out mediump mat2 var;
517 precision mediump float;
518 ${FRAGMENT_DECLARATIONS}
519 layout(location = 0) in mat2 var;
530 desc "varying of type mat2x3"
533 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
534 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
538 ${VERTEX_DECLARATIONS}
539 layout(location = 0) out mediump mat2x3 var;
548 precision mediump float;
549 ${FRAGMENT_DECLARATIONS}
550 layout(location = 0) in mat2x3 var;
561 desc "varying of type mat2x4"
564 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
565 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
569 ${VERTEX_DECLARATIONS}
570 layout(location = 0) out mediump mat2x4 var;
579 precision mediump float;
580 ${FRAGMENT_DECLARATIONS}
581 layout(location = 0) in mat2x4 var;
592 desc "varying of type mat3x2"
595 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
596 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
600 ${VERTEX_DECLARATIONS}
601 layout(location = 0) out mediump mat3x2 var;
610 precision mediump float;
611 ${FRAGMENT_DECLARATIONS}
612 layout(location = 0) in mat3x2 var;
623 desc "varying of type mat3"
626 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) ];
627 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) ];
631 ${VERTEX_DECLARATIONS}
632 layout(location = 0) out mediump mat3 var;
641 precision mediump float;
642 ${FRAGMENT_DECLARATIONS}
643 layout(location = 0) in mat3 var;
654 desc "varying of type mat3x4"
657 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) ];
658 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) ];
662 ${VERTEX_DECLARATIONS}
663 layout(location = 0) out mediump mat3x4 var;
672 precision mediump float;
673 ${FRAGMENT_DECLARATIONS}
674 layout(location = 0) in mat3x4 var;
685 desc "varying of type mat4x2"
688 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
689 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
693 ${VERTEX_DECLARATIONS}
694 layout(location = 0) out mediump mat4x2 var;
703 precision mediump float;
704 ${FRAGMENT_DECLARATIONS}
705 layout(location = 0) in mat4x2 var;
716 desc "varying of type mat4x3"
719 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) ];
720 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) ];
724 ${VERTEX_DECLARATIONS}
725 layout(location = 0) out mediump mat4x3 var;
734 precision mediump float;
735 ${FRAGMENT_DECLARATIONS}
736 layout(location = 0) in mat4x3 var;
747 desc "varying of type mat4"
750 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) ];
751 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) ];
755 ${VERTEX_DECLARATIONS}
756 layout(location = 0) out mediump mat4 var;
765 precision mediump float;
766 ${FRAGMENT_DECLARATIONS}
767 layout(location = 0) in mat4 var;
778 desc "varying of type int"
781 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
782 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
786 ${VERTEX_DECLARATIONS}
787 layout(location = 0) flat out mediump int var;
797 ${FRAGMENT_DECLARATIONS}
798 layout(location = 0) flat in int var;
809 desc "varying of type ivec2"
812 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
813 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
817 ${VERTEX_DECLARATIONS}
818 layout(location = 0) flat out mediump ivec2 var;
828 ${FRAGMENT_DECLARATIONS}
829 layout(location = 0) flat in ivec2 var;
840 desc "varying of type ivec3"
843 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
844 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
848 ${VERTEX_DECLARATIONS}
849 layout(location = 0) flat out mediump ivec3 var;
859 ${FRAGMENT_DECLARATIONS}
860 layout(location = 0) flat in ivec3 var;
871 desc "varying of type ivec4"
874 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) ];
875 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) ];
879 ${VERTEX_DECLARATIONS}
880 layout(location = 0) flat out mediump ivec4 var;
890 ${FRAGMENT_DECLARATIONS}
891 layout(location = 0) flat in ivec4 var;
902 desc "varying of type int"
905 input uint in0 = [ 1 | 2 | 3 | 16 ];
906 output uint out0 = [ 1 | 2 | 3 | 16 ];
910 ${VERTEX_DECLARATIONS}
911 layout(location = 0) flat out mediump uint var;
921 ${FRAGMENT_DECLARATIONS}
922 layout(location = 0) flat in uint var;
933 desc "varying of type uvec2"
936 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
937 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
941 ${VERTEX_DECLARATIONS}
942 layout(location = 0) flat out mediump uvec2 var;
952 ${FRAGMENT_DECLARATIONS}
953 layout(location = 0) flat in uvec2 var;
964 desc "varying of type uvec3"
967 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
968 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
972 ${VERTEX_DECLARATIONS}
973 layout(location = 0) flat out mediump uvec3 var;
983 ${FRAGMENT_DECLARATIONS}
984 layout(location = 0) flat in uvec3 var;
995 desc "varying of type uvec4"
998 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) ];
999 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) ];
1003 ${VERTEX_DECLARATIONS}
1004 layout(location = 0) flat out mediump uvec4 var;
1014 ${FRAGMENT_DECLARATIONS}
1015 layout(location = 0) flat in uvec4 var;
1025 group struct "Structure varyings"
1028 desc "varying of type float inside struct"
1031 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1032 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1036 ${VERTEX_DECLARATIONS}
1037 struct S { mediump float a; };
1038 layout(location = 0) out S var;
1047 precision mediump float;
1048 ${FRAGMENT_DECLARATIONS}
1049 struct S { mediump float a; };
1050 layout(location = 0) in S var;
1061 desc "varying of type vec2 inside struct"
1064 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) ];
1065 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) ];
1069 ${VERTEX_DECLARATIONS}
1070 struct S { mediump vec2 a; };
1071 layout(location = 0) out S var;
1080 precision mediump float;
1081 ${FRAGMENT_DECLARATIONS}
1082 struct S { mediump vec2 a; };
1083 layout(location = 0) in S var;
1094 desc "varying of type vec3 inside struct"
1097 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) ];
1098 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) ];
1102 ${VERTEX_DECLARATIONS}
1103 struct S { mediump vec3 a; };
1104 layout(location = 0) out S var;
1113 precision mediump float;
1114 ${FRAGMENT_DECLARATIONS}
1115 struct S { mediump vec3 a; };
1116 layout(location = 0) in S var;
1127 desc "varying of type vec4 inside struct"
1130 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) ];
1131 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) ];
1135 ${VERTEX_DECLARATIONS}
1136 struct S { mediump vec4 a; };
1137 layout(location = 0) out S var;
1146 precision mediump float;
1147 ${FRAGMENT_DECLARATIONS}
1148 struct S { mediump vec4 a; };
1149 layout(location = 0) in S var;
1160 desc "varying of type mat2 inside struct"
1163 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) ];
1164 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) ];
1168 ${VERTEX_DECLARATIONS}
1169 struct S { mediump mat2 a; };
1170 layout(location = 0) out S var;
1179 precision mediump float;
1180 ${FRAGMENT_DECLARATIONS}
1181 struct S { mediump mat2 a; };
1182 layout(location = 0) in S var;
1193 desc "varying of type mat2x3 inside struct"
1196 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1197 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1201 ${VERTEX_DECLARATIONS}
1202 struct S { mediump mat2x3 a; };
1203 layout(location = 0) out S var;
1212 precision mediump float;
1213 ${FRAGMENT_DECLARATIONS}
1214 struct S { mediump mat2x3 a; };
1215 layout(location = 0) in S var;
1226 desc "varying of type mat2x4 inside struct"
1229 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1230 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1234 ${VERTEX_DECLARATIONS}
1235 struct S { mediump mat2x4 a; };
1236 layout(location = 0) out S var;
1245 precision mediump float;
1246 ${FRAGMENT_DECLARATIONS}
1247 struct S { mediump mat2x4 a; };
1248 layout(location = 0) in S var;
1259 desc "varying of type mat3x2 inside struct"
1262 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1263 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1267 ${VERTEX_DECLARATIONS}
1268 struct S { mediump mat3x2 a; };
1269 layout(location = 0) out S var;
1278 precision mediump float;
1279 ${FRAGMENT_DECLARATIONS}
1280 struct S { mediump mat3x2 a; };
1281 layout(location = 0) in S var;
1292 desc "varying of type mat3 inside struct"
1295 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) ];
1296 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) ];
1300 ${VERTEX_DECLARATIONS}
1301 struct S { mediump mat3 a; };
1302 layout(location = 0) out S var;
1311 precision mediump float;
1312 ${FRAGMENT_DECLARATIONS}
1313 struct S { mediump mat3 a; };
1314 layout(location = 0) in S var;
1325 desc "varying of type mat3x4 inside struct"
1328 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) ];
1329 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) ];
1333 ${VERTEX_DECLARATIONS}
1334 struct S { mediump mat3x4 a; };
1335 layout(location = 0) out S var;
1344 precision mediump float;
1345 ${FRAGMENT_DECLARATIONS}
1346 struct S { mediump mat3x4 a; };
1347 layout(location = 0) in S var;
1358 desc "varying of type mat4x2 inside struct"
1361 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1362 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1366 ${VERTEX_DECLARATIONS}
1367 struct S { mediump mat4x2 a; };
1368 layout(location = 0) out S var;
1377 precision mediump float;
1378 ${FRAGMENT_DECLARATIONS}
1379 struct S { mediump mat4x2 a; };
1380 layout(location = 0) in S var;
1391 desc "varying of type mat4x3 inside struct"
1394 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) ];
1395 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) ];
1399 ${VERTEX_DECLARATIONS}
1400 struct S { mediump mat4x3 a; };
1401 layout(location = 0) out S var;
1410 precision mediump float;
1411 ${FRAGMENT_DECLARATIONS}
1412 struct S { mediump mat4x3 a; };
1413 layout(location = 0) in S var;
1424 desc "varying of type mat4 inside struct"
1427 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) ];
1428 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) ];
1432 ${VERTEX_DECLARATIONS}
1433 struct S { mediump mat4 a; };
1434 layout(location = 0) out S var;
1443 precision mediump float;
1444 ${FRAGMENT_DECLARATIONS}
1445 struct S { mediump mat4 a; };
1446 layout(location = 0) in S var;
1457 desc "varying of type int inside struct"
1460 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1461 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1465 ${VERTEX_DECLARATIONS}
1466 struct S { mediump int a; };
1467 layout(location = 0) flat out S var;
1477 ${FRAGMENT_DECLARATIONS}
1478 struct S { mediump int a; };
1479 layout(location = 0) flat in S var;
1490 desc "varying of type ivec2 inside struct"
1493 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1494 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1498 ${VERTEX_DECLARATIONS}
1499 struct S { mediump ivec2 a; };
1500 layout(location = 0) flat out S var;
1510 ${FRAGMENT_DECLARATIONS}
1511 struct S { mediump ivec2 a; };
1512 layout(location = 0) flat in S var;
1523 desc "varying of type ivec3 inside struct"
1526 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1527 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1531 ${VERTEX_DECLARATIONS}
1532 struct S { mediump ivec3 a; };
1533 layout(location = 0) flat out S var;
1543 ${FRAGMENT_DECLARATIONS}
1544 struct S { mediump ivec3 a; };
1545 layout(location = 0) flat in S var;
1556 desc "varying of type ivec4 inside struct"
1559 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) ];
1560 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) ];
1564 ${VERTEX_DECLARATIONS}
1565 struct S { mediump ivec4 a; };
1566 layout(location = 0) flat out S var;
1576 ${FRAGMENT_DECLARATIONS}
1577 struct S { mediump ivec4 a; };
1578 layout(location = 0) flat in S var;
1589 desc "varying of type uint in struct"
1592 input uint in0 = [ 1 | 2 | 3 | 16 ];
1593 output uint out0 = [ 1 | 2 | 3 | 16 ];
1597 ${VERTEX_DECLARATIONS}
1598 struct S { mediump uint a; };
1599 layout(location = 0) flat out S var;
1609 ${FRAGMENT_DECLARATIONS}
1610 struct S { mediump uint a; };
1611 layout(location = 0) flat in S var;
1622 desc "varying of type uvec2 inside struct"
1625 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1626 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1630 ${VERTEX_DECLARATIONS}
1631 struct S { mediump uvec2 a; };
1632 layout(location = 0) flat out S var;
1642 ${FRAGMENT_DECLARATIONS}
1643 struct S { mediump uvec2 a; };
1644 layout(location = 0) flat in S var;
1655 desc "varying of type uvec3 inside struct"
1658 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1659 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1663 ${VERTEX_DECLARATIONS}
1664 struct S { mediump uvec3 a; };
1665 layout(location = 0) flat out S var;
1675 ${FRAGMENT_DECLARATIONS}
1676 struct S { mediump uvec3 a; };
1677 layout(location = 0) flat in S var;
1688 desc "varying of type uvec4 inside struct"
1691 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) ];
1692 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) ];
1696 ${VERTEX_DECLARATIONS}
1697 struct S { mediump uvec4 a; };
1698 layout(location = 0) flat out S var;
1708 ${FRAGMENT_DECLARATIONS}
1709 struct S { mediump uvec4 a; };
1710 layout(location = 0) flat in S var;
1721 desc "varyings of type float and vec3 inside struct"
1724 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1725 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1726 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) ];
1727 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) ];
1731 ${VERTEX_DECLARATIONS}
1732 struct S { mediump float a; highp vec3 b; };
1733 layout(location = 0) out S var;
1743 precision mediump float;
1744 ${FRAGMENT_DECLARATIONS}
1745 struct S { mediump float a; highp vec3 b; };
1746 layout(location = 0) in S var;
1756 case float_uvec2_vec3
1758 desc "varyings of type float and vec3 inside struct"
1761 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1762 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1763 input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1764 output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1765 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) ];
1766 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) ];
1770 ${VERTEX_DECLARATIONS}
1771 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1772 layout(location = 0) flat out S var;
1784 precision mediump float;
1785 ${FRAGMENT_DECLARATIONS}
1786 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1787 layout(location = 0) flat in S var;
1799 group interpolation "Varying interpolation modes"
1802 desc "varying of type vec4"
1805 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) ];
1806 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) ];
1810 ${VERTEX_DECLARATIONS}
1811 layout(location = 0) smooth out mediump vec4 var;
1820 precision mediump float;
1821 ${FRAGMENT_DECLARATIONS}
1822 layout(location = 0) smooth in vec4 var;
1833 desc "varying of type vec4"
1836 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) ];
1837 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) ];
1841 ${VERTEX_DECLARATIONS}
1842 layout(location = 0) centroid out mediump vec4 var;
1851 precision mediump float;
1852 ${FRAGMENT_DECLARATIONS}
1853 layout(location = 0) centroid in vec4 var;
1864 desc "varying of type vec4"
1867 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) ];
1868 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) ];
1872 ${VERTEX_DECLARATIONS}
1873 layout(location = 0) flat out mediump vec4 var;
1882 precision mediump float;
1883 ${FRAGMENT_DECLARATIONS}
1884 layout(location = 0) flat in vec4 var;
1894 group usage "Varying usage in shaders"
1897 desc "read back (an already written) varying in the vertex shader"
1900 input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
1901 output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ];
1905 precision mediump float;
1906 ${VERTEX_DECLARATIONS}
1907 layout(location = 0) out float var1;
1908 layout(location = 1) out float var2;
1919 precision mediump float;
1920 ${FRAGMENT_DECLARATIONS}
1921 layout(location = 0) in float var1;
1922 layout(location = 1) in float var2;