cgpu 0.1.0

A tunable GPU compute executor with automatic CPU fallback, byte-based batching, and inline shader generation.
Documentation
#[cfg(feature = "shader-gen")]
use cgpu::*;

#[cfg(feature = "shader-gen")]
#[test]
fn builder_generates_inline_wgsl() {
    let shader = ShaderBuilder::new()
        .workgroup_size(64, 1, 1)
        .add_binding(BindingDesc::storage_buffer_read_only(
            0,
            "items",
            "array<u32>",
        ))
        .add_binding(BindingDesc::storage_buffer(1, "results", "array<u32>"))
        .main_block(
            r#"
            let idx = global_id.x;
            if idx < arrayLength(&items) {
                results[idx] = items[idx] * 2u;
            }
            "#,
        )
        .build();

    assert!(shader.contains("@workgroup_size(64, 1, 1)"));
    assert!(shader.contains("var<storage, read> items: array<u32>;"));
    assert!(shader.contains("results[idx] = items[idx] * 2u;"));
}

#[cfg(feature = "shader-gen")]
#[test]
fn source_builder_reuses_common_chunks() {
    let shader = ShaderSourceBuilder::new("tokenize")
        .with_batch_metadata()
        .with_common_compute_utils()
        .with_source("@compute @workgroup_size(64) fn main() {}")
        .finish();

    assert_eq!(shader.label, "tokenize");
    assert!(shader.source.contains("struct BatchMeta"));
    assert!(shader.source.contains("ceil_div_u32"));
    assert!(shader.source.contains("@compute"));
}