Skip to main content

wgpu_primitives/
context.rs

1use crate::Error;
2use wgpu::{AdapterInfo, Backends, Device, Instance, MemoryHints, Queue, RequestAdapterOptions};
3
4pub struct Context {
5    pub adapter_info: AdapterInfo,
6    pub device: Device,
7    pub queue: Queue,
8}
9
10impl Context {
11    pub async fn init() -> Result<Self, Error> {
12        let descriptor = wgpu::InstanceDescriptor {
13            backends: Backends::PRIMARY,
14            ..Default::default()
15        }
16        .with_env();
17        let instance = Instance::new(&descriptor);
18
19        let adapter = instance
20            .request_adapter(&RequestAdapterOptions {
21                power_preference: wgpu::PowerPreference::HighPerformance,
22                compatible_surface: None,
23                force_fallback_adapter: false,
24            })
25            .await?;
26        let adapter_info = adapter.get_info();
27
28        let (device, queue) = adapter
29            .request_device(&wgpu::DeviceDescriptor {
30                label: Some("Context Device"),
31                required_features: wgpu::Features::empty(),
32                required_limits: adapter.limits(),
33                memory_hints: MemoryHints::Performance,
34                ..Default::default()
35            })
36            .await?;
37
38        Ok(Self {
39            adapter_info,
40            device,
41            queue,
42        })
43    }
44}