// okay | |
#version 100 | |
int a[3] = { 2, 3, 4, }; // ERROR (lots) | |
#version 100 | |
int uint; | |
attribute vec4 v[3]; // ERROR | |
float f = 2; // ERROR | |
uniform block { // ERROR | |
int x; | |
}; | |
void foo(float); | |
void main() | |
{ | |
foo(3); // ERROR | |
int s = 1 << 4; // ERROR | |
s = 16 >> 2; // ERROR | |
if (a == a); // ERROR | |
int b, c; | |
b = c & 4; // ERROR | |
b = c % 4; // ERROR | |
b = c | 4; // ERROR | |
b >>= 2; // ERROR | |
b <<= 2; // ERROR | |
b %= 3; // ERROR | |
struct S { | |
float f; | |
float a[10]; | |
} s1, s2; | |
s1 = s2; // ERROR | |
if (s1 == s2); // ERROR | |
if (s1 != s2); // ERROR | |
switch(b) { // ERROR | |
} | |
} | |
invariant gl_FragColor; | |
float fa[]; // ERROR | |
float f13; | |
invariant f13; // ERROR | |
struct S { int a; }; | |
invariant S; // ERROR, not an input or output | |
invariant float fi; // ERROR | |
varying vec4 av; | |
invariant av; // okay in v100 | |
void foo10() | |
{ | |
invariant f; // ERROR | |
invariant float f2; // ERROR | |
float f3; | |
invariant f3; // ERROR | |
} | |
uniform vec2 uv2; | |
invariant uv2; // ERROR | |
invariant uniform vec3 uv3; // ERROR | |
sampler2D glob2D; // ERROR | |
void f11(sampler2D p2d) | |
{ | |
sampler2D v2D; // ERROR | |
} | |
varying sampler2D vary2D; // ERROR | |
struct sp { | |
highp float f; | |
in float g; // ERROR | |
uniform float h; // ERROR | |
invariant float i; // ERROR | |
}; | |
uniform sampler3D s3D; // ERROR | |
#extension GL_OES_texture_3D : enable | |
precision highp sampler3D; | |
uniform sampler3D s3D2; | |
void foo234() | |
{ | |
texture3D(s3D2, vec3(0.2), 0.2); | |
texture3DProj(s3D2, v[1], 0.4); | |
dFdx(v[0]); // ERROR | |
dFdy(3.2); // ERROR | |
fwidth(f13); // ERROR | |
} | |
#extension GL_OES_standard_derivatives : enable | |
void foo236() | |
{ | |
dFdx(v[0]); | |
dFdy(3.2); | |
fwidth(f13); | |
gl_FragDepth = f13; // ERROR | |
gl_FragDepthEXT = f13; // ERROR | |
} | |
#extension GL_EXT_frag_depth : enable | |
void foo239() | |
{ | |
gl_FragDepth = f13; // ERROR | |
gl_FragDepthEXT = f13; | |
} | |
#extension GL_OES_EGL_image_external : enable | |
uniform samplerExternalOES sExt; | |
void foo245() | |
{ | |
texture2D(sExt, vec2(0.2)); | |
texture2DProj(sExt, vec3(f13)); | |
texture2DProj(sExt, v[2]); | |
} | |
precision mediump samplerExternalOES; | |
uniform samplerExternalOES mediumExt; | |
uniform highp samplerExternalOES highExt; | |
void foo246() | |
{ | |
texture2D(mediumExt, vec2(0.2)); | |
texture2DProj(highExt, v[2]); | |
texture3D(sExt, vec3(f13)); // ERROR | |
texture2DProjLod(sExt, vec3(f13), f13); // ERROR | |
int a; | |
~a; // ERROR | |
a | a; // ERROR | |
a & a; // ERROR | |
} | |
#extension GL_OES_EGL_image_external : disable | |
uniform sampler2D s2Dg; | |
int foo203940(int a, float b, float a) // ERROR, a redefined | |
{ | |
texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2); // ERROR, extension not enabled | |
return a; | |
} | |
float f123 = 4.0f; // ERROR | |
float f124 = 5e10F; // ERROR | |
#extension GL_EXT_shader_texture_lod : enable | |
uniform samplerCube sCube; | |
void foo323433() | |
{ | |
texture2DLodEXT(s2Dg, uv2, f13); | |
texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2); | |
texture2DGradEXT(s2Dg, uv2, uv2, uv2); | |
textureCubeGradEXT(sCube, vec3(f13), vec3(f13), vec3(f13)); | |
} | |
int fgfg(float f, mediump int i); | |
int fgfg(float f, highp int i) { return 2; } // ERROR, precision qualifier difference | |
int fffg(float f); | |
int fffg(float f); // ERROR, can't have multiple prototypes | |
int gggf(float f); | |
int gggf(float f) { return 2; } | |
int agggf(float f) { return 2; } | |
int agggf(float f); | |
int agggf(float f); // ERROR, second prototype | |
varying struct SSS { float f; } s; // ERROR | |
int vf(void); | |
int vf2(); | |
int vf3(void v); // ERROR | |
int vf4(int, void); // ERROR | |
int vf5(int, void v); // ERROR | |
void badswizzle() | |
{ | |
vec3 a[5]; | |
a.y; // ERROR, no array swizzle | |
a.zy; // ERROR, no array swizzle | |
a.nothing; // ERROR | |
a.length(); // ERROR, not this version | |
a.method(); // ERROR | |
} | |
float fooinit(); | |
float fooinittest() | |
{ | |
return fooinit(); | |
} | |
// Test extension GL_EXT_blend_func_extended | |
void blendFuncFail() // Error since extension GL_EXT_blend_func_extended is disabled | |
{ | |
gl_SecondaryFragColorEXT = vec4(1.0); | |
gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1); | |
} | |
#extension GL_EXT_blend_func_extended : enable | |
void blendFunc() | |
{ | |
gl_SecondaryFragColorEXT = vec4(1.0); | |
gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1); | |
} | |
// Test extra-function initializers | |
const float fi1 = 3.0; | |
const float fi2 = 4.0; | |
const float fi3 = 5.0; | |
float fooinit() | |
{ | |
return fi1 + fi2 + fi3; // should make a constant of 12.0 | |
} | |
int init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer | |
#ifdef GL_EXT_shader_non_constant_global_initializers | |
#extension GL_EXT_shader_non_constant_global_initializers : enable | |
#endif | |
int init2 = gl_FrontFacing ? 1 : 2; | |
#define A__B // error | |
int a__b; // error | |
#pragma STDGL invariant(all) | |
#line 3000 | |
#error line of this error should be 3000 | |
uniform samplerExternalOES badExt; // syntax ERROR |