wgpu_algorithms/
context.rs1use 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 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}