struct MemchrParams {
haystack_len: u32,
needle: u32,
reserved0: u32,
reserved1: u32,
}
@group(0) @binding(0) var<uniform> params: MemchrParams;
@group(0) @binding(1) var<storage, read> haystack_words: array<u32>;
@group(0) @binding(2) var<storage, read_write> result: atomic<u32>;
@compute @workgroup_size(64, 1, 1)
fn buffer_memchr(@builtin(global_invocation_id) id: vec3<u32>) {
let index = id.x;
if (index >= params.haystack_len) {
return;
}
if (vyre_packed_byte(&haystack_words, index) == (params.needle & 0xffu)) {
atomicMin(&result, index);
}
}