summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2022-05-30 23:20:01 -0400
committerLibravatar GitHub <noreply@github.com>2022-05-30 23:20:01 -0400
commit1830a21a7678f19ae845edd7f9d538515ebfdab6 (patch)
treecfacd214b5aeb73155c3356bbbcb13887cf9c72f /wgpu
parentd26b3f0402ab55474c8427944f5cbe7808af6998 (diff)
parent33653b766752a6aa0785357127af21af9932f6fc (diff)
downloadiced-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 'wgpu')
-rw-r--r--wgpu/src/window/compositor.rs46
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();