123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #version 400
- uniform float u;
- int foo(int a, const int b, in int c, const in int d, out int e, inout int f)
- {
- int sum = a + b + c + d + f; // no e, it is out only
- // sum should be 47 now
- a *= 64;
- // no b, it is read only
- c *= 64;
- // no d, it is read only
- e = 64 * 16; // e starts undefined
- f *= 64;
- sum += a + 64 * b + c + 64 * d + e + f; // everything has a value now, totaling of 64(1+2+4+8+16+32) = 64*63 = 4032
- // sum should be 4032 + 47 = 4079
-
- return sum;
- }
- int foo2(float a, vec3 b, out int r)
- {
- r = int(3.0 * a);
- return int(5.0 * b.y);
- }
- int foo3()
- {
- if (u > 3.2) {
- discard;
- return 1000000;
- }
- return 2000000;
- }
- void main()
- {
- int e;
- int t = 2;
- struct s {
- ivec4 t;
- } f;
- f.t.y = 32;
- // test the different qualifers
- int color = foo(1, 2, t+t, 8, e, f.t.y);
- color += 128 * (e + f.t.y); // right side should be 128(64(16 + 32)) = 393216
- // sum should be 4079 + 393216 = 397295
-
- // test conversions
- float arg;
- float ret;
- ret = foo2(4, ivec3(1,2,3), arg); // ret = 10, param = 12.0
- color += int(ret + arg); // adds 22, for total of 397317
- color += foo3(); // theoretically, add 2000000, for total of 2397317
- gl_FragColor = vec4(color);
- }
- vec3 m(vec2);
- void aggCall()
- {
- float F;
- m(ivec2(F)); // test input conversion of single argument that's an aggregate; other function tests in 120.vert
- }
- vec4 badConv()
- {
- return u; // ERROR, can change scalar to vector
- }
|