• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// The format of this file:
2//   C++ style single-line comments are supported.
3//   Leading whitespace is only for formatting and doesn't have semantic meaning.
4//
5//   Grouping:
6//   Groups of functions are denoted by "GROUP BEGIN" and "GROUP END". Groups can be nested.
7//   Groups can have metadata related to the group itself. This is given at the end of the GROUP
8//   BEGIN line in JSON object format.
9//   Example:
10//     GROUP BEGIN <group name> {"shader_type": "FRAGMENT"}
11//     GROUP END <group name>
12//
13//   Defaults:
14//   Default metadata for functions can be set with "DEFAULT METADATA" followed by metadata in JSON
15//   object format. The metadata is applied to all following functions regardless of grouping until
16//   another "DEFAULT METADATA" line is encountered, or until the end of a top-level group.
17//   Example:
18//     DEFAULT METADATA {"opSuffix": "ComponentWise"}
19//
20//   Supported function metadata properties are:
21//     "essl_level"
22//         string, one of COMMON_BUILTINS, ESSL1_BUILTINS, ESSL3_BUILTINS, ESSL3_1_BUILTINS,
23//         ESSL3_2_BUILTINS, ESSL_INTERNAL_BACKEND_BUILTINS.
24//     "glsl_level"
25//         string, one of COMMON_BUILTINS, COMMON_BUILTINS, GLSL1_2_BUILTINS, GLSL1_3_BUILTINS,
26//         GLSL1_4_BUILTINS, GLSL1_5_BUILTINS, GLSL3_3_BUILTINS, GLSL4_BUILTINS, GLSL4_1_BUILTINS,
27//         GLSL4_2_BUILTINS, GLSL4_3_BUILTINS, GLSL4_4_BUILTINS, GLSL4_5_BUILTINS, and
28//         GLSL4_6_BUILTINS.
29//     "opSuffix"
30//         (optional) string, suffix to add to EOp code.  The op is derived from the function name,
31//         and this suffix is applied to disambiguate between functions of the same name but in
32//         different groups.
33//     "suffix"
34//         string, suffix that is used to disambiguate C++ variable names created based on the
35//         function name from C++ keywords, or disambiguate two functions with the same name.
36//     "essl_extension"
37//         string, ESSL extension where the function is defined.
38//     "essl_extension_becomes_core_in"
39//         string, ESSL level where functions from this extension have become core.
40//     "glsl_extension"
41//         string, GLSL extension where the function is defined.
42//     "hasSideEffects"
43//         boolean, can be used to mark a function as having side effects. Functions with an out or
44//         inout parameter are automatically treated as having side effects.
45//
46//   Function declarations:
47//   Lines that declare functions are in a similar format as in the GLSL spec:
48//     <return type> <function name>(<param type>, ...);
49//   Parameter types can have "out" or "inout" qualifiers.
50
51GROUP BEGIN Math {"queryFunction": true}
52  GROUP BEGIN Trigonometric
53    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
54      genType radians(genType);
55      genType degrees(genType);
56      genType sin(genType);
57      genType cos(genType);
58      genType tan(genType);
59      genType asin(genType);
60      genType acos(genType);
61      genType atan(genType, genType);
62      genType atan(genType);
63    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
64      genType sinh(genType);
65      genType cosh(genType);
66      genType tanh(genType);
67      genType asinh(genType);
68      genType acosh(genType);
69      genType atanh(genType);
70  GROUP END Trigonometric
71
72  GROUP BEGIN Exponential
73    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
74      genType pow(genType, genType);
75      genType exp(genType);
76      genType log(genType);
77      genType exp2(genType);
78      genType log2(genType);
79      genType sqrt(genType);
80    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
81      genDType sqrt(genDType);
82    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
83      genType inversesqrt(genType);
84    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
85      genDType inversesqrt(genDType);
86  GROUP END Exponential
87
88  GROUP BEGIN Common
89    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
90      genType abs(genType);
91    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
92      genIType abs(genIType);
93    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
94      genDType abs(genDType);
95    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
96      genType sign(genType);
97    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
98      genIType sign(genIType);
99    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
100      genDType sign(genDType);
101    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
102      genType floor(genType);
103    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
104      genDType floor(genDType);
105    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
106      genType trunc(genType);
107    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
108      genDType trunc(genDType);
109    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
110      genType round(genType);
111    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
112      genDType round(genDType);
113    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
114      genType roundEven(genType);
115    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
116      genDType roundEven(genDType);
117    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
118      genType ceil(genType);
119    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
120      genDType ceil(genDType);
121    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
122      genType fract(genType);
123    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
124      genDType fract(genDType);
125    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
126      genType mod(genType, float);
127      genType mod(genType, genType);
128    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
129      genDType mod(genDType, double);
130      genDType mod(genDType, genDType);
131    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
132      genType min(genType, float);
133      genType min(genType, genType);
134    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
135      genDType min(genDType, genDType);
136      genDType min(genDType, double);
137    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
138      genIType min(genIType, genIType);
139      genIType min(genIType, int);
140      genUType min(genUType, genUType);
141      genUType min(genUType, uint);
142    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
143      genType max(genType, float);
144      genType max(genType, genType);
145    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
146      genDType max(genDType, genDType);
147      genDType max(genDType, double);
148    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
149      genIType max(genIType, genIType);
150      genIType max(genIType, int);
151      genUType max(genUType, genUType);
152      genUType max(genUType, uint);
153    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
154      genType clamp(genType, float, float);
155      genType clamp(genType, genType, genType);
156    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
157      genDType clamp(genDType, double, double);
158      genDType clamp(genDType, genDType, genDType);
159    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
160      genIType clamp(genIType, int, int);
161      genIType clamp(genIType, genIType, genIType);
162      genUType clamp(genUType, uint, uint);
163      genUType clamp(genUType, genUType, genUType);
164    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
165      genType mix(genType, genType, float);
166      genType mix(genType, genType, genType);
167    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
168      genDType mix(genDType, genDType, double);
169      genDType mix(genDType, genDType, genDType);
170    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
171      genType mix(genType, genType, genBType);
172    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
173      genDType mix(genDType, genDType, genBType);
174    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_5_BUILTINS"}
175      genIType mix(genIType, genIType, genBType);
176      genUType mix(genUType, genUType, genBType);
177      genBType mix(genBType, genBType, genBType);
178    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
179      genType step(genType, genType);
180      genType step(float, genType);
181    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
182      genDType step(genDType, genDType);
183      genDType step(double, genDType);
184    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
185      genDType smoothstep(genDType, genDType, genDType);
186      genDType smoothstep(double, double, genDType);
187    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
188      genType smoothstep(genType, genType, genType);
189      genType smoothstep(float, float, genType);
190    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
191      genType modf(genType, out genType);
192    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
193      genDType modf(genDType, out genDType);
194    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
195      genBType isnan(genType);
196    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
197      genBType isnan(genDType);
198    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
199      genBType isinf(genType);
200    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
201      genBType isinf(genDType);
202    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL3_3_BUILTINS"}
203      genIType floatBitsToInt(genType);
204      genUType floatBitsToUint(genType);
205      genType intBitsToFloat(genIType);
206      genType uintBitsToFloat(genUType);
207    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
208      genType fma(genType, genType, genType);
209    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"}
210      genType fma(genType, genType, genType);
211    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
212      genType fma(genDType, genDType, genDType);
213    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
214      genType frexp(genType, out genIType);
215    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
216      genDType frexp(genDType, out genIType);
217    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
218      genType ldexp(genType, genIType);
219    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
220      genDType ldexp(genDType, genIType);
221    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS"}
222      uint packSnorm2x16(vec2);
223      uint packHalf2x16(vec2);
224      vec2 unpackSnorm2x16(uint);
225      vec2 unpackHalf2x16(uint);
226    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
227      uint packUnorm2x16(vec2);
228      vec2 unpackUnorm2x16(uint);
229    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
230      uint packUnorm4x8(vec4);
231      uint packSnorm4x8(vec4);
232      vec4 unpackUnorm4x8(uint);
233      vec4 unpackSnorm4x8(uint);
234    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
235      double packDouble2x32(uvec2);
236      uvec2 unpackDouble2x32(double);
237  GROUP END Common
238
239  GROUP BEGIN Geometric
240    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
241      float length(genType);
242    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
243      double length(genDType);
244    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
245      float distance(genType, genType);
246    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
247      double distance(genDType, genDType);
248    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
249      float dot(genType, genType);
250    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
251      double dot(genDType, genDType);
252    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
253      vec3 cross(vec3, vec3);
254    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
255      dvec3 cross(dvec3, dvec3);
256    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
257      genType normalize(genType);
258    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
259      genDType normalize(genDType);
260    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
261      genType faceforward(genType, genType, genType);
262    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
263      genDType faceforward(genDType, genDType, genDType);
264    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
265      genType reflect(genType, genType);
266    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
267      genDType reflect(genDType, genDType);
268    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
269      genType refract(genType, genType, float);
270    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
271      genDType refract(genDType, genDType, float);
272  GROUP END Geometric
273
274  GROUP BEGIN GeometricVS {"shader_type": "VERTEX"}
275    DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS"}
276      vec4 ftransform();
277  GROUP END GeometricVS
278
279  GROUP BEGIN Matrix
280    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
281      mat2 matrixCompMult(mat2, mat2);
282      mat3 matrixCompMult(mat3, mat3);
283      mat4 matrixCompMult(mat4, mat4);
284    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"}
285      mat2x3 matrixCompMult(mat2x3, mat2x3);
286      mat3x2 matrixCompMult(mat3x2, mat3x2);
287      mat2x4 matrixCompMult(mat2x4, mat2x4);
288      mat4x2 matrixCompMult(mat4x2, mat4x2);
289      mat3x4 matrixCompMult(mat3x4, mat3x4);
290      mat4x3 matrixCompMult(mat4x3, mat4x3);
291    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_2_BUILTINS"}
292      mat2 outerProduct(vec2, vec2);
293      mat3 outerProduct(vec3, vec3);
294      mat4 outerProduct(vec4, vec4);
295      mat2x3 outerProduct(vec3, vec2);
296      mat3x2 outerProduct(vec2, vec3);
297      mat2x4 outerProduct(vec4, vec2);
298      mat4x2 outerProduct(vec2, vec4);
299      mat3x4 outerProduct(vec4, vec3);
300      mat4x3 outerProduct(vec3, vec4);
301      mat2 transpose(mat2);
302      mat3 transpose(mat3);
303      mat4 transpose(mat4);
304      mat2x3 transpose(mat3x2);
305      mat3x2 transpose(mat2x3);
306      mat2x4 transpose(mat4x2);
307      mat4x2 transpose(mat2x4);
308      mat3x4 transpose(mat4x3);
309      mat4x3 transpose(mat3x4);
310    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"}
311      float determinant(mat2);
312      float determinant(mat3);
313      float determinant(mat4);
314    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_4_BUILTINS"}
315      mat2 inverse(mat2);
316      mat3 inverse(mat3);
317      mat4 inverse(mat4);
318  GROUP END Matrix
319
320  GROUP BEGIN Vector
321    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
322      bvec lessThan(vec, vec);
323      bvec lessThan(ivec, ivec);
324    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
325      bvec lessThan(uvec, uvec);
326    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
327      bvec lessThanEqual(vec, vec);
328      bvec lessThanEqual(ivec, ivec);
329    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
330      bvec lessThanEqual(uvec, uvec);
331    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
332      bvec greaterThan(vec, vec);
333      bvec greaterThan(ivec, ivec);
334    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
335      bvec greaterThan(uvec, uvec);
336    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
337      bvec greaterThanEqual(vec, vec);
338      bvec greaterThanEqual(ivec, ivec);
339    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
340      bvec greaterThanEqual(uvec, uvec);
341    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
342      bvec equal(vec, vec);
343      bvec equal(ivec, ivec);
344    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
345      bvec equal(uvec, uvec);
346    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
347      bvec equal(bvec, bvec);
348    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
349      bvec notEqual(vec, vec);
350      bvec notEqual(ivec, ivec);
351    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "opSuffix": "ComponentWise"}
352      bvec notEqual(uvec, uvec);
353    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"}
354      bvec notEqual(bvec, bvec);
355    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
356      bool any(bvec);
357      bool all(bvec);
358    DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise", "suffix": "Func"}
359      bvec not(bvec);
360  GROUP END Vector
361
362  GROUP BEGIN Integer
363    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
364      genIType bitfieldExtract(genIType, int, int);
365      genUType bitfieldExtract(genUType, int, int);
366      genIType bitfieldInsert(genIType, genIType, int, int);
367      genUType bitfieldInsert(genUType, genUType, int, int);
368      genIType bitfieldReverse(genIType);
369      genUType bitfieldReverse(genUType);
370      genIType bitCount(genIType);
371      genIType bitCount(genUType);
372      genIType findLSB(genIType);
373      genIType findLSB(genUType);
374      genIType findMSB(genIType);
375      genIType findMSB(genUType);
376      genUType uaddCarry(genUType, genUType, out genUType);
377      genUType usubBorrow(genUType, genUType, out genUType);
378      void umulExtended(genUType, genUType, out genUType, out genUType);
379      void imulExtended(genIType, genIType, out genIType, out genIType);
380  GROUP END Integer
381GROUP END Math
382
383GROUP BEGIN Texture {"queryFunction": true}
384  GROUP BEGIN FirstVersions
385    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
386      vec4 texture2D(sampler2D, vec2);
387      vec4 texture2DProj(sampler2D, vec3);
388      vec4 texture2DProj(sampler2D, vec4);
389      vec4 textureCube(samplerCube, vec3);
390    DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS"}
391      vec4 texture1D(sampler1D, float);
392      vec4 texture1DProj(sampler1D, vec2);
393      vec4 texture1DProj(sampler1D, vec4);
394      vec4 texture3D(sampler3D, vec3);
395      vec4 texture3DProj(sampler3D, vec4);
396      vec4 shadow1D(sampler1DShadow, vec3);
397      vec4 shadow1DProj(sampler1DShadow, vec4);
398      vec4 shadow2D(sampler2DShadow, vec3);
399      vec4 shadow2DProj(sampler2DShadow, vec4);
400    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"}
401      vec4 texture3D(sampler3D, vec3);
402      vec4 texture3DProj(sampler3D, vec4);
403    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shadow_samplers"}
404      float shadow2DEXT(sampler2DShadow, vec3);
405      float shadow2DProjEXT(sampler2DShadow, vec4);
406    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_EGL_image_external, NV_EGL_stream_consumer_external"}
407      vec4 texture2D(samplerExternalOES, vec2);
408      vec4 texture2DProj(samplerExternalOES, vec3);
409      vec4 texture2DProj(samplerExternalOES, vec4);
410    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "ARB_texture_rectangle"}
411      vec4 texture2DRect(sampler2DRect, vec2);
412      vec4 texture2DRectProj(sampler2DRect, vec3);
413      vec4 texture2DRectProj(sampler2DRect, vec4);
414    // The *Grad* variants are new to both vertex and fragment shaders; the fragment
415    // shader specific pieces are added separately below.
416    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shader_texture_lod"}
417      vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);
418      vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);
419      vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);
420      vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);
421    DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS", "extension": "WEBGL_video_texture"}
422        vec4 textureVideoWEBGL(samplerVideoWEBGL, vec2);
423
424    // Variants with bias are limited to fragment shaders
425    GROUP BEGIN Bias {"shader_type": "FRAGMENT", "opSuffix": "Bias"}
426      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
427        vec4 texture2D(sampler2D, vec2, float);
428        vec4 texture2DProj(sampler2D, vec3, float);
429        vec4 texture2DProj(sampler2D, vec4, float);
430        vec4 textureCube(samplerCube, vec3, float);
431      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS"}
432        vec4 texture3D(sampler3D, vec3, float);
433        vec4 texture3DProj(sampler3D, vec4, float);
434        vec4 texture1D(sampler1D, float, float);
435        vec4 texture1DProj(sampler1D, vec2, float);
436        vec4 texture1DProj(sampler1D, vec4, float);
437        vec4 shadow1D(sampler1DShadow, vec3, float);
438        vec4 shadow1DProj(sampler1DShadow, vec4, float);
439        vec4 shadow2D(sampler2DShadow, vec3, float);
440        vec4 shadow2DProj(sampler2DShadow, vec4, float);
441      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"}
442        vec4 texture3D(sampler3D, vec3, float);
443        vec4 texture3DProj(sampler3D, vec4, float);
444    GROUP END Bias
445
446    // Variants with lod are accessible to all shader stages in desktop GL
447    GROUP BEGIN Lod
448      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS"}
449        vec4 texture2DLod(sampler2D, vec2, float);
450        vec4 texture2DProjLod(sampler2D, vec3, float);
451        vec4 texture2DProjLod(sampler2D, vec4, float);
452        vec4 textureCubeLod(samplerCube, vec3, float);
453        vec4 texture1DLod(sampler1D, float, float);
454        vec4 texture1DProjLod(sampler1D, vec2, float);
455        vec4 texture1DProjLod(sampler1D, vec4, float);
456        vec4 shadow1DLod(sampler1DShadow, vec3, float);
457        vec4 shadow1DProjLod(sampler1DShadow, vec4, float);
458        vec4 shadow2DLod(sampler2DShadow, vec3, float);
459        vec4 shadow2DProjLod(sampler2DShadow, vec4, float);
460        vec4 texture3DLod(sampler3D, vec3, float);
461        vec4 texture3DProjLod(sampler3D, vec4, float);
462      // The GLES spec mentioning that lod variants are limited to vertex shaders, and the
463      // OES_texture_3D spec doesn't mention otherwise.  However, these functions are used in tests
464      // and seem to be expected to be available in fragment shaders too.
465      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"}
466        vec4 texture3DLod(sampler3D, vec3, float);
467        vec4 texture3DProjLod(sampler3D, vec4, float);
468    GROUP END Lod
469
470    // Variants with lod are limited to vertex shaders in GLES
471    GROUP BEGIN LodVS {"shader_type": "VERTEX", "opSuffix": "VS"}
472      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS"}
473        vec4 texture2DLod(sampler2D, vec2, float);
474        vec4 texture2DProjLod(sampler2D, vec3, float);
475        vec4 texture2DProjLod(sampler2D, vec4, float);
476        vec4 textureCubeLod(samplerCube, vec3, float);
477    GROUP END LodVS
478
479    // EXT_shader_texture_lod brings some lod variants to fragment shaders
480    GROUP BEGIN LodFS {"shader_type": "FRAGMENT", "opSuffix": "FS"}
481      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shader_texture_lod"}
482        vec4 texture2DLodEXT(sampler2D, vec2, float);
483        vec4 texture2DProjLodEXT(sampler2D, vec3, float);
484        vec4 texture2DProjLodEXT(sampler2D, vec4, float);
485        vec4 textureCubeLodEXT(samplerCube, vec3, float);
486    GROUP END LodFS
487
488  GROUP END FirstVersions
489
490  GROUP BEGIN NoBias
491    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
492      gvec4 texture(gsampler2D, vec2);
493      gvec4 texture(gsampler3D, vec3);
494      gvec4 texture(gsamplerCube, vec3);
495      gvec4 texture(gsampler2DArray, vec3);
496      float texture(sampler2DShadow, vec3);
497      float texture(samplerCubeShadow, vec4);
498      float texture(sampler2DArrayShadow, vec4);
499    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
500      gvec4 texture(gsampler1D, float);
501      float texture(sampler1DShadow, vec3);
502      gvec4 texture(gsampler1DArray, vec3);
503      float texture(sampler1DArrayShadow, vec3);
504    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
505      gvec4 texture(gsampler2DRect, vec2);
506      float texture(sampler2DRectShadow, vec3);
507    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
508      gvec4 texture(gsamplerCubeArray, vec4);
509      float texture(samplerCubeArrayShadow, vec4, float);
510    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
511      gvec4 texture(gsamplerCubeArray, vec4);
512      float texture(samplerCubeArrayShadow, vec4, float);
513    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"}
514      vec4 texture(samplerExternalOES, vec2);
515    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
516      vec4 texture(samplerExternal2DY2YEXT, vec2);
517    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ARB_texture_rectangle"}
518      // We don't have a rectangle texture essl_extension for OpenGL ES however based on the behavior of
519      // rectangle texture in desktop OpenGL, they should be sampled with a "texture" overload in
520      // GLSL version that have such an overload. This is the case for ESSL3 and above.
521      vec4 texture(sampler2DRect, vec2);
522    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "extension": "WEBGL_video_texture"}
523      vec4 texture(samplerVideoWEBGL, vec2);
524    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
525      gvec4 textureProj(gsampler2D, vec3);
526      gvec4 textureProj(gsampler2D, vec4);
527      gvec4 textureProj(gsampler3D, vec4);
528      float textureProj(sampler2DShadow, vec4);
529    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
530      gvec4 textureProj(gsampler1D, vec2);
531      gvec4 textureProj(gsampler1D, vec4);
532      float textureProj(sampler1DShadow, vec4);
533    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
534      gvec4 textureProj(gsampler2DRect, vec3);
535      gvec4 textureProj(gsampler2DRect, vec4);
536      float textureProj(sampler2DRectShadow, vec4);
537    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"}
538      vec4 textureProj(samplerExternalOES, vec3);
539      vec4 textureProj(samplerExternalOES, vec4);
540    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
541      vec4 textureProj(samplerExternal2DY2YEXT, vec3);
542      vec4 textureProj(samplerExternal2DY2YEXT, vec4);
543    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ARB_texture_rectangle"}
544      vec4 textureProj(sampler2DRect, vec3);
545      vec4 textureProj(sampler2DRect, vec4);
546    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
547      gvec4 textureLod(gsampler2D, vec2, float);
548      gvec4 textureLod(gsampler3D, vec3, float);
549      gvec4 textureLod(gsamplerCube, vec3, float);
550      gvec4 textureLod(gsampler2DArray, vec3, float);
551      float textureLod(sampler2DShadow, vec3, float);
552    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
553      gvec4 textureLod(gsampler1D, float, float);
554      float textureLod(sampler1DShadow, vec3, float);
555      gvec4 textureLod(gsampler1DArray, vec2, float);
556      float textureLod(sampler1DArrayShadow, vec3, float);
557    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
558      gvec4 textureLod(gsamplerCubeArray, vec4, float);
559    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
560      gvec4 textureLod(gsamplerCubeArray, vec4, float);
561    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
562      ivec2 textureSize(gsampler2D, int);
563      ivec3 textureSize(gsampler3D, int);
564      ivec2 textureSize(gsamplerCube, int);
565      ivec3 textureSize(gsampler2DArray, int);
566      ivec2 textureSize(sampler2DShadow, int);
567      ivec2 textureSize(samplerCubeShadow, int);
568      ivec3 textureSize(sampler2DArrayShadow, int);
569    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
570      int textureSize(gsampler1D, int);
571      int textureSize(sampler1DShadow, int);
572    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
573      ivec3 textureSize(gsamplerCubeArray, int);
574      ivec3 textureSize(samplerCubeArrayShadow, int);
575    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
576      ivec3 textureSize(gsamplerCubeArray, int);
577      ivec3 textureSize(samplerCubeArrayShadow, int);
578    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
579      ivec2 textureSize(gsampler2DRect);
580      ivec2 textureSize(sampler2DRectShadow);
581    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
582      ivec2 textureSize(gsampler1DArray, int);
583      ivec2 textureSize(sampler1DArrayShadow, int);
584    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL1_4_BUILTINS"}
585      int textureSize(gsamplerBuffer);
586    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"}
587      int textureSize(gsamplerBuffer);
588    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS"}
589      ivec2 textureSize(gsampler2DMS);
590    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"}
591      ivec2 textureSize(gsampler2DMS);
592    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS"}
593      ivec3 textureSize(gsampler2DMSArray);
594    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"}
595      ivec3 textureSize(gsampler2DMSArray);
596    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"}
597      ivec2 textureSize(samplerExternalOES, int);
598    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
599      ivec2 textureSize(samplerExternal2DY2YEXT, int);
600    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
601      gvec4 textureProjLod(gsampler2D, vec3, float);
602      gvec4 textureProjLod(gsampler2D, vec4, float);
603      gvec4 textureProjLod(gsampler3D, vec4, float);
604      float textureProjLod(sampler2DShadow, vec4, float);
605    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
606      gvec4 textureProjLod(gsampler1D, vec2, float);
607      gvec4 textureProjLod(gsampler1D, vec4, float);
608      float textureProjLod(sampler1DShadow, vec4, float);
609    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
610      gvec4 texelFetch(gsampler2D, ivec2, int);
611      gvec4 texelFetch(gsampler3D, ivec3, int);
612      gvec4 texelFetch(gsampler2DArray, ivec3, int);
613    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
614      gvec4 texelFetch(gsampler1D, int, int);
615    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
616      gvec4 texelFetch(gsampler2DRect, ivec2);
617    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
618      gvec4 texelFetch(gsampler1DArray, ivec2, int);
619    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL1_4_BUILTINS"}
620      gvec4 texelFetch(gsamplerBuffer, int);
621    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"}
622      gvec4 texelFetch(gsamplerBuffer, int);
623    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS"}
624      gvec4 texelFetch(gsampler2DMS, ivec2, int);
625    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"}
626      gvec4 texelFetch(gsampler2DMS, ivec2, int);
627    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS"}
628      gvec4 texelFetch(gsampler2DMSArray, ivec3, int);
629    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"}
630      gvec4 texelFetch(gsampler2DMSArray, ivec3, int);
631    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"}
632      vec4 texelFetch(samplerExternalOES, ivec2, int);
633    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
634      vec4 texelFetch(samplerExternal2DY2YEXT, ivec2, int);
635    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
636      gvec4 textureGrad(gsampler2D, vec2, vec2, vec2);
637      gvec4 textureGrad(gsampler3D, vec3, vec3, vec3);
638      gvec4 textureGrad(gsamplerCube, vec3, vec3, vec3);
639    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
640      gvec4 textureGrad(gsampler2D, float, float, float);
641    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
642      gvec4 textureGrad(gsampler2DRect, vec2, vec2, vec2);
643      gvec4 textureGrad(sampler2DRectShadow, vec3, vec2, vec2);
644    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
645      float textureGrad(sampler2DShadow, vec3, vec2, vec2);
646      float textureGrad(samplerCubeShadow, vec4, vec3, vec3);
647      gvec4 textureGrad(gsampler2DArray, vec3, vec2, vec2);
648      float textureGrad(sampler2DArrayShadow, vec4, vec2, vec2);
649    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
650      float textureGrad(sampler1DShadow, vec3, float, float);
651      gvec4 textureGrad(gsampler1DArray, vec2, float, float);
652      float textureGrad(sampler1DArrayShadow, vec3, float, float);
653    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
654      gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3);
655    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
656      gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3);
657    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
658      gvec4 textureProjGrad(gsampler2D, vec3, vec2, vec2);
659      gvec4 textureProjGrad(gsampler2D, vec4, vec2, vec2);
660      gvec4 textureProjGrad(gsampler3D, vec4, vec3, vec3);
661      float textureProjGrad(sampler2DShadow, vec4, vec2, vec2);
662    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
663      gvec4 textureProjGrad(gsampler1D, vec2, float, float);
664      gvec4 textureProjGrad(gsampler1D, vec4, float, float);
665      float textureProjGrad(sampler1DShadow, vec4, float, float);
666    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
667      gvec4 textureProjGrad(gsampler2DRect, vec3, vec2, vec2);
668      gvec4 textureProjGrad(gsampler2DRect, vec4, vec2, vec2);
669      float textureProjGrad(sampler2DRectShadow, vec4, vec2, vec2);
670    DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS"}
671      int textureQueryLevels(gsampler1D);
672      int textureQueryLevels(gsampler2D);
673      int textureQueryLevels(gsampler3D);
674      int textureQueryLevels(gsamplerCube);
675      int textureQueryLevels(gsampler1DArray);
676      int textureQueryLevels(gsampler2DArray);
677      int textureQueryLevels(gsamplerCubeArray);
678      int textureQueryLevels(sampler1DShadow);
679      int textureQueryLevels(sampler2DShadow);
680      int textureQueryLevels(samplerCubeShadow);
681      int textureQueryLevels(sampler1DArrayShadow);
682      int textureQueryLevels(sampler2DArrayShadow);
683      int textureQueryLevels(samplerCubeArrayShadow);
684    DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS"}
685      int textureSamples(gsampler2DMS);
686      int textureSamples(gsampler2DMSArray);
687  GROUP END NoBias
688
689  GROUP BEGIN Bias {"shader_type": "FRAGMENT", "opSuffix": "Bias"}
690    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
691      gvec4 texture(gsampler2D, vec2, float);
692      gvec4 texture(gsampler3D, vec3, float);
693      gvec4 texture(gsamplerCube, vec3, float);
694      gvec4 texture(gsampler2DArray, vec3, float);
695      gvec4 textureProj(gsampler2D, vec3, float);
696      gvec4 textureProj(gsampler2D, vec4, float);
697      gvec4 textureProj(gsampler3D, vec4, float);
698      float texture(sampler2DShadow, vec3, float);
699      float texture(samplerCubeShadow, vec4, float);
700      float textureProj(sampler2DShadow, vec4, float);
701    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
702      gvec4 texture(gsampler1D, float, float);
703      float texture(sampler1DShadow, vec3, float);
704      gvec4 texture(gsampler1DArray, vec3, float);
705      float texture(sampler1DArrayShadow, vec3, float);
706      float texture(sampler2DArrayShadow, vec4, float);
707      gvec4 textureProj(gsampler1D, vec2, float);
708      gvec4 textureProj(gsampler1D, vec4, float);
709      float textureProj(sampler1DShadow, vec4, float);
710    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
711      gvec4 texture(gsamplerCubeArray, vec4, float);
712    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
713      gvec4 texture(gsamplerCubeArray, vec4, float);
714    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"}
715      vec4 texture(samplerExternalOES, vec2, float);
716      vec4 textureProj(samplerExternalOES, vec3, float);
717      vec4 textureProj(samplerExternalOES, vec4, float);
718    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
719      vec4 texture(samplerExternal2DY2YEXT, vec2, float);
720      vec4 textureProj(samplerExternal2DY2YEXT, vec3, float);
721      vec4 textureProj(samplerExternal2DY2YEXT, vec4, float);
722  GROUP END Bias
723
724  GROUP BEGIN QueryLod {"shader_type": "FRAGMENT"}
725    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
726      vec2 textureQueryLod(gsampler1D, float);
727      vec2 textureQueryLod(gsampler2D, vec2);
728      vec2 textureQueryLod(gsampler3D, vec3);
729      vec2 textureQueryLod(gsamplerCube, vec3);
730      vec2 textureQueryLod(gsampler1DArray, float);
731      vec2 textureQueryLod(gsampler2DArray, vec2);
732      vec2 textureQueryLod(gsamplerCubeArray, vec3);
733      vec2 textureQueryLod(sampler1DShadow, float);
734      vec2 textureQueryLod(sampler2DShadow, vec2);
735      vec2 textureQueryLod(samplerCubeShadow, vec3);
736      vec2 textureQueryLod(sampler1DArrayShadow, float);
737      vec2 textureQueryLod(sampler2DArrayShadow, vec2);
738      vec2 textureQueryLod(samplerCubeArrayShadow, vec3);
739  GROUP END QueryLod
740
741  GROUP BEGIN OffsetNoBias {"queryFunction": true}
742    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
743      gvec4 textureOffset(gsampler2D, vec2, ivec2);
744      gvec4 textureOffset(gsampler3D, vec3, ivec3);
745      float textureOffset(sampler2DShadow, vec3, ivec2);
746      gvec4 textureOffset(gsampler2DArray, vec3, ivec2);
747    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
748      gvec4 textureOffset(gsampler1D, float, int);
749    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
750      gvec4 textureOffset(gsampler2DRect, vec2, ivec2);
751      float textureOffset(sampler2DRectShadow, vec3, ivec2);
752    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
753      float textureOffset(sampler1DShadow, vec3, int);
754      gvec4 textureOffset(gsampler1DArray, vec2, int);
755      float textureOffset(sampler1DArrayShadow, vec3, int);
756    DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS"}
757      float textureOffset(sampler2DArrayShadow, vec4, ivec2);
758    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
759      gvec4 textureProjOffset(gsampler2D, vec3, ivec2);
760      gvec4 textureProjOffset(gsampler2D, vec4, ivec2);
761      gvec4 textureProjOffset(gsampler3D, vec4, ivec3);
762      float textureProjOffset(sampler2DShadow, vec4, ivec2);
763    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
764      gvec4 textureProjOffset(gsampler1D, vec2, int);
765      gvec4 textureProjOffset(gsampler1D, vec4, int);
766    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
767      gvec4 textureProjOffset(gsampler2DRect, vec3, ivec2);
768      gvec4 textureProjOffset(gsampler2DRect, vec4, ivec2);
769      float textureProjOffset(sampler2DRectShadow, vec4, ivec2);
770    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
771      float textureProjOffset(sampler1DShadow, vec4, int);
772    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
773      gvec4 textureLodOffset(gsampler2D, vec2, float, ivec2);
774      gvec4 textureLodOffset(gsampler3D, vec3, float, ivec3);
775      float textureLodOffset(sampler2DShadow, vec3, float, ivec2);
776      gvec4 textureLodOffset(gsampler2DArray, vec3, float, ivec2);
777    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
778      gvec4 textureLodOffset(gsampler1D, float, float, int);
779      float textureLodOffset(sampler1DShadow, vec3, float, int);
780      gvec4 textureLodOffset(gsampler1DArray, vec2, float, int);
781      float textureLodOffset(sampler1DArrayShadow, vec3, float, int);
782    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
783      gvec4 textureProjLodOffset(gsampler2D, vec3, float, ivec2);
784      gvec4 textureProjLodOffset(gsampler2D, vec4, float, ivec2);
785      gvec4 textureProjLodOffset(gsampler3D, vec4, float, ivec3);
786      float textureProjLodOffset(sampler2DShadow, vec4, float, ivec2);
787    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
788      gvec4 textureProjLodOffset(gsampler1D, vec2, float, int);
789      gvec4 textureProjLodOffset(gsampler1D, vec4, float, int);
790      float textureProjLodOffset(sampler1DShadow, vec4, float, int);
791    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
792      gvec4 texelFetchOffset(gsampler2D, ivec2, int, ivec2);
793      gvec4 texelFetchOffset(gsampler3D, ivec3, int, ivec3);
794      gvec4 texelFetchOffset(gsampler2DArray, ivec3, int, ivec2);
795    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
796      gvec4 texelFetchOffset(gsampler1D, int, int, int);
797    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
798      gvec4 texelFetchOffset(gsampler2DRect, ivec2, ivec2);
799    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
800      gvec4 texelFetchOffset(gsampler1DArray, ivec2, int, int);
801    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
802      gvec4 textureGradOffset(gsampler2D, vec2, vec2, vec2, ivec2);
803      gvec4 textureGradOffset(gsampler3D, vec3, vec3, vec3, ivec3);
804      float textureGradOffset(sampler2DShadow, vec3, vec2, vec2, ivec2);
805      gvec4 textureGradOffset(gsampler2DArray, vec3, vec2, vec2, ivec2);
806      float textureGradOffset(sampler2DArrayShadow, vec4, vec2, vec2, ivec2);
807    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
808      gvec4 textureGradOffset(gsampler1D, float, float, float, int);
809    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
810      gvec4 textureGradOffset(gsampler2DRect, vec2, vec2, vec2, ivec2);
811      float textureGradOffset(sampler2DRectShadow, vec3, vec2, vec2, ivec2);
812    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
813      float textureGradOffset(sampler1DShadow, vec3, float, float, int);
814      gvec4 textureGradOffset(gsampler1DArray, vec2, float, float, int);
815      float textureGradOffset(sampler1DArrayShadow, vec3, float, float, int);
816    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
817      gvec4 textureProjGradOffset(gsampler2D, vec3, vec2, vec2, ivec2);
818      gvec4 textureProjGradOffset(gsampler2D, vec4, vec2, vec2, ivec2);
819      gvec4 textureProjGradOffset(gsampler3D, vec4, vec3, vec3, ivec3);
820      float textureProjGradOffset(sampler2DShadow, vec4, vec2, vec2, ivec2);
821    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
822      gvec4 textureProjGradOffset(gsampler1D, vec2, float, float, int);
823      gvec4 textureProjGradOffset(gsampler1D, vec4, float, float, int);
824    DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS"}
825      gvec4 textureProjGradOffset(gsampler2DRect, vec3, vec2, vec2, ivec2);
826      gvec4 textureProjGradOffset(gsampler2DRect, vec4, vec2, vec2, ivec2);
827      float textureProjGradOffset(sampler2DRectShadow, vec4, vec2, vec2, ivec2);
828    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
829      float textureProjGradOffset(sampler1DShadow, vec4, float, float, int);
830  GROUP END OffsetNoBias
831
832  GROUP BEGIN OffsetBias {"queryFunction": true, "shader_type": "FRAGMENT", "opSuffix": "Bias"}
833    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
834      gvec4 textureOffset(gsampler2D, vec2, ivec2, float);
835      gvec4 textureOffset(gsampler3D, vec3, ivec3, float);
836      float textureOffset(sampler2DShadow, vec3, ivec2, float);
837      gvec4 textureOffset(gsampler2DArray, vec3, ivec2, float);
838    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
839      gvec4 textureOffset(gsampler1D, float, int, float);
840      float textureOffset(sampler1DShadow, vec3, int, float);
841      gvec4 textureOffset(gsampler1DArray, vec2, int, float);
842      float textureOffset(sampler1DArrayShadow, vec3, int, float);
843    DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS"}
844      gvec4 textureProjOffset(gsampler2D, vec3, ivec2, float);
845      gvec4 textureProjOffset(gsampler2D, vec4, ivec2, float);
846      gvec4 textureProjOffset(gsampler3D, vec4, ivec3, float);
847      float textureProjOffset(sampler2DShadow, vec4, ivec2, float);
848    DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS"}
849      gvec4 textureProjOffset(gsampler1D, vec2, int, float);
850      gvec4 textureProjOffset(gsampler1D, vec4, int, float);
851      float textureProjOffset(sampler1DShadow, vec4, int, float);
852  GROUP END OffsetBias
853
854  GROUP BEGIN Gather {"queryFunction": true}
855    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
856      gvec4 textureGather(gsampler2D, vec2);
857      gvec4 textureGather(gsampler2D, vec2, int);
858      gvec4 textureGather(gsampler2DArray, vec3);
859      gvec4 textureGather(gsampler2DArray, vec3, int);
860      gvec4 textureGather(gsamplerCube, vec3);
861      gvec4 textureGather(gsamplerCube, vec3, int);
862    DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
863      gvec4 textureGather(gsamplerCubeArray, vec4);
864      gvec4 textureGather(gsamplerCubeArray, vec4, int);
865      vec4 textureGather(samplerCubeArrayShadow, vec4, float);
866    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
867      gvec4 textureGather(gsamplerCubeArray, vec4);
868      gvec4 textureGather(gsamplerCubeArray, vec4, int);
869      vec4 textureGather(samplerCubeArrayShadow, vec4, float);
870    DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
871      gvec4 textureGather(gsampler2DRect, vec3);
872      gvec4 textureGather(gsampler2DRect, vec3, int);
873      vec4 textureGather(sampler2DRectShadow, vec2, float);
874    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"}
875      vec4 textureGather(sampler2DShadow, vec2);
876    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
877      vec4 textureGather(sampler2DShadow, vec2, float);
878    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"}
879      vec4 textureGather(sampler2DArrayShadow, vec3);
880    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
881      vec4 textureGather(sampler2DArrayShadow, vec3, float);
882    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"}
883      vec4 textureGather(samplerCubeShadow, vec3);
884    DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
885      vec4 textureGather(samplerCubeShadow, vec3, float);
886
887      GROUP BEGIN Offset {"queryFunction": true}
888        GROUP BEGIN NoComp {"queryFunction": true}
889          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
890            gvec4 textureGatherOffset(gsampler2D, vec2, ivec2);
891            gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2);
892            vec4 textureGatherOffset(sampler2DShadow, vec2, float, ivec2);
893            vec4 textureGatherOffset(sampler2DArrayShadow, vec3, float, ivec2);
894          DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
895            gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2);
896            vec4 textureGatherOffset(sampler2DRectShadow, vec2, float, ivec2);
897        GROUP END NoComp
898        GROUP BEGIN Comp {"queryFunction": true, "opSuffix": "Comp"}
899          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
900            gvec4 textureGatherOffset(gsampler2D, vec2, ivec2, int);
901            gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2, int);
902          DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
903            gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2, int);
904        GROUP END Comp
905      GROUP END Offset
906      GROUP BEGIN Offsets {"queryFunction": true}
907        GROUP BEGIN NoComp {"queryFunction": true}
908          DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
909            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]);
910            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4]);
911            vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]);
912            vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]);
913          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"}
914            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]);
915            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4]);
916            vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]);
917            vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]);
918          DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
919            gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4]);
920            vec4 textureGatherOffsets(sampler2DRectShadow, vec2, float, ivec2[4]);
921        GROUP END NoComp
922        GROUP BEGIN Comp {"queryFunction": true, "opSuffix": "Comp"}
923          DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_BUILTINS"}
924            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4], int);
925            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4], int);
926          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"}
927            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4], int);
928            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4], int);
929          DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS"}
930            gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4], int);
931        GROUP END Comp
932      GROUP END Offsets
933  GROUP END Gather
934GROUP END Texture
935
936GROUP BEGIN EXT_YUV_target
937  DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"}
938    vec3 rgb_2_yuv(vec3, yuvCscStandardEXT);
939    vec3 yuv_2_rgb(vec3, yuvCscStandardEXT);
940GROUP END EXT_YUV_target
941
942GROUP BEGIN DerivativesFS {"queryFunction": true, "shader_type": "FRAGMENT"}
943  DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_standard_derivatives", "suffix": "Ext"}
944    genType dFdx(genType);
945    genType dFdy(genType);
946    genType fwidth(genType);
947  DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "COMMON_BUILTINS"}
948    genType dFdx(genType);
949    genType dFdy(genType);
950    genType fwidth(genType);
951  DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS"}
952    genType dFdxFine(genType);
953    genType dFdyFine(genType);
954    genType dFdxCoarse(genType);
955    genType dFdyCoarse(genType);
956    genType fwidthFine(genType);
957    genType fwidthCoarse(genType);
958GROUP END DerivativesFS
959
960GROUP BEGIN InterpolationFS {"queryFunction": true, "shader_type": "FRAGMENT"}
961  DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS","glsl_level": "GLSL4_BUILTINS"}
962    float interpolateAtCentroid(float);
963    vec2 interpolateAtCentroid(vec2);
964    vec3 interpolateAtCentroid(vec3);
965    vec4 interpolateAtCentroid(vec4);
966    float interpolateAtSample(float, int);
967    vec2 interpolateAtSample(vec2, int);
968    vec3 interpolateAtSample(vec3, int);
969    vec4 interpolateAtSample(vec4, int);
970    float interpolateAtOffset(float, vec2);
971    vec2 interpolateAtOffset(vec2, vec2);
972    vec3 interpolateAtOffset(vec3, vec2);
973    vec4 interpolateAtOffset(vec4, vec2);
974  DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_shader_multisample_interpolation", "suffix": "Ext"}
975    float interpolateAtCentroid(float);
976    vec2 interpolateAtCentroid(vec2);
977    vec3 interpolateAtCentroid(vec3);
978    vec4 interpolateAtCentroid(vec4);
979    float interpolateAtSample(float, int);
980    vec2 interpolateAtSample(vec2, int);
981    vec3 interpolateAtSample(vec3, int);
982    vec4 interpolateAtSample(vec4, int);
983    float interpolateAtOffset(float, vec2);
984    vec2 interpolateAtOffset(vec2, vec2);
985    vec3 interpolateAtOffset(vec3, vec2);
986    vec4 interpolateAtOffset(vec4, vec2);
987GROUP END InterpolationFS
988
989GROUP BEGIN AtomicCounter {"queryFunction": true}
990  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "hasSideEffects": true}
991    uint atomicCounter(atomic_uint);
992    uint atomicCounterIncrement(atomic_uint);
993    uint atomicCounterDecrement(atomic_uint);
994  DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS", "hasSideEffects": true}
995    uint atomicCounterAdd(atomic_uint, uint);
996    uint atomicCounterSubtract(atomic_uint, uint);
997    uint atomicCounterMin(atomic_uint, uint);
998    uint atomicCounterMax(atomic_uint, uint);
999    uint atomicCounterAnd(atomic_uint, uint);
1000    uint atomicCounterOr(atomic_uint, uint);
1001    uint atomicCounterXor(atomic_uint, uint);
1002    uint atomicCounterExchange(atomic_uint, uint);
1003    uint atomicCounterCompSwap(atomic_uint, uint, uint);
1004GROUP END AtomicCounter
1005
1006GROUP BEGIN AtomicMemory {"queryFunction": true}
1007  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS"}
1008    uint atomicAdd(inout uint, uint);
1009    int atomicAdd(inout int, int);
1010    uint atomicMin(inout uint, uint);
1011    int atomicMin(inout int, int);
1012    uint atomicMax(inout uint, uint);
1013    int atomicMax(inout int, int);
1014    uint atomicAnd(inout uint, uint);
1015    int atomicAnd(inout int, int);
1016    uint atomicOr(inout uint, uint);
1017    int atomicOr(inout int, int);
1018    uint atomicXor(inout uint, uint);
1019    int atomicXor(inout int, int);
1020    uint atomicExchange(inout uint, uint);
1021    int atomicExchange(inout int, int);
1022    uint atomicCompSwap(inout uint, uint, uint);
1023    int atomicCompSwap(inout int, int, int);
1024GROUP END AtomicMemory
1025
1026GROUP BEGIN Image {"queryFunction": true}
1027    GROUP BEGIN Store {"queryFunction": true}
1028      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true}
1029        void imageStore(gimage2D, ivec2, gvec4);
1030        void imageStore(gimage3D, ivec3, gvec4);
1031        void imageStore(gimage2DArray, ivec3, gvec4);
1032        void imageStore(gimageCube, ivec3, gvec4);
1033
1034      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "hasSideEffects": true}
1035        void imageStore(gimageCubeArray, ivec3, gvec4);
1036      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
1037        void imageStore(gimageCubeArray, ivec3, gvec4);
1038
1039      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "hasSideEffects": true}
1040        void imageStore(gimageBuffer, int, gvec4);
1041      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"}
1042        void imageStore(gimageBuffer, int, gvec4);
1043
1044      DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "hasSideEffects": true}
1045        void imageStore(writeonly IMAGE_PARAMS, gvec4);
1046    GROUP END Store
1047    GROUP BEGIN Load {"queryFunction": true}
1048      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"}
1049        gvec4 imageLoad(gimage2D, ivec2);
1050        gvec4 imageLoad(gimage3D, ivec3);
1051        gvec4 imageLoad(gimage2DArray, ivec3);
1052        gvec4 imageLoad(gimageCube, ivec3);
1053
1054      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"}
1055        gvec4 imageLoad(gimageCubeArray, ivec3);
1056      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
1057        gvec4 imageLoad(gimageCubeArray, ivec3);
1058
1059      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"}
1060        gvec4 imageLoad(gimageBuffer, int);
1061      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"}
1062        gvec4 imageLoad(gimageBuffer, int);
1063
1064      DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS"}
1065        gvec4 imageLoad(readonly IMAGE_PARAMS);
1066    GROUP END Load
1067  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"}
1068    ivec2 imageSize(gimage2D);
1069    ivec3 imageSize(gimage3D);
1070    ivec3 imageSize(gimage2DArray);
1071    ivec2 imageSize(gimageCube);
1072
1073  DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"}
1074    ivec3 imageSize(gimageCubeArray);
1075  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"}
1076    ivec3 imageSize(gimageCubeArray);
1077
1078  DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"}
1079    int imageSize(gimageBuffer);
1080  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"}
1081    int imageSize(gimageBuffer);
1082
1083  DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS"}
1084    int imageSize(readonly writeonly gimage1D);
1085    ivec2 imageSize(readonly writeonly gimage2D);
1086    ivec3 imageSize(readonly writeonly gimage3D);
1087    ivec2 imageSize(readonly writeonly gimageCube);
1088    ivec3 imageSize(readonly writeonly gimageCubeArray);
1089    ivec2 imageSize(readonly writeonly gimageRect);
1090    ivec2 imageSize(readonly writeonly gimage1DArray);
1091    ivec3 imageSize(readonly writeonly gimage2DArray);
1092    int imageSize(readonly writeonly gimageBuffer);
1093    ivec2 imageSize(readonly writeonly gimage2DMS);
1094    ivec3 imageSize(readonly writeonly gimage2DMSArray);
1095  DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS"}
1096    int imageSamples(readonly writeonly gimage2DMS);
1097    int imageSamples(readonly writeonly gimage2DMSArray);
1098
1099  GROUP BEGIN Atomic {"queryFunction": true}
1100      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "hasSideEffects": true}
1101        uint imageAtomicAdd(IMAGE_PARAMS, uint);
1102        int imageAtomicAdd(IMAGE_PARAMS, int);
1103        uint imageAtomicMin(IMAGE_PARAMS, uint);
1104        int imageAtomicMin(IMAGE_PARAMS, int);
1105        uint imageAtomicMax(IMAGE_PARAMS, uint);
1106        int imageAtomicMax(IMAGE_PARAMS, int);
1107        uint imageAtomicAnd(IMAGE_PARAMS, uint);
1108        int imageAtomicAnd(IMAGE_PARAMS, int);
1109        uint imageAtomicOr(IMAGE_PARAMS, uint);
1110        int imageAtomicOr(IMAGE_PARAMS, int);
1111        uint imageAtomicXor(IMAGE_PARAMS, uint);
1112        int imageAtomicXor(IMAGE_PARAMS, int);
1113        uint imageAtomicExchange(IMAGE_PARAMS, uint);
1114        int imageAtomicExchange(IMAGE_PARAMS, int);
1115      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_5_BUILTINS", "hasSideEffects": true}
1116        int imageAtomicExchange(IMAGE_PARAMS, float);
1117      DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "hasSideEffects": true}
1118        uint imageAtomicCompSwap(IMAGE_PARAMS, uint, uint);
1119        int imageAtomicCompSwap(IMAGE_PARAMS, int, int);
1120      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_shader_image_atomic", "suffix": "Ext"}
1121        uint imageAtomicAdd(readonly writeonly IMAGE_PARAMS, uint);
1122        int imageAtomicAdd(readonly writeonly IMAGE_PARAMS, int);
1123        uint imageAtomicMin(readonly writeonly IMAGE_PARAMS, uint);
1124        int imageAtomicMin(readonly writeonly IMAGE_PARAMS, int);
1125        uint imageAtomicMax(readonly writeonly IMAGE_PARAMS, uint);
1126        int imageAtomicMax(readonly writeonly IMAGE_PARAMS, int);
1127        uint imageAtomicAnd(readonly writeonly IMAGE_PARAMS, uint);
1128        int imageAtomicAnd(readonly writeonly IMAGE_PARAMS, int);
1129        uint imageAtomicOr(readonly writeonly IMAGE_PARAMS, uint);
1130        int imageAtomicOr(readonly writeonly IMAGE_PARAMS, int);
1131        uint imageAtomicXor(readonly writeonly IMAGE_PARAMS, uint);
1132        int imageAtomicXor(readonly writeonly IMAGE_PARAMS, int);
1133        uint imageAtomicExchange(readonly writeonly IMAGE_PARAMS, uint);
1134        int imageAtomicExchange(readonly writeonly IMAGE_PARAMS, int);
1135        int imageAtomicExchange(readonly writeonly IMAGE_PARAMS, float);
1136        uint imageAtomicCompSwap(readonly writeonly IMAGE_PARAMS, uint, uint);
1137        int imageAtomicCompSwap(readonly writeonly IMAGE_PARAMS, int, int);
1138  GROUP END Atomic
1139GROUP END Image
1140
1141GROUP BEGIN PixelLocal {"queryFunction": true}
1142    GROUP BEGIN Load {"queryFunction": true}
1143      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_shader_pixel_local_storage", "hasSideEffects": false}
1144        gvec4 pixelLocalLoadANGLE(gpixelLocalANGLE);
1145    GROUP END Load
1146    GROUP BEGIN Store {"queryFunction": true}
1147      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_shader_pixel_local_storage", "hasSideEffects": true}
1148        void pixelLocalStoreANGLE(gpixelLocalANGLE, gvec4);
1149    GROUP END Store
1150GROUP END PixelLocal
1151
1152// Desktop GLSL-only fragment synchronization functions. These are injected internally by the
1153// compiler to make pixel local storage coherent.
1154GROUP BEGIN FragmentSynchronization
1155  DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS", "hasSideEffects": true}
1156    void beginInvocationInterlockNV();
1157    void endInvocationInterlockNV();
1158    void beginFragmentShaderOrderingINTEL();
1159    void beginInvocationInterlockARB();
1160    void endInvocationInterlockARB();
1161GROUP END FragmentSynchronization
1162
1163GROUP BEGIN Noise
1164  DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS"}
1165    float noise1(genType);
1166    vec2 noise2(genType);
1167    vec3 noise3(genType);
1168    vec4 noise4(genType);
1169GROUP END Noise
1170
1171GROUP BEGIN Barrier
1172  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "hasSideEffects": true}
1173    void memoryBarrier();
1174  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS", "hasSideEffects": true}
1175    void memoryBarrierAtomicCounter();
1176    void memoryBarrierBuffer();
1177    void memoryBarrierImage();
1178GROUP END Barrier
1179
1180GROUP BEGIN ESSL310CS {"shader_type": "COMPUTE"}
1181  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "hasSideEffects": true}
1182    void barrier();
1183  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS", "hasSideEffects": true}
1184    void memoryBarrierShared();
1185    void groupMemoryBarrier();
1186GROUP END ESSL310CS
1187
1188GROUP BEGIN ESSL310TCS {"shader_type": "TESS_CONTROL_EXT"}
1189  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_tessellation_shader, OES_tessellation_shader", "essl_extension_becomes_core_in": "ESSL3_2_BUILTINS", "opSuffix": "TCS", "hasSideEffects": true, "suffix": "TCS"}
1190    void barrier();
1191GROUP END ESSL310TCS
1192
1193GROUP BEGIN GS {"shader_type": "GEOMETRY"}
1194  DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_geometry_shader, OES_geometry_shader", "essl_extension_becomes_core_in": "ESSL3_2_BUILTINS", "hasSideEffects": true}
1195    void EmitVertex();
1196    void EndPrimitive();
1197  DEFAULT METADATA {"glsl_level": "GLSL1_5_BUILTINS", "hasSideEffects": true}
1198    void EmitVertex();
1199    void EndPrimitive();
1200  DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "hasSideEffects": true}
1201    void EmitStreamVertex(int);
1202    void EndStreamPrimitive(int);
1203GROUP END GS
1204
1205GROUP BEGIN SubpassInput
1206  DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS", "essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"}
1207    gvec4 subpassLoad(gsubpassInput);
1208    gvec4 subpassLoad(gsubpassInputMS, int);
1209GROUP END SubpassInput
1210
1211GROUP BEGIN ShaderInvocationGroup
1212  DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS"}
1213    bool anyInvocation(bool);
1214    bool allInvocations(bool);
1215    bool allInvocationsEqual(bool);
1216GROUP END ShaderInvocationGroup
1217
1218// MSL fragment functions
1219GROUP BEGIN MetalFragmentSample {"shader_type": "FRAGMENT"}
1220  DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"}
1221    uint numSamples();
1222    vec2 samplePosition(uint);
1223    genType interpolateAtCenter(genType);
1224GROUP END MetalFragmentSample
1225
1226// MSL common functions
1227GROUP BEGIN MetalCommon
1228  DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"}
1229    genType saturate(genType);
1230GROUP END MetalCommon
1231