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