Skip to main content

02_caps_buffer_texture/
02_caps_buffer_texture.rs

1use apple_metal::{gpu_family, pixel_format, resource_options, MetalDevice, TextureDescriptor};
2
3fn main() {
4    let d = MetalDevice::system_default().expect("no Metal");
5    println!("unified memory: {}", d.has_unified_memory());
6    println!(
7        "recommended max working set: {} MB",
8        d.recommended_max_working_set_size() / (1024 * 1024)
9    );
10    println!("supports Metal3: {}", d.supports_family(gpu_family::METAL3));
11    println!("supports Apple7: {}", d.supports_family(gpu_family::APPLE7));
12
13    let buf = d
14        .new_buffer(4096, resource_options::STORAGE_MODE_SHARED)
15        .expect("buffer create failed");
16    println!(
17        "buffer {} bytes, contents={:?}",
18        buf.length(),
19        buf.contents().is_some()
20    );
21    let n = buf.write_bytes(b"hello metal");
22    println!("wrote {n} bytes");
23
24    let tx = d
25        .new_texture(TextureDescriptor::new_2d(
26            256,
27            256,
28            pixel_format::BGRA8UNORM,
29        ))
30        .expect("texture create failed");
31    println!(
32        "texture {}x{} fmt={}",
33        tx.width(),
34        tx.height(),
35        tx.pixel_format()
36    );
37}