63 lines
1.8 KiB
Plaintext
63 lines
1.8 KiB
Plaintext
#include "../test_static.isph"
|
|
// rule: skip on arch=xe64
|
|
struct Point { float x, y, z; };
|
|
|
|
|
|
static void p(uniform float *uniform ptr) {
|
|
//CO for (uniform int s = 0; s < 1; ++s) { // num to print
|
|
//CO for (uniform int i = 0; i < 3; ++i) { // num float in unif struct
|
|
//CO for (uniform int j = 0; j < 8; ++j, ++ptr) // soa width
|
|
//CO print("% ", *ptr);
|
|
//CO print("\n");
|
|
//CO }
|
|
//CO print("\n");
|
|
//CO }
|
|
}
|
|
|
|
soa<8> Point * uniform aossoa(uniform Point aospts[], uniform int count) {
|
|
uniform int roundUp = (count + 7) & ~0x7;
|
|
uniform int nAlloc = roundUp / 8;
|
|
|
|
soa<8> Point * uniform ret = uniform new soa<8> Point[nAlloc];
|
|
foreach (i = 0 ... count) {
|
|
//CO varying Point gp = { programIndex+1, 2*programIndex+1, 3*programIndex+1 };
|
|
//CO ret[i] = gp;
|
|
//CO ret[i].x = gp.x;
|
|
//CO ret[i].y = gp.y;
|
|
//CO ret[i].z = gp.z;
|
|
//CO print("%: % % %\n", i, gp.x, gp.y, gp.z);
|
|
#pragma ignore warning(perf)
|
|
ret[i] = aospts[i];
|
|
}
|
|
|
|
//CO p((uniform float * uniform)aospts);
|
|
//CO print("----\n");
|
|
//CO p((uniform float * uniform)ret);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
task void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
|
float a = aFOO[programIndex];
|
|
|
|
uniform Point pts[programCount+4];
|
|
foreach (i = 0 ... programCount+4) {
|
|
#pragma ignore warning(perf)
|
|
pts[i].x = b*i;
|
|
#pragma ignore warning(perf)
|
|
pts[i].y = 2*b*i;
|
|
#pragma ignore warning(perf)
|
|
pts[i].z = 3*b*i;
|
|
}
|
|
|
|
soa<8> Point * uniform soaPts = aossoa(pts, programCount+4);
|
|
|
|
#pragma ignore warning(perf)
|
|
RET[programIndex] = soaPts[programIndex+3].z;
|
|
}
|
|
|
|
task void result(uniform float RET[]) {
|
|
RET[programIndex] = 15*(programIndex+3);
|
|
}
|