diff options
| author | 2022-05-30 23:20:01 -0400 | |
|---|---|---|
| committer | 2022-05-30 23:20:01 -0400 | |
| commit | 1830a21a7678f19ae845edd7f9d538515ebfdab6 (patch) | |
| tree | cfacd214b5aeb73155c3356bbbcb13887cf9c72f /wgpu | |
| parent | d26b3f0402ab55474c8427944f5cbe7808af6998 (diff) | |
| parent | 33653b766752a6aa0785357127af21af9932f6fc (diff) | |
| download | iced-1830a21a7678f19ae845edd7f9d538515ebfdab6.tar.gz iced-1830a21a7678f19ae845edd7f9d538515ebfdab6.tar.bz2 iced-1830a21a7678f19ae845edd7f9d538515ebfdab6.zip | |
Merge pull request #1354 from iced-rs/fix/wgpu-modern-limits
Try `Limits::default` in `iced_wgpu` before `downlevel_defaults`
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(); | 
