wgpu_algorithms/
context.rs

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