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, cpu_accessible={}",
18        buf.length(),
19        buf.is_cpu_accessible()
20    );
21    unsafe {
22        buf.write_bytes(0, b"hello metal")
23            .expect("write shared buffer");
24    }
25    println!("wrote {} bytes", b"hello metal".len());
26
27    let tx = d
28        .new_texture(TextureDescriptor::new_2d(
29            256,
30            256,
31            pixel_format::BGRA8UNORM,
32        ))
33        .expect("texture create failed");
34    println!(
35        "texture {}x{} fmt={}",
36        tx.width(),
37        tx.height(),
38        tx.pixel_format()
39    );
40}