Skip to main content

oxide_renderer/
adapter.rs

1//! GPU adapter selection
2
3use 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}