| { |
| "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" |
| } |
| } |
| } |
| } |
| } |
| } |
| } |