summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Downtime <yrainbxqc@gmail.com>2021-03-21 11:42:25 +0800
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2021-03-25 11:29:26 +0100
commitab8dcf91bdcad6c8d0a39802f2823e65aafa8f0a (patch)
treef06b4f62cfdd2335385000895f64170b56777daf /wgpu
parent2b520ca0984486d3ad930873837df8c819bab30c (diff)
downloadiced-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.rs41
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 {