#version 120 float lowp; float mediump; float highp; float precision; in vec4 i; out vec4 o; uniform sampler2D s2D; centroid varying vec2 centTexCoord; uniform mat4x2 m; struct s { float f; }; void main() { mat2x3 m23 = mat2x3(m); int a; bool b; s sv = s(a); float[2] ia = float[2](3, i.y); float f1 = 1; float f = a; f = a; ivec3 iv3; vec3 v3 = iv3; f = f + a; f = a - f; f += a; f = a - f; v3 *= iv3; v3 = iv3 / 2.0f; v3 = 3.0 * iv3; v3 = 2 * v3; v3 = v3 - 2; if (f < a || a <= f || f > a || f >= a || a == f || f != a); f = b ? a : f; f = b ? f : a; f = b ? a : a; s news = sv; i.xy + i.xyz; // ERROR m * i.xyz; // ERROR m + i; // ERROR int aoeu = 1.0; // ERROR f = b; // ERROR f = a + b; // ERROR f = b * a; // ERROR b = a; // ERROR b = b + f; // ERROR f |= b; // ERROR gl_FragColor = texture2D(s2D, centTexCoord); float flat; float smooth; float noperspective; float uvec2; float uvec3; float uvec4; //packed; // ERROR, reserved word { mat4 m; vec4 v; bool b; gl_FragColor += b ? v : m; // ERROR, types don't match around ":" } gl_FragColor.xr; // ERROR, swizzlers not from same field space gl_FragColor.xyxyx.xy; // ERROR, cannot make a vec5, even temporarily centTexCoord.z; // ERROR, swizzler out of range (a,b) = true; // ERROR, not an l-value } float imageBuffer; float uimage2DRect; int main() {} // ERROR void main(int a) {} // ERROR const int a; // ERROR int foo(in float a); int foo(out float a) // ERROR { return 3.2; // ERROR foo(a); // ERROR } bool gen(vec3 v) { if (abs(v[0]) < 1e-4F && abs(v[1]) < 1e-4) return true; } void v1() { } void v2() { return v1(); // ERROR, no expression allowed, even though void } void atest() { vec4 v = gl_TexCoord[1]; v += gl_TexCoord[3]; } varying vec4 gl_TexCoord[6]; // okay, assigning a size varying vec4 gl_TexCoord[5]; // ERROR, changing size mat2x2 m22; mat2x3 m23; mat2x4 m24; mat3x2 m32; mat3x3 m33; mat3x4 m34; mat4x2 m42; mat4x3 m43; mat4x4 m44; void foo123() { mat2 r2 = matrixCompMult(m22, m22); mat3 r3 = matrixCompMult(m33, m33); mat4 r4 = matrixCompMult(m44, m44); mat2x3 r23 = matrixCompMult(m23, m23); mat2x4 r24 = matrixCompMult(m24, m24); mat3x2 r32 = matrixCompMult(m32, m32); mat3x4 r34 = matrixCompMult(m34, m34); mat4x2 r42 = matrixCompMult(m42, m42); mat4x3 r43 = matrixCompMult(m43, m43); mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR } void matConst() { vec2 v2; vec3 v3; mat4 m4b1 = mat4(v2, v3); // ERROR, not enough mat4 m4b2 = mat4(v2, v3, v3, v3, v3, v2, v2); // ERROR, too much mat4 m4g = mat4(v2, v3, v3, v3, v3, v3); mat4 m4 = mat4(v2, v3, v3, v3, v3, v2); mat3 m3 = mat3(m4); mat3 m3b1 = mat3(m4, v2); // ERROR, extra arg mat3 m3b2 = mat3(m4, m4); // ERROR, extra arg mat3x2 m32 = mat3x2(m4); mat4 m4c = mat4(m32); mat3 m3s = mat3(v2.x); mat3 m3a1[2] = mat3[2](m3s, m3s); mat3 m3a2[2] = mat3[2](m3s, m3s, m3s); // ERROR, too many args } uniform sampler3D s3D; uniform sampler1D s1D; uniform sampler2DShadow s2DS; void foo2323() { vec4 v; vec2 v2; float f; v = texture2DLod(s2D, v2, f); // ERROR v = texture3DProjLod(s3D, v, f); // ERROR v = texture1DProjLod(s1D, v, f); // ERROR v = shadow2DProjLod(s2DS, v, f); // ERROR v = texture1DGradARB(s1D, f, f, f); // ERROR v = texture2DProjGradARB(s2D, v, v2, v2); // ERROR v = shadow2DProjGradARB(s2DS, v, v2, v2); // ERROR } #extension GL_ARB_shader_texture_lod : require void foo2324() { vec4 v; vec2 v2; float f; v = texture2DLod(s2D, v2, f); v = texture3DProjLod(s3D, v, f); v = texture1DProjLod(s1D, v, f); v = shadow2DProjLod(s2DS, v, f); v = texture1DGradARB(s1D, f, f, f); v = texture2DProjGradARB(s2D, v, v2, v2); v = shadow2DProjGradARB(s2DS, v, v2, v2); v = shadow2DRectProjGradARB(s2DS, v, v2, v2); // ERROR } uniform sampler2DRect s2DRbad; // ERROR void foo121111() { vec2 v2; vec4 v = texture2DRect(s2DRbad, v2); } #extension GL_ARB_texture_rectangle : enable uniform sampler2DRect s2DR; uniform sampler2DRectShadow s2DRS; void foo12111() { vec2 v2; vec3 v3; vec4 v4; vec4 v; v = texture2DRect(s2DR, v2); v = texture2DRectProj(s2DR, v3); v = texture2DRectProj(s2DR, v4); v = shadow2DRect(s2DRS, v3); v = shadow2DRectProj(s2DRS, v4); v = shadow2DRectProjGradARB(s2DRS, v, v2, v2); }