blob: 1c4c7a8a639d27069750db42f0676297f918e9a7 [file] [log] [blame]
{
"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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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":"Uniform"
}
},
"gl_BaseInstance":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"ANGLE_base_vertex_base_instance",
"type":{
"basic":"Int",
"precision":"High",
"qualifier":"Uniform"
}
},
"angle_BaseVertex":{
"essl_level":"COMMON_BUILTINS",
"essl_extension":"ANGLE_base_vertex_base_instance",
"type":{
"basic":"Int",
"precision":"High",
"qualifier":"Uniform"
}
},
"angle_BaseInstance":{
"essl_level":"COMMON_BUILTINS",
"essl_extension":"ANGLE_base_vertex_base_instance",
"type":{
"basic":"Int",
"precision":"High",
"qualifier":"Uniform"
}
}
}
}
}
},
"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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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, OES_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,
"qualifier":"TessCoord"
}
},
"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"
}
}
}
}
}
}
}