# Tokens for WebGL 2.0 Shader Language.

# Preprocessor tokens
"#"
"#define"
"#undef"
"#if"
"#ifdef"
"#ifndef"
"#else"
"#elif"
"#endif"
"#error"
"#pragma"
"#extension"
"#version"
"#line"
"defined"
"#macros"
"__LINE__"
"__FILE__"
"__VERSION__"
"GL_ES"

 # Fragment shaders only
"GL_FRAGMENT_PRECISION_HIGH"

# Language tokens
"("
")"
"+"
"-"
"~"
"!"
"*"
"/"
"%"
"+"
"-"
"<<"
">>"
"<"
">"
"<="
">="
"=="
"!="
"+="
"-="
"*="
"/="
"%="
"<<="
">>="
";"
","
"."
"["
"]"
"++"
"--"
"&"
"^"
"|"
"&&"
"||"

# Keywords
" attribute "
" const "
" uniform "
" varying "
" break "
" continue "
" do "
" for "
" while "
" if "
" else "
" in "
" out "
" inout "
" float "
" int "
" void "
" bool "
" true "
" false "
" lowp "
" mediump "
" highp "
" precision "
" invariant "
" discard "
" return"

# Types, include valid examples and partial ones (that are invalid on their own)
" mat2("
" mat2(1.0)"
" mat2(1.0,2.0,3.0,4.0)"
" mat3(vec2(1.0, 1.0),1.0,vec2(1.0, 1.0),1.0,vec2(1.0, 1.0),1.0)"
" mat3(1.0)"
" mat3("
" mat4("
" mat4(1.0)"
" mat4(vec4(1.0),vec4(1.0,2.0,3.0,4.0),vec4(3.3),vec4(4.4))"
"vec2"
" vec2(1)"
" vec3(1)"
" vec3"
" vec4(1)"
" vec4"
" ivec2(1) "
" ivec2"
" ivec3(1)"
" ivec3"
" ivec4(1)"
" ivec4"
" bvec2(true)"
" bvec2"
" bvec3(true)"
" bvec3"
" bvec4(true)"
" bvec4"
" sampler2D "
" samplerCube "
" struct "
" sampler3D "
" samplerCube "
" sampler2DShadow "
" sampler2DArray "
" sampler2DArrayShadow "
" sampler2DMS "
" samplerCubeShadow "
" isampler2D "
" isampler3D "
" isamplerCube "
" isampler2DArray "
" isampler2DMS "
" usampler2D "
" usampler3D "
" usampler2DArray "
" usampler2DMS "
" usamplerCube "
" image2D "
" image3D "
" imageCube "
" image2DArray "
" iimage2D "
" iimage3D "
" iimageCube "
" iimage2DArray "
" uimage2D "
" uimage3D "
" uimageCube "
" uimage2DArray "
" atomic_uint "

# Builtin Variables
"gl_Position"
"gl_FragColor"
"gl_FragData"
"gl_FrontFacing"
"gl_PointCoord"
"gl_MaxDrawBuffers"
"gl_MaxFragmentUniformVectors"
"gl_MaxTextureImageUnits"
"gl_MaxCombinedTextureImageUnits"
"gl_MaxVertexTextureImageUnits"
"gl_MaxVaryingVectors"
"gl_MaxVertexUniformVectors"
"gl_MaxVertexAttribs"
"gl_FragCoord.x"
"gl_FragCoord.y"
"gl_FragCoord.z"
"gl_FragData"
"gl_FragDepth"
"gl_InstanceID"
"gl_NumWorkGroups"
"gl_PointSize"
"gl_VertexID"

# misc.
"void main(){"

# Generated calls to builtin functions.
" pow(1.0,1.0)"
" fract(1.0)"
" dFdx(1.0)"
" step(1.0,1.0)"
" min(1,1)"
" min(1.0,1.0)"
" dot(1.0,1.0)"
" greaterThanEqual(uvec2(1,2),uvec2(1,2))"
" asin(1.0)"
" lessThanEqual(ivec2(1,-2),ivec2(1,-2))"
" inversesqrt(1.0)"
" length(1.0)"
" acosh(1.0)"
" roundEven(1.0)"
" greaterThanEqual(ivec2(1,-2),ivec2(1,-2))"
" greaterThan(uvec2(1,2),uvec2(1,2))"
" radians(1.0)"
" asinh(1.0)"
" uintBitsToFloat(1)"
" cos(1.0)"
" ceil(1.0)"
" equal(uvec2(1,2),uvec2(1,2))"
" normalize(1.0)"
" distance(1.0,1.0)"
" abs(1)"
" clamp(1.0,1.0,1.0)"
" tan(1.0)"
" smoothstep(1.0,1.0,1.0)"
" isinf(1.0)"
" not(bvec2(true,false))"
" degrees(1.0)"
" mix(1.0,1.0,true)"
" max(1.0,1.0)"
" lessThanEqual(uvec2(1,2),uvec2(1,2))"
" round(1.0)"
" atan(1.0,1.0)"
" floatBitsToInt(1.0)"
" abs(1.0)"
" fwidth(1.0)"
" lessThan(ivec2(1,-2),ivec2(1,-2))"
" intBitsToFloat(1)"
" mix(1.0,1.0,1.0)"
" notEqual(uvec2(1,2),uvec2(1,2))"
" floor(1.0)"
" refract(1.0,1.0,1.0)"
" equal(ivec2(1,-2),ivec2(1,-2))"
" max(1,1)"
" cosh(1.0)"
" isnan(1.0)"
" sign(1)"
" mod(1.0,1.0)"
" acos(1.0)"
" sinh(1.0)"
" greaterThan(ivec2(1,-2),ivec2(1,-2))"
" exp2(1.0)"
" notEqual(bvec2(true,false),bvec2(true,false))"
" reflect(1.0,1.0)"
" lessThan(uvec2(1,2),uvec2(1,2))"
" sqrt(1.0)"
" sign(1.0)"
" clamp(1,1,1)"
" sin(1.0)"
" atan(1.0)"
" tanh(1.0)"
" dFdy(1.0)"
" notEqual(ivec2(1,-2),ivec2(1,-2))"
" trunc(1.0)"
" log2(1.0)"
" equal(bvec2(true,false),bvec2(true,false))"
" atanh(1.0)"
" exp(1.0)"
" faceforward(1.0,1.0,1.0)"
" floatBitsToUint(1.0)"
" log(1.0)"
