struct MemcmpParams {
a_len: u32,
b_len: u32,
reserved0: u32,
reserved1: u32,
}
@group(0) @binding(0) var<uniform> params: MemcmpParams;
@group(0) @binding(1) var<storage, read> a_words: array<u32>;
@group(0) @binding(2) var<storage, read> b_words: array<u32>;
@group(0) @binding(3) var<storage, read_write> result: array<u32>;
@compute @workgroup_size(1, 1, 1)
fn buffer_memcmp(@builtin(global_invocation_id) id: vec3<u32>) {
if (id.x != 0u) {
return;
}
if (params.a_len != params.b_len) {
result[0] = 0u;
return;
}
var index = 0u;
loop {
if (index >= params.a_len) {
break;
}
if (vyre_packed_byte(&a_words, index) != vyre_packed_byte(&b_words, index)) {
result[0] = 0u;
return;
}
index = index + 1u;
}
result[0] = 1u;
}