diff options
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/window/compositor.rs | 46 | 
1 files changed, 27 insertions, 19 deletions
| diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 54ea8247..dde5f09f 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -1,6 +1,8 @@  use crate::{Backend, Color, Error, Renderer, Settings, Viewport}; +use futures::stream::{self, StreamExt};  use futures::task::SpawnExt; +  use iced_graphics::compositor;  use iced_native::futures;  use raw_window_handle::HasRawWindowHandle; @@ -66,28 +68,34 @@ impl Compositor {          log::info!("Selected format: {:?}", format);          #[cfg(target_arch = "wasm32")] -        let limits = wgpu::Limits::downlevel_webgl2_defaults() -            .using_resolution(adapter.limits()); +        let limits = [wgpu::Limits::downlevel_webgl2_defaults() +            .using_resolution(adapter.limits())];          #[cfg(not(target_arch = "wasm32"))] -        let limits = wgpu::Limits::downlevel_defaults(); - -        let (device, queue) = adapter -            .request_device( -                &wgpu::DeviceDescriptor { -                    label: Some( -                        "iced_wgpu::window::compositor device descriptor", -                    ), -                    features: wgpu::Features::empty(), -                    limits: wgpu::Limits { -                        max_bind_groups: 2, -                        ..limits +        let limits = +            [wgpu::Limits::default(), wgpu::Limits::downlevel_defaults()]; + +        let limits = limits.into_iter().map(|limits| wgpu::Limits { +            max_bind_groups: 2, +            ..limits +        }); + +        let (device, queue) = stream::iter(limits) +            .filter_map(|limits| async { +                adapter.request_device( +                    &wgpu::DeviceDescriptor { +                        label: Some( +                            "iced_wgpu::window::compositor device descriptor", +                        ), +                        features: wgpu::Features::empty(), +                        limits,                      }, -                }, -                None, -            ) -            .await -            .ok()?; +                    None, +                ).await.ok() +            }) +            .boxed() +            .next() +            .await?;          let staging_belt = wgpu::util::StagingBelt::new(Self::CHUNK_SIZE);          let local_pool = futures::executor::LocalPool::new(); | 
