use super::GpuError;
pub struct GpuContext {
pub device: wgpu::Device,
pub queue: wgpu::Queue,
}
impl GpuContext {
pub fn new() -> Result<Self, GpuError> {
pollster::block_on(async {
let instance =
wgpu::Instance::new(wgpu::InstanceDescriptor::new_without_display_handle());
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::HighPerformance,
compatible_surface: None,
force_fallback_adapter: false,
})
.await
.map_err(|e| GpuError::NotAvailable(e.to_string()))?;
let (device, queue) = adapter
.request_device(&wgpu::DeviceDescriptor {
required_limits: adapter.limits(),
..Default::default()
})
.await
.map_err(|e| GpuError::Internal(e.to_string()))?;
Ok(Self { device, queue })
})
}
}