cera 0.5.0

Rust-native LLM inference engine
Documentation
@binding(3) @group(0) var<storage, read> par_buf_0 : array<vec4<u32>>;

@binding(0) @group(0) var<storage, read> pcm_buf_0 : array<f32>;

@binding(2) @group(0) var<storage, read_write> frames_buf_0 : array<f32>;

@binding(1) @group(0) var<storage, read> hann_buf_0 : array<f32>;

@compute
@workgroup_size(256, 1, 1)
fn stft_frame(@builtin(global_invocation_id) gid_0 : vec3<u32>)
{
    var n_fft_0 : u32 = par_buf_0[i32(0)].y;
    var hop_0 : u32 = par_buf_0[i32(0)].z;
    var center_pad_0 : u32 = par_buf_0[i32(0)].w;
    var n_samples_0 : u32 = par_buf_0[i32(1)].x;
    var preemph_0 : f32 = (bitcast<f32>((par_buf_0[i32(1)].y)));
    var idx_0 : u32 = gid_0.x;
    if(idx_0 >= (par_buf_0[i32(0)].x * n_fft_0))
    {
        return;
    }
    var t_0 : u32 = idx_0 / n_fft_0;
    var n_0 : u32 = idx_0 - t_0 * n_fft_0;
    var g_0 : i32 = i32(t_0 * hop_0 + n_0) - i32(center_pad_0);
    var _S1 : bool;
    if(g_0 >= i32(0))
    {
        _S1 = g_0 < i32(n_samples_0);
    }
    else
    {
        _S1 = false;
    }
    var s_0 : f32;
    if(_S1)
    {
        var s_1 : f32 = pcm_buf_0[g_0];
        if(g_0 > i32(0))
        {
            s_0 = s_1 - preemph_0 * pcm_buf_0[g_0 - i32(1)];
        }
        else
        {
            s_0 = s_1;
        }
    }
    else
    {
        s_0 = 0.0f;
    }
    frames_buf_0[idx_0] = hann_buf_0[n_0] * s_0;
    return;
}