#[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;
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);
}
}