{ "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.", " 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);" } } }, "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", "value":"resources" }, "gl_MaxGeometryOutputComponents":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryImageUniforms":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryTextureImageUnits":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryOutputVertices":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryTotalOutputComponents":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryUniformComponents":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryAtomicCounters":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" }, "gl_MaxGeometryAtomicCounterBuffers":{ "essl_level":"ESSL3_1_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"EXT_geometry_shader", "value":"resources" } } } } }, "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);" } } }, "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", "type":{ "basic":"Int", "precision":"High", "qualifier":"PrimitiveID" } }, "gl_Layer":{ "essl_level":"ESSL3_1_BUILTINS", "essl_extension":"EXT_geometry_shader", "type":{ "basic":"Int", "precision":"High", "qualifier":"Layer" } } } } } }, "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);" }, "gl_MaxClipDistances":{ "essl_level":"COMMON_BUILTINS", "type":{ "basic":"Int", "precision":"Medium", "qualifier":"Const" }, "essl_extension":"APPLE_clip_distance", "value":"resources" } } } } }, "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", "type":{ "basic":"Int", "precision":"High", "qualifier":"PrimitiveIDIn" } }, "gl_InvocationID":{ "essl_level":"ESSL3_1_BUILTINS", "essl_extension":"EXT_geometry_shader", "type":{ "basic":"Int", "precision":"High", "qualifier":"InvocationID" } }, "gl_PrimitiveID":{ "suffix":"GS", "essl_level":"ESSL3_1_BUILTINS", "essl_extension":"EXT_geometry_shader", "type":{ "basic":"Int", "precision":"High", "qualifier":"PrimitiveID" } }, "gl_Layer":{ "suffix":"GS", "essl_level":"ESSL3_1_BUILTINS", "essl_extension":"EXT_geometry_shader", "type":{ "basic":"Int", "precision":"High", "qualifier":"Layer" } }, "gl_PerVertex":{ "essl_level":"ESSL3_1_BUILTINS", "essl_extension":"EXT_geometry_shader", "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", "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", "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", "initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock);" } } } } }, "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" } } } } } } }