vyre 0.4.0

GPU compute intermediate representation with a standard operation library
Documentation
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;
}