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