• 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            "   glsl_extension: Optional. Name of the GLSL extension where this variable is from.",
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    },
67    "Constants":{
68        "variables":{
69            "gl_MaxVertexAttribs":{
70                "essl_level":"COMMON_BUILTINS",
71                "type":{
72                    "basic":"Int",
73                    "precision":"Medium",
74                    "qualifier":"Const"
75                },
76                "value":"resources"
77            },
78            "gl_MaxVertexUniformVectors":{
79                "essl_level":"COMMON_BUILTINS",
80                "type":{
81                    "basic":"Int",
82                    "precision":"Medium",
83                    "qualifier":"Const"
84                },
85                "value":"resources"
86            },
87            "gl_MaxVertexTextureImageUnits":{
88                "essl_level":"COMMON_BUILTINS",
89                "type":{
90                    "basic":"Int",
91                    "precision":"Medium",
92                    "qualifier":"Const"
93                },
94                "value":"resources"
95            },
96            "gl_MaxCombinedTextureImageUnits":{
97                "essl_level":"COMMON_BUILTINS",
98                "type":{
99                    "basic":"Int",
100                    "precision":"Medium",
101                    "qualifier":"Const"
102                },
103                "value":"resources"
104            },
105            "gl_MaxTextureImageUnits":{
106                "essl_level":"COMMON_BUILTINS",
107                "type":{
108                    "basic":"Int",
109                    "precision":"Medium",
110                    "qualifier":"Const"
111                },
112                "value":"resources"
113            },
114            "gl_MaxFragmentUniformVectors":{
115                "essl_level":"COMMON_BUILTINS",
116                "type":{
117                    "basic":"Int",
118                    "precision":"Medium",
119                    "qualifier":"Const"
120                },
121                "value":"resources"
122            },
123            "gl_MaxVaryingVectors":{
124                "essl_level":"ESSL1_BUILTINS",
125                "type":{
126                    "basic":"Int",
127                    "precision":"Medium",
128                    "qualifier":"Const"
129                },
130                "value":"resources"
131            },
132            "gl_MaxDrawBuffers":{
133                "essl_level":"COMMON_BUILTINS",
134                "type":{
135                    "basic":"Int",
136                    "precision":"Medium",
137                    "qualifier":"Const"
138                },
139                "value":"resources"
140            },
141            "gl_MaxDualSourceDrawBuffersEXT":{
142                "essl_level":"COMMON_BUILTINS",
143                "type":{
144                    "basic":"Int",
145                    "precision":"Medium",
146                    "qualifier":"Const"
147                },
148                "essl_extension":"EXT_blend_func_extended",
149                "value":"resources",
150                "valueKey":"MaxDualSourceDrawBuffers"
151            },
152            "gl_MaxVertexOutputVectors":{
153                "essl_level":"ESSL3_BUILTINS",
154                "type":{
155                    "basic":"Int",
156                    "precision":"Medium",
157                    "qualifier":"Const"
158                },
159                "value":"resources"
160            },
161            "gl_MaxFragmentInputVectors":{
162                "essl_level":"ESSL3_BUILTINS",
163                "type":{
164                    "basic":"Int",
165                    "precision":"Medium",
166                    "qualifier":"Const"
167                },
168                "value":"resources"
169            },
170            "gl_MinProgramTexelOffset":{
171                "essl_level":"ESSL3_BUILTINS",
172                "type":{
173                    "basic":"Int",
174                    "precision":"Medium",
175                    "qualifier":"Const"
176                },
177                "value":"resources"
178            },
179            "gl_MaxProgramTexelOffset":{
180                "essl_level":"ESSL3_BUILTINS",
181                "type":{
182                    "basic":"Int",
183                    "precision":"Medium",
184                    "qualifier":"Const"
185                },
186                "value":"resources"
187            },
188            "gl_MaxImageUnits":{
189                "essl_level":"ESSL3_1_BUILTINS",
190                "type":{
191                    "basic":"Int",
192                    "precision":"Medium",
193                    "qualifier":"Const"
194                },
195                "value":"resources"
196            },
197            "gl_MaxVertexImageUniforms":{
198                "essl_level":"ESSL3_1_BUILTINS",
199                "type":{
200                    "basic":"Int",
201                    "precision":"Medium",
202                    "qualifier":"Const"
203                },
204                "value":"resources"
205            },
206            "gl_MaxFragmentImageUniforms":{
207                "essl_level":"ESSL3_1_BUILTINS",
208                "type":{
209                    "basic":"Int",
210                    "precision":"Medium",
211                    "qualifier":"Const"
212                },
213                "value":"resources"
214            },
215            "gl_MaxComputeImageUniforms":{
216                "essl_level":"ESSL3_1_BUILTINS",
217                "type":{
218                    "basic":"Int",
219                    "precision":"Medium",
220                    "qualifier":"Const"
221                },
222                "value":"resources"
223            },
224            "gl_MaxCombinedImageUniforms":{
225                "essl_level":"ESSL3_1_BUILTINS",
226                "type":{
227                    "basic":"Int",
228                    "precision":"Medium",
229                    "qualifier":"Const"
230                },
231                "value":"resources"
232            },
233            "gl_MaxCombinedShaderOutputResources":{
234                "essl_level":"ESSL3_1_BUILTINS",
235                "type":{
236                    "basic":"Int",
237                    "precision":"Medium",
238                    "qualifier":"Const"
239                },
240                "value":"resources"
241            },
242            "gl_MaxComputeWorkGroupCount":{
243                "essl_level":"ESSL3_1_BUILTINS",
244                "type":{
245                    "basic":"Int",
246                    "precision":"High",
247                    "qualifier":"Const",
248                    "primarySize":3
249                },
250                "value":"resources"
251            },
252            "gl_MaxComputeWorkGroupSize":{
253                "essl_level":"ESSL3_1_BUILTINS",
254                "type":{
255                    "basic":"Int",
256                    "precision":"High",
257                    "qualifier":"Const",
258                    "primarySize":3
259                },
260                "value":"resources"
261            },
262            "gl_MaxComputeUniformComponents":{
263                "essl_level":"ESSL3_1_BUILTINS",
264                "type":{
265                    "basic":"Int",
266                    "precision":"Medium",
267                    "qualifier":"Const"
268                },
269                "value":"resources"
270            },
271            "gl_MaxComputeTextureImageUnits":{
272                "essl_level":"ESSL3_1_BUILTINS",
273                "type":{
274                    "basic":"Int",
275                    "precision":"Medium",
276                    "qualifier":"Const"
277                },
278                "value":"resources"
279            },
280            "gl_MaxComputeAtomicCounters":{
281                "essl_level":"ESSL3_1_BUILTINS",
282                "type":{
283                    "basic":"Int",
284                    "precision":"Medium",
285                    "qualifier":"Const"
286                },
287                "value":"resources"
288            },
289            "gl_MaxComputeAtomicCounterBuffers":{
290                "essl_level":"ESSL3_1_BUILTINS",
291                "type":{
292                    "basic":"Int",
293                    "precision":"Medium",
294                    "qualifier":"Const"
295                },
296                "value":"resources"
297            },
298            "gl_MaxVertexAtomicCounters":{
299                "essl_level":"ESSL3_1_BUILTINS",
300                "type":{
301                    "basic":"Int",
302                    "precision":"Medium",
303                    "qualifier":"Const"
304                },
305                "value":"resources"
306            },
307            "gl_MaxFragmentAtomicCounters":{
308                "essl_level":"ESSL3_1_BUILTINS",
309                "type":{
310                    "basic":"Int",
311                    "precision":"Medium",
312                    "qualifier":"Const"
313                },
314                "value":"resources"
315            },
316            "gl_MaxCombinedAtomicCounters":{
317                "essl_level":"ESSL3_1_BUILTINS",
318                "type":{
319                    "basic":"Int",
320                    "precision":"Medium",
321                    "qualifier":"Const"
322                },
323                "value":"resources"
324            },
325            "gl_MaxAtomicCounterBindings":{
326                "essl_level":"ESSL3_1_BUILTINS",
327                "type":{
328                    "basic":"Int",
329                    "precision":"Medium",
330                    "qualifier":"Const"
331                },
332                "value":"resources"
333            },
334            "gl_MaxVertexAtomicCounterBuffers":{
335                "essl_level":"ESSL3_1_BUILTINS",
336                "type":{
337                    "basic":"Int",
338                    "precision":"Medium",
339                    "qualifier":"Const"
340                },
341                "value":"resources"
342            },
343            "gl_MaxFragmentAtomicCounterBuffers":{
344                "essl_level":"ESSL3_1_BUILTINS",
345                "type":{
346                    "basic":"Int",
347                    "precision":"Medium",
348                    "qualifier":"Const"
349                },
350                "value":"resources"
351            },
352            "gl_MaxCombinedAtomicCounterBuffers":{
353                "essl_level":"ESSL3_1_BUILTINS",
354                "type":{
355                    "basic":"Int",
356                    "precision":"Medium",
357                    "qualifier":"Const"
358                },
359                "value":"resources"
360            },
361            "gl_MaxAtomicCounterBufferSize":{
362                "essl_level":"ESSL3_1_BUILTINS",
363                "type":{
364                    "basic":"Int",
365                    "precision":"Medium",
366                    "qualifier":"Const"
367                },
368                "value":"resources"
369            }
370        },
371        "subgroups":{
372            "EXTGeometryShader":{
373                "variables":{
374                    "gl_MaxGeometryInputComponents":{
375                        "essl_level":"ESSL3_1_BUILTINS",
376                        "type":{
377                            "basic":"Int",
378                            "precision":"Medium",
379                            "qualifier":"Const"
380                        },
381                        "essl_extension":"EXT_geometry_shader",
382                        "value":"resources"
383                    },
384                    "gl_MaxGeometryOutputComponents":{
385                        "essl_level":"ESSL3_1_BUILTINS",
386                        "type":{
387                            "basic":"Int",
388                            "precision":"Medium",
389                            "qualifier":"Const"
390                        },
391                        "essl_extension":"EXT_geometry_shader",
392                        "value":"resources"
393                    },
394                    "gl_MaxGeometryImageUniforms":{
395                        "essl_level":"ESSL3_1_BUILTINS",
396                        "type":{
397                            "basic":"Int",
398                            "precision":"Medium",
399                            "qualifier":"Const"
400                        },
401                        "essl_extension":"EXT_geometry_shader",
402                        "value":"resources"
403                    },
404                    "gl_MaxGeometryTextureImageUnits":{
405                        "essl_level":"ESSL3_1_BUILTINS",
406                        "type":{
407                            "basic":"Int",
408                            "precision":"Medium",
409                            "qualifier":"Const"
410                        },
411                        "essl_extension":"EXT_geometry_shader",
412                        "value":"resources"
413                    },
414                    "gl_MaxGeometryOutputVertices":{
415                        "essl_level":"ESSL3_1_BUILTINS",
416                        "type":{
417                            "basic":"Int",
418                            "precision":"Medium",
419                            "qualifier":"Const"
420                        },
421                        "essl_extension":"EXT_geometry_shader",
422                        "value":"resources"
423                    },
424                    "gl_MaxGeometryTotalOutputComponents":{
425                        "essl_level":"ESSL3_1_BUILTINS",
426                        "type":{
427                            "basic":"Int",
428                            "precision":"Medium",
429                            "qualifier":"Const"
430                        },
431                        "essl_extension":"EXT_geometry_shader",
432                        "value":"resources"
433                    },
434                    "gl_MaxGeometryUniformComponents":{
435                        "essl_level":"ESSL3_1_BUILTINS",
436                        "type":{
437                            "basic":"Int",
438                            "precision":"Medium",
439                            "qualifier":"Const"
440                        },
441                        "essl_extension":"EXT_geometry_shader",
442                        "value":"resources"
443                    },
444                    "gl_MaxGeometryAtomicCounters":{
445                        "essl_level":"ESSL3_1_BUILTINS",
446                        "type":{
447                            "basic":"Int",
448                            "precision":"Medium",
449                            "qualifier":"Const"
450                        },
451                        "essl_extension":"EXT_geometry_shader",
452                        "value":"resources"
453                    },
454                    "gl_MaxGeometryAtomicCounterBuffers":{
455                        "essl_level":"ESSL3_1_BUILTINS",
456                        "type":{
457                            "basic":"Int",
458                            "precision":"Medium",
459                            "qualifier":"Const"
460                        },
461                        "essl_extension":"EXT_geometry_shader",
462                        "value":"resources"
463                    }
464                }
465            }
466        }
467    },
468    "FragShader":{
469        "shader_type": "FRAGMENT",
470        "variables":{
471            "gl_FragCoord":{
472                "essl_level":"COMMON_BUILTINS",
473                "type":{
474                    "basic":"Float",
475                    "precision":"Medium",
476                    "qualifier":"FragCoord",
477                    "primarySize":4
478                }
479            },
480            "gl_FrontFacing":{
481                "essl_level":"COMMON_BUILTINS",
482                "type":{
483                    "basic":"Bool",
484                    "qualifier":"FrontFacing"
485                }
486            },
487            "gl_PointCoord":{
488                "essl_level":"COMMON_BUILTINS",
489                "type":{
490                    "basic":"Float",
491                    "precision":"Medium",
492                    "qualifier":"PointCoord",
493                    "primarySize":2
494                }
495            },
496            "gl_FragColor":{
497                "essl_level":"ESSL1_BUILTINS",
498                "type":{
499                    "basic":"Float",
500                    "precision":"Medium",
501                    "qualifier":"FragColor",
502                    "primarySize":4
503                }
504            },
505            "gl_FragData":{
506                "essl_level":"ESSL1_BUILTINS",
507                "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); }}"
508            },
509            "gl_FragDepth":{
510                "essl_level":"ESSL3_BUILTINS",
511                "type":{
512                    "basic":"Float",
513                    "precision":"High",
514                    "qualifier":"FragDepth"
515                }
516            },
517            "gl_HelperInvocation":{
518                "essl_level":"ESSL3_1_BUILTINS",
519                "type":{
520                    "basic":"Bool",
521                    "qualifier":"HelperInvocation"
522                }
523            }
524        },
525        "subgroups":{
526            "EXTBlendFuncExtended":{
527                "variables":{
528                    "gl_SecondaryFragColorEXT":{
529                        "essl_level":"ESSL1_BUILTINS",
530                        "essl_extension":"EXT_blend_func_extended",
531                        "type":{
532                            "basic":"Float",
533                            "precision":"Medium",
534                            "qualifier":"SecondaryFragColorEXT",
535                            "primarySize":4
536                        }
537                    },
538                    "gl_SecondaryFragDataEXT":{
539                        "essl_level":"ESSL1_BUILTINS",
540                        "essl_extension":"EXT_blend_func_extended",
541                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);"
542                    }
543                }
544            },
545            "EXTFragDepth":{
546                "variables":{
547                    "gl_FragDepthEXT":{
548                        "essl_level":"ESSL1_BUILTINS",
549                        "essl_extension":"EXT_frag_depth",
550                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepthEXT, 1);"
551                    }
552                }
553            },
554            "EXTShaderFramebufferFetch":{
555                "variables":{
556                    "gl_LastFragData":{
557                        "essl_level":"ESSL1_BUILTINS",
558                        "essl_extension":"EXT_shader_framebuffer_fetch",
559                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
560                    }
561                }
562            },
563            "NVShaderFramebufferFetch":{
564                "variables":{
565                    "gl_LastFragColor":{
566                        "essl_level":"ESSL1_BUILTINS",
567                        "essl_extension":"NV_shader_framebuffer_fetch",
568                        "type":{
569                            "basic":"Float",
570                            "precision":"Medium",
571                            "qualifier":"LastFragColor",
572                            "primarySize":4
573                        }
574                    },
575                    "gl_LastFragData":{
576                        "essl_level":"ESSL1_BUILTINS",
577                        "suffix":"NV",
578                        "essl_extension":"NV_shader_framebuffer_fetch",
579                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
580                    }
581                }
582            },
583            "ARMShaderFramebufferFetch":{
584                "variables":{
585                    "gl_LastFragColorARM":{
586                        "essl_level":"ESSL1_BUILTINS",
587                        "essl_extension":"ARM_shader_framebuffer_fetch",
588                        "type":{
589                            "basic":"Float",
590                            "precision":"Medium",
591                            "qualifier":"LastFragColor",
592                            "primarySize":4
593                        }
594                    }
595                }
596            },
597            "GeometryShaderSupported":{
598                "variables":{
599                    "gl_PrimitiveID":{
600                        "essl_level":"ESSL3_1_BUILTINS",
601                        "essl_extension":"EXT_geometry_shader",
602                        "type":{
603                            "basic":"Int",
604                            "precision":"High",
605                            "qualifier":"PrimitiveID"
606                        }
607                    },
608                    "gl_Layer":{
609                        "essl_level":"ESSL3_1_BUILTINS",
610                        "essl_extension":"EXT_geometry_shader",
611                        "type":{
612                            "basic":"Int",
613                            "precision":"High",
614                            "qualifier":"Layer"
615                        }
616                    }
617                }
618            }
619        }
620    },
621    "VertexShader":{
622        "shader_type": "VERTEX",
623        "variables":{
624            "gl_Position":{
625                "essl_level":"COMMON_BUILTINS",
626                "type":{
627                    "basic":"Float",
628                    "precision":"High",
629                    "qualifier":"Position",
630                    "primarySize":4
631                }
632            },
633            "gl_PointSize":{
634                "essl_level":"COMMON_BUILTINS",
635                "type":{
636                    "basic":"Float",
637                    "precision":"Medium",
638                    "qualifier":"PointSize"
639                }
640            },
641            "gl_InstanceID":{
642                "essl_level":"ESSL3_BUILTINS",
643                "type":{
644                    "basic":"Int",
645                    "precision":"High",
646                    "qualifier":"InstanceID"
647                }
648            },
649            "gl_InstanceIndex":{
650                "essl_level":"GLSL_BUILTINS",
651                "type":{
652                    "basic":"Int",
653                    "precision":"High",
654                    "qualifier":"InstanceID",
655                    "comment": "In GLSL 450 used by Vulkan"
656                }
657            },
658            "gl_VertexID":{
659                "essl_level":"ESSL3_BUILTINS",
660                "type":{
661                    "basic":"Int",
662                    "precision":"High",
663                    "qualifier":"VertexID"
664                }
665            },
666            "gl_VertexIndex":{
667                "essl_level":"GLSL_BUILTINS",
668                "type":{
669                    "basic":"Int",
670                    "precision":"High",
671                    "qualifier":"VertexID",
672                    "comment": "In GLSL 450 used by Vulkan"
673                }
674            },
675            "gl_ViewportIndex":{
676                "comment":"For internal use by ANGLE - not exposed to the parser.",
677                "essl_level":"GLSL_BUILTINS",
678                "type":{
679                    "basic":"Int",
680                    "precision":"High",
681                    "qualifier":"ViewportIndex"
682                }
683            },
684            "gl_Layer":{
685                "suffix":"VS",
686                "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.",
687                "essl_level":"GLSL_BUILTINS",
688                "type":{
689                    "basic":"Int",
690                    "precision":"High",
691                    "qualifier":"Layer"
692                }
693            }
694        },
695        "subgroups":{
696            "ANGLEMultiDraw":{
697                "subgroups":{
698                  "ESSL3":{
699                        "variables":{
700                            "gl_DrawID":{
701                                "essl_level":"COMMON_BUILTINS",
702                                "essl_extension":"ANGLE_multi_draw",
703                                "type":{
704                                    "basic":"Int",
705                                    "precision":"High",
706                                    "qualifier":"DrawID"
707                                }
708                            }
709                        }
710                    }
711                }
712            },
713            "ANGLEBaseVertexBaseInstance":{
714                "subgroups":{
715                  "ESSL3":{
716                        "variables":{
717                            "gl_BaseVertex":{
718                                "essl_level":"ESSL3_BUILTINS",
719                                "essl_extension":"ANGLE_base_vertex_base_instance",
720                                "type":{
721                                    "basic":"Int",
722                                    "precision":"High",
723                                    "qualifier":"BaseVertex"
724                                }
725                            },
726                            "gl_BaseInstance":{
727                                "essl_level":"ESSL3_BUILTINS",
728                                "essl_extension":"ANGLE_base_vertex_base_instance",
729                                "type":{
730                                    "basic":"Int",
731                                    "precision":"High",
732                                    "qualifier":"BaseInstance"
733                                }
734                            },
735                            "angle_BaseVertex":{
736                                "essl_level":"COMMON_BUILTINS",
737                                "essl_extension":"ANGLE_base_vertex_base_instance",
738                                "type":{
739                                    "basic":"Int",
740                                    "precision":"High",
741                                    "qualifier":"BaseVertex"
742                                }
743                            },
744                            "angle_BaseInstance":{
745                                "essl_level":"COMMON_BUILTINS",
746                                "essl_extension":"ANGLE_base_vertex_base_instance",
747                                "type":{
748                                    "basic":"Int",
749                                    "precision":"High",
750                                    "qualifier":"BaseInstance"
751                                }
752                            }
753                        }
754                    }
755                }
756            },
757            "APPLEClipDistance":{
758                "variables":{
759                    "gl_ClipDistance":{
760                        "essl_level":"COMMON_BUILTINS",
761                        "essl_extension":"APPLE_clip_distance",
762                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);"
763                    },
764                    "gl_MaxClipDistances":{
765                        "essl_level":"COMMON_BUILTINS",
766                        "type":{
767                            "basic":"Int",
768                            "precision":"Medium",
769                            "qualifier":"Const"
770                        },
771                        "essl_extension":"APPLE_clip_distance",
772                        "value":"resources"
773                    }
774                }
775            }
776        }
777    },
778    "ComputeShader":{
779        "shader_type": "COMPUTE",
780        "variables":{
781            "gl_NumWorkGroups":{
782                "essl_level":"ESSL3_1_BUILTINS",
783                "type":{
784                    "basic":"UInt",
785                    "precision":"Undefined",
786                    "qualifier":"NumWorkGroups",
787                    "primarySize":3
788                }
789            },
790            "gl_WorkGroupSize":{
791                "essl_level":"ESSL3_1_BUILTINS",
792                "type":{
793                    "basic":"UInt",
794                    "precision":"Undefined",
795                    "qualifier":"WorkGroupSize",
796                    "primarySize":3
797                }
798            },
799            "gl_WorkGroupID":{
800                "essl_level":"ESSL3_1_BUILTINS",
801                "type":{
802                    "basic":"UInt",
803                    "precision":"Undefined",
804                    "qualifier":"WorkGroupID",
805                    "primarySize":3
806                }
807            },
808            "gl_LocalInvocationID":{
809                "essl_level":"ESSL3_1_BUILTINS",
810                "type":{
811                    "basic":"UInt",
812                    "precision":"Undefined",
813                    "qualifier":"LocalInvocationID",
814                    "primarySize":3
815                }
816            },
817            "gl_GlobalInvocationID":{
818                "essl_level":"ESSL3_1_BUILTINS",
819                "type":{
820                    "basic":"UInt",
821                    "precision":"Undefined",
822                    "qualifier":"GlobalInvocationID",
823                    "primarySize":3
824                }
825            },
826            "gl_LocalInvocationIndex":{
827                "essl_level":"ESSL3_1_BUILTINS",
828                "type":{
829                    "basic":"UInt",
830                    "precision":"Undefined",
831                    "qualifier":"LocalInvocationIndex"
832                }
833            }
834        }
835    },
836    "GeometryShader":{
837        "shader_type": "GEOMETRY_EXT",
838        "variables":{
839            "gl_PrimitiveIDIn":{
840                "essl_level":"ESSL3_1_BUILTINS",
841                "essl_extension":"EXT_geometry_shader",
842                "type":{
843                    "basic":"Int",
844                    "precision":"High",
845                    "qualifier":"PrimitiveIDIn"
846                }
847            },
848            "gl_InvocationID":{
849                "essl_level":"ESSL3_1_BUILTINS",
850                "essl_extension":"EXT_geometry_shader",
851                "type":{
852                    "basic":"Int",
853                    "precision":"High",
854                    "qualifier":"InvocationID"
855                }
856            },
857            "gl_PrimitiveID":{
858                "suffix":"GS",
859                "essl_level":"ESSL3_1_BUILTINS",
860                "essl_extension":"EXT_geometry_shader",
861                "type":{
862                    "basic":"Int",
863                    "precision":"High",
864                    "qualifier":"PrimitiveID"
865                }
866            },
867            "gl_Layer":{
868                "suffix":"GS",
869                "essl_level":"ESSL3_1_BUILTINS",
870                "essl_extension":"EXT_geometry_shader",
871                "type":{
872                    "basic":"Int",
873                    "precision":"High",
874                    "qualifier":"Layer"
875                }
876            },
877            "gl_PerVertex":{
878                "essl_level":"ESSL3_1_BUILTINS",
879                "essl_extension":"EXT_geometry_shader",
880                "class":"TInterfaceBlock",
881                "fields":{
882                    "gl_Position":{
883                        "basic":"Float",
884                        "precision":"High",
885                        "qualifier":"Position",
886                        "primarySize":4
887                    }
888                }
889            },
890            "gl_in":{
891                "essl_level":"ESSL3_1_BUILTINS",
892                "essl_extension":"EXT_geometry_shader",
893                "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);",
894                "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration."
895            }
896        },
897        "subgroups":{
898            "Out":{
899                "variables":{
900                    "gl_PerVertex":{
901                        "suffix":"OutBlock",
902                        "essl_level":"ESSL3_1_BUILTINS",
903                        "essl_extension":"EXT_geometry_shader",
904                        "private":true,
905                        "class":"TInterfaceBlock",
906                        "fields":{
907                            "gl_Position":{
908                                "basic":"Float",
909                                "precision":"High",
910                                "qualifier":"Position",
911                                "primarySize":4
912                            }
913                        }
914                    },
915                    "gl_Position":{
916                        "suffix":"GS",
917                        "essl_level":"ESSL3_1_BUILTINS",
918                        "essl_extension":"EXT_geometry_shader",
919                        "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock);"
920                    }
921                }
922            }
923        }
924    },
925    "Multiview":{
926        "shader_type": "NOT_COMPUTE",
927        "subgroups":{
928            "ESSL3":{
929                "variables":{
930                    "gl_ViewID_OVR":{
931                        "essl_level":"ESSL3_BUILTINS",
932                        "essl_extension":"OVR_multiview",
933                        "type":{
934                            "basic":"UInt",
935                            "precision":"High",
936                            "qualifier":"ViewIDOVR"
937                        }
938                    }
939                }
940            }
941        }
942    }
943}
944