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

58 lines
1.2 KiB
Plaintext

#include "../test_static.isph"
#define LOAD(n) \
do { \
if (n < programCount) \
a[n] = aFOO[n]; \
} while (false)
#define STORE(n, k) \
do { \
if (n < programCount) \
aFOO[n] = k; \
} 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);
STORE(4, 300);
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;
if (programCount > 4)
RET[4] = 300 * 5;
}