Edit

kc3-lang/angle/src/compiler/translator/builtin_variables.json

Branch :

  • Show log

    Commit

  • Author : Mohan Maiya
    Date : 2021-02-24 09:49:42
    Hash : 550f2a3e
    Message : Vulkan: Shader support for EXT_shader_framebuffer_fetch_non_coherent Translator can accept gl_LastFragData and 'inout' variable to gain access to framebuffer attachment data. The Vulkan translator replaces it with the SubpassInput type variable. Note that this works only for the noncoherent version of the extension. Bug: angleproject:5454 Test: *EXTShaderFramebufferFetchNoncoherent*.* Change-Id: I392f84ee3ad3eb9fbd09d0b7ff83731a9a3f33f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598060 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>

  • src/compiler/translator/builtin_variables.json
  • {
        "General":{
            "comment":[
                " Copyright 2018 The ANGLE Project Authors. All rights reserved.",
                " Use of this source code is governed by a BSD-style license that can be",
                " found in the LICENSE file.",
                "",
                " The schema of this JSON file is as follows:",
                "",
                " The top-level object contains variable groups. Each group can have the following",
                " properties:",
                "   variables: Object mapping variable names to variable properties.",
                "   subgroups: Object with more groups that fall under the top-level group.",
                "   shader_type: The type of shader this variable is supported in",
                " Each variable can have the following properties:",
                "   essl_level: ESSL symbol table level where the variable is contained.",
                "   glsl_level: GLSL symbol table level where the variable is contained.",
                "   type: Object with properties of the type. Can be substituted with initDynamicType.",
                "   initDynamicType: Template string with C++ code for initializing a TType * with the",
                "                    name {type_name}. The name will be replaced when generating code.",
                "                    May refer to names of previously listed structs or interface",
                "                    blocks.",
                "   essl_extension: Optional. Name of the ESSL extension where this variable is from.",
                "   essl_extension_becomes_core_in: Optional. ESSL level where symbols from this",
                "                                   extension have become core.",
                "   glsl_extension: Optional. Name of the GLSL extension where this variable is from.",
                "   value: Optional. String that has one valid value: 'resources'. Denotes that the",
                "          value of the variable should be based on the field of ShBuiltInResources",
                "          with the same name as the variable.",
                "   class: Optional. To be used for interface block or struct definitions. Valid",
                "          values are 'TStructure' or 'TInterfaceBlock'.",
                "   fields: Optional. Object to be used for storing fields of interface block and",
                "           struct definitions. Maps field names to field types.",
                "   suffix: Optional. Suffix to give C++ variables storing the properties of this",
                "           variable a unique name that doesn't conflict with C++ keywords.",
                " Each type can have the following properties:",
                "   basic: Basic type as in the TBasicType enum without the Ebt prefix.",
                "   precision: Precision as in TPrecision enum without the Ebp prefix.",
                "   qualifier: Optional. Qualifier as in the TQualifier enum without the Evq prefix.",
                "   primarySize: Optional. Vector size or matrix column count.",
                "   secondarySize: Optional. Matrix row count.",
                " Any group, variable or type can have the property 'comment'."
            ],
            "variables":{
                "gl_DepthRangeParameters":{
                    "class":"TStructure",
                    "essl_level":"COMMON_BUILTINS",
                    "fields":{
                        "near":{
                            "basic":"Float",
                            "precision":"High"
                        },
                        "far":{
                            "basic":"Float",
                            "precision":"High"
                        },
                        "diff":{
                            "basic":"Float",
                            "precision":"High"
                        }
                    }
                },
                "gl_DepthRange":{
                    "essl_level":"COMMON_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_DepthRangeParameters, false); {type_name}->setQualifier(EvqUniform);"
                }
            },
            "subgroups":{
                "OESSampleVariables":{
                    "variables":{
                        "gl_NumSamples":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Low",
                                "qualifier":"Uniform"
                            }
                        }
                    }
                }
            }
        },
        "Constants":{
            "variables":{
                "gl_MaxVertexAttribs":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVertexUniformVectors":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVertexTextureImageUnits":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxCombinedTextureImageUnits":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxTextureImageUnits":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxFragmentUniformVectors":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVaryingVectors":{
                    "essl_level":"ESSL1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxDrawBuffers":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxDualSourceDrawBuffersEXT":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "essl_extension":"EXT_blend_func_extended",
                    "value":"resources",
                    "valueKey":"MaxDualSourceDrawBuffers"
                },
                "gl_MaxVertexOutputVectors":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxFragmentInputVectors":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MinProgramTexelOffset":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxProgramTexelOffset":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxImageUnits":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVertexImageUniforms":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxFragmentImageUniforms":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxComputeImageUniforms":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxCombinedImageUniforms":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxCombinedShaderOutputResources":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxComputeWorkGroupCount":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"Const",
                        "primarySize":3
                    },
                    "value":"resources"
                },
                "gl_MaxComputeWorkGroupSize":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"Const",
                        "primarySize":3
                    },
                    "value":"resources"
                },
                "gl_MaxComputeUniformComponents":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxComputeTextureImageUnits":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxComputeAtomicCounters":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxComputeAtomicCounterBuffers":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVertexAtomicCounters":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxFragmentAtomicCounters":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxCombinedAtomicCounters":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxAtomicCounterBindings":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxVertexAtomicCounterBuffers":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxFragmentAtomicCounterBuffers":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxCombinedAtomicCounterBuffers":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                },
                "gl_MaxAtomicCounterBufferSize":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"Medium",
                        "qualifier":"Const"
                    },
                    "value":"resources"
                }
            },
            "subgroups":{
                "EXTGeometryShader":{
                    "variables":{
                        "gl_MaxGeometryInputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryOutputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryImageUniforms":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryTextureImageUnits":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryOutputVertices":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryTotalOutputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryUniformComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryAtomicCounters":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxGeometryAtomicCounterBuffers":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        }
                    }
                },
                "EXTTessellationShader":{
                    "variables":{
                        "gl_MaxTessControlInputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlOutputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlTextureImageUnits":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlUniformComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlTotalOutputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlImageUniforms":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlAtomicCounters":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessControlAtomicCounterBuffers":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessPatchComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxPatchVertices":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessGenLevel":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationInputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationOutputComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationTextureImageUnits":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationUniformComponents":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationImageUniforms":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationAtomicCounters":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        },
                        "gl_MaxTessEvaluationAtomicCounterBuffers":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        }
                    }
                },
                "OESSampleVariables":{
                    "variables":{
                        "gl_MaxSamples":{
                            "essl_level":"ESSL3_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "value":"resources"
                        }
                    }
                },
                "APPLEClipDistance":{
                    "variables":{
                        "gl_MaxClipDistances":{
                            "essl_level":"COMMON_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"APPLE_clip_distance",
                            "value":"resources",
                            "suffix": "APPLE"
                        }
                    }
                },
                "EXTClipCullDistance":{
                    "variables":{
                        "gl_MaxCullDistances":{
                            "essl_level":"ESSL3_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_clip_cull_distance",
                            "value":"resources",
                            "suffix": "EXT"
                        },
                        "gl_MaxCombinedClipAndCullDistances":{
                            "essl_level":"ESSL3_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Medium",
                                "qualifier":"Const"
                            },
                            "essl_extension":"EXT_clip_cull_distance",
                            "value":"resources",
                            "suffix": "EXT"
                        }
                    }
                }
            }
        },
        "FragShader":{
            "shader_type": "FRAGMENT",
            "variables":{
                "gl_FragCoord":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"Medium",
                        "qualifier":"FragCoord",
                        "primarySize":4
                    }
                },
                "gl_FrontFacing":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Bool",
                        "qualifier":"FrontFacing"
                    }
                },
                "gl_PointCoord":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"Medium",
                        "qualifier":"PointCoord",
                        "primarySize":2
                    }
                },
                "gl_FragColor":{
                    "essl_level":"ESSL1_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"Medium",
                        "qualifier":"FragColor",
                        "primarySize":4
                    }
                },
                "gl_FragData":{
                    "essl_level":"ESSL1_BUILTINS",
                    "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); }}"
                },
                "gl_FragDepth":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"High",
                        "qualifier":"FragDepth"
                    }
                },
                "gl_HelperInvocation":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Bool",
                        "qualifier":"HelperInvocation"
                    }
                }
            },
            "subgroups":{
                "EXTBlendFuncExtended":{
                    "variables":{
                        "gl_SecondaryFragColorEXT":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"EXT_blend_func_extended",
                            "type":{
                                "basic":"Float",
                                "precision":"Medium",
                                "qualifier":"SecondaryFragColorEXT",
                                "primarySize":4
                            }
                        },
                        "gl_SecondaryFragDataEXT":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"EXT_blend_func_extended",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1); {type_name}->makeArray(resources.MaxDualSourceDrawBuffers);"
                        }
                    }
                },
                "EXTFragDepth":{
                    "variables":{
                        "gl_FragDepthEXT":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"EXT_frag_depth",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium, EvqFragDepthEXT, 1);"
                        }
                    }
                },
                "EXTShaderFramebufferFetch":{
                    "variables":{
                        "gl_LastFragData":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"EXT_shader_framebuffer_fetch",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
                        }
                    }
                },
                "EXTShaderFramebufferFetchNonCoherent":{
                    "variables":{
                        "gl_LastFragData":{
                            "essl_level":"ESSL1_BUILTINS",
                            "suffix":"NonCoherent",
                            "essl_extension":"EXT_shader_framebuffer_fetch_non_coherent",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
                        }
                    }
                },
                "NVShaderFramebufferFetch":{
                    "variables":{
                        "gl_LastFragColor":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"NV_shader_framebuffer_fetch",
                            "type":{
                                "basic":"Float",
                                "precision":"Medium",
                                "qualifier":"LastFragColor",
                                "primarySize":4
                            }
                        },
                        "gl_LastFragData":{
                            "essl_level":"ESSL1_BUILTINS",
                            "suffix":"NV",
                            "essl_extension":"NV_shader_framebuffer_fetch",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpMedium, EvqLastFragData, 4, 1); {type_name}->makeArray(resources.MaxDrawBuffers);"
                        }
                    }
                },
                "ARMShaderFramebufferFetch":{
                    "variables":{
                        "gl_LastFragColorARM":{
                            "essl_level":"ESSL1_BUILTINS",
                            "essl_extension":"ARM_shader_framebuffer_fetch",
                            "type":{
                                "basic":"Float",
                                "precision":"Medium",
                                "qualifier":"LastFragColor",
                                "primarySize":4
                            }
                        }
                    }
                },
                "GeometryShaderSupported":{
                    "variables":{
                        "gl_PrimitiveID":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"High",
                                "qualifier":"PrimitiveID"
                            }
                        },
                        "gl_Layer":{
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"High",
                                "qualifier":"Layer"
                            }
                        }
                    }
                },
                "OESSampleVariables":{
                    "variables":{
                        "gl_SampleID":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "type":{
                                "basic":"Int",
                                "precision":"Low",
                                "qualifier":"SampleID"
                            }
                        },
                        "gl_SamplePosition":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "type":{
                                "basic":"Float",
                                "precision":"Medium",
                                "primarySize":2,
                                "qualifier":"SamplePosition"
                            }
                        },
                        "gl_SampleMaskIn":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMaskIn, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
                        },
                        "gl_SampleMask":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OES_sample_variables",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMask, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
                        }
                    }
                },
                "EXTClipCullDistance":{
                    "variables":{
                        "gl_CullDistance":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"EXT_clip_cull_distance",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);"
                        },
                        "gl_ClipDistance":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"EXT_clip_cull_distance",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);"
                        }
                    }
                }
            }
        },
        "VertexShader":{
            "shader_type": "VERTEX",
            "variables":{
                "gl_Position":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"High",
                        "qualifier":"Position",
                        "primarySize":4
                    }
                },
                "gl_PointSize":{
                    "essl_level":"COMMON_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"Medium",
                        "qualifier":"PointSize"
                    }
                },
                "gl_InstanceID":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"InstanceID"
                    }
                },
                "gl_InstanceIndex":{
                    "essl_level":"GLSL_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"InstanceID",
                        "comment": "In GLSL 450 used by Vulkan"
                    }
                },
                "gl_VertexID":{
                    "essl_level":"ESSL3_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"VertexID"
                    }
                },
                "gl_VertexIndex":{
                    "essl_level":"GLSL_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"VertexID",
                        "comment": "In GLSL 450 used by Vulkan"
                    }
                },
                "gl_ViewportIndex":{
                    "comment":"For internal use by ANGLE - not exposed to the parser.",
                    "essl_level":"GLSL_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"ViewportIndex"
                    }
                },
                "gl_Layer":{
                    "suffix":"VS",
                    "comment":"gl_Layer exists in other shader stages in ESSL, but not in vertex shader so far.",
                    "essl_level":"GLSL_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"Layer"
                    }
                }
            },
            "subgroups":{
                "ANGLEMultiDraw":{
                    "subgroups":{
                      "ESSL3":{
                            "variables":{
                                "gl_DrawID":{
                                    "essl_level":"COMMON_BUILTINS",
                                    "essl_extension":"ANGLE_multi_draw",
                                    "type":{
                                        "basic":"Int",
                                        "precision":"High",
                                        "qualifier":"DrawID"
                                    }
                                }
                            }
                        }
                    }
                },
                "ANGLEBaseVertexBaseInstance":{
                    "subgroups":{
                      "ESSL3":{
                            "variables":{
                                "gl_BaseVertex":{
                                    "essl_level":"ESSL3_BUILTINS",
                                    "essl_extension":"ANGLE_base_vertex_base_instance",
                                    "type":{
                                        "basic":"Int",
                                        "precision":"High",
                                        "qualifier":"BaseVertex"
                                    }
                                },
                                "gl_BaseInstance":{
                                    "essl_level":"ESSL3_BUILTINS",
                                    "essl_extension":"ANGLE_base_vertex_base_instance",
                                    "type":{
                                        "basic":"Int",
                                        "precision":"High",
                                        "qualifier":"BaseInstance"
                                    }
                                },
                                "angle_BaseVertex":{
                                    "essl_level":"COMMON_BUILTINS",
                                    "essl_extension":"ANGLE_base_vertex_base_instance",
                                    "type":{
                                        "basic":"Int",
                                        "precision":"High",
                                        "qualifier":"BaseVertex"
                                    }
                                },
                                "angle_BaseInstance":{
                                    "essl_level":"COMMON_BUILTINS",
                                    "essl_extension":"ANGLE_base_vertex_base_instance",
                                    "type":{
                                        "basic":"Int",
                                        "precision":"High",
                                        "qualifier":"BaseInstance"
                                    }
                                }
                            }
                        }
                    }
                },
                "APPLEClipDistance":{
                    "variables":{
                        "gl_ClipDistance":{
                            "essl_level":"COMMON_BUILTINS",
                            "essl_extension":"APPLE_clip_distance",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqClipDistance, 1); {type_name}->makeArray(resources.MaxClipDistances);",
                            "suffix": "APPLE"
                        }
                    }
                },
                "EXTClipCullDistance":{
                    "variables":{
                        "gl_CullDistance":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"EXT_clip_cull_distance",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqCullDistance, 1); {type_name}->makeArray(resources.MaxCullDistances);",
                            "suffix": "EXT"
                        }
                    }
                }
            }
        },
        "ComputeShader":{
            "shader_type": "COMPUTE",
            "variables":{
                "gl_NumWorkGroups":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"NumWorkGroups",
                        "primarySize":3
                    }
                },
                "gl_WorkGroupSize":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"WorkGroupSize",
                        "primarySize":3
                    }
                },
                "gl_WorkGroupID":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"WorkGroupID",
                        "primarySize":3
                    }
                },
                "gl_LocalInvocationID":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"LocalInvocationID",
                        "primarySize":3
                    }
                },
                "gl_GlobalInvocationID":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"GlobalInvocationID",
                        "primarySize":3
                    }
                },
                "gl_LocalInvocationIndex":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"UInt",
                        "precision":"Undefined",
                        "qualifier":"LocalInvocationIndex"
                    }
                }
            }
        },
        "GeometryShader":{
            "shader_type": "GEOMETRY_EXT",
            "variables":{
                "gl_PrimitiveIDIn":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PrimitiveIDIn"
                    }
                },
                "gl_InvocationID":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"InvocationID"
                    }
                },
                "gl_PrimitiveID":{
                    "suffix":"GS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PrimitiveID"
                    }
                },
                "gl_Layer":{
                    "suffix":"GS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"Layer"
                    }
                },
                "gl_PerVertex":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "class":"TInterfaceBlock",
                    "fields":{
                        "gl_Position":{
                            "basic":"Float",
                            "precision":"High",
                            "qualifier":"Position",
                            "primarySize":4
                        }
                    }
                },
                "gl_in":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_geometry_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);",
                    "comment":"The array size of gl_in is undefined until we get a valid input primitive declaration."
                }
            },
            "subgroups":{
                "Out":{
                    "variables":{
                        "gl_PerVertex":{
                            "suffix":"OutBlock",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "private":true,
                            "class":"TInterfaceBlock",
                            "fields":{
                                "gl_Position":{
                                    "basic":"Float",
                                    "precision":"High",
                                    "qualifier":"Position",
                                    "primarySize":4
                                }
                            }
                        },
                        "gl_Position":{
                            "suffix":"GS",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_geometry_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock{ext_or_core_suffix});"
                        }
                    }
                }
            }
        },
        "TessellationControlShader":{
            "shader_type": "TESS_CONTROL_EXT",
            "variables":{
                "gl_PatchVerticesIn":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PatchVerticesIn"
                    }
                },
                "gl_InvocationID":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"InvocationID"
                    }
                },
                "gl_PrimitiveID":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PrimitiveID"
                    }
                },
                "gl_TessLevelOuter":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
                },
                "gl_TessLevelInner":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
                },
                "gl_PerVertex":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "class":"TInterfaceBlock",
                    "fields":{
                        "gl_Position":{
                            "basic":"Float",
                            "precision":"High",
                            "qualifier":"Position",
                            "primarySize":4
                        }
                    }
                },
                "gl_in":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
                },
                "gl_out":{
                    "suffix":"TCS",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
                }
            },
            "subgroups":{
                "Out":{
                    "variables":{
                        "gl_PerVertex":{
                            "suffix":"OutTcsBlock",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "private":true,
                            "class":"TInterfaceBlock",
                            "fields":{
                                "gl_Position":{
                                    "basic":"Float",
                                    "precision":"High",
                                    "qualifier":"Position",
                                    "primarySize":4
                                }
                            }
                        },
                        "gl_Position":{
                            "suffix":"TCS",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock{ext_or_core_suffix});"
                        }
                    }
                }
            }
        },
        "TessellationEvaluationShader":{
            "shader_type": "TESS_EVALUATION_EXT",
            "variables":{
                "gl_PatchVerticesIn":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PatchVerticesIn"
                    }
                },
                "gl_PrimitiveID":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "type":{
                        "basic":"Int",
                        "precision":"High",
                        "qualifier":"PrimitiveID"
                    }
                },
                "gl_TessCoord":{
                    "essl_level":"ESSL3_1_BUILTINS",
                    "type":{
                        "basic":"Float",
                        "precision":"High",
                        "primarySize":3
                    }
                },
                "gl_TessLevelOuter":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
                },
                "gl_TessLevelInner":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
                },
                "gl_PerVertex":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "class":"TInterfaceBlock",
                    "fields":{
                        "gl_Position":{
                            "basic":"Float",
                            "precision":"High",
                            "qualifier":"Position",
                            "primarySize":4
                        }
                    }
                },
                "gl_in":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
                },
                "gl_out":{
                    "suffix":"TES",
                    "essl_level":"ESSL3_1_BUILTINS",
                    "essl_extension":"EXT_tessellation_shader",
                    "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                    "initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
                }
            },
            "subgroups":{
                "Out":{
                    "variables":{
                        "gl_PerVertex":{
                            "suffix":"OutTesBlock",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "private":true,
                            "class":"TInterfaceBlock",
                            "fields":{
                                "gl_Position":{
                                    "basic":"Float",
                                    "precision":"High",
                                    "qualifier":"Position",
                                    "primarySize":4
                                }
                            }
                        },
                        "gl_Position":{
                            "suffix":"TES",
                            "essl_level":"ESSL3_1_BUILTINS",
                            "essl_extension":"EXT_tessellation_shader",
                            "essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
                            "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock{ext_or_core_suffix});"
                        }
                    }
                }
            }
        },
        "Multiview":{
            "shader_type": "NOT_COMPUTE",
            "subgroups":{
                "ESSL3":{
                    "variables":{
                        "gl_ViewID_OVR":{
                            "essl_level":"ESSL3_BUILTINS",
                            "essl_extension":"OVR_multiview",
                            "type":{
                                "basic":"UInt",
                                "precision":"High",
                                "qualifier":"ViewIDOVR"
                            }
                        }
                    }
                }
            }
        }
    }