• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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":"ESSL1_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            "ES300":{
812                "variables":{
813                    "gl_FragCoord":{
814                        "essl_level":"ESSL3_BUILTINS",
815                        "suffix":"300",
816                        "type":{
817                            "basic":"Float",
818                            "precision":"High",
819                            "qualifier":"FragCoord",
820                            "primarySize":4
821                        }
822                    }
823                }
824            },
825            "EXTBlendFuncExtended":{
826                "variables":{
827                    "gl_SecondaryFragColorEXT":{
828                        "essl_level":"ESSL1_BUILTINS",
829                        "essl_extension":"EXT_blend_func_extended",
830                        "type":{
831                            "basic":"Float",
832                            "precision":"Medium",
833                            "qualifier":"SecondaryFragColorEXT",
834                            "primarySize":4
835                        }
836                    },
837                    "gl_SecondaryFragDataEXT":{
838                        "essl_level":"ESSL1_BUILTINS",
839                        "essl_extension":"EXT_blend_func_extended",
840                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);"
841                    }
842                }
843            },
844            "EXTFragDepth":{
845                "variables":{
846                    "gl_FragDepthEXT":{
847                        "essl_level":"ESSL1_BUILTINS",
848                        "essl_extension":"EXT_frag_depth",
849                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepth, 1);"
850                    }
851                }
852            },
853            "EXTShaderFramebufferFetch":{
854                "variables":{
855                    "gl_LastFragData":{
856                        "essl_level":"ESSL1_BUILTINS",
857                        "essl_extension":"EXT_shader_framebuffer_fetch, EXT_shader_framebuffer_fetch_non_coherent",
858                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
859                    }
860                }
861            },
862            "NVShaderFramebufferFetch":{
863                "variables":{
864                    "gl_LastFragColor":{
865                        "essl_level":"ESSL1_BUILTINS",
866                        "essl_extension":"NV_shader_framebuffer_fetch",
867                        "type":{
868                            "basic":"Float",
869                            "precision":"Medium",
870                            "qualifier":"LastFragColor",
871                            "primarySize":4
872                        }
873                    },
874                    "gl_LastFragData":{
875                        "essl_level":"ESSL1_BUILTINS",
876                        "suffix":"NV",
877                        "essl_extension":"NV_shader_framebuffer_fetch",
878                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
879                    }
880                }
881            },
882            "ARMShaderFramebufferFetch":{
883                "variables":{
884                    "gl_LastFragColorARM":{
885                        "essl_level":"ESSL1_BUILTINS",
886                        "essl_extension":"ARM_shader_framebuffer_fetch",
887                        "type":{
888                            "basic":"Float",
889                            "precision":"Medium",
890                            "qualifier":"LastFragColor",
891                            "primarySize":4
892                        }
893                    }
894                }
895            },
896            "GeometryShaderSupported":{
897                "variables":{
898                    "gl_PrimitiveID":{
899                        "essl_level":"ESSL3_1_BUILTINS",
900                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
901                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
902                        "type":{
903                            "basic":"Int",
904                            "precision":"High",
905                            "qualifier":"PrimitiveID"
906                        }
907                    },
908                    "gl_Layer":{
909                        "essl_level":"ESSL3_1_BUILTINS",
910                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
911                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
912                        "type":{
913                            "basic":"Int",
914                            "precision":"High",
915                            "qualifier":"Layer"
916                        }
917                    }
918                }
919            },
920            "OESSampleVariables":{
921                "variables":{
922                    "gl_SampleID":{
923                        "essl_level":"ESSL3_BUILTINS",
924                        "essl_extension":"OES_sample_variables",
925                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
926                        "type":{
927                            "basic":"Int",
928                            "precision":"Low",
929                            "qualifier":"SampleID"
930                        }
931                    },
932                    "gl_SamplePosition":{
933                        "essl_level":"ESSL3_BUILTINS",
934                        "essl_extension":"OES_sample_variables",
935                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
936                        "type":{
937                            "basic":"Float",
938                            "precision":"Medium",
939                            "primarySize":2,
940                            "qualifier":"SamplePosition"
941                        }
942                    },
943                    "gl_SampleMaskIn":{
944                        "essl_level":"ESSL3_BUILTINS",
945                        "essl_extension":"OES_sample_variables",
946                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
947                        "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMaskIn, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
948                    },
949                    "gl_SampleMask":{
950                        "essl_level":"ESSL3_BUILTINS",
951                        "essl_extension":"OES_sample_variables",
952                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
953                        "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMask, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
954                    }
955                }
956            },
957            "EXTClipCullDistance":{
958                "variables":{
959                    "gl_CullDistance":{
960                        "essl_level":"ESSL3_BUILTINS",
961                        "essl_extension":"EXT_clip_cull_distance",
962                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);"
963                    },
964                    "gl_ClipDistance":{
965                        "essl_level":"ESSL3_BUILTINS",
966                        "essl_extension":"EXT_clip_cull_distance",
967                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);"
968                    }
969                }
970            }
971        }
972    },
973    "VertexShader":{
974        "shader_type": "VERTEX",
975        "variables":{
976            "gl_Position":{
977                "essl_level":"COMMON_BUILTINS",
978                "type":{
979                    "basic":"Float",
980                    "precision":"High",
981                    "qualifier":"Position",
982                    "primarySize":4
983                }
984            },
985            "gl_PointSize":{
986                "essl_level":"ESSL1_BUILTINS",
987                "type":{
988                    "basic":"Float",
989                    "precision":"Medium",
990                    "qualifier":"PointSize"
991                }
992            },
993            "gl_InstanceID":{
994                "essl_level":"ESSL3_BUILTINS",
995                "type":{
996                    "basic":"Int",
997                    "precision":"High",
998                    "qualifier":"InstanceID"
999                }
1000            },
1001            "gl_InstanceIndex":{
1002                "essl_level":"GLSL_BUILTINS",
1003                "type":{
1004                    "basic":"Int",
1005                    "precision":"High",
1006                    "qualifier":"InstanceID",
1007                    "comment": "In GLSL 450 used by Vulkan"
1008                }
1009            },
1010            "gl_VertexID":{
1011                "essl_level":"ESSL3_BUILTINS",
1012                "type":{
1013                    "basic":"Int",
1014                    "precision":"High",
1015                    "qualifier":"VertexID"
1016                }
1017            },
1018            "gl_VertexIndex":{
1019                "essl_level":"GLSL_BUILTINS",
1020                "type":{
1021                    "basic":"Int",
1022                    "precision":"High",
1023                    "qualifier":"VertexID",
1024                    "comment": "In GLSL 450 used by Vulkan"
1025                }
1026            },
1027            "gl_ViewportIndex":{
1028                "comment":"For internal use by ANGLE - not exposed to the parser.",
1029                "essl_level":"GLSL_BUILTINS",
1030                "type":{
1031                    "basic":"Int",
1032                    "precision":"High",
1033                    "qualifier":"ViewportIndex"
1034                }
1035            },
1036            "gl_Layer":{
1037                "suffix":"VS",
1038                "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.",
1039                "essl_level":"GLSL_BUILTINS",
1040                "type":{
1041                    "basic":"Int",
1042                    "precision":"High",
1043                    "qualifier":"Layer"
1044                }
1045            }
1046        },
1047        "subgroups":{
1048            "ES300":{
1049                "variables":{
1050                    "gl_PointSize":{
1051                        "essl_level":"ESSL3_BUILTINS",
1052                        "suffix":"300",
1053                        "type":{
1054                            "basic":"Float",
1055                            "precision":"High",
1056                            "qualifier":"PointSize"
1057                        }
1058                    }
1059                }
1060            },
1061            "ANGLEMultiDraw":{
1062                "subgroups":{
1063                  "ESSL3":{
1064                        "variables":{
1065                            "gl_DrawID":{
1066                                "essl_level":"COMMON_BUILTINS",
1067                                "essl_extension":"ANGLE_multi_draw",
1068                                "type":{
1069                                    "basic":"Int",
1070                                    "precision":"High",
1071                                    "qualifier":"DrawID"
1072                                }
1073                            }
1074                        }
1075                    }
1076                }
1077            },
1078            "ANGLEBaseVertexBaseInstance":{
1079                "subgroups":{
1080                  "ESSL3":{
1081                        "variables":{
1082                            "gl_BaseVertex":{
1083                                "essl_level":"ESSL3_BUILTINS",
1084                                "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin",
1085                                "type":{
1086                                    "basic":"Int",
1087                                    "precision":"High",
1088                                    "qualifier":"Uniform"
1089                                }
1090                            },
1091                            "gl_BaseInstance":{
1092                                "essl_level":"ESSL3_BUILTINS",
1093                                "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin",
1094                                "type":{
1095                                    "basic":"Int",
1096                                    "precision":"High",
1097                                    "qualifier":"Uniform"
1098                                }
1099                            },
1100                            "angle_BaseVertex":{
1101                                "essl_level":"COMMON_BUILTINS",
1102                                "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin",
1103                                "type":{
1104                                    "basic":"Int",
1105                                    "precision":"High",
1106                                    "qualifier":"Uniform"
1107                                }
1108                            },
1109                            "angle_BaseInstance":{
1110                                "essl_level":"COMMON_BUILTINS",
1111                                "essl_extension":"ANGLE_base_vertex_base_instance_shader_builtin",
1112                                "type":{
1113                                    "basic":"Int",
1114                                    "precision":"High",
1115                                    "qualifier":"Uniform"
1116                                }
1117                            }
1118                        }
1119                    }
1120                }
1121            },
1122            "APPLEClipDistance":{
1123                "variables":{
1124                    "gl_ClipDistance":{
1125                        "essl_level":"COMMON_BUILTINS",
1126                        "essl_extension":"APPLE_clip_distance",
1127                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);",
1128                        "suffix": "APPLE"
1129                    }
1130                }
1131            },
1132            "EXTClipCullDistance":{
1133                "variables":{
1134                    "gl_CullDistance":{
1135                        "essl_level":"ESSL3_BUILTINS",
1136                        "essl_extension":"EXT_clip_cull_distance",
1137                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);",
1138                        "suffix": "EXT"
1139                    }
1140                }
1141            }
1142        }
1143    },
1144    "ComputeShader":{
1145        "shader_type": "COMPUTE",
1146        "variables":{
1147            "gl_NumWorkGroups":{
1148                "essl_level":"ESSL3_1_BUILTINS",
1149                "type":{
1150                    "basic":"UInt",
1151                    "precision":"Undefined",
1152                    "qualifier":"NumWorkGroups",
1153                    "primarySize":3
1154                }
1155            },
1156            "gl_WorkGroupSize":{
1157                "essl_level":"ESSL3_1_BUILTINS",
1158                "type":{
1159                    "basic":"UInt",
1160                    "precision":"Undefined",
1161                    "qualifier":"WorkGroupSize",
1162                    "primarySize":3
1163                }
1164            },
1165            "gl_WorkGroupID":{
1166                "essl_level":"ESSL3_1_BUILTINS",
1167                "type":{
1168                    "basic":"UInt",
1169                    "precision":"Undefined",
1170                    "qualifier":"WorkGroupID",
1171                    "primarySize":3
1172                }
1173            },
1174            "gl_LocalInvocationID":{
1175                "essl_level":"ESSL3_1_BUILTINS",
1176                "type":{
1177                    "basic":"UInt",
1178                    "precision":"Undefined",
1179                    "qualifier":"LocalInvocationID",
1180                    "primarySize":3
1181                }
1182            },
1183            "gl_GlobalInvocationID":{
1184                "essl_level":"ESSL3_1_BUILTINS",
1185                "type":{
1186                    "basic":"UInt",
1187                    "precision":"Undefined",
1188                    "qualifier":"GlobalInvocationID",
1189                    "primarySize":3
1190                }
1191            },
1192            "gl_LocalInvocationIndex":{
1193                "essl_level":"ESSL3_1_BUILTINS",
1194                "type":{
1195                    "basic":"UInt",
1196                    "precision":"Undefined",
1197                    "qualifier":"LocalInvocationIndex"
1198                }
1199            }
1200        }
1201    },
1202    "GeometryShader":{
1203        "shader_type": "GEOMETRY_EXT",
1204        "variables":{
1205            "gl_PrimitiveIDIn":{
1206                "essl_level":"ESSL3_1_BUILTINS",
1207                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1208                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1209                "type":{
1210                    "basic":"Int",
1211                    "precision":"High",
1212                    "qualifier":"PrimitiveIDIn"
1213                }
1214            },
1215            "gl_InvocationID":{
1216                "essl_level":"ESSL3_1_BUILTINS",
1217                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1218                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1219                "type":{
1220                    "basic":"Int",
1221                    "precision":"High",
1222                    "qualifier":"InvocationID"
1223                }
1224            },
1225            "gl_PrimitiveID":{
1226                "suffix":"GS",
1227                "essl_level":"ESSL3_1_BUILTINS",
1228                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1229                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1230                "type":{
1231                    "basic":"Int",
1232                    "precision":"High",
1233                    "qualifier":"PrimitiveID"
1234                }
1235            },
1236            "gl_Layer":{
1237                "suffix":"GS",
1238                "essl_level":"ESSL3_1_BUILTINS",
1239                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1240                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1241                "type":{
1242                    "basic":"Int",
1243                    "precision":"High",
1244                    "qualifier":"Layer"
1245                }
1246            },
1247            "gl_PerVertex":{
1248                "essl_level":"ESSL3_1_BUILTINS",
1249                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1250                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1251                "class":"TInterfaceBlock",
1252                "fields":{
1253                    "gl_Position":{
1254                        "basic":"Float",
1255                        "precision":"High",
1256                        "qualifier":"Position",
1257                        "primarySize":4
1258                    }
1259                }
1260            },
1261            "gl_in":{
1262                "essl_level":"ESSL3_1_BUILTINS",
1263                "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1264                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1265                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);",
1266                "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration."
1267            }
1268        },
1269        "subgroups":{
1270            "Out":{
1271                "variables":{
1272                    "gl_PerVertex":{
1273                        "suffix":"OutBlock",
1274                        "essl_level":"ESSL3_1_BUILTINS",
1275                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1276                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1277                        "private":true,
1278                        "class":"TInterfaceBlock",
1279                        "fields":{
1280                            "gl_Position":{
1281                                "basic":"Float",
1282                                "precision":"High",
1283                                "qualifier":"Position",
1284                                "primarySize":4
1285                            }
1286                        }
1287                    },
1288                    "gl_Position":{
1289                        "suffix":"GS",
1290                        "essl_level":"ESSL3_1_BUILTINS",
1291                        "essl_extension":"EXT_geometry_shader, OES_geometry_shader",
1292                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1293                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock{ext_or_core_suffix});"
1294                    }
1295                }
1296            }
1297        }
1298    },
1299    "TessellationControlShader":{
1300        "shader_type": "TESS_CONTROL_EXT",
1301        "variables":{
1302            "gl_PatchVerticesIn":{
1303                "suffix":"TCS",
1304                "essl_level":"ESSL3_1_BUILTINS",
1305                "essl_extension":"EXT_tessellation_shader",
1306                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1307                "type":{
1308                    "basic":"Int",
1309                    "precision":"High",
1310                    "qualifier":"PatchVerticesIn"
1311                }
1312            },
1313            "gl_InvocationID":{
1314                "suffix":"TCS",
1315                "essl_level":"ESSL3_1_BUILTINS",
1316                "essl_extension":"EXT_tessellation_shader",
1317                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1318                "type":{
1319                    "basic":"Int",
1320                    "precision":"High",
1321                    "qualifier":"InvocationID"
1322                }
1323            },
1324            "gl_PrimitiveID":{
1325                "suffix":"TCS",
1326                "essl_level":"ESSL3_1_BUILTINS",
1327                "essl_extension":"EXT_tessellation_shader",
1328                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1329                "type":{
1330                    "basic":"Int",
1331                    "precision":"High",
1332                    "qualifier":"PrimitiveID"
1333                }
1334            },
1335            "gl_TessLevelOuter":{
1336                "suffix":"TCS",
1337                "essl_level":"ESSL3_1_BUILTINS",
1338                "essl_extension":"EXT_tessellation_shader",
1339                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1340                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
1341            },
1342            "gl_TessLevelInner":{
1343                "suffix":"TCS",
1344                "essl_level":"ESSL3_1_BUILTINS",
1345                "essl_extension":"EXT_tessellation_shader",
1346                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1347                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
1348            },
1349            "gl_PerVertex":{
1350                "suffix":"TCS",
1351                "essl_level":"ESSL3_1_BUILTINS",
1352                "essl_extension":"EXT_tessellation_shader",
1353                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1354                "class":"TInterfaceBlock",
1355                "fields":{
1356                    "gl_Position":{
1357                        "basic":"Float",
1358                        "precision":"High",
1359                        "qualifier":"Position",
1360                        "primarySize":4
1361                    }
1362                }
1363            },
1364            "gl_in":{
1365                "suffix":"TCS",
1366                "essl_level":"ESSL3_1_BUILTINS",
1367                "essl_extension":"EXT_tessellation_shader",
1368                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1369                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1370            },
1371            "gl_out":{
1372                "suffix":"TCS",
1373                "essl_level":"ESSL3_1_BUILTINS",
1374                "essl_extension":"EXT_tessellation_shader",
1375                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1376                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1377            },
1378            "gl_BoundingBox":{
1379                "suffix":"TCS",
1380                "essl_level":"ESSL3_2_BUILTINS",
1381                "essl_extension":"EXT_tessellation_shader",
1382                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1383                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);"
1384            }
1385        },
1386        "subgroups":{
1387            "Out":{
1388                "variables":{
1389                    "gl_PerVertex":{
1390                        "suffix":"OutTcsBlock",
1391                        "essl_level":"ESSL3_1_BUILTINS",
1392                        "essl_extension":"EXT_tessellation_shader",
1393                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1394                        "private":true,
1395                        "class":"TInterfaceBlock",
1396                        "fields":{
1397                            "gl_Position":{
1398                                "basic":"Float",
1399                                "precision":"High",
1400                                "qualifier":"Position",
1401                                "primarySize":4
1402                            }
1403                        }
1404                    },
1405                    "gl_Position":{
1406                        "suffix":"TCS",
1407                        "essl_level":"ESSL3_1_BUILTINS",
1408                        "essl_extension":"EXT_tessellation_shader",
1409                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1410                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock{ext_or_core_suffix});"
1411                    }
1412                }
1413            },
1414            "EXTPrimitiveBoundingBox":{
1415                "variables":{
1416                    "gl_BoundingBoxEXT":{
1417                        "suffix":"TCS",
1418                        "essl_level":"ESSL3_1_BUILTINS",
1419                        "essl_extension":"EXT_tessellation_shader",
1420                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1421                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);"
1422                    }
1423                }
1424            },
1425            "OESPrimitiveBoundingBox":{
1426                "variables":{
1427                    "gl_BoundingBoxOES":{
1428                        "suffix":"TCS",
1429                        "essl_level":"ESSL3_1_BUILTINS",
1430                        "essl_extension":"EXT_tessellation_shader",
1431                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1432                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqBoundingBox, 4); {type_name}->makeArray(2u);"
1433                    }
1434                }
1435            }
1436        }
1437    },
1438    "TessellationEvaluationShader":{
1439        "shader_type": "TESS_EVALUATION_EXT",
1440        "variables":{
1441            "gl_PatchVerticesIn":{
1442                "suffix":"TES",
1443                "essl_level":"ESSL3_1_BUILTINS",
1444                "essl_extension":"EXT_tessellation_shader",
1445                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1446                "type":{
1447                    "basic":"Int",
1448                    "precision":"High",
1449                    "qualifier":"PatchVerticesIn"
1450                }
1451            },
1452            "gl_PrimitiveID":{
1453                "suffix":"TES",
1454                "essl_level":"ESSL3_1_BUILTINS",
1455                "essl_extension":"EXT_tessellation_shader",
1456                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1457                "type":{
1458                    "basic":"Int",
1459                    "precision":"High",
1460                    "qualifier":"PrimitiveID"
1461                }
1462            },
1463            "gl_TessCoord":{
1464                "essl_level":"ESSL3_1_BUILTINS",
1465                "type":{
1466                    "basic":"Float",
1467                    "precision":"High",
1468                    "primarySize":3,
1469                    "qualifier":"TessCoord"
1470                }
1471            },
1472            "gl_TessLevelOuter":{
1473                "suffix":"TES",
1474                "essl_level":"ESSL3_1_BUILTINS",
1475                "essl_extension":"EXT_tessellation_shader",
1476                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1477                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
1478            },
1479            "gl_TessLevelInner":{
1480                "suffix":"TES",
1481                "essl_level":"ESSL3_1_BUILTINS",
1482                "essl_extension":"EXT_tessellation_shader",
1483                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1484                "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
1485            },
1486            "gl_PerVertex":{
1487                "suffix":"TES",
1488                "essl_level":"ESSL3_1_BUILTINS",
1489                "essl_extension":"EXT_tessellation_shader",
1490                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1491                "class":"TInterfaceBlock",
1492                "fields":{
1493                    "gl_Position":{
1494                        "basic":"Float",
1495                        "precision":"High",
1496                        "qualifier":"Position",
1497                        "primarySize":4
1498                    }
1499                }
1500            },
1501            "gl_in":{
1502                "suffix":"TES",
1503                "essl_level":"ESSL3_1_BUILTINS",
1504                "essl_extension":"EXT_tessellation_shader",
1505                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1506                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1507            },
1508            "gl_out":{
1509                "suffix":"TES",
1510                "essl_level":"ESSL3_1_BUILTINS",
1511                "essl_extension":"EXT_tessellation_shader",
1512                "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1513                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
1514            }
1515        },
1516        "subgroups":{
1517            "Out":{
1518                "variables":{
1519                    "gl_PerVertex":{
1520                        "suffix":"OutTesBlock",
1521                        "essl_level":"ESSL3_1_BUILTINS",
1522                        "essl_extension":"EXT_tessellation_shader",
1523                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1524                        "private":true,
1525                        "class":"TInterfaceBlock",
1526                        "fields":{
1527                            "gl_Position":{
1528                                "basic":"Float",
1529                                "precision":"High",
1530                                "qualifier":"Position",
1531                                "primarySize":4
1532                            }
1533                        }
1534                    },
1535                    "gl_Position":{
1536                        "suffix":"TES",
1537                        "essl_level":"ESSL3_1_BUILTINS",
1538                        "essl_extension":"EXT_tessellation_shader",
1539                        "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
1540                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock{ext_or_core_suffix});"
1541                    }
1542                }
1543            }
1544        }
1545    },
1546    "Multiview":{
1547        "shader_type": "NOT_COMPUTE",
1548        "subgroups":{
1549            "ESSL3":{
1550                "variables":{
1551                    "gl_ViewID_OVR":{
1552                        "essl_level":"ESSL3_BUILTINS",
1553                        "essl_extension":"OVR_multiview",
1554                        "type":{
1555                            "basic":"UInt",
1556                            "precision":"High",
1557                            "qualifier":"ViewIDOVR"
1558                        }
1559                    }
1560                }
1561            }
1562        }
1563    }
1564}
1565