48 lines
1012 B
Plaintext
48 lines
1012 B
Plaintext
#include "../test_static.isph"
|
|
#define LOAD(n) \
|
|
do { \
|
|
if (n < programCount) \
|
|
a[n] = aFOO[n]; \
|
|
} while (false)
|
|
|
|
task void f_f(uniform float RET[], uniform float aFOO[]) {
|
|
uniform int a[programCount];
|
|
|
|
// Initialization
|
|
for (uniform int i = 0; i < programCount; ++i)
|
|
a[i] = 0;
|
|
|
|
LOAD(0);
|
|
LOAD(1);
|
|
LOAD(2);
|
|
LOAD(3);
|
|
LOAD(4);
|
|
LOAD(5);
|
|
LOAD(6);
|
|
LOAD(7);
|
|
LOAD(8);
|
|
LOAD(9);
|
|
LOAD(10);
|
|
LOAD(11);
|
|
LOAD(12);
|
|
LOAD(13);
|
|
LOAD(14);
|
|
LOAD(15);
|
|
|
|
uniform int elem_num = programCount > 16 ? 16 : programCount;
|
|
|
|
// Perform calculation on loaded values
|
|
for (uniform int i = 0; i < elem_num; ++i)
|
|
a[i] *= (i + 1);
|
|
|
|
RET[programIndex] = a[programIndex];
|
|
}
|
|
|
|
task void result(uniform float RET[]) {
|
|
RET[programIndex] = (programIndex + 1) * (programIndex + 1);
|
|
|
|
// Not loaded lanes
|
|
for (uniform int i = 16; i < programCount; ++i)
|
|
RET[i] = 0;
|
|
}
|