Files
UnrealEngine/Engine/Source/ThirdParty/Intel/ISPC/ispc-1.24.0/tests/soa-14.ispc
2025-05-18 13:04:45 +08:00

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);
}