blob: f1a167c61a0cd676b32ed3ab741ba8bd1d25818e [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.",
" 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"
}
}
}
}
}
}
}
},
"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"
}
}
}
}
}
}
}