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