#version 450
// Elementwise compare -> u32 {0,1}. op: 0=Eq 1=Ne 2=Le 3=Ge 4=Lt 5=Gt (hanzo-ml CmpOp order).
layout(local_size_x = 64) in;
layout(set = 0, binding = 0) readonly buffer A { float a[]; };
layout(set = 0, binding = 1) readonly buffer B { float b[]; };
layout(set = 0, binding = 2) writeonly buffer Out { uint o[]; };
layout(push_constant) uniform Pc { uint n; uint op; };
void main() {
uint i = gl_GlobalInvocationID.x;
if (i >= n) { return; }
float x = a[i];
float y = b[i];
bool r;
if (op == 0u) { r = x == y; }
else if (op == 1u) { r = x != y; }
else if (op == 2u) { r = x <= y; }
else if (op == 3u) { r = x >= y; }
else if (op == 4u) { r = x < y; }
else { r = x > y; }
o[i] = r ? 1u : 0u;
}