Remove dEQP-VK.glsl.linkage.varying.rules.fragment_declare
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / glsl / es310 / linkage.test
1
2 # Varying tests
3 group varying "Varying linkage"
4
5         # Linking rules
6         group rules "Varying linking rules"
7                 # declared in vertex shader, no reference in frag shader
8                 case vertex_declare
9                         version 310 es
10                         desc "varying declared in vertex shader, no reference in fragment shader"
11                         vertex ""
12                                 #version 310 es
13                                 ${VERTEX_DECLARATIONS}
14                                 layout(location = 0) out mediump float var;
15                                 void main()
16                                 {
17                                         ${VERTEX_OUTPUT}
18                                 }
19                         ""
20                         fragment ""
21                                 #version 310 es
22                                 ${FRAGMENT_DECLARATIONS}
23                                 void main()
24                                 {
25                                         ${FRAG_COLOR} = vec4(1.0);
26                                 }
27                         ""
28                 end
29
30                 # declared in vertex shader, declared in frag shader
31                 case both_declare
32                         version 310 es
33                         desc "varying declared in both vertex and fragment shader, but not used"
34                         vertex ""
35                                 #version 310 es
36                                 ${VERTEX_DECLARATIONS}
37                                 layout(location = 0) out mediump float var;
38                                 void main()
39                                 {
40                                         ${VERTEX_OUTPUT}
41                                 }
42                         ""
43                         fragment ""
44                                 #version 310 es
45                                 layout(location = 0) in mediump float var;
46                                 ${FRAGMENT_DECLARATIONS}
47                                 void main()
48                                 {
49                                         ${FRAG_COLOR} = vec4(1.0);
50                                 }
51                         ""
52                 end
53
54                 # declared in vertex shader, static use in frag shader
55                 case vertex_declare_fragment_use
56                         version 310 es
57                         desc "varying declared in both shaders, statically used in fragment shader"
58                         values { uniform bool u_false = false; }
59                         vertex ""
60                                 #version 310 es
61                                 ${VERTEX_DECLARATIONS}
62                                 layout(location = 0) out mediump float var;
63                                 void main()
64                                 {
65                                         ${VERTEX_OUTPUT}
66                                 }
67                         ""
68                         fragment ""
69                                 #version 310 es
70                                 layout(location = 0) in mediump float var;
71                                 ${FRAGMENT_DECLARATIONS}
72                                 void main()
73                                 {
74                                         if (u_false)
75                                                 ${FRAG_COLOR} = vec4(var);
76                                         else
77                                                 ${FRAG_COLOR} = vec4(1.0);
78                                 }
79                         ""
80                 end
81
82                 # static use in vertex shader, no reference in fragment shader
83                 case vertex_use_fragment_declare
84                         version 310 es
85                         desc "varying declared and statically used in vertex shader, no reference in fragment shader"
86                         values { uniform bool u_false = false; }
87                         vertex ""
88                                 #version 310 es
89                                 ${VERTEX_DECLARATIONS}
90                                 layout(location = 0) out mediump float var;
91                                 void main()
92                                 {
93                                         if (u_false)
94                                                 var = 1.0;
95                                         ${VERTEX_OUTPUT}
96                                 }
97                         ""
98                         fragment ""
99                                 #version 310 es
100                                 ${FRAGMENT_DECLARATIONS}
101                                 void main()
102                                 {
103                                         ${FRAG_COLOR} = vec4(1.0);
104                                 }
105                         ""
106                 end
107
108                 # static use in vertex shader, declared in fragment shader
109                 case vertex_use_declare_fragment
110                         version 310 es
111                         desc "varying declared and statically used in vertex shader, only declared in fragment shader"
112                         values { uniform bool u_false = false; }
113                         vertex ""
114                                 #version 310 es
115                                 ${VERTEX_DECLARATIONS}
116                                 layout(location = 0) out mediump float var;
117                                 void main()
118                                 {
119                                         if (u_false)
120                                                 var = 1.0;
121                                         ${VERTEX_OUTPUT}
122                                 }
123                         ""
124                         fragment ""
125                                 #version 310 es
126                                 layout(location = 0) in mediump float var;
127                                 ${FRAGMENT_DECLARATIONS}
128                                 void main()
129                                 {
130                                         ${FRAG_COLOR} = vec4(1.0);
131                                 }
132                         ""
133                 end
134
135                 # static use in vertex shader, used in fragment shader
136                 case vertex_use_fragment_use
137                         version 310 es
138                         desc "varying statically used in both vertex and fragment shader"
139                         values { uniform bool u_false = false; }
140                         vertex ""
141                                 #version 310 es
142                                 ${VERTEX_DECLARATIONS}
143                                 layout(location = 0) out mediump float var;
144                                 void main()
145                                 {
146                                         if (u_false)
147                                                 var = 1.0;
148                                         ${VERTEX_OUTPUT}
149                                 }
150                         ""
151                         fragment ""
152                                 #version 310 es
153                                 ${FRAGMENT_DECLARATIONS}
154                                 layout(location = 0) in mediump float var;
155                                 void main()
156                                 {
157                                         if (u_false)
158                                                 ${FRAG_COLOR} = vec4(var);
159                                         else
160                                                 ${FRAG_COLOR} = vec4(1.0);
161                                 }
162                         ""
163                 end
164
165                 # differing precision tests
166                 case differing_precision_1
167                         version 310 es
168                         desc "varying declared as highp in vertex shader, but mediump in fragment shader"
169                         values
170                         {
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 ];
173                         }
174
175                         vertex ""
176                                 #version 310 es
177                                 ${VERTEX_DECLARATIONS}
178                                 layout(location = 0) out highp float var;
179                                 void main()
180                                 {
181                                         var = in0;
182                                         ${VERTEX_OUTPUT}
183                                 }
184                         ""
185                         fragment ""
186                                 #version 310 es
187                                 precision mediump float;
188                                 ${FRAGMENT_DECLARATIONS}
189                                 layout(location = 0) in mediump float var;
190                                 void main()
191                                 {
192                                         out0 = var;
193                                         ${FRAGMENT_OUTPUT}
194                                 }
195                         ""
196                 end
197
198                 # differing precision tests
199                 case differing_precision_2
200                         version 310 es
201                         desc "varying declared as highp in vertex shader, but lowp in fragment shader"
202                         values
203                         {
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 ];
206                         }
207
208                         vertex ""
209                                 #version 310 es
210                                 ${VERTEX_DECLARATIONS}
211                                 layout(location = 0) out highp vec2 var;
212                                 void main()
213                                 {
214                                         var = vec2(in0, 2.0*in0);
215                                         ${VERTEX_OUTPUT}
216                                 }
217                         ""
218                         fragment ""
219                                 #version 310 es
220                                 precision mediump float;
221                                 ${FRAGMENT_DECLARATIONS}
222                                 layout(location = 0) in lowp vec2 var;
223                                 void main()
224                                 {
225                                         out0 = var.y - var.x;
226                                         ${FRAGMENT_OUTPUT}
227                                 }
228                         ""
229                 end
230
231                 # differing precision tests
232                 case differing_precision_3
233                         version 310 es
234                         desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
235                         values
236                         {
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 ];
239                         }
240
241                         vertex ""
242                                 #version 310 es
243                                 ${VERTEX_DECLARATIONS}
244                                 layout(location = 0) out lowp vec4 var;
245                                 void main()
246                                 {
247                                         var = vec4(in0, 2.0*in0, -in0, -in0);
248                                         ${VERTEX_OUTPUT}
249                                 }
250                         ""
251                         fragment ""
252                                 #version 310 es
253                                 precision mediump float;
254                                 ${FRAGMENT_DECLARATIONS}
255                                 layout(location = 0) in mediump vec4 var;
256                                 void main()
257                                 {
258                                         out0 = var.x + var.y + var.z + var.w;
259                                         ${FRAGMENT_OUTPUT}
260                                 }
261                         ""
262                 end
263
264                 # different interpolation
265                 case differing_interpolation_2
266                         version 310 es
267                         desc "varying interpolation different (smooth vs. centroid)"
268                         values
269                         {
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 ];
272                         }
273
274                         vertex ""
275                                 #version 310 es
276                                 ${VERTEX_DECLARATIONS}
277                                 layout(location = 0) smooth out mediump float var;
278                                 void main()
279                                 {
280                                         var = in0;
281                                         ${VERTEX_OUTPUT}
282                                 }
283                         ""
284                         fragment ""
285                                 #version 310 es
286                                 precision mediump float;
287                                 ${FRAGMENT_DECLARATIONS}
288                                 layout(location = 0) centroid in mediump float var;
289                                 void main()
290                                 {
291                                         out0 = var;
292                                         ${FRAGMENT_OUTPUT}
293                                 }
294                         ""
295                 end
296
297         end
298
299         group basic_types "Basic varying types"
300                 case float
301                         version 310 es
302                         desc "varying of type float"
303                         values
304                         {
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 ];
307                         }
308                         vertex ""
309                                 #version 310 es
310                                 ${VERTEX_DECLARATIONS}
311                                 layout(location = 0) out mediump float var;
312                                 void main()
313                                 {
314                                         var = in0;
315                                         ${VERTEX_OUTPUT}
316                                 }
317                         ""
318                         fragment ""
319                                 #version 310 es
320                                 precision mediump float;
321                                 ${FRAGMENT_DECLARATIONS}
322                                 layout(location = 0) in float var;
323                                 void main()
324                                 {
325                                         out0 = var;
326                                         ${FRAGMENT_OUTPUT}
327                                 }
328                         ""
329                 end
330
331                 case vec2
332                         version 310 es
333                         desc "varying of type vec2"
334                         values
335                         {
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) ];
338                         }
339                         vertex ""
340                                 #version 310 es
341                                 ${VERTEX_DECLARATIONS}
342                                 layout(location = 0) out mediump vec2 var;
343                                 void main()
344                                 {
345                                         var = in0;
346                                         ${VERTEX_OUTPUT}
347                                 }
348                         ""
349                         fragment ""
350                                 #version 310 es
351                                 precision mediump float;
352                                 ${FRAGMENT_DECLARATIONS}
353                                 layout(location = 0) in vec2 var;
354                                 void main()
355                                 {
356                                         out0 = var;
357                                         ${FRAGMENT_OUTPUT}
358                                 }
359                         ""
360                 end
361
362                 case vec3
363                         version 310 es
364                         desc "varying of type vec3"
365                         values
366                         {
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) ];
369                         }
370                         vertex ""
371                                 #version 310 es
372                                 ${VERTEX_DECLARATIONS}
373                                 layout(location = 0) out mediump vec3 var;
374                                 void main()
375                                 {
376                                         var = in0;
377                                         ${VERTEX_OUTPUT}
378                                 }
379                         ""
380                         fragment ""
381                                 #version 310 es
382                                 precision mediump float;
383                                 ${FRAGMENT_DECLARATIONS}
384                                 layout(location = 0) in vec3 var;
385                                 void main()
386                                 {
387                                         out0 = var;
388                                         ${FRAGMENT_OUTPUT}
389                                 }
390                         ""
391                 end
392
393                 case vec4
394                         version 310 es
395                         desc "varying of type vec4"
396                         values
397                         {
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) ];
400                         }
401                         vertex ""
402                                 #version 310 es
403                                 ${VERTEX_DECLARATIONS}
404                                 layout(location = 0) out mediump vec4 var;
405                                 void main()
406                                 {
407                                         var = in0;
408                                         ${VERTEX_OUTPUT}
409                                 }
410                         ""
411                         fragment ""
412                                 #version 310 es
413                                 precision mediump float;
414                                 ${FRAGMENT_DECLARATIONS}
415                                 layout(location = 0) in vec4 var;
416                                 void main()
417                                 {
418                                         out0 = var;
419                                         ${FRAGMENT_OUTPUT}
420                                 }
421                         ""
422                 end
423
424                 case mat2
425                         version 310 es
426                         desc "varying of type mat2"
427                         values
428                         {
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) ];
431                         }
432                         vertex ""
433                                 #version 310 es
434                                 ${VERTEX_DECLARATIONS}
435                                 layout(location = 0) out mediump mat2 var;
436                                 void main()
437                                 {
438                                         var = in0;
439                                         ${VERTEX_OUTPUT}
440                                 }
441                         ""
442                         fragment ""
443                                 #version 310 es
444                                 precision mediump float;
445                                 ${FRAGMENT_DECLARATIONS}
446                                 layout(location = 0) in mat2 var;
447                                 void main()
448                                 {
449                                         out0 = var;
450                                         ${FRAGMENT_OUTPUT}
451                                 }
452                         ""
453                 end
454
455                 case mat2x3
456                         version 310 es
457                         desc "varying of type mat2x3"
458                         values
459                         {
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) ];
462                         }
463                         vertex ""
464                                 #version 310 es
465                                 ${VERTEX_DECLARATIONS}
466                                 layout(location = 0) out mediump mat2x3 var;
467                                 void main()
468                                 {
469                                         var = in0;
470                                         ${VERTEX_OUTPUT}
471                                 }
472                         ""
473                         fragment ""
474                                 #version 310 es
475                                 precision mediump float;
476                                 ${FRAGMENT_DECLARATIONS}
477                                 layout(location = 0) in mat2x3 var;
478                                 void main()
479                                 {
480                                         out0 = var;
481                                         ${FRAGMENT_OUTPUT}
482                                 }
483                         ""
484                 end
485
486                 case mat2x4
487                         version 310 es
488                         desc "varying of type mat2x4"
489                         values
490                         {
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) ];
493                         }
494                         vertex ""
495                                 #version 310 es
496                                 ${VERTEX_DECLARATIONS}
497                                 layout(location = 0) out mediump mat2x4 var;
498                                 void main()
499                                 {
500                                         var = in0;
501                                         ${VERTEX_OUTPUT}
502                                 }
503                         ""
504                         fragment ""
505                                 #version 310 es
506                                 precision mediump float;
507                                 ${FRAGMENT_DECLARATIONS}
508                                 layout(location = 0) in mat2x4 var;
509                                 void main()
510                                 {
511                                         out0 = var;
512                                         ${FRAGMENT_OUTPUT}
513                                 }
514                         ""
515                 end
516
517                 case mat3x2
518                         version 310 es
519                         desc "varying of type mat3x2"
520                         values
521                         {
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) ];
524                         }
525                         vertex ""
526                                 #version 310 es
527                                 ${VERTEX_DECLARATIONS}
528                                 layout(location = 0) out mediump mat3x2 var;
529                                 void main()
530                                 {
531                                         var = in0;
532                                         ${VERTEX_OUTPUT}
533                                 }
534                         ""
535                         fragment ""
536                                 #version 310 es
537                                 precision mediump float;
538                                 ${FRAGMENT_DECLARATIONS}
539                                 layout(location = 0) in mat3x2 var;
540                                 void main()
541                                 {
542                                         out0 = var;
543                                         ${FRAGMENT_OUTPUT}
544                                 }
545                         ""
546                 end
547
548                 case mat3
549                         version 310 es
550                         desc "varying of type mat3"
551                         values
552                         {
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) ];
555                         }
556                         vertex ""
557                                 #version 310 es
558                                 ${VERTEX_DECLARATIONS}
559                                 layout(location = 0) out mediump mat3 var;
560                                 void main()
561                                 {
562                                         var = in0;
563                                         ${VERTEX_OUTPUT}
564                                 }
565                         ""
566                         fragment ""
567                                 #version 310 es
568                                 precision mediump float;
569                                 ${FRAGMENT_DECLARATIONS}
570                                 layout(location = 0) in mat3 var;
571                                 void main()
572                                 {
573                                         out0 = var;
574                                         ${FRAGMENT_OUTPUT}
575                                 }
576                         ""
577                 end
578
579                 case mat3x4
580                         version 310 es
581                         desc "varying of type mat3x4"
582                         values
583                         {
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) ];
586                         }
587                         vertex ""
588                                 #version 310 es
589                                 ${VERTEX_DECLARATIONS}
590                                 layout(location = 0) out mediump mat3x4 var;
591                                 void main()
592                                 {
593                                         var = in0;
594                                         ${VERTEX_OUTPUT}
595                                 }
596                         ""
597                         fragment ""
598                                 #version 310 es
599                                 precision mediump float;
600                                 ${FRAGMENT_DECLARATIONS}
601                                 layout(location = 0) in mat3x4 var;
602                                 void main()
603                                 {
604                                         out0 = var;
605                                         ${FRAGMENT_OUTPUT}
606                                 }
607                         ""
608                 end
609
610                 case mat4x2
611                         version 310 es
612                         desc "varying of type mat4x2"
613                         values
614                         {
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) ];
617                         }
618                         vertex ""
619                                 #version 310 es
620                                 ${VERTEX_DECLARATIONS}
621                                 layout(location = 0) out mediump mat4x2 var;
622                                 void main()
623                                 {
624                                         var = in0;
625                                         ${VERTEX_OUTPUT}
626                                 }
627                         ""
628                         fragment ""
629                                 #version 310 es
630                                 precision mediump float;
631                                 ${FRAGMENT_DECLARATIONS}
632                                 layout(location = 0) in mat4x2 var;
633                                 void main()
634                                 {
635                                         out0 = var;
636                                         ${FRAGMENT_OUTPUT}
637                                 }
638                         ""
639                 end
640
641                 case mat4x3
642                         version 310 es
643                         desc "varying of type mat4x3"
644                         values
645                         {
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) ];
648                         }
649                         vertex ""
650                                 #version 310 es
651                                 ${VERTEX_DECLARATIONS}
652                                 layout(location = 0) out mediump mat4x3 var;
653                                 void main()
654                                 {
655                                         var = in0;
656                                         ${VERTEX_OUTPUT}
657                                 }
658                         ""
659                         fragment ""
660                                 #version 310 es
661                                 precision mediump float;
662                                 ${FRAGMENT_DECLARATIONS}
663                                 layout(location = 0) in mat4x3 var;
664                                 void main()
665                                 {
666                                         out0 = var;
667                                         ${FRAGMENT_OUTPUT}
668                                 }
669                         ""
670                 end
671
672                 case mat4
673                         version 310 es
674                         desc "varying of type mat4"
675                         values
676                         {
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) ];
679                         }
680                         vertex ""
681                                 #version 310 es
682                                 ${VERTEX_DECLARATIONS}
683                                 layout(location = 0) out mediump mat4 var;
684                                 void main()
685                                 {
686                                         var = in0;
687                                         ${VERTEX_OUTPUT}
688                                 }
689                         ""
690                         fragment ""
691                                 #version 310 es
692                                 precision mediump float;
693                                 ${FRAGMENT_DECLARATIONS}
694                                 layout(location = 0) in mat4 var;
695                                 void main()
696                                 {
697                                         out0 = var;
698                                         ${FRAGMENT_OUTPUT}
699                                 }
700                         ""
701                 end
702
703                 case int
704                         version 310 es
705                         desc "varying of type int"
706                         values
707                         {
708                                 input int in0           = [ -1 | -25 | 1 | 2 | 3 | 16 ];
709                                 output int out0         = [ -1 | -25 | 1 | 2 | 3 | 16 ];
710                         }
711                         vertex ""
712                                 #version 310 es
713                                 ${VERTEX_DECLARATIONS}
714                                 layout(location = 0) flat out mediump int var;
715                                 void main()
716                                 {
717                                         ${VERTEX_SETUP}
718                                         var = in0;
719                                         ${VERTEX_OUTPUT}
720                                 }
721                         ""
722                         fragment ""
723                                 #version 310 es
724                                 ${FRAGMENT_DECLARATIONS}
725                                 layout(location = 0) flat in int var;
726                                 void main()
727                                 {
728                                         out0 = var;
729                                         ${FRAGMENT_OUTPUT}
730                                 }
731                         ""
732                 end
733
734                 case ivec2
735                         version 310 es
736                         desc "varying of type ivec2"
737                         values
738                         {
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) ];
741                         }
742                         vertex ""
743                                 #version 310 es
744                                 ${VERTEX_DECLARATIONS}
745                                 layout(location = 0) flat out mediump ivec2 var;
746                                 void main()
747                                 {
748                                         ${VERTEX_SETUP}
749                                         var = in0;
750                                         ${VERTEX_OUTPUT}
751                                 }
752                         ""
753                         fragment ""
754                                 #version 310 es
755                                 ${FRAGMENT_DECLARATIONS}
756                                 layout(location = 0) flat in ivec2 var;
757                                 void main()
758                                 {
759                                         out0 = var;
760                                         ${FRAGMENT_OUTPUT}
761                                 }
762                         ""
763                 end
764
765                 case ivec3
766                         version 310 es
767                         desc "varying of type ivec3"
768                         values
769                         {
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) ];
772                         }
773                         vertex ""
774                                 #version 310 es
775                                 ${VERTEX_DECLARATIONS}
776                                 layout(location = 0) flat out mediump ivec3 var;
777                                 void main()
778                                 {
779                                         ${VERTEX_SETUP}
780                                         var = in0;
781                                         ${VERTEX_OUTPUT}
782                                 }
783                         ""
784                         fragment ""
785                                 #version 310 es
786                                 ${FRAGMENT_DECLARATIONS}
787                                 layout(location = 0) flat in ivec3 var;
788                                 void main()
789                                 {
790                                         out0 = var;
791                                         ${FRAGMENT_OUTPUT}
792                                 }
793                         ""
794                 end
795
796                 case ivec4
797                         version 310 es
798                         desc "varying of type ivec4"
799                         values
800                         {
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) ];
803                         }
804                         vertex ""
805                                 #version 310 es
806                                 ${VERTEX_DECLARATIONS}
807                                 layout(location = 0) flat out mediump ivec4 var;
808                                 void main()
809                                 {
810                                         ${VERTEX_SETUP}
811                                         var = in0;
812                                         ${VERTEX_OUTPUT}
813                                 }
814                         ""
815                         fragment ""
816                                 #version 310 es
817                                 ${FRAGMENT_DECLARATIONS}
818                                 layout(location = 0) flat in ivec4 var;
819                                 void main()
820                                 {
821                                         out0 = var;
822                                         ${FRAGMENT_OUTPUT}
823                                 }
824                         ""
825                 end
826
827                 case uint
828                         version 310 es
829                         desc "varying of type int"
830                         values
831                         {
832                                 input uint in0                  = [ 1 | 2 | 3 | 16 ];
833                                 output uint out0                = [ 1 | 2 | 3 | 16 ];
834                         }
835                         vertex ""
836                                 #version 310 es
837                                 ${VERTEX_DECLARATIONS}
838                                 layout(location = 0) flat out mediump uint var;
839                                 void main()
840                                 {
841                                         ${VERTEX_SETUP}
842                                         var = in0;
843                                         ${VERTEX_OUTPUT}
844                                 }
845                         ""
846                         fragment ""
847                                 #version 310 es
848                                 ${FRAGMENT_DECLARATIONS}
849                                 layout(location = 0) flat in uint var;
850                                 void main()
851                                 {
852                                         out0 = var;
853                                         ${FRAGMENT_OUTPUT}
854                                 }
855                         ""
856                 end
857
858                 case uvec2
859                         version 310 es
860                         desc "varying of type uvec2"
861                         values
862                         {
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) ];
865                         }
866                         vertex ""
867                                 #version 310 es
868                                 ${VERTEX_DECLARATIONS}
869                                 layout(location = 0) flat out mediump uvec2 var;
870                                 void main()
871                                 {
872                                         ${VERTEX_SETUP}
873                                         var = in0;
874                                         ${VERTEX_OUTPUT}
875                                 }
876                         ""
877                         fragment ""
878                                 #version 310 es
879                                 ${FRAGMENT_DECLARATIONS}
880                                 layout(location = 0) flat in uvec2 var;
881                                 void main()
882                                 {
883                                         out0 = var;
884                                         ${FRAGMENT_OUTPUT}
885                                 }
886                         ""
887                 end
888
889                 case uvec3
890                         version 310 es
891                         desc "varying of type uvec3"
892                         values
893                         {
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) ];
896                         }
897                         vertex ""
898                                 #version 310 es
899                                 ${VERTEX_DECLARATIONS}
900                                 layout(location = 0) flat out mediump uvec3 var;
901                                 void main()
902                                 {
903                                         ${VERTEX_SETUP}
904                                         var = in0;
905                                         ${VERTEX_OUTPUT}
906                                 }
907                         ""
908                         fragment ""
909                                 #version 310 es
910                                 ${FRAGMENT_DECLARATIONS}
911                                 layout(location = 0) flat in uvec3 var;
912                                 void main()
913                                 {
914                                         out0 = var;
915                                         ${FRAGMENT_OUTPUT}
916                                 }
917                         ""
918                 end
919
920                 case uvec4
921                         version 310 es
922                         desc "varying of type uvec4"
923                         values
924                         {
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) ];
927                         }
928                         vertex ""
929                                 #version 310 es
930                                 ${VERTEX_DECLARATIONS}
931                                 layout(location = 0) flat out mediump uvec4 var;
932                                 void main()
933                                 {
934                                         ${VERTEX_SETUP}
935                                         var = in0;
936                                         ${VERTEX_OUTPUT}
937                                 }
938                         ""
939                         fragment ""
940                                 #version 310 es
941                                 ${FRAGMENT_DECLARATIONS}
942                                 layout(location = 0) flat in uvec4 var;
943                                 void main()
944                                 {
945                                         out0 = var;
946                                         ${FRAGMENT_OUTPUT}
947                                 }
948                         ""
949                 end
950         end
951
952         group struct "Structure varyings"
953                 case float
954                         version 310 es
955                         desc "varying of type float inside struct"
956                         values
957                         {
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 ];
960                         }
961                         vertex ""
962                                 #version 310 es
963                                 ${VERTEX_DECLARATIONS}
964                                 struct S { mediump float a; };
965                                 layout(location = 0) out S var;
966                                 void main()
967                                 {
968                                         var.a = in0;
969                                         ${VERTEX_OUTPUT}
970                                 }
971                         ""
972                         fragment ""
973                                 #version 310 es
974                                 precision mediump float;
975                                 ${FRAGMENT_DECLARATIONS}
976                                 struct S { mediump float a; };
977                                 layout(location = 0) in S var;
978                                 void main()
979                                 {
980                                         out0 = var.a;
981                                         ${FRAGMENT_OUTPUT}
982                                 }
983                         ""
984                 end
985
986                 case vec2
987                         version 310 es
988                         desc "varying of type vec2 inside struct"
989                         values
990                         {
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) ];
993                         }
994                         vertex ""
995                                 #version 310 es
996                                 ${VERTEX_DECLARATIONS}
997                                 struct S { mediump vec2 a; };
998                                 layout(location = 0) out S var;
999                                 void main()
1000                                 {
1001                                         var.a = in0;
1002                                         ${VERTEX_OUTPUT}
1003                                 }
1004                         ""
1005                         fragment ""
1006                                 #version 310 es
1007                                 precision mediump float;
1008                                 ${FRAGMENT_DECLARATIONS}
1009                                 struct S { mediump vec2 a; };
1010                                 layout(location = 0) in S var;
1011                                 void main()
1012                                 {
1013                                         out0 = var.a;
1014                                         ${FRAGMENT_OUTPUT}
1015                                 }
1016                         ""
1017                 end
1018
1019                 case vec3
1020                         version 310 es
1021                         desc "varying of type vec3 inside struct"
1022                         values
1023                         {
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) ];
1026                         }
1027                         vertex ""
1028                                 #version 310 es
1029                                 ${VERTEX_DECLARATIONS}
1030                                 struct S { mediump vec3 a; };
1031                                 layout(location = 0) out S var;
1032                                 void main()
1033                                 {
1034                                         var.a = in0;
1035                                         ${VERTEX_OUTPUT}
1036                                 }
1037                         ""
1038                         fragment ""
1039                                 #version 310 es
1040                                 precision mediump float;
1041                                 ${FRAGMENT_DECLARATIONS}
1042                                 struct S { mediump vec3 a; };
1043                                 layout(location = 0) in S var;
1044                                 void main()
1045                                 {
1046                                         out0 = var.a;
1047                                         ${FRAGMENT_OUTPUT}
1048                                 }
1049                         ""
1050                 end
1051
1052                 case vec4
1053                         version 310 es
1054                         desc "varying of type vec4 inside struct"
1055                         values
1056                         {
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) ];
1059                         }
1060                         vertex ""
1061                                 #version 310 es
1062                                 ${VERTEX_DECLARATIONS}
1063                                 struct S { mediump vec4 a; };
1064                                 layout(location = 0) out S var;
1065                                 void main()
1066                                 {
1067                                         var.a = in0;
1068                                         ${VERTEX_OUTPUT}
1069                                 }
1070                         ""
1071                         fragment ""
1072                                 #version 310 es
1073                                 precision mediump float;
1074                                 ${FRAGMENT_DECLARATIONS}
1075                                 struct S { mediump vec4 a; };
1076                                 layout(location = 0) in S var;
1077                                 void main()
1078                                 {
1079                                         out0 = var.a;
1080                                         ${FRAGMENT_OUTPUT}
1081                                 }
1082                         ""
1083                 end
1084
1085                 case mat2
1086                         version 310 es
1087                         desc "varying of type mat2 inside struct"
1088                         values
1089                         {
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) ];
1092                         }
1093                         vertex ""
1094                                 #version 310 es
1095                                 ${VERTEX_DECLARATIONS}
1096                                 struct S { mediump mat2 a; };
1097                                 layout(location = 0) out S var;
1098                                 void main()
1099                                 {
1100                                         var.a = in0;
1101                                         ${VERTEX_OUTPUT}
1102                                 }
1103                         ""
1104                         fragment ""
1105                                 #version 310 es
1106                                 precision mediump float;
1107                                 ${FRAGMENT_DECLARATIONS}
1108                                 struct S { mediump mat2 a; };
1109                                 layout(location = 0) in S var;
1110                                 void main()
1111                                 {
1112                                         out0 = var.a;
1113                                         ${FRAGMENT_OUTPUT}
1114                                 }
1115                         ""
1116                 end
1117
1118                 case mat2x3
1119                         version 310 es
1120                         desc "varying of type mat2x3 inside struct"
1121                         values
1122                         {
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) ];
1125                         }
1126                         vertex ""
1127                                 #version 310 es
1128                                 ${VERTEX_DECLARATIONS}
1129                                 struct S { mediump mat2x3 a; };
1130                                 layout(location = 0) out S var;
1131                                 void main()
1132                                 {
1133                                         var.a = in0;
1134                                         ${VERTEX_OUTPUT}
1135                                 }
1136                         ""
1137                         fragment ""
1138                                 #version 310 es
1139                                 precision mediump float;
1140                                 ${FRAGMENT_DECLARATIONS}
1141                                 struct S { mediump mat2x3 a; };
1142                                 layout(location = 0) in S var;
1143                                 void main()
1144                                 {
1145                                         out0 = var.a;
1146                                         ${FRAGMENT_OUTPUT}
1147                                 }
1148                         ""
1149                 end
1150
1151                 case mat2x4
1152                         version 310 es
1153                         desc "varying of type mat2x4 inside struct"
1154                         values
1155                         {
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) ];
1158                         }
1159                         vertex ""
1160                                 #version 310 es
1161                                 ${VERTEX_DECLARATIONS}
1162                                 struct S { mediump mat2x4 a; };
1163                                 layout(location = 0) out S var;
1164                                 void main()
1165                                 {
1166                                         var.a = in0;
1167                                         ${VERTEX_OUTPUT}
1168                                 }
1169                         ""
1170                         fragment ""
1171                                 #version 310 es
1172                                 precision mediump float;
1173                                 ${FRAGMENT_DECLARATIONS}
1174                                 struct S { mediump mat2x4 a; };
1175                                 layout(location = 0) in S var;
1176                                 void main()
1177                                 {
1178                                         out0 = var.a;
1179                                         ${FRAGMENT_OUTPUT}
1180                                 }
1181                         ""
1182                 end
1183
1184                 case mat3x2
1185                         version 310 es
1186                         desc "varying of type mat3x2 inside struct"
1187                         values
1188                         {
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) ];
1191                         }
1192                         vertex ""
1193                                 #version 310 es
1194                                 ${VERTEX_DECLARATIONS}
1195                                 struct S { mediump mat3x2 a; };
1196                                 layout(location = 0) out S var;
1197                                 void main()
1198                                 {
1199                                         var.a = in0;
1200                                         ${VERTEX_OUTPUT}
1201                                 }
1202                         ""
1203                         fragment ""
1204                                 #version 310 es
1205                                 precision mediump float;
1206                                 ${FRAGMENT_DECLARATIONS}
1207                                 struct S { mediump mat3x2 a; };
1208                                 layout(location = 0) in S var;
1209                                 void main()
1210                                 {
1211                                         out0 = var.a;
1212                                         ${FRAGMENT_OUTPUT}
1213                                 }
1214                         ""
1215                 end
1216
1217                 case mat3
1218                         version 310 es
1219                         desc "varying of type mat3 inside struct"
1220                         values
1221                         {
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) ];
1224                         }
1225                         vertex ""
1226                                 #version 310 es
1227                                 ${VERTEX_DECLARATIONS}
1228                                 struct S { mediump mat3 a; };
1229                                 layout(location = 0) out S var;
1230                                 void main()
1231                                 {
1232                                         var.a = in0;
1233                                         ${VERTEX_OUTPUT}
1234                                 }
1235                         ""
1236                         fragment ""
1237                                 #version 310 es
1238                                 precision mediump float;
1239                                 ${FRAGMENT_DECLARATIONS}
1240                                 struct S { mediump mat3 a; };
1241                                 layout(location = 0) in S var;
1242                                 void main()
1243                                 {
1244                                         out0 = var.a;
1245                                         ${FRAGMENT_OUTPUT}
1246                                 }
1247                         ""
1248                 end
1249
1250                 case mat3x4
1251                         version 310 es
1252                         desc "varying of type mat3x4 inside struct"
1253                         values
1254                         {
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) ];
1257                         }
1258                         vertex ""
1259                                 #version 310 es
1260                                 ${VERTEX_DECLARATIONS}
1261                                 struct S { mediump mat3x4 a; };
1262                                 layout(location = 0) out S var;
1263                                 void main()
1264                                 {
1265                                         var.a = in0;
1266                                         ${VERTEX_OUTPUT}
1267                                 }
1268                         ""
1269                         fragment ""
1270                                 #version 310 es
1271                                 precision mediump float;
1272                                 ${FRAGMENT_DECLARATIONS}
1273                                 struct S { mediump mat3x4 a; };
1274                                 layout(location = 0) in S var;
1275                                 void main()
1276                                 {
1277                                         out0 = var.a;
1278                                         ${FRAGMENT_OUTPUT}
1279                                 }
1280                         ""
1281                 end
1282
1283                 case mat4x2
1284                         version 310 es
1285                         desc "varying of type mat4x2 inside struct"
1286                         values
1287                         {
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) ];
1290                         }
1291                         vertex ""
1292                                 #version 310 es
1293                                 ${VERTEX_DECLARATIONS}
1294                                 struct S { mediump mat4x2 a; };
1295                                 layout(location = 0) out S var;
1296                                 void main()
1297                                 {
1298                                         var.a = in0;
1299                                         ${VERTEX_OUTPUT}
1300                                 }
1301                         ""
1302                         fragment ""
1303                                 #version 310 es
1304                                 precision mediump float;
1305                                 ${FRAGMENT_DECLARATIONS}
1306                                 struct S { mediump mat4x2 a; };
1307                                 layout(location = 0) in S var;
1308                                 void main()
1309                                 {
1310                                         out0 = var.a;
1311                                         ${FRAGMENT_OUTPUT}
1312                                 }
1313                         ""
1314                 end
1315
1316                 case mat4x3
1317                         version 310 es
1318                         desc "varying of type mat4x3 inside struct"
1319                         values
1320                         {
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) ];
1323                         }
1324                         vertex ""
1325                                 #version 310 es
1326                                 ${VERTEX_DECLARATIONS}
1327                                 struct S { mediump mat4x3 a; };
1328                                 layout(location = 0) out S var;
1329                                 void main()
1330                                 {
1331                                         var.a = in0;
1332                                         ${VERTEX_OUTPUT}
1333                                 }
1334                         ""
1335                         fragment ""
1336                                 #version 310 es
1337                                 precision mediump float;
1338                                 ${FRAGMENT_DECLARATIONS}
1339                                 struct S { mediump mat4x3 a; };
1340                                 layout(location = 0) in S var;
1341                                 void main()
1342                                 {
1343                                         out0 = var.a;
1344                                         ${FRAGMENT_OUTPUT}
1345                                 }
1346                         ""
1347                 end
1348
1349                 case mat4
1350                         version 310 es
1351                         desc "varying of type mat4 inside struct"
1352                         values
1353                         {
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) ];
1356                         }
1357                         vertex ""
1358                                 #version 310 es
1359                                 ${VERTEX_DECLARATIONS}
1360                                 struct S { mediump mat4 a; };
1361                                 layout(location = 0) out S var;
1362                                 void main()
1363                                 {
1364                                         var.a = in0;
1365                                         ${VERTEX_OUTPUT}
1366                                 }
1367                         ""
1368                         fragment ""
1369                                 #version 310 es
1370                                 precision mediump float;
1371                                 ${FRAGMENT_DECLARATIONS}
1372                                 struct S { mediump mat4 a; };
1373                                 layout(location = 0) in S var;
1374                                 void main()
1375                                 {
1376                                         out0 = var.a;
1377                                         ${FRAGMENT_OUTPUT}
1378                                 }
1379                         ""
1380                 end
1381
1382                 case int
1383                         version 310 es
1384                         desc "varying of type int inside struct"
1385                         values
1386                         {
1387                                 input int in0           = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1388                                 output int out0         = [ -1 | -25 | 1 | 2 | 3 | 16 ];
1389                         }
1390                         vertex ""
1391                                 #version 310 es
1392                                 ${VERTEX_DECLARATIONS}
1393                                 struct S { mediump int a; };
1394                                 layout(location = 0) flat out S var;
1395                                 void main()
1396                                 {
1397                                         ${VERTEX_SETUP}
1398                                         var.a = in0;
1399                                         ${VERTEX_OUTPUT}
1400                                 }
1401                         ""
1402                         fragment ""
1403                                 #version 310 es
1404                                 ${FRAGMENT_DECLARATIONS}
1405                                 struct S { mediump int a; };
1406                                 layout(location = 0) flat in S var;
1407                                 void main()
1408                                 {
1409                                         out0 = var.a;
1410                                         ${FRAGMENT_OUTPUT}
1411                                 }
1412                         ""
1413                 end
1414
1415                 case ivec2
1416                         version 310 es
1417                         desc "varying of type ivec2 inside struct"
1418                         values
1419                         {
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) ];
1422                         }
1423                         vertex ""
1424                                 #version 310 es
1425                                 ${VERTEX_DECLARATIONS}
1426                                 struct S { mediump ivec2 a; };
1427                                 layout(location = 0) flat out S var;
1428                                 void main()
1429                                 {
1430                                         ${VERTEX_SETUP}
1431                                         var.a = in0;
1432                                         ${VERTEX_OUTPUT}
1433                                 }
1434                         ""
1435                         fragment ""
1436                                 #version 310 es
1437                                 ${FRAGMENT_DECLARATIONS}
1438                                 struct S { mediump ivec2 a; };
1439                                 layout(location = 0) flat in S var;
1440                                 void main()
1441                                 {
1442                                         out0 = var.a;
1443                                         ${FRAGMENT_OUTPUT}
1444                                 }
1445                         ""
1446                 end
1447
1448                 case ivec3
1449                         version 310 es
1450                         desc "varying of type ivec3 inside struct"
1451                         values
1452                         {
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) ];
1455                         }
1456                         vertex ""
1457                                 #version 310 es
1458                                 ${VERTEX_DECLARATIONS}
1459                                 struct S { mediump ivec3 a; };
1460                                 layout(location = 0) flat out S var;
1461                                 void main()
1462                                 {
1463                                         ${VERTEX_SETUP}
1464                                         var.a = in0;
1465                                         ${VERTEX_OUTPUT}
1466                                 }
1467                         ""
1468                         fragment ""
1469                                 #version 310 es
1470                                 ${FRAGMENT_DECLARATIONS}
1471                                 struct S { mediump ivec3 a; };
1472                                 layout(location = 0) flat in S var;
1473                                 void main()
1474                                 {
1475                                         out0 = var.a;
1476                                         ${FRAGMENT_OUTPUT}
1477                                 }
1478                         ""
1479                 end
1480
1481                 case ivec4
1482                         version 310 es
1483                         desc "varying of type ivec4 inside struct"
1484                         values
1485                         {
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) ];
1488                         }
1489                         vertex ""
1490                                 #version 310 es
1491                                 ${VERTEX_DECLARATIONS}
1492                                 struct S { mediump ivec4 a; };
1493                                 layout(location = 0) flat out S var;
1494                                 void main()
1495                                 {
1496                                         ${VERTEX_SETUP}
1497                                         var.a = in0;
1498                                         ${VERTEX_OUTPUT}
1499                                 }
1500                         ""
1501                         fragment ""
1502                                 #version 310 es
1503                                 ${FRAGMENT_DECLARATIONS}
1504                                 struct S { mediump ivec4 a; };
1505                                 layout(location = 0) flat in S var;
1506                                 void main()
1507                                 {
1508                                         out0 = var.a;
1509                                         ${FRAGMENT_OUTPUT}
1510                                 }
1511                         ""
1512                 end
1513
1514                 case uint
1515                         version 310 es
1516                         desc "varying of type uint in struct"
1517                         values
1518                         {
1519                                 input uint in0                  = [ 1 | 2 | 3 | 16 ];
1520                                 output uint out0                = [ 1 | 2 | 3 | 16 ];
1521                         }
1522                         vertex ""
1523                                 #version 310 es
1524                                 ${VERTEX_DECLARATIONS}
1525                                 struct S { mediump uint a; };
1526                                 layout(location = 0) flat out S var;
1527                                 void main()
1528                                 {
1529                                         ${VERTEX_SETUP}
1530                                         var.a = in0;
1531                                         ${VERTEX_OUTPUT}
1532                                 }
1533                         ""
1534                         fragment ""
1535                                 #version 310 es
1536                                 ${FRAGMENT_DECLARATIONS}
1537                                 struct S { mediump uint a; };
1538                                 layout(location = 0) flat in S var;
1539                                 void main()
1540                                 {
1541                                         out0 = var.a;
1542                                         ${FRAGMENT_OUTPUT}
1543                                 }
1544                         ""
1545                 end
1546
1547                 case uvec2
1548                         version 310 es
1549                         desc "varying of type uvec2 inside struct"
1550                         values
1551                         {
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) ];
1554                         }
1555                         vertex ""
1556                                 #version 310 es
1557                                 ${VERTEX_DECLARATIONS}
1558                                 struct S { mediump uvec2 a; };
1559                                 layout(location = 0) flat out S var;
1560                                 void main()
1561                                 {
1562                                         ${VERTEX_SETUP}
1563                                         var.a = in0;
1564                                         ${VERTEX_OUTPUT}
1565                                 }
1566                         ""
1567                         fragment ""
1568                                 #version 310 es
1569                                 ${FRAGMENT_DECLARATIONS}
1570                                 struct S { mediump uvec2 a; };
1571                                 layout(location = 0) flat in S var;
1572                                 void main()
1573                                 {
1574                                         out0 = var.a;
1575                                         ${FRAGMENT_OUTPUT}
1576                                 }
1577                         ""
1578                 end
1579
1580                 case uvec3
1581                         version 310 es
1582                         desc "varying of type uvec3 inside struct"
1583                         values
1584                         {
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) ];
1587                         }
1588                         vertex ""
1589                                 #version 310 es
1590                                 ${VERTEX_DECLARATIONS}
1591                                 struct S { mediump uvec3 a; };
1592                                 layout(location = 0) flat out S var;
1593                                 void main()
1594                                 {
1595                                         ${VERTEX_SETUP}
1596                                         var.a = in0;
1597                                         ${VERTEX_OUTPUT}
1598                                 }
1599                         ""
1600                         fragment ""
1601                                 #version 310 es
1602                                 ${FRAGMENT_DECLARATIONS}
1603                                 struct S { mediump uvec3 a; };
1604                                 layout(location = 0) flat in S var;
1605                                 void main()
1606                                 {
1607                                         out0 = var.a;
1608                                         ${FRAGMENT_OUTPUT}
1609                                 }
1610                         ""
1611                 end
1612
1613                 case uvec4
1614                         version 310 es
1615                         desc "varying of type uvec4 inside struct"
1616                         values
1617                         {
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) ];
1620                         }
1621                         vertex ""
1622                                 #version 310 es
1623                                 ${VERTEX_DECLARATIONS}
1624                                 struct S { mediump uvec4 a; };
1625                                 layout(location = 0) flat out S var;
1626                                 void main()
1627                                 {
1628                                         ${VERTEX_SETUP}
1629                                         var.a = in0;
1630                                         ${VERTEX_OUTPUT}
1631                                 }
1632                         ""
1633                         fragment ""
1634                                 #version 310 es
1635                                 ${FRAGMENT_DECLARATIONS}
1636                                 struct S { mediump uvec4 a; };
1637                                 layout(location = 0) flat in S var;
1638                                 void main()
1639                                 {
1640                                         out0 = var.a;
1641                                         ${FRAGMENT_OUTPUT}
1642                                 }
1643                         ""
1644                 end
1645
1646                 case float_vec3
1647                         version 310 es
1648                         desc "varyings of type float and vec3 inside struct"
1649                         values
1650                         {
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) ];
1655                         }
1656                         vertex ""
1657                                 #version 310 es
1658                                 ${VERTEX_DECLARATIONS}
1659                                 struct S { mediump float a; highp vec3 b; };
1660                                 layout(location = 0) out S var;
1661                                 void main()
1662                                 {
1663                                         var.a = in0;
1664                                         var.b = in1;
1665                                         ${VERTEX_OUTPUT}
1666                                 }
1667                         ""
1668                         fragment ""
1669                                 #version 310 es
1670                                 precision mediump float;
1671                                 ${FRAGMENT_DECLARATIONS}
1672                                 struct S { mediump float a; highp vec3 b; };
1673                                 layout(location = 0) in S var;
1674                                 void main()
1675                                 {
1676                                         out0 = var.a;
1677                                         out1 = var.b;
1678                                         ${FRAGMENT_OUTPUT}
1679                                 }
1680                         ""
1681                 end
1682
1683                 case float_uvec2_vec3
1684                         version 310 es
1685                         desc "varyings of type float and vec3 inside struct"
1686                         values
1687                         {
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) ];
1694                         }
1695                         vertex ""
1696                                 #version 310 es
1697                                 ${VERTEX_DECLARATIONS}
1698                                 struct S { mediump float a; highp uvec2 b; highp vec3 c; };
1699                                 layout(location = 0) flat out S var;
1700                                 void main()
1701                                 {
1702                                         ${VERTEX_SETUP}
1703                                         var.a = in0;
1704                                         var.b = in1;
1705                                         var.c = in2;
1706                                         ${VERTEX_OUTPUT}
1707                                 }
1708                         ""
1709                         fragment ""
1710                                 #version 310 es
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;
1715                                 void main()
1716                                 {
1717                                         out0 = var.a;
1718                                         out1 = var.b;
1719                                         out2 = var.c;
1720                                         ${FRAGMENT_OUTPUT}
1721                                 }
1722                         ""
1723                 end
1724         end
1725
1726         group interpolation "Varying interpolation modes"
1727                 case smooth
1728                         version 310 es
1729                         desc "varying of type vec4"
1730                         values
1731                         {
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) ];
1734                         }
1735                         vertex ""
1736                                 #version 310 es
1737                                 ${VERTEX_DECLARATIONS}
1738                                 layout(location = 0) smooth out mediump vec4 var;
1739                                 void main()
1740                                 {
1741                                         var = in0;
1742                                         ${VERTEX_OUTPUT}
1743                                 }
1744                         ""
1745                         fragment ""
1746                                 #version 310 es
1747                                 precision mediump float;
1748                                 ${FRAGMENT_DECLARATIONS}
1749                                 layout(location = 0) smooth in vec4 var;
1750                                 void main()
1751                                 {
1752                                         out0 = var;
1753                                         ${FRAGMENT_OUTPUT}
1754                                 }
1755                         ""
1756                 end
1757
1758                 case centroid
1759                         version 310 es
1760                         desc "varying of type vec4"
1761                         values
1762                         {
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) ];
1765                         }
1766                         vertex ""
1767                                 #version 310 es
1768                                 ${VERTEX_DECLARATIONS}
1769                                 layout(location = 0) centroid out mediump vec4 var;
1770                                 void main()
1771                                 {
1772                                         var = in0;
1773                                         ${VERTEX_OUTPUT}
1774                                 }
1775                         ""
1776                         fragment ""
1777                                 #version 310 es
1778                                 precision mediump float;
1779                                 ${FRAGMENT_DECLARATIONS}
1780                                 layout(location = 0) centroid in vec4 var;
1781                                 void main()
1782                                 {
1783                                         out0 = var;
1784                                         ${FRAGMENT_OUTPUT}
1785                                 }
1786                         ""
1787                 end
1788
1789                 case flat
1790                         version 310 es
1791                         desc "varying of type vec4"
1792                         values
1793                         {
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) ];
1796                         }
1797                         vertex ""
1798                                 #version 310 es
1799                                 ${VERTEX_DECLARATIONS}
1800                                 layout(location = 0) flat out mediump vec4 var;
1801                                 void main()
1802                                 {
1803                                         var = in0;
1804                                         ${VERTEX_OUTPUT}
1805                                 }
1806                         ""
1807                         fragment ""
1808                                 #version 310 es
1809                                 precision mediump float;
1810                                 ${FRAGMENT_DECLARATIONS}
1811                                 layout(location = 0) flat in vec4 var;
1812                                 void main()
1813                                 {
1814                                         out0 = var;
1815                                         ${FRAGMENT_OUTPUT}
1816                                 }
1817                         ""
1818                 end
1819         end
1820
1821         group usage "Varying usage in shaders"
1822                 case readback_1
1823                         version 310 es
1824                         desc "read back (an already written) varying in the vertex shader"
1825                         values
1826                         {
1827                                 input float in0         = [ 1.0 | 0.0 | -2.0 | 10.0 ];
1828                                 output float out0       = [ 3.0 | 0.0 | -6.0 | 30.0 ];
1829                         }
1830                         vertex ""
1831                                 #version 310 es
1832                                 precision mediump float;
1833                                 ${VERTEX_DECLARATIONS}
1834                                 layout(location = 0) out float var1;
1835                                 layout(location = 1) out float var2;
1836
1837                                 void main()
1838                                 {
1839                                         var1 = in0;
1840                                         var2 = var1 + in0;
1841                                         ${VERTEX_OUTPUT}
1842                                 }
1843                         ""
1844                         fragment ""
1845                                 #version 310 es
1846                                 precision mediump float;
1847                                 ${FRAGMENT_DECLARATIONS}
1848                                 layout(location = 0) in float var1;
1849                                 layout(location = 1) in float var2;
1850
1851                                 void main()
1852                                 {
1853                                         out0 = var1 + var2;
1854                                         ${FRAGMENT_OUTPUT}
1855                                 }
1856                         ""
1857                 end
1858         end
1859 end