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// "opSuffix" 25// (optional) string, suffix to add to EOp code. The op is derived from the function name, 26// and this suffix is applied to disambiguate between functions of the same name but in 27// different groups. 28// "suffix" 29// string, suffix that is used to disambiguate C++ variable names created based on the 30// function name from C++ keywords, or disambiguate two functions with the same name. 31// "essl_extension" 32// string, ESSL extension where the function is defined. 33// "essl_extension_becomes_core_in" 34// string, ESSL level where functions from this extension have become core. 35// "hasSideEffects" 36// boolean, can be used to mark a function as having side effects. Functions with an out or 37// inout parameter are automatically treated as having side effects. 38// 39// Function declarations: 40// Lines that declare functions are in a similar format as in the GLSL spec: 41// <return type> <function name>(<param type>, ...); 42// Parameter types can have "out" or "inout" qualifiers. 43 44GROUP BEGIN Math {"queryFunction": true} 45 GROUP BEGIN Trigonometric 46 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 47 genType radians(genType); 48 genType degrees(genType); 49 genType sin(genType); 50 genType cos(genType); 51 genType tan(genType); 52 genType asin(genType); 53 genType acos(genType); 54 genType atan(genType, genType); 55 genType atan(genType); 56 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 57 genType sinh(genType); 58 genType cosh(genType); 59 genType tanh(genType); 60 genType asinh(genType); 61 genType acosh(genType); 62 genType atanh(genType); 63 GROUP END Trigonometric 64 65 GROUP BEGIN Exponential 66 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 67 genType pow(genType, genType); 68 genType exp(genType); 69 genType log(genType); 70 genType exp2(genType); 71 genType log2(genType); 72 genType sqrt(genType); 73 genType inversesqrt(genType); 74 GROUP END Exponential 75 76 GROUP BEGIN Common 77 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 78 genType abs(genType); 79 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 80 genIType abs(genIType); 81 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 82 genType sign(genType); 83 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 84 genIType sign(genIType); 85 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 86 genType floor(genType); 87 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 88 genType trunc(genType); 89 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 90 genType round(genType); 91 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 92 genType roundEven(genType); 93 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 94 genType ceil(genType); 95 genType fract(genType); 96 genType mod(genType, float); 97 genType mod(genType, genType); 98 genType min(genType, float); 99 genType min(genType, genType); 100 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 101 genIType min(genIType, genIType); 102 genIType min(genIType, int); 103 genUType min(genUType, genUType); 104 genUType min(genUType, uint); 105 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 106 genType max(genType, float); 107 genType max(genType, genType); 108 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 109 genIType max(genIType, genIType); 110 genIType max(genIType, int); 111 genUType max(genUType, genUType); 112 genUType max(genUType, uint); 113 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 114 genType clamp(genType, float, float); 115 genType clamp(genType, genType, genType); 116 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 117 genIType clamp(genIType, int, int); 118 genIType clamp(genIType, genIType, genIType); 119 genUType clamp(genUType, uint, uint); 120 genUType clamp(genUType, genUType, genUType); 121 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 122 genType mix(genType, genType, float); 123 genType mix(genType, genType, genType); 124 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 125 genType mix(genType, genType, genBType); 126 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 127 genIType mix(genIType, genIType, genBType); 128 genUType mix(genUType, genUType, genBType); 129 genBType mix(genBType, genBType, genBType); 130 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 131 genType step(genType, genType); 132 genType step(float, genType); 133 genType smoothstep(genType, genType, genType); 134 genType smoothstep(float, float, genType); 135 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 136 genType modf(genType, out genType); 137 genBType isnan(genType); 138 genBType isinf(genType); 139 genIType floatBitsToInt(genType); 140 genUType floatBitsToUint(genType); 141 genType intBitsToFloat(genIType); 142 genType uintBitsToFloat(genUType); 143 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 144 genType fma(genType, genType, genType); 145 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"} 146 genType fma(genType, genType, genType); 147 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 148 genType frexp(genType, out genIType); 149 genType ldexp(genType, genIType); 150 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 151 uint packSnorm2x16(vec2); 152 uint packHalf2x16(vec2); 153 vec2 unpackSnorm2x16(uint); 154 vec2 unpackHalf2x16(uint); 155 uint packUnorm2x16(vec2); 156 vec2 unpackUnorm2x16(uint); 157 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 158 uint packUnorm4x8(vec4); 159 uint packSnorm4x8(vec4); 160 vec4 unpackUnorm4x8(uint); 161 vec4 unpackSnorm4x8(uint); 162 GROUP END Common 163 164 GROUP BEGIN Geometric 165 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 166 float length(genType); 167 float distance(genType, genType); 168 float dot(genType, genType); 169 vec3 cross(vec3, vec3); 170 genType normalize(genType); 171 genType faceforward(genType, genType, genType); 172 genType reflect(genType, genType); 173 genType refract(genType, genType, float); 174 GROUP END Geometric 175 176 GROUP BEGIN Matrix 177 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 178 mat2 matrixCompMult(mat2, mat2); 179 mat3 matrixCompMult(mat3, mat3); 180 mat4 matrixCompMult(mat4, mat4); 181 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 182 mat2x3 matrixCompMult(mat2x3, mat2x3); 183 mat3x2 matrixCompMult(mat3x2, mat3x2); 184 mat2x4 matrixCompMult(mat2x4, mat2x4); 185 mat4x2 matrixCompMult(mat4x2, mat4x2); 186 mat3x4 matrixCompMult(mat3x4, mat3x4); 187 mat4x3 matrixCompMult(mat4x3, mat4x3); 188 mat2 outerProduct(vec2, vec2); 189 mat3 outerProduct(vec3, vec3); 190 mat4 outerProduct(vec4, vec4); 191 mat2x3 outerProduct(vec3, vec2); 192 mat3x2 outerProduct(vec2, vec3); 193 mat2x4 outerProduct(vec4, vec2); 194 mat4x2 outerProduct(vec2, vec4); 195 mat3x4 outerProduct(vec4, vec3); 196 mat4x3 outerProduct(vec3, vec4); 197 mat2 transpose(mat2); 198 mat3 transpose(mat3); 199 mat4 transpose(mat4); 200 mat2x3 transpose(mat3x2); 201 mat3x2 transpose(mat2x3); 202 mat2x4 transpose(mat4x2); 203 mat4x2 transpose(mat2x4); 204 mat3x4 transpose(mat4x3); 205 mat4x3 transpose(mat3x4); 206 float determinant(mat2); 207 float determinant(mat3); 208 float determinant(mat4); 209 mat2 inverse(mat2); 210 mat3 inverse(mat3); 211 mat4 inverse(mat4); 212 GROUP END Matrix 213 214 GROUP BEGIN Vector 215 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 216 bvec lessThan(vec, vec); 217 bvec lessThan(ivec, ivec); 218 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 219 bvec lessThan(uvec, uvec); 220 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 221 bvec lessThanEqual(vec, vec); 222 bvec lessThanEqual(ivec, ivec); 223 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 224 bvec lessThanEqual(uvec, uvec); 225 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 226 bvec greaterThan(vec, vec); 227 bvec greaterThan(ivec, ivec); 228 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 229 bvec greaterThan(uvec, uvec); 230 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 231 bvec greaterThanEqual(vec, vec); 232 bvec greaterThanEqual(ivec, ivec); 233 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 234 bvec greaterThanEqual(uvec, uvec); 235 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 236 bvec equal(vec, vec); 237 bvec equal(ivec, ivec); 238 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 239 bvec equal(uvec, uvec); 240 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 241 bvec equal(bvec, bvec); 242 bvec notEqual(vec, vec); 243 bvec notEqual(ivec, ivec); 244 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "opSuffix": "ComponentWise"} 245 bvec notEqual(uvec, uvec); 246 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise"} 247 bvec notEqual(bvec, bvec); 248 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS"} 249 bool any(bvec); 250 bool all(bvec); 251 DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "opSuffix": "ComponentWise", "suffix": "Func"} 252 bvec not(bvec); 253 GROUP END Vector 254 255 GROUP BEGIN Integer 256 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 257 genIType bitfieldExtract(genIType, int, int); 258 genUType bitfieldExtract(genUType, int, int); 259 genIType bitfieldInsert(genIType, genIType, int, int); 260 genUType bitfieldInsert(genUType, genUType, int, int); 261 genIType bitfieldReverse(genIType); 262 genUType bitfieldReverse(genUType); 263 genIType bitCount(genIType); 264 genIType bitCount(genUType); 265 genIType findLSB(genIType); 266 genIType findLSB(genUType); 267 genIType findMSB(genIType); 268 genIType findMSB(genUType); 269 genUType uaddCarry(genUType, genUType, out genUType); 270 genUType usubBorrow(genUType, genUType, out genUType); 271 void umulExtended(genUType, genUType, out genUType, out genUType); 272 void imulExtended(genIType, genIType, out genIType, out genIType); 273 GROUP END Integer 274GROUP END Math 275 276GROUP BEGIN Texture {"queryFunction": true} 277 GROUP BEGIN FirstVersions 278 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS"} 279 vec4 texture2D(sampler2D, vec2); 280 vec4 texture2DProj(sampler2D, vec3); 281 vec4 texture2DProj(sampler2D, vec4); 282 vec4 textureCube(samplerCube, vec3); 283 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"} 284 vec4 texture3D(sampler3D, vec3); 285 vec4 texture3DProj(sampler3D, vec4); 286 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shadow_samplers"} 287 float shadow2DEXT(sampler2DShadow, vec3); 288 float shadow2DProjEXT(sampler2DShadow, vec4); 289 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_EGL_image_external, NV_EGL_stream_consumer_external"} 290 vec4 texture2D(samplerExternalOES, vec2); 291 vec4 texture2DProj(samplerExternalOES, vec3); 292 vec4 texture2DProj(samplerExternalOES, vec4); 293 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "ARB_texture_rectangle"} 294 vec4 texture2DRect(sampler2DRect, vec2); 295 vec4 texture2DRectProj(sampler2DRect, vec3); 296 vec4 texture2DRectProj(sampler2DRect, vec4); 297 // The *Grad* variants are new to both vertex and fragment shaders; the fragment 298 // shader specific pieces are added separately below. 299 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shader_texture_lod"} 300 vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2); 301 vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2); 302 vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2); 303 vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3); 304 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "extension": "WEBGL_video_texture"} 305 vec4 textureVideoWEBGL(samplerVideoWEBGL, vec2); 306 307 // Variants with bias are limited to fragment shaders 308 GROUP BEGIN Bias {"shader_type": "FRAGMENT", "opSuffix": "Bias"} 309 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS"} 310 vec4 texture2D(sampler2D, vec2, float); 311 vec4 texture2DProj(sampler2D, vec3, float); 312 vec4 texture2DProj(sampler2D, vec4, float); 313 vec4 textureCube(samplerCube, vec3, float); 314 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"} 315 vec4 texture3D(sampler3D, vec3, float); 316 vec4 texture3DProj(sampler3D, vec4, float); 317 GROUP END Bias 318 319 GROUP BEGIN Lod 320 // The GLES spec mentioning that lod variants are limited to vertex shaders, and the 321 // OES_texture_3D spec doesn't mention otherwise. However, these functions are used in tests 322 // and seem to be expected to be available in fragment shaders too. 323 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_texture_3D"} 324 vec4 texture3DLod(sampler3D, vec3, float); 325 vec4 texture3DProjLod(sampler3D, vec4, float); 326 GROUP END Lod 327 328 // Variants with lod are limited to vertex shaders in GLES 329 GROUP BEGIN LodVS {"shader_type": "VERTEX", "opSuffix": "VS"} 330 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS"} 331 vec4 texture2DLod(sampler2D, vec2, float); 332 vec4 texture2DProjLod(sampler2D, vec3, float); 333 vec4 texture2DProjLod(sampler2D, vec4, float); 334 vec4 textureCubeLod(samplerCube, vec3, float); 335 GROUP END LodVS 336 337 // EXT_shader_texture_lod brings some lod variants to fragment shaders 338 GROUP BEGIN LodFS {"shader_type": "FRAGMENT", "opSuffix": "FS"} 339 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "EXT_shader_texture_lod"} 340 vec4 texture2DLodEXT(sampler2D, vec2, float); 341 vec4 texture2DProjLodEXT(sampler2D, vec3, float); 342 vec4 texture2DProjLodEXT(sampler2D, vec4, float); 343 vec4 textureCubeLodEXT(samplerCube, vec3, float); 344 GROUP END LodFS 345 346 GROUP END FirstVersions 347 348 GROUP BEGIN NoBias 349 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 350 gvec4 texture(gsampler2D, vec2); 351 gvec4 texture(gsampler3D, vec3); 352 gvec4 texture(gsamplerCube, vec3); 353 gvec4 texture(gsampler2DArray, vec3); 354 float texture(sampler2DShadow, vec3); 355 float texture(samplerCubeShadow, vec4); 356 float texture(sampler2DArrayShadow, vec4); 357 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 358 gvec4 texture(gsamplerCubeArray, vec4); 359 float texture(samplerCubeArrayShadow, vec4, float); 360 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 361 gvec4 texture(gsamplerCubeArray, vec4); 362 float texture(samplerCubeArrayShadow, vec4, float); 363 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"} 364 vec4 texture(samplerExternalOES, vec2); 365 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 366 vec4 texture(samplerExternal2DY2YEXT, vec2); 367 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ARB_texture_rectangle"} 368 // We don't have a rectangle texture essl_extension for OpenGL ES however based on the behavior of 369 // rectangle texture in desktop OpenGL, they should be sampled with a "texture" overload in 370 // GLSL version that have such an overload. This is the case for ESSL3 and above. 371 vec4 texture(sampler2DRect, vec2); 372 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "extension": "WEBGL_video_texture"} 373 vec4 texture(samplerVideoWEBGL, vec2); 374 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 375 gvec4 textureProj(gsampler2D, vec3); 376 gvec4 textureProj(gsampler2D, vec4); 377 gvec4 textureProj(gsampler3D, vec4); 378 float textureProj(sampler2DShadow, vec4); 379 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"} 380 vec4 textureProj(samplerExternalOES, vec3); 381 vec4 textureProj(samplerExternalOES, vec4); 382 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 383 vec4 textureProj(samplerExternal2DY2YEXT, vec3); 384 vec4 textureProj(samplerExternal2DY2YEXT, vec4); 385 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ARB_texture_rectangle"} 386 vec4 textureProj(sampler2DRect, vec3); 387 vec4 textureProj(sampler2DRect, vec4); 388 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 389 gvec4 textureLod(gsampler2D, vec2, float); 390 gvec4 textureLod(gsampler3D, vec3, float); 391 gvec4 textureLod(gsamplerCube, vec3, float); 392 gvec4 textureLod(gsampler2DArray, vec3, float); 393 float textureLod(sampler2DShadow, vec3, float); 394 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 395 float textureLod(samplerCubeShadow, vec4, float); 396 float textureLod(sampler2DArrayShadow, vec4, float); 397 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 398 float textureLod(samplerCubeArrayShadow, vec4, float, float); 399 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 400 gvec4 textureLod(gsamplerCubeArray, vec4, float); 401 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 402 gvec4 textureLod(gsamplerCubeArray, vec4, float); 403 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 404 ivec2 textureSize(gsampler2D, int); 405 ivec3 textureSize(gsampler3D, int); 406 ivec2 textureSize(gsamplerCube, int); 407 ivec3 textureSize(gsampler2DArray, int); 408 ivec2 textureSize(sampler2DShadow, int); 409 ivec2 textureSize(samplerCubeShadow, int); 410 ivec3 textureSize(sampler2DArrayShadow, int); 411 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 412 ivec3 textureSize(gsamplerCubeArray, int); 413 ivec3 textureSize(samplerCubeArrayShadow, int); 414 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 415 ivec3 textureSize(gsamplerCubeArray, int); 416 ivec3 textureSize(samplerCubeArrayShadow, int); 417 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 418 int textureSize(gsamplerBuffer); 419 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"} 420 int textureSize(gsamplerBuffer); 421 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 422 ivec2 textureSize(gsampler2DMS); 423 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"} 424 ivec2 textureSize(gsampler2DMS); 425 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 426 ivec3 textureSize(gsampler2DMSArray); 427 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"} 428 ivec3 textureSize(gsampler2DMSArray); 429 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"} 430 ivec2 textureSize(samplerExternalOES, int); 431 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 432 ivec2 textureSize(samplerExternal2DY2YEXT, int); 433 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 434 gvec4 textureProjLod(gsampler2D, vec3, float); 435 gvec4 textureProjLod(gsampler2D, vec4, float); 436 gvec4 textureProjLod(gsampler3D, vec4, float); 437 float textureProjLod(sampler2DShadow, vec4, float); 438 gvec4 texelFetch(gsampler2D, ivec2, int); 439 gvec4 texelFetch(gsampler3D, ivec3, int); 440 gvec4 texelFetch(gsampler2DArray, ivec3, int); 441 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 442 gvec4 texelFetch(gsamplerBuffer, int); 443 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"} 444 gvec4 texelFetch(gsamplerBuffer, int); 445 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 446 gvec4 texelFetch(gsampler2DMS, ivec2, int); 447 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"} 448 gvec4 texelFetch(gsampler2DMS, ivec2, int); 449 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 450 gvec4 texelFetch(gsampler2DMSArray, ivec3, int); 451 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"} 452 gvec4 texelFetch(gsampler2DMSArray, ivec3, int); 453 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"} 454 vec4 texelFetch(samplerExternalOES, ivec2, int); 455 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 456 vec4 texelFetch(samplerExternal2DY2YEXT, ivec2, int); 457 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 458 gvec4 textureGrad(gsampler2D, vec2, vec2, vec2); 459 gvec4 textureGrad(gsampler3D, vec3, vec3, vec3); 460 gvec4 textureGrad(gsamplerCube, vec3, vec3, vec3); 461 float textureGrad(sampler2DShadow, vec3, vec2, vec2); 462 float textureGrad(samplerCubeShadow, vec4, vec3, vec3); 463 gvec4 textureGrad(gsampler2DArray, vec3, vec2, vec2); 464 float textureGrad(sampler2DArrayShadow, vec4, vec2, vec2); 465 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 466 gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3); 467 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 468 gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3); 469 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 470 gvec4 textureProjGrad(gsampler2D, vec3, vec2, vec2); 471 gvec4 textureProjGrad(gsampler2D, vec4, vec2, vec2); 472 gvec4 textureProjGrad(gsampler3D, vec4, vec3, vec3); 473 float textureProjGrad(sampler2DShadow, vec4, vec2, vec2); 474 GROUP END NoBias 475 476 GROUP BEGIN Bias {"shader_type": "FRAGMENT", "opSuffix": "Bias"} 477 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 478 gvec4 texture(gsampler2D, vec2, float); 479 gvec4 texture(gsampler3D, vec3, float); 480 gvec4 texture(gsamplerCube, vec3, float); 481 gvec4 texture(gsampler2DArray, vec3, float); 482 gvec4 textureProj(gsampler2D, vec3, float); 483 gvec4 textureProj(gsampler2D, vec4, float); 484 gvec4 textureProj(gsampler3D, vec4, float); 485 float texture(sampler2DShadow, vec3, float); 486 float texture(samplerCubeShadow, vec4, float); 487 float textureProj(sampler2DShadow, vec4, float); 488 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 489 float texture(sampler2DArrayShadow, vec4, float); 490 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 491 gvec4 texture(gsamplerCubeArray, vec4, float); 492 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 493 gvec4 texture(gsamplerCubeArray, vec4, float); 494 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 495 float texture(samplerCubeArrayShadow, vec4, float, float); 496 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_EGL_image_external_essl3"} 497 vec4 texture(samplerExternalOES, vec2, float); 498 vec4 textureProj(samplerExternalOES, vec3, float); 499 vec4 textureProj(samplerExternalOES, vec4, float); 500 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 501 vec4 texture(samplerExternal2DY2YEXT, vec2, float); 502 vec4 textureProj(samplerExternal2DY2YEXT, vec3, float); 503 vec4 textureProj(samplerExternal2DY2YEXT, vec4, float); 504 GROUP END Bias 505 506 GROUP BEGIN OffsetNoBias {"queryFunction": true} 507 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 508 gvec4 textureOffset(gsampler2D, vec2, ivec2); 509 gvec4 textureOffset(gsampler3D, vec3, ivec3); 510 float textureOffset(sampler2DShadow, vec3, ivec2); 511 gvec4 textureOffset(gsampler2DArray, vec3, ivec2); 512 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 513 float textureOffset(sampler2DArrayShadow, vec4, ivec2); 514 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 515 gvec4 textureProjOffset(gsampler2D, vec3, ivec2); 516 gvec4 textureProjOffset(gsampler2D, vec4, ivec2); 517 gvec4 textureProjOffset(gsampler3D, vec4, ivec3); 518 float textureProjOffset(sampler2DShadow, vec4, ivec2); 519 gvec4 textureLodOffset(gsampler2D, vec2, float, ivec2); 520 gvec4 textureLodOffset(gsampler3D, vec3, float, ivec3); 521 float textureLodOffset(sampler2DShadow, vec3, float, ivec2); 522 gvec4 textureLodOffset(gsampler2DArray, vec3, float, ivec2); 523 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 524 float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2); 525 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 526 gvec4 textureProjLodOffset(gsampler2D, vec3, float, ivec2); 527 gvec4 textureProjLodOffset(gsampler2D, vec4, float, ivec2); 528 gvec4 textureProjLodOffset(gsampler3D, vec4, float, ivec3); 529 float textureProjLodOffset(sampler2DShadow, vec4, float, ivec2); 530 gvec4 texelFetchOffset(gsampler2D, ivec2, int, ivec2); 531 gvec4 texelFetchOffset(gsampler3D, ivec3, int, ivec3); 532 gvec4 texelFetchOffset(gsampler2DArray, ivec3, int, ivec2); 533 gvec4 textureGradOffset(gsampler2D, vec2, vec2, vec2, ivec2); 534 gvec4 textureGradOffset(gsampler3D, vec3, vec3, vec3, ivec3); 535 float textureGradOffset(sampler2DShadow, vec3, vec2, vec2, ivec2); 536 gvec4 textureGradOffset(gsampler2DArray, vec3, vec2, vec2, ivec2); 537 float textureGradOffset(sampler2DArrayShadow, vec4, vec2, vec2, ivec2); 538 gvec4 textureProjGradOffset(gsampler2D, vec3, vec2, vec2, ivec2); 539 gvec4 textureProjGradOffset(gsampler2D, vec4, vec2, vec2, ivec2); 540 gvec4 textureProjGradOffset(gsampler3D, vec4, vec3, vec3, ivec3); 541 float textureProjGradOffset(sampler2DShadow, vec4, vec2, vec2, ivec2); 542 GROUP END OffsetNoBias 543 544 GROUP BEGIN OffsetBias {"queryFunction": true, "shader_type": "FRAGMENT", "opSuffix": "Bias"} 545 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 546 gvec4 textureOffset(gsampler2D, vec2, ivec2, float); 547 gvec4 textureOffset(gsampler3D, vec3, ivec3, float); 548 float textureOffset(sampler2DShadow, vec3, ivec2, float); 549 gvec4 textureOffset(gsampler2DArray, vec3, ivec2, float); 550 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_shadow_lod"} 551 float textureOffset(sampler2DArrayShadow, vec4, ivec2, float); 552 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 553 gvec4 textureProjOffset(gsampler2D, vec3, ivec2, float); 554 gvec4 textureProjOffset(gsampler2D, vec4, ivec2, float); 555 gvec4 textureProjOffset(gsampler3D, vec4, ivec3, float); 556 float textureProjOffset(sampler2DShadow, vec4, ivec2, float); 557 GROUP END OffsetBias 558 559 GROUP BEGIN Gather {"queryFunction": true} 560 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 561 gvec4 textureGather(gsampler2D, vec2); 562 gvec4 textureGather(gsampler2D, vec2, int); 563 gvec4 textureGather(gsampler2DArray, vec3); 564 gvec4 textureGather(gsampler2DArray, vec3, int); 565 gvec4 textureGather(gsamplerCube, vec3); 566 gvec4 textureGather(gsamplerCube, vec3, int); 567 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 568 gvec4 textureGather(gsamplerCubeArray, vec4); 569 gvec4 textureGather(gsamplerCubeArray, vec4, int); 570 vec4 textureGather(samplerCubeArrayShadow, vec4, float); 571 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 572 gvec4 textureGather(gsamplerCubeArray, vec4); 573 gvec4 textureGather(gsamplerCubeArray, vec4, int); 574 vec4 textureGather(samplerCubeArrayShadow, vec4, float); 575 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 576 vec4 textureGather(sampler2DShadow, vec2); 577 vec4 textureGather(sampler2DShadow, vec2, float); 578 vec4 textureGather(sampler2DArrayShadow, vec3); 579 vec4 textureGather(sampler2DArrayShadow, vec3, float); 580 vec4 textureGather(samplerCubeShadow, vec3); 581 vec4 textureGather(samplerCubeShadow, vec3, float); 582 583 GROUP BEGIN Offset {"queryFunction": true} 584 GROUP BEGIN NoComp {"queryFunction": true} 585 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 586 gvec4 textureGatherOffset(gsampler2D, vec2, ivec2); 587 gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2); 588 vec4 textureGatherOffset(sampler2DShadow, vec2, float, ivec2); 589 vec4 textureGatherOffset(sampler2DArrayShadow, vec3, float, ivec2); 590 GROUP END NoComp 591 GROUP BEGIN Comp {"queryFunction": true, "opSuffix": "Comp"} 592 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 593 gvec4 textureGatherOffset(gsampler2D, vec2, ivec2, int); 594 gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2, int); 595 GROUP END Comp 596 GROUP END Offset 597 GROUP BEGIN Offsets {"queryFunction": true} 598 GROUP BEGIN NoComp {"queryFunction": true} 599 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 600 gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]); 601 gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4]); 602 vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]); 603 vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]); 604 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"} 605 gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]); 606 gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4]); 607 vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]); 608 vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]); 609 GROUP END NoComp 610 GROUP BEGIN Comp {"queryFunction": true, "opSuffix": "Comp"} 611 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 612 gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4], int); 613 gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4], int); 614 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_gpu_shader5, OES_gpu_shader5", "suffix": "Ext"} 615 gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4], int); 616 gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4], int); 617 GROUP END Comp 618 GROUP END Offsets 619 GROUP END Gather 620 621 GROUP BEGIN QueryLod {"shader_type": "FRAGMENT"} 622 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_texture_query_lod"} 623 vec2 textureQueryLOD(gsampler2D, vec2); 624 vec2 textureQueryLOD(gsampler3D, vec3); 625 vec2 textureQueryLOD(gsamplerCube, vec3); 626 vec2 textureQueryLOD(gsampler2DArray, vec2); 627 vec2 textureQueryLOD(sampler2DShadow, vec2); 628 vec2 textureQueryLOD(samplerCubeShadow, vec3); 629 vec2 textureQueryLOD(sampler2DArrayShadow, vec2); 630 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "EXT_texture_query_lod"} 631 vec2 textureQueryLOD(gsamplerCubeArray, vec3); 632 vec2 textureQueryLOD(samplerCubeArrayShadow, vec3); 633 GROUP END QueryLod 634GROUP END Texture 635 636GROUP BEGIN EXT_YUV_target 637 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "EXT_YUV_target"} 638 vec3 rgb_2_yuv(vec3, yuvCscStandardEXT); 639 vec3 yuv_2_rgb(vec3, yuvCscStandardEXT); 640GROUP END EXT_YUV_target 641 642GROUP BEGIN DerivativesFS {"queryFunction": true, "shader_type": "FRAGMENT"} 643 DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "essl_extension": "OES_standard_derivatives", "suffix": "Ext"} 644 genType dFdx(genType); 645 genType dFdy(genType); 646 genType fwidth(genType); 647 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS"} 648 genType dFdx(genType); 649 genType dFdy(genType); 650 genType fwidth(genType); 651GROUP END DerivativesFS 652 653GROUP BEGIN InterpolationFS {"queryFunction": true, "shader_type": "FRAGMENT"} 654 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 655 float interpolateAtCentroid(float); 656 vec2 interpolateAtCentroid(vec2); 657 vec3 interpolateAtCentroid(vec3); 658 vec4 interpolateAtCentroid(vec4); 659 float interpolateAtSample(float, int); 660 vec2 interpolateAtSample(vec2, int); 661 vec3 interpolateAtSample(vec3, int); 662 vec4 interpolateAtSample(vec4, int); 663 float interpolateAtOffset(float, vec2); 664 vec2 interpolateAtOffset(vec2, vec2); 665 vec3 interpolateAtOffset(vec3, vec2); 666 vec4 interpolateAtOffset(vec4, vec2); 667 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "OES_shader_multisample_interpolation", "suffix": "Ext"} 668 float interpolateAtCentroid(float); 669 vec2 interpolateAtCentroid(vec2); 670 vec3 interpolateAtCentroid(vec3); 671 vec4 interpolateAtCentroid(vec4); 672 float interpolateAtSample(float, int); 673 vec2 interpolateAtSample(vec2, int); 674 vec3 interpolateAtSample(vec3, int); 675 vec4 interpolateAtSample(vec4, int); 676 float interpolateAtOffset(float, vec2); 677 vec2 interpolateAtOffset(vec2, vec2); 678 vec3 interpolateAtOffset(vec3, vec2); 679 vec4 interpolateAtOffset(vec4, vec2); 680GROUP END InterpolationFS 681 682GROUP BEGIN AtomicCounter {"queryFunction": true} 683 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true} 684 uint atomicCounter(atomic_uint); 685 uint atomicCounterIncrement(atomic_uint); 686 uint atomicCounterDecrement(atomic_uint); 687GROUP END AtomicCounter 688 689GROUP BEGIN AtomicMemory {"queryFunction": true} 690 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 691 uint atomicAdd(inout uint, uint); 692 int atomicAdd(inout int, int); 693 uint atomicMin(inout uint, uint); 694 int atomicMin(inout int, int); 695 uint atomicMax(inout uint, uint); 696 int atomicMax(inout int, int); 697 uint atomicAnd(inout uint, uint); 698 int atomicAnd(inout int, int); 699 uint atomicOr(inout uint, uint); 700 int atomicOr(inout int, int); 701 uint atomicXor(inout uint, uint); 702 int atomicXor(inout int, int); 703 uint atomicExchange(inout uint, uint); 704 int atomicExchange(inout int, int); 705 uint atomicCompSwap(inout uint, uint, uint); 706 int atomicCompSwap(inout int, int, int); 707GROUP END AtomicMemory 708 709GROUP BEGIN Image {"queryFunction": true} 710 GROUP BEGIN Store {"queryFunction": true} 711 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true} 712 void imageStore(gimage2D, ivec2, gvec4); 713 void imageStore(gimage3D, ivec3, gvec4); 714 void imageStore(gimage2DArray, ivec3, gvec4); 715 void imageStore(gimageCube, ivec3, gvec4); 716 717 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "hasSideEffects": true} 718 void imageStore(gimageCubeArray, ivec3, gvec4); 719 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 720 void imageStore(gimageCubeArray, ivec3, gvec4); 721 722 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "hasSideEffects": true} 723 void imageStore(gimageBuffer, int, gvec4); 724 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"} 725 void imageStore(gimageBuffer, int, gvec4); 726 GROUP END Store 727 GROUP BEGIN Load {"queryFunction": true} 728 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 729 gvec4 imageLoad(gimage2D, ivec2); 730 gvec4 imageLoad(gimage3D, ivec3); 731 gvec4 imageLoad(gimage2DArray, ivec3); 732 gvec4 imageLoad(gimageCube, ivec3); 733 734 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 735 gvec4 imageLoad(gimageCubeArray, ivec3); 736 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 737 gvec4 imageLoad(gimageCubeArray, ivec3); 738 739 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 740 gvec4 imageLoad(gimageBuffer, int); 741 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"} 742 gvec4 imageLoad(gimageBuffer, int); 743 GROUP END Load 744 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS"} 745 ivec2 imageSize(gimage2D); 746 ivec3 imageSize(gimage3D); 747 ivec3 imageSize(gimage2DArray); 748 ivec2 imageSize(gimageCube); 749 750 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 751 ivec3 imageSize(gimageCubeArray); 752 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_cube_map_array, EXT_texture_cube_map_array", "suffix": "Ext"} 753 ivec3 imageSize(gimageCubeArray); 754 755 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS"} 756 int imageSize(gimageBuffer); 757 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "essl_extension": "OES_texture_buffer, EXT_texture_buffer", "suffix": "Ext"} 758 int imageSize(gimageBuffer); 759 760 GROUP BEGIN Atomic {"queryFunction": true} 761 DEFAULT METADATA {"essl_level": "ESSL3_2_BUILTINS", "hasSideEffects": true} 762 uint imageAtomicAdd(IMAGE_PARAMS, uint); 763 int imageAtomicAdd(IMAGE_PARAMS, int); 764 uint imageAtomicMin(IMAGE_PARAMS, uint); 765 int imageAtomicMin(IMAGE_PARAMS, int); 766 uint imageAtomicMax(IMAGE_PARAMS, uint); 767 int imageAtomicMax(IMAGE_PARAMS, int); 768 uint imageAtomicAnd(IMAGE_PARAMS, uint); 769 int imageAtomicAnd(IMAGE_PARAMS, int); 770 uint imageAtomicOr(IMAGE_PARAMS, uint); 771 int imageAtomicOr(IMAGE_PARAMS, int); 772 uint imageAtomicXor(IMAGE_PARAMS, uint); 773 int imageAtomicXor(IMAGE_PARAMS, int); 774 uint imageAtomicExchange(IMAGE_PARAMS, uint); 775 int imageAtomicExchange(IMAGE_PARAMS, int); 776 float imageAtomicExchange(IMAGE_PARAMS, float); 777 uint imageAtomicCompSwap(IMAGE_PARAMS, uint, uint); 778 int imageAtomicCompSwap(IMAGE_PARAMS, int, int); 779 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true, "essl_extension": "OES_shader_image_atomic", "suffix": "Ext"} 780 uint imageAtomicAdd(readonly writeonly IMAGE_PARAMS, uint); 781 int imageAtomicAdd(readonly writeonly IMAGE_PARAMS, int); 782 uint imageAtomicMin(readonly writeonly IMAGE_PARAMS, uint); 783 int imageAtomicMin(readonly writeonly IMAGE_PARAMS, int); 784 uint imageAtomicMax(readonly writeonly IMAGE_PARAMS, uint); 785 int imageAtomicMax(readonly writeonly IMAGE_PARAMS, int); 786 uint imageAtomicAnd(readonly writeonly IMAGE_PARAMS, uint); 787 int imageAtomicAnd(readonly writeonly IMAGE_PARAMS, int); 788 uint imageAtomicOr(readonly writeonly IMAGE_PARAMS, uint); 789 int imageAtomicOr(readonly writeonly IMAGE_PARAMS, int); 790 uint imageAtomicXor(readonly writeonly IMAGE_PARAMS, uint); 791 int imageAtomicXor(readonly writeonly IMAGE_PARAMS, int); 792 uint imageAtomicExchange(readonly writeonly IMAGE_PARAMS, uint); 793 int imageAtomicExchange(readonly writeonly IMAGE_PARAMS, int); 794 float imageAtomicExchange(readonly writeonly IMAGE_PARAMS, float); 795 uint imageAtomicCompSwap(readonly writeonly IMAGE_PARAMS, uint, uint); 796 int imageAtomicCompSwap(readonly writeonly IMAGE_PARAMS, int, int); 797 GROUP END Atomic 798GROUP END Image 799 800GROUP BEGIN PixelLocal {"queryFunction": true} 801 GROUP BEGIN Load {"queryFunction": true} 802 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_shader_pixel_local_storage", "hasSideEffects": false} 803 gvec4 pixelLocalLoadANGLE(gpixelLocalANGLE); 804 GROUP END Load 805 GROUP BEGIN Store {"queryFunction": true} 806 DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "essl_extension": "ANGLE_shader_pixel_local_storage", "hasSideEffects": true} 807 void pixelLocalStoreANGLE(gpixelLocalANGLE, gvec4); 808 GROUP END Store 809GROUP END PixelLocal 810 811// Desktop GLSL-only fragment synchronization functions. These are injected internally by the 812// compiler to make pixel local storage coherent. 813GROUP BEGIN FragmentSynchronization 814 DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS", "hasSideEffects": true} 815 void beginInvocationInterlockNV(); 816 void endInvocationInterlockNV(); 817 void beginFragmentShaderOrderingINTEL(); 818 void beginInvocationInterlockARB(); 819 void endInvocationInterlockARB(); 820GROUP END FragmentSynchronization 821 822GROUP BEGIN Barrier 823 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true} 824 void memoryBarrier(); 825 void memoryBarrierAtomicCounter(); 826 void memoryBarrierBuffer(); 827 void memoryBarrierImage(); 828GROUP END Barrier 829 830GROUP BEGIN ESSL310CS {"shader_type": "COMPUTE"} 831 DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "hasSideEffects": true} 832 void barrier(); 833 void memoryBarrierShared(); 834 void groupMemoryBarrier(); 835GROUP END ESSL310CS 836 837GROUP BEGIN ESSL310TCS {"shader_type": "TESS_CONTROL_EXT"} 838 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"} 839 void barrier(); 840GROUP END ESSL310TCS 841 842GROUP BEGIN GS {"shader_type": "GEOMETRY"} 843 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} 844 void EmitVertex(); 845 void EndPrimitive(); 846GROUP END GS 847 848GROUP BEGIN SubpassInput 849 DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"} 850 gvec4 subpassLoad(gsubpassInput); 851GROUP END SubpassInput 852 853// MSL fragment functions 854GROUP BEGIN MetalFragmentSample {"shader_type": "FRAGMENT"} 855 DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"} 856 uint numSamples(); 857 vec2 samplePosition(uint); 858 genType interpolateAtCenter(genType); 859GROUP END MetalFragmentSample 860 861// MSL common functions 862GROUP BEGIN MetalCommon 863 DEFAULT METADATA {"essl_level": "ESSL_INTERNAL_BACKEND_BUILTINS"} 864 genType saturate(genType); 865GROUP END MetalCommon 866