1{
2    "General":{
3        "comment":[
4            " Copyright 2018 The ANGLE Project Authors. All rights reserved.",
5            " Use of this source code is governed by a BSD-style license that can be",
6            " found in the LICENSE file.",
7            "",
8            " The schema of this JSON file is as follows:",
9            "",
10            " The top-level object contains variable groups. Each group can have the following",
11            " properties:",
12            "   variables: Object mapping variable names to variable properties.",
13            "   subgroups: Object with more groups that fall under the top-level group.",
14            "   shader_type: The type of shader this variable is supported in",
15            " Each variable can have the following properties:",
16            "   essl_level: ESSL symbol table level where the variable is contained.",
17            "   glsl_level: GLSL symbol table level where the variable is contained.",
18            "   type: Object with properties of the type. Can be substituted with initDynamicType.",
19            "   initDynamicType: Template string with C++ code for initializing a TType * with the",
20            "                    name {type_name}. The name will be replaced when generating code.",
21            "                    May refer to names of previously listed structs or interface",
22            "                    blocks.",
23            "   essl_extension: Optional. Name of the ESSL extension where this variable is from.",
24            "   essl_extension_becomes_core_in: Optional. ESSL level where symbols from this",
25            "                                   extension have become core.",
26            "   glsl_extension: Optional. Name of the GLSL extension where this variable is from.",
27            "   value: Optional. String that has one valid value: 'resources'. Denotes that the",
28            "          value of the variable should be based on the field of ShBuiltInResources",
29            "          with the same name as the variable.",
30            "   class: Optional. To be used for interface block or struct definitions. Valid",
31            "          values are 'TStructure' or 'TInterfaceBlock'.",
32            "   fields: Optional. Object to be used for storing fields of interface block and",
33            "           struct definitions. Maps field names to field types.",
34            "   suffix: Optional. Suffix to give C++ variables storing the properties of this",
35            "           variable a unique name that doesn't conflict with C++ keywords.",
36            " Each type can have the following properties:",
37            "   basic: Basic type as in the TBasicType enum without the Ebt prefix.",
38            "   precision: Precision as in TPrecision enum without the Ebp prefix.",
39            "   qualifier: Optional. Qualifier as in the TQualifier enum without the Evq prefix.",
40            "   primarySize: Optional. Vector size or matrix column count.",
41            "   secondarySize: Optional. Matrix row count.",
42            " Any group, variable or type can have the property 'comment'."
43        ],
44        "variables":{
45            "gl_DepthRangeParameters":{
46                "class":"TStructure",
47                "essl_level":"COMMON_BUILTINS",
48                "fields":{
49                    "near":{
50                        "basic":"Float",
51                        "precision":"High"
52                    },
53                    "far":{
54                        "basic":"Float",
55                        "precision":"High"
56                    },
57                    "diff":{
58                        "basic":"Float",
59                        "precision":"High"
60                    }
61                }
62            },
63            "gl_DepthRange":{
64                "essl_level":"COMMON_BUILTINS",
65                "initDynamicType":"TType *{type_name} = new TType(gl_DepthRangeParameters, false); {type_name}->setQualifier(EvqUniform);"
66            }
67        },
68        "subgroups":{
69            "OESSampleVariables":{
70                "variables":{
71                    "gl_NumSamples":{
72                        "essl_level":"ESSL3_BUILTINS",
73                        "essl_extension":"OES_sample_variables",
74                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
75                        "type":{
76                            "basic":"Int",
77                            "precision":"Low",
78                            "qualifier":"Uniform"
79                        }
80                    }
81                }
82            }
83        }
84    },
85    "Constants":{
86        "variables":{
87            "gl_MaxVertexAttribs":{
88                "essl_level":"COMMON_BUILTINS",
89                "type":{
90                    "basic":"Int",
91                    "precision":"Medium",
92                    "qualifier":"Const"
93                },
94                "value":"resources"
95            },
96            "gl_MaxVertexUniformVectors":{
97                "essl_level":"COMMON_BUILTINS",
98                "type":{
99                    "basic":"Int",
100                    "precision":"Medium",
101                    "qualifier":"Const"
102                },
103                "value":"resources"
104            },
105            "gl_MaxVertexTextureImageUnits":{
106                "essl_level":"COMMON_BUILTINS",
107                "type":{
108                    "basic":"Int",
109                    "precision":"Medium",
110                    "qualifier":"Const"
111                },
112                "value":"resources"
113            },
114            "gl_MaxCombinedTextureImageUnits":{
115                "essl_level":"COMMON_BUILTINS",
116                "type":{
117                    "basic":"Int",
118                    "precision":"Medium",
119                    "qualifier":"Const"
120                },
121                "value":"resources"
122            },
123            "gl_MaxTextureImageUnits":{
124                "essl_level":"COMMON_BUILTINS",
125                "type":{
126                    "basic":"Int",
127                    "precision":"Medium",
128                    "qualifier":"Const"
129                },
130                "value":"resources"
131            },
132            "gl_MaxFragmentUniformVectors":{
133                "essl_level":"COMMON_BUILTINS",
134                "type":{
135                    "basic":"Int",
136                    "precision":"Medium",
137                    "qualifier":"Const"
138                },
139                "value":"resources"
140            },
141            "gl_MaxVaryingVectors":{
142                "essl_level":"ESSL1_BUILTINS",
143                "type":{
144                    "basic":"Int",
145                    "precision":"Medium",
146                    "qualifier":"Const"
147                },
148                "value":"resources"
149            },
150            "gl_MaxDrawBuffers":{
151                "essl_level":"COMMON_BUILTINS",
152                "type":{
153                    "basic":"Int",
154                    "precision":"Medium",
155                    "qualifier":"Const"
156                },
157                "value":"resources"
158            },
159            "gl_MaxDualSourceDrawBuffersEXT":{
160                "essl_level":"COMMON_BUILTINS",
161                "type":{
162                    "basic":"Int",
163                    "precision":"Medium",
164                    "qualifier":"Const"
165                },
166                "essl_extension":"EXT_blend_func_extended",
167                "value":"resources",
168                "valueKey":"MaxDualSourceDrawBuffers"
169            },
170            "gl_MaxVertexOutputVectors":{
171                "essl_level":"ESSL3_BUILTINS",
172                "type":{
173                    "basic":"Int",
174                    "precision":"Medium",
175                    "qualifier":"Const"
176                },
177                "value":"resources"
178            },
179            "gl_MaxFragmentInputVectors":{
180                "essl_level":"ESSL3_BUILTINS",
181                "type":{
182                    "basic":"Int",
183                    "precision":"Medium",
184                    "qualifier":"Const"
185                },
186                "value":"resources"
187            },
188            "gl_MinProgramTexelOffset":{
189                "essl_level":"ESSL3_BUILTINS",
190                "type":{
191                    "basic":"Int",
192                    "precision":"Medium",
193                    "qualifier":"Const"
194                },
195                "value":"resources"
196            },
197            "gl_MaxProgramTexelOffset":{
198                "essl_level":"ESSL3_BUILTINS",
199                "type":{
200                    "basic":"Int",
201                    "precision":"Medium",
202                    "qualifier":"Const"
203                },
204                "value":"resources"
205            },
206            "gl_MaxImageUnits":{
207                "essl_level":"ESSL3_1_BUILTINS",
208                "type":{
209                    "basic":"Int",
210                    "precision":"Medium",
211                    "qualifier":"Const"
212                },
213                "value":"resources"
214            },
215            "gl_MaxVertexImageUniforms":{
216                "essl_level":"ESSL3_1_BUILTINS",
217                "type":{
218                    "basic":"Int",
219                    "precision":"Medium",
220                    "qualifier":"Const"
221                },
222                "value":"resources"
223            },
224            "gl_MaxFragmentImageUniforms":{
225                "essl_level":"ESSL3_1_BUILTINS",
226                "type":{
227                    "basic":"Int",
228                    "precision":"Medium",
229                    "qualifier":"Const"
230                },
231                "value":"resources"
232            },
233            "gl_MaxComputeImageUniforms":{
234                "essl_level":"ESSL3_1_BUILTINS",
235                "type":{
236                    "basic":"Int",
237                    "precision":"Medium",
238                    "qualifier":"Const"
239                },
240                "value":"resources"
241            },
242            "gl_MaxCombinedImageUniforms":{
243                "essl_level":"ESSL3_1_BUILTINS",
244                "type":{
245                    "basic":"Int",
246                    "precision":"Medium",
247                    "qualifier":"Const"
248                },
249                "value":"resources"
250            },
251            "gl_MaxCombinedShaderOutputResources":{
252                "essl_level":"ESSL3_1_BUILTINS",
253                "type":{
254                    "basic":"Int",
255                    "precision":"Medium",
256                    "qualifier":"Const"
257                },
258                "value":"resources"
259            },
260            "gl_MaxComputeWorkGroupCount":{
261                "essl_level":"ESSL3_1_BUILTINS",
262                "type":{
263                    "basic":"Int",
264                    "precision":"High",
265                    "qualifier":"Const",
266                    "primarySize":3
267                },
268                "value":"resources"
269            },
270            "gl_MaxComputeWorkGroupSize":{
271                "essl_level":"ESSL3_1_BUILTINS",
272                "type":{
273                    "basic":"Int",
274                    "precision":"High",
275                    "qualifier":"Const",
276                    "primarySize":3
277                },
278                "value":"resources"
279            },
280            "gl_MaxComputeUniformComponents":{
281                "essl_level":"ESSL3_1_BUILTINS",
282                "type":{
283                    "basic":"Int",
284                    "precision":"Medium",
285                    "qualifier":"Const"
286                },
287                "value":"resources"
288            },
289            "gl_MaxComputeTextureImageUnits":{
290                "essl_level":"ESSL3_1_BUILTINS",
291                "type":{
292                    "basic":"Int",
293                    "precision":"Medium",
294                    "qualifier":"Const"
295                },
296                "value":"resources"
297            },
298            "gl_MaxComputeAtomicCounters":{
299                "essl_level":"ESSL3_1_BUILTINS",
300                "type":{
301                    "basic":"Int",
302                    "precision":"Medium",
303                    "qualifier":"Const"
304                },
305                "value":"resources"
306            },
307            "gl_MaxComputeAtomicCounterBuffers":{
308                "essl_level":"ESSL3_1_BUILTINS",
309                "type":{
310                    "basic":"Int",
311                    "precision":"Medium",
312                    "qualifier":"Const"
313                },
314                "value":"resources"
315            },
316            "gl_MaxVertexAtomicCounters":{
317                "essl_level":"ESSL3_1_BUILTINS",
318                "type":{
319                    "basic":"Int",
320                    "precision":"Medium",
321                    "qualifier":"Const"
322                },
323                "value":"resources"
324            },
325            "gl_MaxFragmentAtomicCounters":{
326                "essl_level":"ESSL3_1_BUILTINS",
327                "type":{
328                    "basic":"Int",
329                    "precision":"Medium",
330                    "qualifier":"Const"
331                },
332                "value":"resources"
333            },
334            "gl_MaxCombinedAtomicCounters":{
335                "essl_level":"ESSL3_1_BUILTINS",
336                "type":{
337                    "basic":"Int",
338                    "precision":"Medium",
339                    "qualifier":"Const"
340                },
341                "value":"resources"
342            },
343            "gl_MaxAtomicCounterBindings":{
344                "essl_level":"ESSL3_1_BUILTINS",
345                "type":{
346                    "basic":"Int",
347                    "precision":"Medium",
348                    "qualifier":"Const"
349                },
350                "value":"resources"
351            },
352            "gl_MaxVertexAtomicCounterBuffers":{
353                "essl_level":"ESSL3_1_BUILTINS",
354                "type":{
355                    "basic":"Int",
356                    "precision":"Medium",
357                    "qualifier":"Const"
358                },
359                "value":"resources"
360            },
361            "gl_MaxFragmentAtomicCounterBuffers":{
362                "essl_level":"ESSL3_1_BUILTINS",
363                "type":{
364                    "basic":"Int",
365                    "precision":"Medium",
366                    "qualifier":"Const"
367                },
368                "value":"resources"
369            },
370            "gl_MaxCombinedAtomicCounterBuffers":{
371                "essl_level":"ESSL3_1_BUILTINS",
372                "type":{
373                    "basic":"Int",
374                    "precision":"Medium",
375                    "qualifier":"Const"
376                },
377                "value":"resources"
378            },
379            "gl_MaxAtomicCounterBufferSize":{
380                "essl_level":"ESSL3_1_BUILTINS",
381                "type":{
382                    "basic":"Int",
383                    "precision":"Medium",
384                    "qualifier":"Const"
385                },
386                "value":"resources"
387            }
388        },
389        "subgroups":{
390            "EXTGeometryShader":{
391                "variables":{
392                    "gl_MaxGeometryInputComponents":{
393                        "essl_level":"ESSL3_1_BUILTINS",
394                        "type":{
395                            "basic":"Int",
396                            "precision":"Medium",
397                            "qualifier":"Const"
398                        },
399                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
400                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
401                        "value":"resources"
402                    },
403                    "gl_MaxGeometryOutputComponents":{
404                        "essl_level":"ESSL3_1_BUILTINS",
405                        "type":{
406                            "basic":"Int",
407                            "precision":"Medium",
408                            "qualifier":"Const"
409                        },
410                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
411                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
412                        "value":"resources"
413                    },
414                    "gl_MaxGeometryImageUniforms":{
415                        "essl_level":"ESSL3_1_BUILTINS",
416                        "type":{
417                            "basic":"Int",
418                            "precision":"Medium",
419                            "qualifier":"Const"
420                        },
421                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
422                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
423                        "value":"resources"
424                    },
425                    "gl_MaxGeometryTextureImageUnits":{
426                        "essl_level":"ESSL3_1_BUILTINS",
427                        "type":{
428                            "basic":"Int",
429                            "precision":"Medium",
430                            "qualifier":"Const"
431                        },
432                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
433                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
434                        "value":"resources"
435                    },
436                    "gl_MaxGeometryOutputVertices":{
437                        "essl_level":"ESSL3_1_BUILTINS",
438                        "type":{
439                            "basic":"Int",
440                            "precision":"Medium",
441                            "qualifier":"Const"
442                        },
443                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
444                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
445                        "value":"resources"
446                    },
447                    "gl_MaxGeometryTotalOutputComponents":{
448                        "essl_level":"ESSL3_1_BUILTINS",
449                        "type":{
450                            "basic":"Int",
451                            "precision":"Medium",
452                            "qualifier":"Const"
453                        },
454                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
455                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
456                        "value":"resources"
457                    },
458                    "gl_MaxGeometryUniformComponents":{
459                        "essl_level":"ESSL3_1_BUILTINS",
460                        "type":{
461                            "basic":"Int",
462                            "precision":"Medium",
463                            "qualifier":"Const"
464                        },
465                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
466                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
467                        "value":"resources"
468                    },
469                    "gl_MaxGeometryAtomicCounters":{
470                        "essl_level":"ESSL3_1_BUILTINS",
471                        "type":{
472                            "basic":"Int",
473                            "precision":"Medium",
474                            "qualifier":"Const"
475                        },
476                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
477                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
478                        "value":"resources"
479                    },
480                    "gl_MaxGeometryAtomicCounterBuffers":{
481                        "essl_level":"ESSL3_1_BUILTINS",
482                        "type":{
483                            "basic":"Int",
484                            "precision":"Medium",
485                            "qualifier":"Const"
486                        },
487                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
488                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
489                        "value":"resources"
490                    }
491                }
492            },
493            "EXTTessellationShader":{
494                "variables":{
495                    "gl_MaxTessControlInputComponents":{
496                        "essl_level":"ESSL3_1_BUILTINS",
497                        "type":{
498                            "basic":"Int",
499                            "precision":"Medium",
500                            "qualifier":"Const"
501                        },
502                        "essl_extension":"EXT_tessellation_shader",
503                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
504                        "value":"resources"
505                    },
506                    "gl_MaxTessControlOutputComponents":{
507                        "essl_level":"ESSL3_1_BUILTINS",
508                        "type":{
509                            "basic":"Int",
510                            "precision":"Medium",
511                            "qualifier":"Const"
512                        },
513                        "essl_extension":"EXT_tessellation_shader",
514                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
515                        "value":"resources"
516                    },
517                    "gl_MaxTessControlTextureImageUnits":{
518                        "essl_level":"ESSL3_1_BUILTINS",
519                        "type":{
520                            "basic":"Int",
521                            "precision":"Medium",
522                            "qualifier":"Const"
523                        },
524                        "essl_extension":"EXT_tessellation_shader",
525                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
526                        "value":"resources"
527                    },
528                    "gl_MaxTessControlUniformComponents":{
529                        "essl_level":"ESSL3_1_BUILTINS",
530                        "type":{
531                            "basic":"Int",
532                            "precision":"Medium",
533                            "qualifier":"Const"
534                        },
535                        "essl_extension":"EXT_tessellation_shader",
536                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
537                        "value":"resources"
538                    },
539                    "gl_MaxTessControlTotalOutputComponents":{
540                        "essl_level":"ESSL3_1_BUILTINS",
541                        "type":{
542                            "basic":"Int",
543                            "precision":"Medium",
544                            "qualifier":"Const"
545                        },
546                        "essl_extension":"EXT_tessellation_shader",
547                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
548                        "value":"resources"
549                    },
550                    "gl_MaxTessControlImageUniforms":{
551                        "essl_level":"ESSL3_1_BUILTINS",
552                        "type":{
553                            "basic":"Int",
554                            "precision":"Medium",
555                            "qualifier":"Const"
556                        },
557                        "essl_extension":"EXT_tessellation_shader",
558                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
559                        "value":"resources"
560                    },
561                    "gl_MaxTessControlAtomicCounters":{
562                        "essl_level":"ESSL3_1_BUILTINS",
563                        "type":{
564                            "basic":"Int",
565                            "precision":"Medium",
566                            "qualifier":"Const"
567                        },
568                        "essl_extension":"EXT_tessellation_shader",
569                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
570                        "value":"resources"
571                    },
572                    "gl_MaxTessControlAtomicCounterBuffers":{
573                        "essl_level":"ESSL3_1_BUILTINS",
574                        "type":{
575                            "basic":"Int",
576                            "precision":"Medium",
577                            "qualifier":"Const"
578                        },
579                        "essl_extension":"EXT_tessellation_shader",
580                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
581                        "value":"resources"
582                    },
583                    "gl_MaxTessPatchComponents":{
584                        "essl_level":"ESSL3_1_BUILTINS",
585                        "type":{
586                            "basic":"Int",
587                            "precision":"Medium",
588                            "qualifier":"Const"
589                        },
590                        "essl_extension":"EXT_tessellation_shader",
591                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
592                        "value":"resources"
593                    },
594                    "gl_MaxPatchVertices":{
595                        "essl_level":"ESSL3_1_BUILTINS",
596                        "type":{
597                            "basic":"Int",
598                            "precision":"Medium",
599                            "qualifier":"Const"
600                        },
601                        "essl_extension":"EXT_tessellation_shader",
602                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
603                        "value":"resources"
604                    },
605                    "gl_MaxTessGenLevel":{
606                        "essl_level":"ESSL3_1_BUILTINS",
607                        "type":{
608                            "basic":"Int",
609                            "precision":"Medium",
610                            "qualifier":"Const"
611                        },
612                        "essl_extension":"EXT_tessellation_shader",
613                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
614                        "value":"resources"
615                    },
616                    "gl_MaxTessEvaluationInputComponents":{
617                        "essl_level":"ESSL3_1_BUILTINS",
618                        "type":{
619                            "basic":"Int",
620                            "precision":"Medium",
621                            "qualifier":"Const"
622                        },
623                        "essl_extension":"EXT_tessellation_shader",
624                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
625                        "value":"resources"
626                    },
627                    "gl_MaxTessEvaluationOutputComponents":{
628                        "essl_level":"ESSL3_1_BUILTINS",
629                        "type":{
630                            "basic":"Int",
631                            "precision":"Medium",
632                            "qualifier":"Const"
633                        },
634                        "essl_extension":"EXT_tessellation_shader",
635                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
636                        "value":"resources"
637                    },
638                    "gl_MaxTessEvaluationTextureImageUnits":{
639                        "essl_level":"ESSL3_1_BUILTINS",
640                        "type":{
641                            "basic":"Int",
642                            "precision":"Medium",
643                            "qualifier":"Const"
644                        },
645                        "essl_extension":"EXT_tessellation_shader",
646                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
647                        "value":"resources"
648                    },
649                    "gl_MaxTessEvaluationUniformComponents":{
650                        "essl_level":"ESSL3_1_BUILTINS",
651                        "type":{
652                            "basic":"Int",
653                            "precision":"Medium",
654                            "qualifier":"Const"
655                        },
656                        "essl_extension":"EXT_tessellation_shader",
657                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
658                        "value":"resources"
659                    },
660                    "gl_MaxTessEvaluationImageUniforms":{
661                        "essl_level":"ESSL3_1_BUILTINS",
662                        "type":{
663                            "basic":"Int",
664                            "precision":"Medium",
665                            "qualifier":"Const"
666                        },
667                        "essl_extension":"EXT_tessellation_shader",
668                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
669                        "value":"resources"
670                    },
671                    "gl_MaxTessEvaluationAtomicCounters":{
672                        "essl_level":"ESSL3_1_BUILTINS",
673                        "type":{
674                            "basic":"Int",
675                            "precision":"Medium",
676                            "qualifier":"Const"
677                        },
678                        "essl_extension":"EXT_tessellation_shader",
679                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
680                        "value":"resources"
681                    },
682                    "gl_MaxTessEvaluationAtomicCounterBuffers":{
683                        "essl_level":"ESSL3_1_BUILTINS",
684                        "type":{
685                            "basic":"Int",
686                            "precision":"Medium",
687                            "qualifier":"Const"
688                        },
689                        "essl_extension":"EXT_tessellation_shader",
690                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
691                        "value":"resources"
692                    }
693                }
694            },
695            "OESSampleVariables":{
696                "variables":{
697                    "gl_MaxSamples":{
698                        "essl_level":"ESSL3_BUILTINS",
699                        "type":{
700                            "basic":"Int",
701                            "precision":"Medium",
702                            "qualifier":"Const"
703                        },
704                        "essl_extension":"OES_sample_variables",
705                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
706                        "value":"resources"
707                    }
708                }
709            },
710            "APPLEClipDistance":{
711                "variables":{
712                    "gl_MaxClipDistances":{
713                        "essl_level":"COMMON_BUILTINS",
714                        "type":{
715                            "basic":"Int",
716                            "precision":"Medium",
717                            "qualifier":"Const"
718                        },
719                        "essl_extension":"APPLE_clip_distance",
720                        "value":"resources",
721                        "suffix": "APPLE"
722                    }
723                }
724            },
725            "EXTClipCullDistance":{
726                "variables":{
727                    "gl_MaxCullDistances":{
728                        "essl_level":"ESSL3_BUILTINS",
729                        "type":{
730                            "basic":"Int",
731                            "precision":"Medium",
732                            "qualifier":"Const"
733                        },
734                        "essl_extension":"EXT_clip_cull_distance",
735                        "value":"resources",
736                        "suffix": "EXT"
737                    },
738                    "gl_MaxCombinedClipAndCullDistances":{
739                        "essl_level":"ESSL3_BUILTINS",
740                        "type":{
741                            "basic":"Int",
742                            "precision":"Medium",
743                            "qualifier":"Const"
744                        },
745                        "essl_extension":"EXT_clip_cull_distance",
746                        "value":"resources",
747                        "suffix": "EXT"
748                    }
749                }
750            }
751        }
752    },
753    "FragShader":{
754        "shader_type": "FRAGMENT",
755        "variables":{
756            "gl_FragCoord":{
757                "essl_level":"COMMON_BUILTINS",
758                "type":{
759                    "basic":"Float",
760                    "precision":"Medium",
761                    "qualifier":"FragCoord",
762                    "primarySize":4
763                }
764            },
765            "gl_FrontFacing":{
766                "essl_level":"COMMON_BUILTINS",
767                "type":{
768                    "basic":"Bool",
769                    "qualifier":"FrontFacing"
770                }
771            },
772            "gl_PointCoord":{
773                "essl_level":"COMMON_BUILTINS",
774                "type":{
775                    "basic":"Float",
776                    "precision":"Medium",
777                    "qualifier":"PointCoord",
778                    "primarySize":2
779                }
780            },
781            "gl_FragColor":{
782                "essl_level":"ESSL1_BUILTINS",
783                "type":{
784                    "basic":"Float",
785                    "precision":"Medium",
786                    "qualifier":"FragColor",
787                    "primarySize":4
788                }
789            },
790            "gl_FragData":{
791                "essl_level":"ESSL1_BUILTINS",
792                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqFragData, 4); if (spec != SH_WEBGL2_SPEC && spec != SH_WEBGL3_SPEC) {{ {type_name}->makeArray(resources.MaxDrawBuffers); }} else {{ {type_name}->makeArray(1u); }}"
793            },
794            "gl_FragDepth":{
795                "essl_level":"ESSL3_BUILTINS",
796                "type":{
797                    "basic":"Float",
798                    "precision":"High",
799                    "qualifier":"FragDepth"
800                }
801            },
802            "gl_HelperInvocation":{
803                "essl_level":"ESSL3_1_BUILTINS",
804                "type":{
805                    "basic":"Bool",
806                    "qualifier":"HelperInvocation"
807                }
808            }
809        },
810        "subgroups":{
811            "EXTBlendFuncExtended":{
812                "variables":{
813                    "gl_SecondaryFragColorEXT":{
814                        "essl_level":"ESSL1_BUILTINS",
815                        "essl_extension":"EXT_blend_func_extended",
816                        "type":{
817                            "basic":"Float",
818                            "precision":"Medium",
819                            "qualifier":"SecondaryFragColorEXT",
820                            "primarySize":4
821                        }
822                    },
823                    "gl_SecondaryFragDataEXT":{
824                        "essl_level":"ESSL1_BUILTINS",
825                        "essl_extension":"EXT_blend_func_extended",
826                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);"
827                    }
828                }
829            },
830            "EXTFragDepth":{
831                "variables":{
832                    "gl_FragDepthEXT":{
833                        "essl_level":"ESSL1_BUILTINS",
834                        "essl_extension":"EXT_frag_depth",
835                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepthEXT, 1);"
836                    }
837                }
838            },
839            "EXTShaderFramebufferFetch":{
840                "variables":{
841                    "gl_LastFragData":{
842                        "essl_level":"ESSL1_BUILTINS",
843                        "essl_extension":"EXT_shader_framebuffer_fetch",
844                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
845                    }
846                }
847            },
848            "EXTShaderFramebufferFetchNonCoherent":{
849                "variables":{
850                    "gl_LastFragData":{
851                        "essl_level":"ESSL1_BUILTINS",
852                        "suffix":"NonCoherent",
853                        "essl_extension":"EXT_shader_framebuffer_fetch_non_coherent",
854                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
855                    }
856                }
857            },
858            "NVShaderFramebufferFetch":{
859                "variables":{
860                    "gl_LastFragColor":{
861                        "essl_level":"ESSL1_BUILTINS",
862                        "essl_extension":"NV_shader_framebuffer_fetch",
863                        "type":{
864                            "basic":"Float",
865                            "precision":"Medium",
866                            "qualifier":"LastFragColor",
867                            "primarySize":4
868                        }
869                    },
870                    "gl_LastFragData":{
871                        "essl_level":"ESSL1_BUILTINS",
872                        "suffix":"NV",
873                        "essl_extension":"NV_shader_framebuffer_fetch",
874                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
875                    }
876                }
877            },
878            "ARMShaderFramebufferFetch":{
879                "variables":{
880                    "gl_LastFragColorARM":{
881                        "essl_level":"ESSL1_BUILTINS",
882                        "essl_extension":"ARM_shader_framebuffer_fetch",
883                        "type":{
884                            "basic":"Float",
885                            "precision":"Medium",
886                            "qualifier":"LastFragColor",
887                            "primarySize":4
888                        }
889                    }
890                }
891            },
892            "GeometryShaderSupported":{
893                "variables":{
894                    "gl_PrimitiveID":{
895                        "essl_level":"ESSL3_1_BUILTINS",
896                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
897                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
898                        "type":{
899                            "basic":"Int",
900                            "precision":"High",
901                            "qualifier":"PrimitiveID"
902                        }
903                    },
904                    "gl_Layer":{
905                        "essl_level":"ESSL3_1_BUILTINS",
906                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
907                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
908                        "type":{
909                            "basic":"Int",
910                            "precision":"High",
911                            "qualifier":"Layer"
912                        }
913                    }
914                }
915            },
916            "OESSampleVariables":{
917                "variables":{
918                    "gl_SampleID":{
919                        "essl_level":"ESSL3_BUILTINS",
920                        "essl_extension":"OES_sample_variables",
921                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
922                        "type":{
923                            "basic":"Int",
924                            "precision":"Low",
925                            "qualifier":"SampleID"
926                        }
927                    },
928                    "gl_SamplePosition":{
929                        "essl_level":"ESSL3_BUILTINS",
930                        "essl_extension":"OES_sample_variables",
931                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
932                        "type":{
933                            "basic":"Float",
934                            "precision":"Medium",
935                            "primarySize":2,
936                            "qualifier":"SamplePosition"
937                        }
938                    },
939                    "gl_SampleMaskIn":{
940                        "essl_level":"ESSL3_BUILTINS",
941                        "essl_extension":"OES_sample_variables",
942                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
943                        "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMaskIn, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
944                    },
945                    "gl_SampleMask":{
946                        "essl_level":"ESSL3_BUILTINS",
947                        "essl_extension":"OES_sample_variables",
948                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
949                        "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMask, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
950                    }
951                }
952            },
953            "EXTClipCullDistance":{
954                "variables":{
955                    "gl_CullDistance":{
956                        "essl_level":"ESSL3_BUILTINS",
957                        "essl_extension":"EXT_clip_cull_distance",
958                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);"
959                    },
960                    "gl_ClipDistance":{
961                        "essl_level":"ESSL3_BUILTINS",
962                        "essl_extension":"EXT_clip_cull_distance",
963                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);"
964                    }
965                }
966            }
967        }
968    },
969    "VertexShader":{
970        "shader_type": "VERTEX",
971        "variables":{
972            "gl_Position":{
973                "essl_level":"COMMON_BUILTINS",
974                "type":{
975                    "basic":"Float",
976                    "precision":"High",
977                    "qualifier":"Position",
978                    "primarySize":4
979                }
980            },
981            "gl_PointSize":{
982                "essl_level":"COMMON_BUILTINS",
983                "type":{
984                    "basic":"Float",
985                    "precision":"Medium",
986                    "qualifier":"PointSize"
987                }
988            },
989            "gl_InstanceID":{
990                "essl_level":"ESSL3_BUILTINS",
991                "type":{
992                    "basic":"Int",
993                    "precision":"High",
994                    "qualifier":"InstanceID"
995                }
996            },
997            "gl_InstanceIndex":{
998                "essl_level":"GLSL_BUILTINS",
999                "type":{
1000                    "basic":"Int",
1001                    "precision":"High",
1002                    "qualifier":"InstanceID",
1003                    "comment": "In GLSL 450 used by Vulkan"
1004                }
1005            },
1006            "gl_VertexID":{
1007                "essl_level":"ESSL3_BUILTINS",
1008                "type":{
1009                    "basic":"Int",
1010                    "precision":"High",
1011                    "qualifier":"VertexID"
1012                }
1013            },
1014            "gl_VertexIndex":{
1015                "essl_level":"GLSL_BUILTINS",
1016                "type":{
1017                    "basic":"Int",
1018                    "precision":"High",
1019                    "qualifier":"VertexID",
1020                    "comment": "In GLSL 450 used by Vulkan"
1021                }
1022            },
1023            "gl_ViewportIndex":{
1024                "comment":"For internal use by ANGLE - not exposed to the parser.",
1025                "essl_level":"GLSL_BUILTINS",
1026                "type":{
1027                    "basic":"Int",
1028                    "precision":"High",
1029                    "qualifier":"ViewportIndex"
1030                }
1031            },
1032            "gl_Layer":{
1033                "suffix":"VS",
1034                "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.",
1035                "essl_level":"GLSL_BUILTINS",
1036                "type":{
1037                    "basic":"Int",
1038                    "precision":"High",
1039                    "qualifier":"Layer"
1040                }
1041            }
1042        },
1043        "subgroups":{
1044            "ANGLEMultiDraw":{
1045                "subgroups":{
1046                  "ESSL3":{
1047                        "variables":{
1048                            "gl_DrawID":{
1049                                "essl_level":"COMMON_BUILTINS",
1050                                "essl_extension":"ANGLE_multi_draw",
1051                                "type":{
1052                                    "basic":"Int",
1053                                    "precision":"High",
1054                                    "qualifier":"DrawID"
1055                                }
1056                            }
1057                        }
1058                    }
1059                }
1060            },
1061            "ANGLEBaseVertexBaseInstance":{
1062                "subgroups":{
1063                  "ESSL3":{
1064                        "variables":{
1065                            "gl_BaseVertex":{
1066                                "essl_level":"ESSL3_BUILTINS",
1067                                "essl_extension":"ANGLE_base_vertex_base_instance",
1068                                "type":{
1069                                    "basic":"Int",
1070                                    "precision":"High",
1071                                    "qualifier":"Uniform"
1072                                }
1073                            },
1074                            "gl_BaseInstance":{
1075                                "essl_level":"ESSL3_BUILTINS",
1076                                "essl_extension":"ANGLE_base_vertex_base_instance",
1077                                "type":{
1078                                    "basic":"Int",
1079                                    "precision":"High",
1080                                    "qualifier":"Uniform"
1081                                }
1082                            },
1083                            "angle_BaseVertex":{
1084                                "essl_level":"COMMON_BUILTINS",
1085                                "essl_extension":"ANGLE_base_vertex_base_instance",
1086                                "type":{
1087                                    "basic":"Int",
1088                                    "precision":"High",
1089                                    "qualifier":"Uniform"
1090                                }
1091                            },
1092                            "angle_BaseInstance":{
1093                                "essl_level":"COMMON_BUILTINS",
1094                                "essl_extension":"ANGLE_base_vertex_base_instance",
1095                                "type":{
1096                                    "basic":"Int",
1097                                    "precision":"High",
1098                                    "qualifier":"Uniform"
1099                                }
1100                            }
1101                        }
1102                    }
1103                }
1104            },
1105            "APPLEClipDistance":{
1106                "variables":{
1107                    "gl_ClipDistance":{
1108                        "essl_level":"COMMON_BUILTINS",
1109                        "essl_extension":"APPLE_clip_distance",
1110                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);",
1111                        "suffix": "APPLE"
1112                    }
1113                }
1114            },
1115            "EXTClipCullDistance":{
1116                "variables":{
1117                    "gl_CullDistance":{
1118                        "essl_level":"ESSL3_BUILTINS",
1119                        "essl_extension":"EXT_clip_cull_distance",
1120                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);",
1121                        "suffix": "EXT"
1122                    }
1123                }
1124            }
1125        }
1126    },
1127    "ComputeShader":{
1128        "shader_type": "COMPUTE",
1129        "variables":{
1130            "gl_NumWorkGroups":{
1131                "essl_level":"ESSL3_1_BUILTINS",
1132                "type":{
1133                    "basic":"UInt",
1134                    "precision":"Undefined",
1135                    "qualifier":"NumWorkGroups",
1136                    "primarySize":3
1137                }
1138            },
1139            "gl_WorkGroupSize":{
1140                "essl_level":"ESSL3_1_BUILTINS",
1141                "type":{
1142                    "basic":"UInt",
1143                    "precision":"Undefined",
1144                    "qualifier":"WorkGroupSize",
1145                    "primarySize":3
1146                }
1147            },
1148            "gl_WorkGroupID":{
1149                "essl_level":"ESSL3_1_BUILTINS",
1150                "type":{
1151                    "basic":"UInt",
1152                    "precision":"Undefined",
1153                    "qualifier":"WorkGroupID",
1154                    "primarySize":3
1155                }
1156            },
1157            "gl_LocalInvocationID":{
1158                "essl_level":"ESSL3_1_BUILTINS",
1159                "type":{
1160                    "basic":"UInt",
1161                    "precision":"Undefined",
1162                    "qualifier":"LocalInvocationID",
1163                    "primarySize":3
1164                }
1165            },
1166            "gl_GlobalInvocationID":{
1167                "essl_level":"ESSL3_1_BUILTINS",
1168                "type":{
1169                    "basic":"UInt",
1170                    "precision":"Undefined",
1171                    "qualifier":"GlobalInvocationID",
1172                    "primarySize":3
1173                }
1174            },
1175            "gl_LocalInvocationIndex":{
1176                "essl_level":"ESSL3_1_BUILTINS",
1177                "type":{
1178                    "basic":"UInt",
1179                    "precision":"Undefined",
1180                    "qualifier":"LocalInvocationIndex"
1181                }
1182            }
1183        }
1184    },
1185    "GeometryShader":{
1186        "shader_type": "GEOMETRY_EXT",
1187        "variables":{
1188            "gl_PrimitiveIDIn":{
1189                "essl_level":"ESSL3_1_BUILTINS",
1190                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1191                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1192                "type":{
1193                    "basic":"Int",
1194                    "precision":"High",
1195                    "qualifier":"PrimitiveIDIn"
1196                }
1197            },
1198            "gl_InvocationID":{
1199                "essl_level":"ESSL3_1_BUILTINS",
1200                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1201                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1202                "type":{
1203                    "basic":"Int",
1204                    "precision":"High",
1205                    "qualifier":"InvocationID"
1206                }
1207            },
1208            "gl_PrimitiveID":{
1209                "suffix":"GS",
1210                "essl_level":"ESSL3_1_BUILTINS",
1211                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1212                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1213                "type":{
1214                    "basic":"Int",
1215                    "precision":"High",
1216                    "qualifier":"PrimitiveID"
1217                }
1218            },
1219            "gl_Layer":{
1220                "suffix":"GS",
1221                "essl_level":"ESSL3_1_BUILTINS",
1222                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1223                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1224                "type":{
1225                    "basic":"Int",
1226                    "precision":"High",
1227                    "qualifier":"Layer"
1228                }
1229            },
1230            "gl_PerVertex":{
1231                "essl_level":"ESSL3_1_BUILTINS",
1232                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1233                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1234                "class":"TInterfaceBlock",
1235                "fields":{
1236                    "gl_Position":{
1237                        "basic":"Float",
1238                        "precision":"High",
1239                        "qualifier":"Position",
1240                        "primarySize":4
1241                    }
1242                }
1243            },
1244            "gl_in":{
1245                "essl_level":"ESSL3_1_BUILTINS",
1246                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1247                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1248                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);",
1249                "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration."
1250            }
1251        },
1252        "subgroups":{
1253            "Out":{
1254                "variables":{
1255                    "gl_PerVertex":{
1256                        "suffix":"OutBlock",
1257                        "essl_level":"ESSL3_1_BUILTINS",
1258                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1259                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1260                        "private":true,
1261                        "class":"TInterfaceBlock",
1262                        "fields":{
1263                            "gl_Position":{
1264                                "basic":"Float",
1265                                "precision":"High",
1266                                "qualifier":"Position",
1267                                "primarySize":4
1268                            }
1269                        }
1270                    },
1271                    "gl_Position":{
1272                        "suffix":"GS",
1273                        "essl_level":"ESSL3_1_BUILTINS",
1274                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1275                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1276                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock{ext_or_core_suffix});"
1277                    }
1278                }
1279            }
1280        }
1281    },
1282    "TessellationControlShader":{
1283        "shader_type": "TESS_CONTROL_EXT",
1284        "variables":{
1285            "gl_PatchVerticesIn":{
1286                "suffix":"TCS",
1287                "essl_level":"ESSL3_1_BUILTINS",
1288                "essl_extension":"EXT_tessellation_shader",
1289                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1290                "type":{
1291                    "basic":"Int",
1292                    "precision":"High",
1293                    "qualifier":"PatchVerticesIn"
1294                }
1295            },
1296            "gl_InvocationID":{
1297                "suffix":"TCS",
1298                "essl_level":"ESSL3_1_BUILTINS",
1299                "essl_extension":"EXT_tessellation_shader",
1300                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1301                "type":{
1302                    "basic":"Int",
1303                    "precision":"High",
1304                    "qualifier":"InvocationID"
1305                }
1306            },
1307            "gl_PrimitiveID":{
1308                "suffix":"TCS",
1309                "essl_level":"ESSL3_1_BUILTINS",
1310                "essl_extension":"EXT_tessellation_shader",
1311                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1312                "type":{
1313                    "basic":"Int",
1314                    "precision":"High",
1315                    "qualifier":"PrimitiveID"
1316                }
1317            },
1318            "gl_TessLevelOuter":{
1319                "suffix":"TCS",
1320                "essl_level":"ESSL3_1_BUILTINS",
1321                "essl_extension":"EXT_tessellation_shader",
1322                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1323                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
1324            },
1325            "gl_TessLevelInner":{
1326                "suffix":"TCS",
1327                "essl_level":"ESSL3_1_BUILTINS",
1328                "essl_extension":"EXT_tessellation_shader",
1329                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1330                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
1331            },
1332            "gl_PerVertex":{
1333                "suffix":"TCS",
1334                "essl_level":"ESSL3_1_BUILTINS",
1335                "essl_extension":"EXT_tessellation_shader",
1336                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1337                "class":"TInterfaceBlock",
1338                "fields":{
1339                    "gl_Position":{
1340                        "basic":"Float",
1341                        "precision":"High",
1342                        "qualifier":"Position",
1343                        "primarySize":4
1344                    }
1345                }
1346            },
1347            "gl_in":{
1348                "suffix":"TCS",
1349                "essl_level":"ESSL3_1_BUILTINS",
1350                "essl_extension":"EXT_tessellation_shader",
1351                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1352                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1353            },
1354            "gl_out":{
1355                "suffix":"TCS",
1356                "essl_level":"ESSL3_1_BUILTINS",
1357                "essl_extension":"EXT_tessellation_shader",
1358                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1359                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1360            }
1361        },
1362        "subgroups":{
1363            "Out":{
1364                "variables":{
1365                    "gl_PerVertex":{
1366                        "suffix":"OutTcsBlock",
1367                        "essl_level":"ESSL3_1_BUILTINS",
1368                        "essl_extension":"EXT_tessellation_shader",
1369                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1370                        "private":true,
1371                        "class":"TInterfaceBlock",
1372                        "fields":{
1373                            "gl_Position":{
1374                                "basic":"Float",
1375                                "precision":"High",
1376                                "qualifier":"Position",
1377                                "primarySize":4
1378                            }
1379                        }
1380                    },
1381                    "gl_Position":{
1382                        "suffix":"TCS",
1383                        "essl_level":"ESSL3_1_BUILTINS",
1384                        "essl_extension":"EXT_tessellation_shader",
1385                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1386                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock{ext_or_core_suffix});"
1387                    }
1388                }
1389            }
1390        }
1391    },
1392    "TessellationEvaluationShader":{
1393        "shader_type": "TESS_EVALUATION_EXT",
1394        "variables":{
1395            "gl_PatchVerticesIn":{
1396                "suffix":"TES",
1397                "essl_level":"ESSL3_1_BUILTINS",
1398                "essl_extension":"EXT_tessellation_shader",
1399                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1400                "type":{
1401                    "basic":"Int",
1402                    "precision":"High",
1403                    "qualifier":"PatchVerticesIn"
1404                }
1405            },
1406            "gl_PrimitiveID":{
1407                "suffix":"TES",
1408                "essl_level":"ESSL3_1_BUILTINS",
1409                "essl_extension":"EXT_tessellation_shader",
1410                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1411                "type":{
1412                    "basic":"Int",
1413                    "precision":"High",
1414                    "qualifier":"PrimitiveID"
1415                }
1416            },
1417            "gl_TessCoord":{
1418                "essl_level":"ESSL3_1_BUILTINS",
1419                "type":{
1420                    "basic":"Float",
1421                    "precision":"High",
1422                    "primarySize":3
1423                }
1424            },
1425            "gl_TessLevelOuter":{
1426                "suffix":"TES",
1427                "essl_level":"ESSL3_1_BUILTINS",
1428                "essl_extension":"EXT_tessellation_shader",
1429                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1430                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
1431            },
1432            "gl_TessLevelInner":{
1433                "suffix":"TES",
1434                "essl_level":"ESSL3_1_BUILTINS",
1435                "essl_extension":"EXT_tessellation_shader",
1436                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1437                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
1438            },
1439            "gl_PerVertex":{
1440                "suffix":"TES",
1441                "essl_level":"ESSL3_1_BUILTINS",
1442                "essl_extension":"EXT_tessellation_shader",
1443                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1444                "class":"TInterfaceBlock",
1445                "fields":{
1446                    "gl_Position":{
1447                        "basic":"Float",
1448                        "precision":"High",
1449                        "qualifier":"Position",
1450                        "primarySize":4
1451                    }
1452                }
1453            },
1454            "gl_in":{
1455                "suffix":"TES",
1456                "essl_level":"ESSL3_1_BUILTINS",
1457                "essl_extension":"EXT_tessellation_shader",
1458                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1459                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1460            },
1461            "gl_out":{
1462                "suffix":"TES",
1463                "essl_level":"ESSL3_1_BUILTINS",
1464                "essl_extension":"EXT_tessellation_shader",
1465                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1466                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1467            }
1468        },
1469        "subgroups":{
1470            "Out":{
1471                "variables":{
1472                    "gl_PerVertex":{
1473                        "suffix":"OutTesBlock",
1474                        "essl_level":"ESSL3_1_BUILTINS",
1475                        "essl_extension":"EXT_tessellation_shader",
1476                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1477                        "private":true,
1478                        "class":"TInterfaceBlock",
1479                        "fields":{
1480                            "gl_Position":{
1481                                "basic":"Float",
1482                                "precision":"High",
1483                                "qualifier":"Position",
1484                                "primarySize":4
1485                            }
1486                        }
1487                    },
1488                    "gl_Position":{
1489                        "suffix":"TES",
1490                        "essl_level":"ESSL3_1_BUILTINS",
1491                        "essl_extension":"EXT_tessellation_shader",
1492                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1493                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock{ext_or_core_suffix});"
1494                    }
1495                }
1496            }
1497        }
1498    },
1499    "Multiview":{
1500        "shader_type": "NOT_COMPUTE",
1501        "subgroups":{
1502            "ESSL3":{
1503                "variables":{
1504                    "gl_ViewID_OVR":{
1505                        "essl_level":"ESSL3_BUILTINS",
1506                        "essl_extension":"OVR_multiview",
1507                        "type":{
1508                            "basic":"UInt",
1509                            "precision":"High",
1510                            "qualifier":"ViewIDOVR"
1511                        }
1512                    }
1513                }
1514            }
1515        }
1516    }
1517}
1518