vello/piet-gpu-hal/examples/collatz.rs
Raph Levien 8e2f2aeeba Update dependencies
Update to latest versions of all dependencies. Among other things, this
gets us on piet 0.2, though almost all of the changes were around text,
which is not yet implemented.
2020-11-14 08:25:43 -08:00

41 lines
1.7 KiB
Rust

use piet_gpu_hal::vulkan::VkInstance;
use piet_gpu_hal::{CmdBuf, Device, MemFlags};
fn main() {
let (instance, _) = VkInstance::new(None).unwrap();
unsafe {
let device = instance.device(None).unwrap();
let fence = device.create_fence(false).unwrap();
let mem_flags = MemFlags::host_coherent();
let src = (0..256).map(|x| x + 1).collect::<Vec<u32>>();
let buffer = device
.create_buffer(std::mem::size_of_val(&src[..]) as u64, mem_flags)
.unwrap();
device.write_buffer(&buffer, &src).unwrap();
let code = include_bytes!("./shader/collatz.spv");
let pipeline = device.create_simple_compute_pipeline(code, 1, 0).unwrap();
let descriptor_set = device
.create_descriptor_set(&pipeline, &[&buffer], &[])
.unwrap();
let query_pool = device.create_query_pool(2).unwrap();
let mut cmd_buf = device.create_cmd_buf().unwrap();
cmd_buf.begin();
cmd_buf.reset_query_pool(&query_pool);
cmd_buf.write_timestamp(&query_pool, 0);
cmd_buf.dispatch(&pipeline, &descriptor_set, (256, 1, 1));
cmd_buf.write_timestamp(&query_pool, 1);
cmd_buf.finish();
device
.run_cmd_buf(&cmd_buf, &[], &[], Some(&fence))
.unwrap();
device.wait_and_reset(&[fence]).unwrap();
let timestamps = device.reap_query_pool(&query_pool);
let mut dst: Vec<u32> = Default::default();
device.read_buffer(&buffer, &mut dst).unwrap();
for (i, val) in dst.iter().enumerate().take(16) {
println!("{}: {}", i, val);
}
println!("{:?}", timestamps);
}
}