oxide_renderer/
adapter.rs1use wgpu::{Backends, DeviceType, Instance, InstanceDescriptor, RequestAdapterOptions};
4
5pub struct AdapterInfo {
6 pub name: String,
7 pub device_type: DeviceType,
8 pub backend: wgpu::Backend,
9}
10
11pub fn create_instance() -> Instance {
12 Instance::new(&InstanceDescriptor {
13 backends: Backends::METAL,
14 ..Default::default()
15 })
16}
17
18pub async fn request_adapter(
19 instance: &Instance,
20 compatible_surface: Option<&wgpu::Surface<'_>>,
21) -> Result<wgpu::Adapter, wgpu::RequestAdapterError> {
22 let options = RequestAdapterOptions {
23 power_preference: wgpu::PowerPreference::HighPerformance,
24 force_fallback_adapter: false,
25 compatible_surface,
26 };
27
28 instance.request_adapter(&options).await
29}
30
31pub fn adapter_info(adapter: &wgpu::Adapter) -> AdapterInfo {
32 let info = adapter.get_info();
33 AdapterInfo {
34 name: info.name.to_string(),
35 device_type: info.device_type,
36 backend: info.backend,
37 }
38}