diff options
author | 2021-03-25 11:41:52 +0100 | |
---|---|---|
committer | 2021-03-25 11:41:52 +0100 | |
commit | bf09f44d56ce097600f939c19d8c149c0cc4c1b1 (patch) | |
tree | 7010fec72aefa97a329eb4b29667e102017114dd /wgpu | |
parent | 2b520ca0984486d3ad930873837df8c819bab30c (diff) | |
parent | 883c7e71ae699a29c23b8f95b7335d015e5a985d (diff) | |
download | iced-bf09f44d56ce097600f939c19d8c149c0cc4c1b1.tar.gz iced-bf09f44d56ce097600f939c19d8c149c0cc4c1b1.tar.bz2 iced-bf09f44d56ce097600f939c19d8c149c0cc4c1b1.zip |
Merge pull request #789 from Cupnfish/master
Add WGPU_BACKEND environment variable
Diffstat (limited to '')
-rw-r--r-- | wgpu/src/settings.rs | 41 | ||||
-rw-r--r-- | wgpu/src/window/compositor.rs | 2 |
2 files changed, 42 insertions, 1 deletions
diff --git a/wgpu/src/settings.rs b/wgpu/src/settings.rs index 26763e22..abc404dc 100644 --- a/wgpu/src/settings.rs +++ b/wgpu/src/settings.rs @@ -16,6 +16,9 @@ pub struct Settings { /// [`Backend`]: crate::Backend pub present_mode: wgpu::PresentMode, + /// The internal graphics backend to use. + pub internal_backend: wgpu::BackendBit, + /// The bytes of the font that will be used by default. /// /// If `None` is provided, a default system font will be chosen. @@ -30,14 +33,52 @@ pub struct Settings { pub antialiasing: Option<Antialiasing>, } +impl Settings { + /// Creates new [`Settings`] using environment configuration. + /// + /// Specifically: + /// + /// - The `internal_backend` can be configured using the `WGPU_BACKEND` + /// environment variable. If the variable is not set, the primary backend + /// will be used. The following values are allowed: + /// - `vulkan` + /// - `metal` + /// - `dx12` + /// - `dx11` + /// - `gl` + /// - `webgpu` + pub fn from_env() -> Self { + Settings { + internal_backend: backend_from_env() + .unwrap_or(wgpu::BackendBit::PRIMARY), + ..Self::default() + } + } +} + impl Default for Settings { fn default() -> Settings { Settings { format: wgpu::TextureFormat::Bgra8UnormSrgb, present_mode: wgpu::PresentMode::Mailbox, + internal_backend: wgpu::BackendBit::PRIMARY, default_font: None, default_text_size: 20, antialiasing: None, } } } + +fn backend_from_env() -> Option<wgpu::BackendBit> { + std::env::var("WGPU_BACKEND").ok().map(|backend| { + match backend.to_lowercase().as_str() { + "vulkan" => wgpu::BackendBit::VULKAN, + "metal" => wgpu::BackendBit::METAL, + "dx12" => wgpu::BackendBit::DX12, + "dx11" => wgpu::BackendBit::DX11, + "gl" => wgpu::BackendBit::GL, + "webgpu" => wgpu::BackendBit::BROWSER_WEBGPU, + other => panic!("Unknown backend: {}", other), + } + }) +} diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 36d6ab1a..fdd648e8 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -22,7 +22,7 @@ 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 instance = wgpu::Instance::new(settings.internal_backend); let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { |