35 lines
907 B
Plaintext
35 lines
907 B
Plaintext
// RUN: %{ispc} --arch=x86-64 --pic -O3 -DINLINE=inline --target=sse4-i32x8,avx1-i32x8,avx2-i32x8 --nostdlib --nowrap -o %t.ll --emit-llvm-text %s 2>&1 | FileCheck %s
|
|
|
|
// REQUIRES: X86_ENABLED
|
|
|
|
// CHECK-NOT: FATAL ERROR:
|
|
struct Point3s {float x, y, z;};
|
|
typedef struct Point3s Point3;
|
|
|
|
#define NOISE_PERM_SIZE 8
|
|
|
|
static uniform int NoisePerm[2 * NOISE_PERM_SIZE] = {
|
|
151, 160, 137, 91, 90, 15, 131, 13,
|
|
201, 95, 96, 53, 194, 233, 7, 225,
|
|
};
|
|
|
|
inline float Grad(int x, int y, int z) {
|
|
int h = NoisePerm[NoisePerm[NoisePerm[x]+y]+z];
|
|
h &= 15;
|
|
float u = h<8 || h==12 || h==13 ? 1. : 0.;
|
|
return u;
|
|
}
|
|
|
|
export
|
|
void noise_ispc (
|
|
uniform Point3 pnt[],
|
|
uniform float output[])
|
|
{
|
|
Point3 xseed;
|
|
xseed.x = pnt[programIndex].x;
|
|
xseed.y = pnt[programIndex].y;
|
|
xseed.z = pnt[programIndex].z;
|
|
output[programIndex] = Grad (xseed.x, xseed.y,xseed.z);
|
|
return;
|
|
}
|