diff options
author | 2021-03-21 11:42:25 +0800 | |
---|---|---|
committer | 2021-03-25 11:29:26 +0100 | |
commit | ab8dcf91bdcad6c8d0a39802f2823e65aafa8f0a (patch) | |
tree | f06b4f62cfdd2335385000895f64170b56777daf /wgpu | |
parent | 2b520ca0984486d3ad930873837df8c819bab30c (diff) | |
download | iced-ab8dcf91bdcad6c8d0a39802f2823e65aafa8f0a.tar.gz iced-ab8dcf91bdcad6c8d0a39802f2823e65aafa8f0a.tar.bz2 iced-ab8dcf91bdcad6c8d0a39802f2823e65aafa8f0a.zip |
Support choosing `wgpu` backend using env var
Diffstat (limited to 'wgpu')
-rw-r--r-- | wgpu/src/window/compositor.rs | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 36d6ab1a..3d785f71 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -15,6 +15,35 @@ pub struct Compositor { local_pool: futures::executor::LocalPool, } +#[derive(Clone)] +pub enum WgpuBackend { + Auto, + Vulkan, + Metal, + Dx12, + Dx11, + Gl, + BrowserWgpu, +} + +impl WgpuBackend { + fn from_env() -> Self { + if let Ok(backend) = std::env::var("WGPU_BACKEND") { + match backend.to_lowercase().as_str() { + "vulkan" => WgpuBackend::Vulkan, + "metal" => WgpuBackend::Metal, + "dx12" => WgpuBackend::Dx12, + "dx11" => WgpuBackend::Dx11, + "gl" => WgpuBackend::Gl, + "webgpu" => WgpuBackend::BrowserWgpu, + other => panic!("Unknown backend: {}", other), + } + } else { + WgpuBackend::Auto + } + } +} + impl Compositor { const CHUNK_SIZE: u64 = 10 * 1024; @@ -22,7 +51,17 @@ impl Compositor { /// /// Returns `None` if no compatible graphics adapter could be found. pub async fn request(settings: Settings) -> Option<Self> { - let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); + let backend = match WgpuBackend::from_env() { + WgpuBackend::Auto => wgpu::BackendBit::PRIMARY, + WgpuBackend::Vulkan => wgpu::BackendBit::VULKAN, + WgpuBackend::Metal => wgpu::BackendBit::METAL, + WgpuBackend::Dx12 => wgpu::BackendBit::DX12, + WgpuBackend::Dx11 => wgpu::BackendBit::DX11, + WgpuBackend::Gl => wgpu::BackendBit::GL, + WgpuBackend::BrowserWgpu => wgpu::BackendBit::BROWSER_WEBGPU, + }; + + let instance = wgpu::Instance::new(backend); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { |