Now, if a struct member has an explicit 'uniform' or 'varying' qualifier, then that member has that variability, regardless of the variability of the struct's variability. Members without 'uniform' or 'varying' have unbound variability, and in turn inherit the variability of the struct. As a result of this, now structs can properly be 'varying' by default, just like all the other types, while still having sensible semantics.
28 lines
729 B
Plaintext
28 lines
729 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
struct Foo { float x; float y; };
|
|
|
|
export void f_fu(uniform float ret[], uniform float aa[], uniform float b) {
|
|
float a = aa[programIndex];
|
|
uniform Foo foo[32];
|
|
for (uniform int i = 0; i < 32; ++i) {
|
|
foo[i].x = i;
|
|
foo[i].y = -1234 + i;
|
|
}
|
|
varying Foo fv = foo[a];
|
|
fv.x += 1000;
|
|
//CO print("fv.x = %\n", fv.x);
|
|
//CO print("foo[a] = %\n", foo[a].x);
|
|
foo[a] = fv;
|
|
//CO print("after assign foo[a] = %\n", foo[a].x);
|
|
|
|
ret[programIndex] = foo[programIndex].x;
|
|
//CO print("% - %\n", programIndex, ret[programIndex]);
|
|
}
|
|
|
|
export void result(uniform float ret[]) {
|
|
ret[programIndex] = 1000+programIndex;
|
|
ret[0] = 0;
|
|
}
|