#version 450
// Square root compute shader
// Computes: result[i] = sqrt(input[i])
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout(set = 0, binding = 0) buffer InputBuffer {
float input_data[];
};
layout(set = 0, binding = 1) buffer OutputBuffer {
float result[];
};
void main() {
uint index = gl_GlobalInvocationID.x;
// Bounds checking
if (index >= input_data.length() || index >= result.length()) {
return;
}
// Perform square root operation entirely on GPU
// Handle negative values by setting result to NaN
float x = input_data[index];
result[index] = (x >= 0.0) ? sqrt(x) : sqrt(-1.0);
}