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 { | 
