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