02_caps_buffer_texture/
02_caps_buffer_texture.rs1use 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}