03_command_buffer_blit/
03_command_buffer_blit.rs1use apple_metal::{resource_options, MetalDevice};
2
3fn main() {
4 let dev = MetalDevice::system_default().expect("no Metal");
5 let queue = dev.new_command_queue().expect("queue");
6 let src = dev
7 .new_buffer(64, resource_options::STORAGE_MODE_SHARED)
8 .expect("src");
9 let dst = dev
10 .new_buffer(64, resource_options::STORAGE_MODE_SHARED)
11 .expect("dst");
12 let _ = src.write_bytes(b"hello GPU blit from apple-metal-rs!!!!!");
13
14 let cb = queue.new_command_buffer().expect("cb");
15 assert!(cb.blit_copy_buffer(&src, 0, &dst, 0, 64));
16 cb.commit();
17 cb.wait_until_completed();
18
19 let p = dst.contents().unwrap().cast::<u8>();
20 let bytes = unsafe { core::slice::from_raw_parts(p, 40) };
21 let s = String::from_utf8_lossy(bytes);
22 println!("GPU blit result: {s:?}");
23 assert!(s.starts_with("hello GPU blit"));
24}