#version 450
// Unary SiLU (a.k.a. swish): out[i] = x / (1 + exp(-x)) = x * sigmoid(x).
layout(local_size_x = 64) in;
layout(set = 0, binding = 0) readonly buffer In { float inp[]; };
layout(set = 0, binding = 1) writeonly buffer Out { float o[]; };
layout(push_constant) uniform Pc { uint n; };
void main() {
uint i = gl_GlobalInvocationID.x;
if (i < n) {
float x = inp[i];
o[i] = x / (1.0 + exp(-x));
}
}