16 lines
1 KiB
Text
16 lines
1 KiB
Text
layout(local_size_x = 64) in;
|
|
layout(std430, binding = 0) readonly buffer IB { uint a[]; } In;
|
|
layout(std430, binding = 1) buffer OB { uint a[]; } Out;
|
|
void main()
|
|
{
|
|
uint i = gl_GlobalInvocationID.x; if (i >= NCASES) return; uint b = i * 76u;
|
|
vec4 bodies[CULTMATH_MAX_SITES];
|
|
for (int k = 0; k < CULTMATH_MAX_SITES; k++)
|
|
bodies[k] = uintBitsToFloat(uvec4(In.a[b + 2u + 4u * uint(k)], In.a[b + 3u + 4u * uint(k)], In.a[b + 4u + 4u * uint(k)], In.a[b + 5u + 4u * uint(k)]));
|
|
uint c = b + 67u;
|
|
vec4 r = cultmath_weighted_lattice_cells(uintBitsToFloat(uvec2(In.a[b], In.a[b + 1u])), uintBitsToFloat(In.a[c]), bodies, int(In.a[b + 66u]),
|
|
uintBitsToFloat(In.a[c + 1u]), uintBitsToFloat(In.a[c + 2u]), uintBitsToFloat(In.a[c + 3u]), uintBitsToFloat(In.a[c + 4u]),
|
|
uintBitsToFloat(In.a[c + 5u]), uintBitsToFloat(uvec2(In.a[c + 6u], In.a[c + 7u])), uintBitsToFloat(In.a[c + 8u]));
|
|
uvec4 w = floatBitsToUint(r);
|
|
Out.a[i * 4u] = w.x; Out.a[i * 4u + 1u] = w.y; Out.a[i * 4u + 2u] = w.z; Out.a[i * 4u + 3u] = w.w;
|
|
}
|