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