1#version 430 2 3#extension GL_3DL_array_objects : enable 4 5int a = 0xffffffff; // 32 bits, a gets the value -1 6int b = 0xffffffffU; // ERROR: can't convert uint to int 7uint c = 0xffffffff; // 32 bits, c gets the value 0xFFFFFFFF 8uint d = 0xffffffffU; // 32 bits, d gets the value 0xFFFFFFFF 9int e = -1; // the literal is "1", then negation is performed, 10 // and the resulting non-literal 32-bit signed 11 // bit pattern of 0xFFFFFFFF is assigned, giving e 12 // the value of -1. 13uint f = -1u; // the literal is "1u", then negation is performed, 14 // and the resulting non-literal 32-bit unsigned 15 // bit pattern of 0xFFFFFFFF is assigned, giving f 16 // the value of 0xFFFFFFFF. 17int g = 3000000000; // a signed decimal literal taking 32 bits, 18 // setting the sign bit, g gets -1294967296 19int h = 0xA0000000; // okay, 32-bit signed hexadecimal 20int i = 5000000000; // ERROR: needs more than 32 bits 21int j = 0xFFFFFFFFF; // ERROR: needs more that 32 bits 22int k = 0x80000000; // k gets -2147483648 == 0x80000000 23int l = 2147483648; // l gets -2147483648 (the literal set the sign bit) 24 25float fa, fb = 1.5; // single-precision floating-point 26double fc, fd = 2.0LF; // double-precision floating-point 27 28vec2 texcoord1, texcoord2; 29vec3 position; 30vec4 myRGBA; 31ivec2 textureLookup; 32bvec3 less; 33 34mat2 mat2D; 35mat3 optMatrix; 36mat4 view, projection; 37mat4x4 view; // an alternate way of declaring a mat4 38mat3x2 m; // a matrix with 3 columns and 2 rows 39dmat4 highPrecisionMVP; 40dmat2x4 dm; 41 42struct light { 43 float intensity; 44 vec3 position; 45} lightVar; 46 47struct S { float f; }; 48 49struct T { 50 //S; // Error: anonymous structures disallowed 51 //struct { ... }; // Error: embedded structures disallowed 52 S s; // Okay: nested structures with name are allowed 53}; 54 55float frequencies[3]; 56uniform vec4 lightPosition[4]; 57light lights[]; 58const int numLights = 2; 59light lights[numLights]; 60 61in vec3 normal; 62centroid in vec2 TexCoord; 63invariant centroid in vec4 Color; 64noperspective in float temperature; 65flat in vec3 myColor; 66noperspective centroid in vec2 myTexCoord; 67 68uniform vec4 lightPosition; 69uniform vec3 color = vec3(0.7, 0.7, 0.2); // value assigned at link time 70 71in Material { 72 smooth in vec4 Color1; // legal, input inside in block 73 smooth vec4 Color2; // legal, 'in' inherited from 'in Material' 74 vec2 TexCoordA; // legal, TexCoord is an input 75 uniform float Atten; // illegal, mismatched storage qualifier 76 77}; 78 79in Light { 80 vec4 LightPos; 81 vec3 LightColor; 82}; 83in ColoredTexture { 84 vec4 Color; 85 vec2 TexCoord; 86} Materiala; // instance name 87vec3 Color; // different Color than Material.Color 88 89in vec4 gl_FragCoord; // redeclaration that changes nothing is allowed 90 91// All the following are allowed redeclaration that change behavior 92layout(origin_upper_left) in vec4 gl_FragCoord; 93layout(pixel_center_integer) in vec4 gl_FragCoord; 94layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord; 95 96layout(early_fragment_tests) in; 97 98// compute shader: 99layout (local_size_x = 32, local_size_y = 32) in; 100layout (local_size_x = 8) in; 101 102layout(location = 3) out vec4 color; 103layout(location = 3, index = 1) out vec4 factor; 104layout(location = 2) out vec4 colors[3]; 105 106layout (depth_greater) out float gl_FragDepth; 107 108// redeclaration that changes nothing is allowed 109out float gl_FragDepth; 110 111// assume it may be modified in any way 112layout (depth_any) out float gl_FragDepth; 113 114// assume it may be modified such that its value will only increase 115layout (depth_greater) out float gl_FragDepth; 116 117// assume it may be modified such that its value will only decrease 118layout (depth_less) out float gl_FragDepth; 119 120// assume it will not be modified 121layout (depth_unchanged) out float gl_FragDepth; 122 123in vec4 gl_Color; // predeclared by the fragment language 124flat in vec4 gl_Color; // redeclared by user to be flat 125 126 127float[5] foo(float[5]) 128{ 129 return float[5](3.4, 4.2, 5.0, 5.2, 1.1); 130} 131 132precision highp float; 133precision highp int; 134precision mediump int; 135precision highp float; 136 137void main() 138{ 139 { 140 float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 141 } 142 { 143 float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing 144 } 145 { 146 vec4 a[3][2]; // size-3 array of size-2 array of vec4 147 vec4[2] a1[3]; // size-3 array of size-2 array of vec4 148 vec4[3][2] a2; // size-3 array of size-2 array of vec4 149 vec4 b[2] = vec4[2](vec4(0.0), vec4(0.1)); 150 vec4[3][2] a3 = vec4[3][2](b, b, b); // constructor 151 void foo(vec4[3][2]); // prototype with unnamed parameter 152 vec4 a4[3][2] = {vec4[2](vec4(0.0), vec4(1.0)), 153 vec4[2](vec4(0.0), vec4(1.0)), 154 vec4[2](vec4(0.0), vec4(1.0)) }; 155 } 156 { 157 float a[5]; 158 { 159 float b[] = a; // b is explicitly size 5 160 } 161 { 162 float b[5] = a; // means the same thing 163 } 164 { 165 float b[] = float[](1,2,3,4,5); // also explicitly sizes to 5 166 } 167 a.length(); // returns 5 168 } 169 { 170 vec4 a[3][2]; 171 a.length(); // this is 3 172 a[x].length(); // this is 2 173 } 174 // for an array b containing a member array a: 175 b[++x].a.length(); // b is never dereferenced, but �++x� is evaluated 176 177 // for an array s of a shader storage object containing a member array a: 178 s[x].a.length(); // s is dereferenced; x needs to be a valid index 179 // 180 //All of the following declarations result in a compile-time error. 181 //float a[2] = { 3.4, 4.2, 5.0 }; // illegal 182 //vec2 b = { 1.0, 2.0, 3.0 }; // illegal 183 //mat3x3 c = { vec3(0.0), vec3(1.0), vec3(2.0), vec3(3.0) }; // illegal 184 //mat2x2 d = { 1.0, 0.0, 0.0, 1.0 }; // illegal, can't flatten nesting 185 //struct { 186 // float a; 187 // int b; 188 //} e = { 1.2, 2, 3 }; // illegal 189 190 struct { 191 float a; 192 int b; 193 } e = { 1.2, 2 }; // legal, all types match 194 195 struct { 196 float a; 197 int b; 198 } e = { 1, 3 }; // legal, first initializer is converted 199 200 //All of the following declarations result in a compile-time error. 201 //int a = true; // illegal 202 //vec4 b[2] = { vec4(0.0), 1.0 }; // illegal 203 //mat4x2 c = { vec3(0.0), vec3(1.0) }; // illegal 204 205 //struct S1 { 206 // vec4 a; 207 // vec4 b; 208 //}; 209 210 //struct { 211 // float s; 212 // float t; 213 //} d[] = { S1(vec4(0.0), vec4(1.1)) }; // illegal 214 215 { 216 float a[] = float[](3.4, 4.2, 5.0, 5.2, 1.1); 217 float b[] = { 3.4, 4.2, 5.0, 5.2, 1.1 }; 218 float c[] = a; // c is explicitly size 5 219 float d[5] = b; // means the same thing 220 } 221 { 222 const vec3 zAxis = vec3 (0.0, 0.0, 1.0); 223 const float ceiling = a + b; // a and b not necessarily constants 224 } 225 { 226 in vec4 position; 227 in vec3 normal; 228 in vec2 texCoord[4]; 229 } 230 { 231 lowp float color; 232 out mediump vec2 P; 233 lowp ivec2 foo(lowp mat3); 234 highp mat4 m; 235 } 236 237} 238