John Kessenich | 564842b | 2013-01-10 18:20:47 +0000 | [diff] [blame] | 1 | #version 120 |
| 2 | |
John Kessenich | 1c80995 | 2013-01-31 22:55:53 +0000 | [diff] [blame] | 3 | float lowp; |
| 4 | float mediump; |
| 5 | float highp; |
John Kessenich | 564842b | 2013-01-10 18:20:47 +0000 | [diff] [blame] | 6 | |
John Kessenich | 1c80995 | 2013-01-31 22:55:53 +0000 | [diff] [blame] | 7 | float precision; |
John Kessenich | 564842b | 2013-01-10 18:20:47 +0000 | [diff] [blame] | 8 | |
| 9 | in vec4 i; |
| 10 | out vec4 o; |
| 11 | |
John Kessenich | ca8899c | 2013-03-01 21:53:13 +0000 | [diff] [blame] | 12 | uniform sampler2D s2D; |
| 13 | centroid varying vec2 centTexCoord; |
| 14 | |
John Kessenich | 71fca67 | 2013-02-12 08:02:20 +0000 | [diff] [blame] | 15 | uniform mat4x2 m; |
| 16 | |
John Kessenich | 4b67103 | 2013-02-28 20:49:41 +0000 | [diff] [blame] | 17 | struct s { |
| 18 | float f; |
| 19 | }; |
| 20 | |
John Kessenich | 564842b | 2013-01-10 18:20:47 +0000 | [diff] [blame] | 21 | void main() |
| 22 | { |
John Kessenich | 71fca67 | 2013-02-12 08:02:20 +0000 | [diff] [blame] | 23 | mat2x3 m23 = mat2x3(m); |
John Kessenich | 4b67103 | 2013-02-28 20:49:41 +0000 | [diff] [blame] | 24 | |
| 25 | int a; |
| 26 | bool b; |
| 27 | s sv = s(a); |
| 28 | float[2] ia = float[2](3, i.y); |
| 29 | float f1 = 1; |
| 30 | float f = a; |
| 31 | f = a; |
| 32 | ivec3 iv3; |
| 33 | vec3 v3 = iv3; |
| 34 | f = f + a; |
| 35 | f = a - f; |
| 36 | f += a; |
| 37 | f = a - f; |
| 38 | v3 *= iv3; |
John Kessenich | 69aa9c1 | 2013-11-12 03:31:24 +0000 | [diff] [blame] | 39 | v3 = iv3 / 2.0f; |
John Kessenich | 4b67103 | 2013-02-28 20:49:41 +0000 | [diff] [blame] | 40 | v3 = 3.0 * iv3; |
| 41 | v3 = 2 * v3; |
| 42 | v3 = v3 - 2; |
| 43 | if (f < a || |
| 44 | a <= f || |
| 45 | f > a || |
| 46 | f >= a || |
| 47 | a == f || |
| 48 | f != a); |
| 49 | f = b ? a : f; |
| 50 | f = b ? f : a; |
| 51 | f = b ? a : a; |
| 52 | s news = sv; |
| 53 | |
| 54 | i.xy + i.xyz; // ERROR |
| 55 | m * i.xyz; // ERROR |
| 56 | m + i; // ERROR |
| 57 | int aoeu = 1.0; // ERROR |
| 58 | f = b; // ERROR |
| 59 | f = a + b; // ERROR |
| 60 | f = b * a; // ERROR |
| 61 | b = a; // ERROR |
| 62 | b = b + f; // ERROR |
| 63 | f |= b; // ERROR |
John Kessenich | ca8899c | 2013-03-01 21:53:13 +0000 | [diff] [blame] | 64 | |
| 65 | gl_FragColor = texture2D(s2D, centTexCoord); |
John Kessenich | c2ff770 | 2013-04-25 16:44:03 +0000 | [diff] [blame] | 66 | |
| 67 | float flat; |
| 68 | float smooth; |
| 69 | float noperspective; |
| 70 | float uvec2; |
| 71 | float uvec3; |
| 72 | float uvec4; |
| 73 | //packed; // ERROR, reserved word |
John Kessenich | 8d00fd0 | 2013-05-28 07:29:58 +0000 | [diff] [blame] | 74 | |
| 75 | { |
| 76 | mat4 m; |
| 77 | vec4 v; |
| 78 | bool b; |
| 79 | gl_FragColor += b ? v : m; // ERROR, types don't match around ":" |
| 80 | } |
John Kessenich | ef84d10 | 2013-06-25 21:53:59 +0000 | [diff] [blame] | 81 | |
| 82 | gl_FragColor.xr; // ERROR, swizzlers not from same field space |
John Kessenich | d46b31f | 2013-08-27 03:59:04 +0000 | [diff] [blame] | 83 | gl_FragColor.xyxyx.xy; // ERROR, cannot make a vec5, even temporarily |
John Kessenich | ef84d10 | 2013-06-25 21:53:59 +0000 | [diff] [blame] | 84 | centTexCoord.z; // ERROR, swizzler out of range |
| 85 | (a,b) = true; // ERROR, not an l-value |
John Kessenich | 564842b | 2013-01-10 18:20:47 +0000 | [diff] [blame] | 86 | } |
John Kessenich | c2ff770 | 2013-04-25 16:44:03 +0000 | [diff] [blame] | 87 | |
| 88 | float imageBuffer; |
| 89 | float uimage2DRect; |
John Kessenich | ef84d10 | 2013-06-25 21:53:59 +0000 | [diff] [blame] | 90 | |
| 91 | int main() {} // ERROR |
| 92 | void main(int a) {} // ERROR |
| 93 | |
| 94 | const int a; // ERROR |
| 95 | |
| 96 | int foo(in float a); |
| 97 | int foo(out float a) // ERROR |
| 98 | { |
| 99 | return 3.2; // ERROR |
| 100 | foo(a); // ERROR |
| 101 | } |
John Kessenich | 252b619 | 2013-08-08 16:22:54 +0000 | [diff] [blame] | 102 | |
| 103 | bool gen(vec3 v) |
| 104 | { |
John Kessenich | 69aa9c1 | 2013-11-12 03:31:24 +0000 | [diff] [blame] | 105 | if (abs(v[0]) < 1e-4F && abs(v[1]) < 1e-4) |
John Kessenich | 252b619 | 2013-08-08 16:22:54 +0000 | [diff] [blame] | 106 | return true; |
John Kessenich | d46b31f | 2013-08-27 03:59:04 +0000 | [diff] [blame] | 107 | } |
| 108 | |
| 109 | void v1() |
| 110 | { |
| 111 | } |
| 112 | |
| 113 | void v2() |
| 114 | { |
| 115 | return v1(); // ERROR, no expression allowed, even though void |
| 116 | } |
John Kessenich | 5f753e0 | 2013-09-08 21:04:46 +0000 | [diff] [blame] | 117 | |
| 118 | void atest() |
| 119 | { |
| 120 | vec4 v = gl_TexCoord[1]; |
| 121 | v += gl_TexCoord[3]; |
| 122 | } |
| 123 | |
| 124 | varying vec4 gl_TexCoord[6]; // okay, assigning a size |
| 125 | varying vec4 gl_TexCoord[5]; // ERROR, changing size |
John Kessenich | 37d080c | 2013-11-22 17:52:58 +0000 | [diff] [blame] | 126 | |
| 127 | mat2x2 m22; |
| 128 | mat2x3 m23; |
| 129 | mat2x4 m24; |
| 130 | |
| 131 | mat3x2 m32; |
| 132 | mat3x3 m33; |
| 133 | mat3x4 m34; |
| 134 | |
| 135 | mat4x2 m42; |
| 136 | mat4x3 m43; |
| 137 | mat4x4 m44; |
| 138 | |
| 139 | void foo123() |
| 140 | { |
| 141 | mat2 r2 = matrixCompMult(m22, m22); |
| 142 | mat3 r3 = matrixCompMult(m33, m33); |
| 143 | mat4 r4 = matrixCompMult(m44, m44); |
| 144 | |
| 145 | mat2x3 r23 = matrixCompMult(m23, m23); |
| 146 | mat2x4 r24 = matrixCompMult(m24, m24); |
| 147 | mat3x2 r32 = matrixCompMult(m32, m32); |
| 148 | mat3x4 r34 = matrixCompMult(m34, m34); |
| 149 | mat4x2 r42 = matrixCompMult(m42, m42); |
| 150 | mat4x3 r43 = matrixCompMult(m43, m43); |
| 151 | |
| 152 | mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR |
| 153 | mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR |
| 154 | } |
John Kessenich | 9dedb13 | 2014-06-03 00:20:41 +0000 | [diff] [blame] | 155 | |
| 156 | void matConst() |
| 157 | { |
| 158 | vec2 v2; |
| 159 | vec3 v3; |
| 160 | mat4 m4b1 = mat4(v2, v3); // ERROR, not enough |
| 161 | mat4 m4b2 = mat4(v2, v3, v3, v3, v3, v2, v2); // ERROR, too much |
| 162 | mat4 m4g = mat4(v2, v3, v3, v3, v3, v3); |
| 163 | mat4 m4 = mat4(v2, v3, v3, v3, v3, v2); |
| 164 | mat3 m3 = mat3(m4); |
| 165 | mat3 m3b1 = mat3(m4, v2); // ERROR, extra arg |
| 166 | mat3 m3b2 = mat3(m4, m4); // ERROR, extra arg |
| 167 | mat3x2 m32 = mat3x2(m4); |
| 168 | mat4 m4c = mat4(m32); |
| 169 | mat3 m3s = mat3(v2.x); |
| 170 | |
| 171 | mat3 m3a1[2] = mat3[2](m3s, m3s); |
| 172 | mat3 m3a2[2] = mat3[2](m3s, m3s, m3s); // ERROR, too many args |
| 173 | } |
John Kessenich | 3591930 | 2014-06-03 19:28:48 +0000 | [diff] [blame] | 174 | |
| 175 | uniform sampler3D s3D; |
| 176 | uniform sampler1D s1D; |
| 177 | uniform sampler2DShadow s2DS; |
| 178 | |
| 179 | void foo2323() |
| 180 | { |
| 181 | vec4 v; |
| 182 | vec2 v2; |
| 183 | float f; |
| 184 | v = texture2DLod(s2D, v2, f); // ERROR |
| 185 | v = texture3DProjLod(s3D, v, f); // ERROR |
| 186 | v = texture1DProjLod(s1D, v, f); // ERROR |
| 187 | v = shadow2DProjLod(s2DS, v, f); // ERROR |
John Kessenich | b9fc145 | 2014-07-29 18:11:09 +0000 | [diff] [blame] | 188 | |
| 189 | v = texture1DGradARB(s1D, f, f, f); // ERROR |
| 190 | v = texture2DProjGradARB(s2D, v, v2, v2); // ERROR |
| 191 | v = shadow2DProjGradARB(s2DS, v, v2, v2); // ERROR |
John Kessenich | 3591930 | 2014-06-03 19:28:48 +0000 | [diff] [blame] | 192 | } |
| 193 | |
| 194 | #extension GL_ARB_shader_texture_lod : require |
| 195 | |
| 196 | void foo2324() |
| 197 | { |
| 198 | vec4 v; |
| 199 | vec2 v2; |
| 200 | float f; |
| 201 | v = texture2DLod(s2D, v2, f); |
| 202 | v = texture3DProjLod(s3D, v, f); |
| 203 | v = texture1DProjLod(s1D, v, f); |
| 204 | v = shadow2DProjLod(s2DS, v, f); |
John Kessenich | b9fc145 | 2014-07-29 18:11:09 +0000 | [diff] [blame] | 205 | |
| 206 | v = texture1DGradARB(s1D, f, f, f); |
| 207 | v = texture2DProjGradARB(s2D, v, v2, v2); |
| 208 | v = shadow2DProjGradARB(s2DS, v, v2, v2); |
| 209 | v = shadow2DRectProjGradARB(s2DS, v, v2, v2); // ERROR |
John Kessenich | 3591930 | 2014-06-03 19:28:48 +0000 | [diff] [blame] | 210 | } |
John Kessenich | 019a62b | 2014-07-29 17:18:24 +0000 | [diff] [blame] | 211 | |
John Kessenich | b9fc145 | 2014-07-29 18:11:09 +0000 | [diff] [blame] | 212 | uniform sampler2DRect s2DRbad; // ERROR |
John Kessenich | 019a62b | 2014-07-29 17:18:24 +0000 | [diff] [blame] | 213 | |
| 214 | void foo121111() |
| 215 | { |
| 216 | vec2 v2; |
| 217 | vec4 v = texture2DRect(s2DRbad, v2); |
| 218 | } |
| 219 | |
| 220 | #extension GL_ARB_texture_rectangle : enable |
| 221 | |
| 222 | uniform sampler2DRect s2DR; |
| 223 | uniform sampler2DRectShadow s2DRS; |
| 224 | |
| 225 | void foo12111() |
| 226 | { |
| 227 | vec2 v2; |
| 228 | vec3 v3; |
| 229 | vec4 v4; |
| 230 | vec4 v; |
| 231 | v = texture2DRect(s2DR, v2); |
| 232 | v = texture2DRectProj(s2DR, v3); |
| 233 | v = texture2DRectProj(s2DR, v4); |
| 234 | v = shadow2DRect(s2DRS, v3); |
| 235 | v = shadow2DRectProj(s2DRS, v4); |
John Kessenich | b9fc145 | 2014-07-29 18:11:09 +0000 | [diff] [blame] | 236 | |
| 237 | v = shadow2DRectProjGradARB(s2DRS, v, v2, v2); |
John Kessenich | 019a62b | 2014-07-29 17:18:24 +0000 | [diff] [blame] | 238 | } |
John Kessenich | 82e0e58 | 2017-01-26 15:48:27 -0700 | [diff] [blame] | 239 | |
| 240 | void voidTernary() |
| 241 | { |
| 242 | bool b; |
| 243 | b ? foo121111() : foo12111(); |
| 244 | b ? foo121111() : 4; // ERROR |
| 245 | b ? 3 : foo12111(); // ERROR |
John Kessenich | b67b4a7 | 2017-02-28 12:40:40 -0700 | [diff] [blame] | 246 | } |
| 247 | |
| 248 | float halfFloat1 = 1.0h; // syntax ERROR
|