From 33a9b2252c75114fa67d39f206056b561d923c3c Mon Sep 17 00:00:00 2001 From: Alex Janka Date: Wed, 14 Feb 2024 08:33:17 +1100 Subject: [PATCH] request high performance adapter --- lib/src/renderer/wgpu.rs | 41 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/src/renderer/wgpu.rs b/lib/src/renderer/wgpu.rs index 0a684ba..6c3a4c9 100644 --- a/lib/src/renderer/wgpu.rs +++ b/lib/src/renderer/wgpu.rs @@ -81,21 +81,32 @@ impl RendererBackend for WgpuBackend { .create_surface_unsafe(wgpu::SurfaceTargetUnsafe::from_window(window)?) }?; - let adapter = manager - .instance - .enumerate_adapters(wgpu::Backends::all()) - .into_iter() - .find(|adapter| adapter.is_surface_supported(&surface)) - .ok_or(Self::RendererError::NoAdapter)?; - let (device, queue) = block_on(adapter.request_device( - &wgpu::DeviceDescriptor { - required_features: wgpu::Features::ADDRESS_MODE_CLAMP_TO_BORDER, - required_limits: wgpu::Limits::default(), - label: None, - }, - None, - ))?; - let (device, queue) = (Arc::new(device), Arc::new(queue)); + let (adapter, device, queue) = block_on(async { + let adapter = manager + .instance + .request_adapter(&wgpu::RequestAdapterOptions { + power_preference: wgpu::PowerPreference::HighPerformance, + force_fallback_adapter: false, + compatible_surface: Some(&surface), + }) + .await + .ok_or(Self::RendererError::NoAdapter)?; + let (device, queue) = adapter + .request_device( + &wgpu::DeviceDescriptor { + required_features: wgpu::Features::ADDRESS_MODE_CLAMP_TO_BORDER, + required_limits: wgpu::Limits::default(), + label: None, + }, + None, + ) + .await?; + Ok::<(wgpu::Adapter, Arc, Arc), Self::RendererError>(( + adapter, + Arc::new(device), + Arc::new(queue), + )) + })?; let capabilities = surface.get_capabilities(&adapter); let format = capabilities