oxgpu 0.1.0

A lightweight GPU compute library built on wgpu
Documentation
#[cfg(test)]
mod tests {
    use oxgpu::{Buffer, BufferUsage, ComputeKernel, Context};

    #[tokio::test]
    async fn test_uniform_buffer() {
        let ctx = Context::new().await.unwrap();

        let buf_output = Buffer::<f32>::zeros(&ctx, 1).await;

        // Create Uniform Buffer
        // Note: Uniforms often require 16-byte alignment/padding in WGSL,
        // but for a single f32 array it might be tricky.
        // Best to use a struct or vec4.
        // Let's use a single f32 for simplicity, but treat it carefully.
        let uniform_data = vec![5.0f32];
        let buf_uniform =
            Buffer::new(&ctx, &uniform_data, BufferUsage::UNIFORM, "UniformBuf").await;

        let shader = r#"
            @group(0) @binding(0) var<storage, read_write> output: array<f32>;
            @group(0) @binding(1) var<uniform> scale: f32; 

            @compute @workgroup_size(1)
            fn main() {
                output[0] = scale;
            }
        "#;

        let kernel = ComputeKernel::builder()
            .source(shader)
            .entry_point("main")
            .add_storage_read_write(0)
            .add_uniform(1)
            .build(&ctx)
            .await
            .unwrap();

        kernel.run(&ctx, 1, &[&buf_output, &buf_uniform]);

        let result = buf_output.read(&ctx).await.unwrap();
        assert_eq!(result[0], 5.0);
    }
}