It is no longer legal to initialize arrays and structs with single
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.
This commit is contained in:
@@ -11,8 +11,11 @@ void f(reference uniform Foo foo[], float a) {
|
||||
|
||||
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
||||
float a = aFOO[programIndex];
|
||||
float f[40] = a;
|
||||
float g[40] = b;
|
||||
float f[40], g[40];
|
||||
for (uniform int i = 0; i < 40; ++i) {
|
||||
f[i] = a;
|
||||
g[i] = b;
|
||||
}
|
||||
if (a < 2)
|
||||
f = g;
|
||||
RET[programIndex] = f[a];
|
||||
|
||||
Reference in New Issue
Block a user