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 # different interpolation
166 case differing_interpolation_2
168 desc "varying interpolation different (smooth vs. centroid)"
171 input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
172 output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
177 ${VERTEX_DECLARATIONS}
178 layout(location = 0) smooth out mediump float var;
187 precision highp float;
188 ${FRAGMENT_DECLARATIONS}
189 layout(location = 0) centroid in mediump float var;
198 # differing name (linking is done by location only in SPIR-V)
199 case differing_name_1
201 desc "varying declared with matching location but different name"
204 input float in0 = [ 2.0 | 5.0 | -3.0 | 4.0 ];
205 input float in1 = [ 4.0 | 1.0 | -0.5 | 2.0 ];
206 output float out0 = [ -2.0 | 4.0 | -2.5 | 2.0 ];
211 ${VERTEX_DECLARATIONS}
212 layout(location = 0) out highp float vtxVarB;
213 layout(location = 2) out highp float vtxVarA;
223 precision highp float;
224 ${FRAGMENT_DECLARATIONS}
225 layout(location = 2) in highp float fragVarA;
226 layout(location = 0) in highp float fragVarB;
229 out0 = fragVarA - fragVarB;
235 # differing name (linking is done by location only in SPIR-V)
236 case differing_name_2
238 desc "varying declared with matching location but different name"
241 input float in0 = [ 2.0 | 5.0 | -3.0 | 4.0 ];
242 input float in1 = [ 4.0 | 1.0 | -0.5 | 2.0 ];
243 output float out0 = [ -2.0 | 4.0 | -2.5 | 2.0 ];
248 ${VERTEX_DECLARATIONS}
249 layout(location = 0) out highp float varA;
250 layout(location = 2) out highp float varB;
260 precision highp float;
261 ${FRAGMENT_DECLARATIONS}
262 layout(location = 2) in highp float varA;
263 layout(location = 0) in highp float varB;
273 group basic_types "Basic varying types"
276 desc "varying of type float"
279 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
280 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
284 ${VERTEX_DECLARATIONS}
285 layout(location = 0) out float var;
294 precision highp float;
295 ${FRAGMENT_DECLARATIONS}
296 layout(location = 0) in float var;
307 desc "varying of type vec2"
310 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) ];
311 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) ];
315 ${VERTEX_DECLARATIONS}
316 layout(location = 0) out vec2 var;
325 precision highp float;
326 ${FRAGMENT_DECLARATIONS}
327 layout(location = 0) in vec2 var;
338 desc "varying of type vec3"
341 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) ];
342 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) ];
346 ${VERTEX_DECLARATIONS}
347 layout(location = 0) out vec3 var;
356 precision highp float;
357 ${FRAGMENT_DECLARATIONS}
358 layout(location = 0) in vec3 var;
369 desc "varying of type vec4"
372 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) ];
373 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) ];
377 ${VERTEX_DECLARATIONS}
378 layout(location = 0) out vec4 var;
387 precision highp float;
388 ${FRAGMENT_DECLARATIONS}
389 layout(location = 0) in vec4 var;
400 desc "varying of type mat2"
403 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) ];
404 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) ];
408 ${VERTEX_DECLARATIONS}
409 layout(location = 0) out mat2 var;
418 precision highp float;
419 ${FRAGMENT_DECLARATIONS}
420 layout(location = 0) in mat2 var;
431 desc "varying of type mat2x3"
434 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
435 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
439 ${VERTEX_DECLARATIONS}
440 layout(location = 0) out mat2x3 var;
449 precision highp float;
450 ${FRAGMENT_DECLARATIONS}
451 layout(location = 0) in mat2x3 var;
462 desc "varying of type mat2x4"
465 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
466 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
470 ${VERTEX_DECLARATIONS}
471 layout(location = 0) out mat2x4 var;
480 precision highp float;
481 ${FRAGMENT_DECLARATIONS}
482 layout(location = 0) in mat2x4 var;
493 desc "varying of type mat3x2"
496 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
497 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
501 ${VERTEX_DECLARATIONS}
502 layout(location = 0) out mat3x2 var;
511 precision highp float;
512 ${FRAGMENT_DECLARATIONS}
513 layout(location = 0) in mat3x2 var;
524 desc "varying of type mat3"
527 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) ];
528 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) ];
532 ${VERTEX_DECLARATIONS}
533 layout(location = 0) out mat3 var;
542 precision highp float;
543 ${FRAGMENT_DECLARATIONS}
544 layout(location = 0) in mat3 var;
555 desc "varying of type mat3x4"
558 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) ];
559 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) ];
563 ${VERTEX_DECLARATIONS}
564 layout(location = 0) out mat3x4 var;
573 precision highp float;
574 ${FRAGMENT_DECLARATIONS}
575 layout(location = 0) in mat3x4 var;
586 desc "varying of type mat4x2"
589 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
590 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
594 ${VERTEX_DECLARATIONS}
595 layout(location = 0) out mat4x2 var;
604 precision highp float;
605 ${FRAGMENT_DECLARATIONS}
606 layout(location = 0) in mat4x2 var;
617 desc "varying of type mat4x3"
620 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) ];
621 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) ];
625 ${VERTEX_DECLARATIONS}
626 layout(location = 0) out mat4x3 var;
635 precision highp float;
636 ${FRAGMENT_DECLARATIONS}
637 layout(location = 0) in mat4x3 var;
648 desc "varying of type mat4"
651 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) ];
652 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) ];
656 ${VERTEX_DECLARATIONS}
657 layout(location = 0) out mat4 var;
666 precision highp float;
667 ${FRAGMENT_DECLARATIONS}
668 layout(location = 0) in mat4 var;
679 desc "varying of type int"
682 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
683 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
687 ${VERTEX_DECLARATIONS}
688 layout(location = 0) flat out mediump int var;
698 ${FRAGMENT_DECLARATIONS}
699 layout(location = 0) flat in int var;
710 desc "varying of type ivec2"
713 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
714 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
718 ${VERTEX_DECLARATIONS}
719 layout(location = 0) flat out mediump ivec2 var;
729 ${FRAGMENT_DECLARATIONS}
730 layout(location = 0) flat in ivec2 var;
741 desc "varying of type ivec3"
744 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
745 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
749 ${VERTEX_DECLARATIONS}
750 layout(location = 0) flat out mediump ivec3 var;
760 ${FRAGMENT_DECLARATIONS}
761 layout(location = 0) flat in ivec3 var;
772 desc "varying of type ivec4"
775 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) ];
776 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) ];
780 ${VERTEX_DECLARATIONS}
781 layout(location = 0) flat out mediump ivec4 var;
791 ${FRAGMENT_DECLARATIONS}
792 layout(location = 0) flat in ivec4 var;
803 desc "varying of type int"
806 input uint in0 = [ 1 | 2 | 3 | 16 ];
807 output uint out0 = [ 1 | 2 | 3 | 16 ];
811 ${VERTEX_DECLARATIONS}
812 layout(location = 0) flat out mediump uint var;
822 ${FRAGMENT_DECLARATIONS}
823 layout(location = 0) flat in uint var;
834 desc "varying of type uvec2"
837 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
838 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
842 ${VERTEX_DECLARATIONS}
843 layout(location = 0) flat out mediump uvec2 var;
853 ${FRAGMENT_DECLARATIONS}
854 layout(location = 0) flat in uvec2 var;
865 desc "varying of type uvec3"
868 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
869 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
873 ${VERTEX_DECLARATIONS}
874 layout(location = 0) flat out mediump uvec3 var;
884 ${FRAGMENT_DECLARATIONS}
885 layout(location = 0) flat in uvec3 var;
896 desc "varying of type uvec4"
899 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) ];
900 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) ];
904 ${VERTEX_DECLARATIONS}
905 layout(location = 0) flat out mediump uvec4 var;
915 ${FRAGMENT_DECLARATIONS}
916 layout(location = 0) flat in uvec4 var;
926 group struct "Structure varyings"
929 desc "varying of type float inside struct"
932 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
933 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
937 ${VERTEX_DECLARATIONS}
938 struct S { mediump float a; };
939 layout(location = 0) out S var;
948 precision highp float;
949 ${FRAGMENT_DECLARATIONS}
950 struct S { mediump float a; };
951 layout(location = 0) in S var;
962 desc "varying of type vec2 inside struct"
965 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) ];
966 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) ];
970 ${VERTEX_DECLARATIONS}
971 struct S { mediump vec2 a; };
972 layout(location = 0) out S var;
981 precision highp float;
982 ${FRAGMENT_DECLARATIONS}
983 struct S { mediump vec2 a; };
984 layout(location = 0) in S var;
995 desc "varying of type vec3 inside struct"
998 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) ];
999 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) ];
1003 ${VERTEX_DECLARATIONS}
1004 struct S { mediump vec3 a; };
1005 layout(location = 0) out S var;
1014 precision highp float;
1015 ${FRAGMENT_DECLARATIONS}
1016 struct S { mediump vec3 a; };
1017 layout(location = 0) in S var;
1028 desc "varying of type vec4 inside struct"
1031 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) ];
1032 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) ];
1036 ${VERTEX_DECLARATIONS}
1037 struct S { mediump vec4 a; };
1038 layout(location = 0) out S var;
1047 precision highp float;
1048 ${FRAGMENT_DECLARATIONS}
1049 struct S { mediump vec4 a; };
1050 layout(location = 0) in S var;
1061 desc "varying of type mat2 inside struct"
1064 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) ];
1065 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) ];
1069 ${VERTEX_DECLARATIONS}
1070 struct S { mediump mat2 a; };
1071 layout(location = 0) out S var;
1080 precision highp float;
1081 ${FRAGMENT_DECLARATIONS}
1082 struct S { mediump mat2 a; };
1083 layout(location = 0) in S var;
1094 desc "varying of type mat2x3 inside struct"
1097 input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1098 output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1102 ${VERTEX_DECLARATIONS}
1103 struct S { mediump mat2x3 a; };
1104 layout(location = 0) out S var;
1113 precision highp float;
1114 ${FRAGMENT_DECLARATIONS}
1115 struct S { mediump mat2x3 a; };
1116 layout(location = 0) in S var;
1127 desc "varying of type mat2x4 inside struct"
1130 input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1131 output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1135 ${VERTEX_DECLARATIONS}
1136 struct S { mediump mat2x4 a; };
1137 layout(location = 0) out S var;
1146 precision highp float;
1147 ${FRAGMENT_DECLARATIONS}
1148 struct S { mediump mat2x4 a; };
1149 layout(location = 0) in S var;
1160 desc "varying of type mat3x2 inside struct"
1163 input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1164 output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
1168 ${VERTEX_DECLARATIONS}
1169 struct S { mediump mat3x2 a; };
1170 layout(location = 0) out S var;
1179 precision highp float;
1180 ${FRAGMENT_DECLARATIONS}
1181 struct S { mediump mat3x2 a; };
1182 layout(location = 0) in S var;
1193 desc "varying of type mat3 inside struct"
1196 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) ];
1197 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) ];
1201 ${VERTEX_DECLARATIONS}
1202 struct S { mediump mat3 a; };
1203 layout(location = 0) out S var;
1212 precision highp float;
1213 ${FRAGMENT_DECLARATIONS}
1214 struct S { mediump mat3 a; };
1215 layout(location = 0) in S var;
1226 desc "varying of type mat3x4 inside struct"
1229 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) ];
1230 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) ];
1234 ${VERTEX_DECLARATIONS}
1235 struct S { mediump mat3x4 a; };
1236 layout(location = 0) out S var;
1245 precision highp float;
1246 ${FRAGMENT_DECLARATIONS}
1247 struct S { mediump mat3x4 a; };
1248 layout(location = 0) in S var;
1259 desc "varying of type mat4x2 inside struct"
1262 input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1263 output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
1267 ${VERTEX_DECLARATIONS}
1268 struct S { mediump mat4x2 a; };
1269 layout(location = 0) out S var;
1278 precision highp float;
1279 ${FRAGMENT_DECLARATIONS}
1280 struct S { mediump mat4x2 a; };
1281 layout(location = 0) in S var;
1292 desc "varying of type mat4x3 inside struct"
1295 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) ];
1296 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) ];
1300 ${VERTEX_DECLARATIONS}
1301 struct S { mediump mat4x3 a; };
1302 layout(location = 0) out S var;
1311 precision highp float;
1312 ${FRAGMENT_DECLARATIONS}
1313 struct S { mediump mat4x3 a; };
1314 layout(location = 0) in S var;
1325 desc "varying of type mat4 inside struct"
1328 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) ];
1329 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) ];
1333 ${VERTEX_DECLARATIONS}
1334 struct S { mediump mat4 a; };
1335 layout(location = 0) out S var;
1344 precision highp float;
1345 ${FRAGMENT_DECLARATIONS}
1346 struct S { mediump mat4 a; };
1347 layout(location = 0) in S var;
1358 desc "varying of type int inside struct"
1361 input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1362 output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1366 ${VERTEX_DECLARATIONS}
1367 struct S { mediump int a; };
1368 layout(location = 0) flat out S var;
1378 ${FRAGMENT_DECLARATIONS}
1379 struct S { mediump int a; };
1380 layout(location = 0) flat in S var;
1391 desc "varying of type ivec2 inside struct"
1394 input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1395 output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
1399 ${VERTEX_DECLARATIONS}
1400 struct S { mediump ivec2 a; };
1401 layout(location = 0) flat out S var;
1411 ${FRAGMENT_DECLARATIONS}
1412 struct S { mediump ivec2 a; };
1413 layout(location = 0) flat in S var;
1424 desc "varying of type ivec3 inside struct"
1427 input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1428 output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
1432 ${VERTEX_DECLARATIONS}
1433 struct S { mediump ivec3 a; };
1434 layout(location = 0) flat out S var;
1444 ${FRAGMENT_DECLARATIONS}
1445 struct S { mediump ivec3 a; };
1446 layout(location = 0) flat in S var;
1457 desc "varying of type ivec4 inside struct"
1460 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) ];
1461 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) ];
1465 ${VERTEX_DECLARATIONS}
1466 struct S { mediump ivec4 a; };
1467 layout(location = 0) flat out S var;
1477 ${FRAGMENT_DECLARATIONS}
1478 struct S { mediump ivec4 a; };
1479 layout(location = 0) flat in S var;
1490 desc "varying of type uint in struct"
1493 input uint in0 = [ 1 | 2 | 3 | 16 ];
1494 output uint out0 = [ 1 | 2 | 3 | 16 ];
1498 ${VERTEX_DECLARATIONS}
1499 struct S { mediump uint a; };
1500 layout(location = 0) flat out S var;
1510 ${FRAGMENT_DECLARATIONS}
1511 struct S { mediump uint a; };
1512 layout(location = 0) flat in S var;
1523 desc "varying of type uvec2 inside struct"
1526 input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1527 output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
1531 ${VERTEX_DECLARATIONS}
1532 struct S { mediump uvec2 a; };
1533 layout(location = 0) flat out S var;
1543 ${FRAGMENT_DECLARATIONS}
1544 struct S { mediump uvec2 a; };
1545 layout(location = 0) flat in S var;
1556 desc "varying of type uvec3 inside struct"
1559 input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1560 output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
1564 ${VERTEX_DECLARATIONS}
1565 struct S { mediump uvec3 a; };
1566 layout(location = 0) flat out S var;
1576 ${FRAGMENT_DECLARATIONS}
1577 struct S { mediump uvec3 a; };
1578 layout(location = 0) flat in S var;
1589 desc "varying of type uvec4 inside struct"
1592 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) ];
1593 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) ];
1597 ${VERTEX_DECLARATIONS}
1598 struct S { mediump uvec4 a; };
1599 layout(location = 0) flat out S var;
1609 ${FRAGMENT_DECLARATIONS}
1610 struct S { mediump uvec4 a; };
1611 layout(location = 0) flat in S var;
1622 desc "varyings of type float and vec3 inside struct"
1625 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1626 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1627 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) ];
1628 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) ];
1632 ${VERTEX_DECLARATIONS}
1633 struct S { mediump float a; highp vec3 b; };
1634 layout(location = 0) out S var;
1644 precision highp float;
1645 ${FRAGMENT_DECLARATIONS}
1646 struct S { mediump float a; highp vec3 b; };
1647 layout(location = 0) in S var;
1657 case float_uvec2_vec3
1659 desc "varyings of type float and vec3 inside struct"
1662 input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1663 output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1664 input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1665 output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
1666 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) ];
1667 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) ];
1671 ${VERTEX_DECLARATIONS}
1672 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1673 layout(location = 0) flat out S var;
1685 precision highp float;
1686 ${FRAGMENT_DECLARATIONS}
1687 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1688 layout(location = 0) flat in S var;
1700 group interpolation "Varying interpolation modes"
1703 desc "varying of type vec4"
1706 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) ];
1707 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) ];
1711 ${VERTEX_DECLARATIONS}
1712 layout(location = 0) smooth out vec4 var;
1721 precision highp float;
1722 ${FRAGMENT_DECLARATIONS}
1723 layout(location = 0) smooth in vec4 var;
1734 desc "varying of type vec4"
1737 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) ];
1738 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) ];
1742 ${VERTEX_DECLARATIONS}
1743 layout(location = 0) centroid out vec4 var;
1752 precision highp float;
1753 ${FRAGMENT_DECLARATIONS}
1754 layout(location = 0) centroid in vec4 var;
1765 desc "varying of type vec4"
1768 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) ];
1769 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) ];
1773 ${VERTEX_DECLARATIONS}
1774 layout(location = 0) flat out vec4 var;
1783 precision highp float;
1784 ${FRAGMENT_DECLARATIONS}
1785 layout(location = 0) flat in vec4 var;
1795 group usage "Varying usage in shaders"
1798 desc "read back (an already written) varying in the vertex shader"
1801 input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ];
1802 output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ];
1806 precision highp float;
1807 ${VERTEX_DECLARATIONS}
1808 layout(location = 0) out float var1;
1809 layout(location = 1) out float var2;
1820 precision highp float;
1821 ${FRAGMENT_DECLARATIONS}
1822 layout(location = 0) in float var1;
1823 layout(location = 1) in float var2;