scalar values (that ispc used to smear across the array/struct
elements). Now, initializers in variable declarations must be
{ }-delimited lists, with one element per struct member or array
element, respectively.
There were a few problems with the previous implementation of the
functionality to initialize from scalars. First, the expression
would be evaluated once per value initialized, so if it had side-effects,
the wrong thing would happen. Next, for large multidimensional arrays,
the generated code would be a long series of move instructions, rather
than loops (and this in turn made LLVM take a long time.)
While both of these problems are fixable, it's a non-trivial
amount of re-plumbing for a questionable feature anyway.
Fixes issue #50.
25 lines
607 B
Plaintext
25 lines
607 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
|
|
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
|
float a = aFOO[programIndex];
|
|
uniform float x[47][47];
|
|
for (uniform int i = 0; i < 47; ++i)
|
|
for (uniform int j = 0; j < 47; ++j)
|
|
x[i][j] = 2;
|
|
|
|
// all are 2 except (4,2) = 0, (4,...) = 1, (4,programCount-1)=2
|
|
if (a == 3.)
|
|
x[b-1][a-1] = 0;
|
|
else
|
|
x[b-1][a-1] = 1;
|
|
RET[programIndex] = x[4][a];
|
|
}
|
|
|
|
export void result(uniform float RET[]) {
|
|
RET[programIndex] = 1;
|
|
RET[1] = 0;
|
|
RET[programCount-1] = 2;
|
|
}
|