Fix iced_wgpu device selection on Wasm

This commit is contained in:
Héctor Ramón Jiménez 2023-09-03 01:01:33 +02:00
parent 52b3f69e35
commit 020fb3c377
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 20 additions and 15 deletions

View file

@ -13,7 +13,7 @@ pub enum RedrawRequest {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use std::time::{Duration, Instant}; use crate::time::{Duration, Instant};
#[test] #[test]
fn ordering() { fn ordering() {

View file

@ -6,8 +6,6 @@ use crate::graphics::compositor;
use crate::graphics::{Error, Viewport}; use crate::graphics::{Error, Viewport};
use crate::{Backend, Primitive, Renderer, Settings}; use crate::{Backend, Primitive, Renderer, Settings};
use futures::stream::{self, StreamExt};
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle};
use std::marker::PhantomData; use std::marker::PhantomData;
@ -95,14 +93,17 @@ impl<Theme> Compositor<Theme> {
let limits = let limits =
[wgpu::Limits::default(), wgpu::Limits::downlevel_defaults()]; [wgpu::Limits::default(), wgpu::Limits::downlevel_defaults()];
let limits = limits.into_iter().map(|limits| wgpu::Limits { let mut limits = limits
max_bind_groups: 2, .into_iter()
..limits .map(|limits| wgpu::Limits {
}); max_bind_groups: 2,
..limits
})
.into_iter();
let (device, queue) = stream::iter(limits) let (device, queue) = loop {
.filter_map(|limits| async { if let Some(limits) = limits.next() {
adapter.request_device( let device = adapter.request_device(
&wgpu::DeviceDescriptor { &wgpu::DeviceDescriptor {
label: Some( label: Some(
"iced_wgpu::window::compositor device descriptor", "iced_wgpu::window::compositor device descriptor",
@ -111,11 +112,15 @@ impl<Theme> Compositor<Theme> {
limits, limits,
}, },
None, None,
).await.ok() ).await.ok();
})
.boxed() if let Some(device) = device {
.next() break Some(device);
.await?; }
}
break None;
}?;
Some(Compositor { Some(Compositor {
instance, instance,