shute 0.1.0

Abstraction of wgpu for simple compute shader execution
Documentation
use shute::{Instance, PowerPreference};

fn compute(data: &mut Vec<u32>) {
    let instance = Instance::new();
    let device = pollster::block_on(
        instance.autoselect(PowerPreference::HighPerformance, shute::LimitType::Highest),
    )
    .unwrap();
    let shader = device.create_shader_module(include_str!("square.wgsl"), "main");
    let mut input_buffer = device.create_buffer(
        Some("input"),
        shute::BufferType::StorageBuffer {
            output: false,
            read_only: true,
        },
        shute::BufferInit::WithData(&data),
    );
    let size = data.len();
    let mut output_buffer = device.create_buffer(
        Some("output"),
        shute::BufferType::StorageBuffer {
            output: true,
            read_only: false,
        },
        shute::BufferInit::<u32>::WithSize(size),
    );
    let groups = vec![vec![&mut input_buffer, &mut output_buffer]];
    device.execute(&groups, shader, [size as u32]);
    pollster::block_on(output_buffer.read(data)).expect("Failed to fetch data from output buffer");
}

fn main() {
    let mut data: Vec<u32> = (0..200).collect();
    for line in data.chunks(10) {
        println!("{:?}", line);
    }
    compute(&mut data);
    for line in data.chunks(10) {
        println!("{:?}", line);
    }
}