diff --git a/examples/integration/src/main.rs b/examples/integration/src/main.rs index b57c73d844..b4f580a485 100644 --- a/examples/integration/src/main.rs +++ b/examples/integration/src/main.rs @@ -34,7 +34,7 @@ pub fn main() { let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); let surface = unsafe { instance.create_surface(&window) }; - let (mut device, queue) = futures::executor::block_on(async { + let (format, (mut device, queue)) = futures::executor::block_on(async { let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::HighPerformance, @@ -43,21 +43,24 @@ pub fn main() { .await .expect("Request adapter"); - adapter - .request_device( - &wgpu::DeviceDescriptor { - label: None, - features: wgpu::Features::empty(), - limits: wgpu::Limits::default(), - }, - None, - ) - .await - .expect("Request device") + ( + adapter + .get_swap_chain_preferred_format(&surface) + .expect("Get preferred format"), + adapter + .request_device( + &wgpu::DeviceDescriptor { + label: None, + features: wgpu::Features::empty(), + limits: wgpu::Limits::default(), + }, + None, + ) + .await + .expect("Request device"), + ) }); - let format = wgpu::TextureFormat::Bgra8UnormSrgb; - let mut swap_chain = { let size = window.inner_size(); @@ -65,7 +68,7 @@ pub fn main() { &surface, &wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: format, + format, width: size.width, height: size.height, present_mode: wgpu::PresentMode::Mailbox, @@ -85,7 +88,7 @@ pub fn main() { // Initialize iced let mut debug = Debug::new(); let mut renderer = - Renderer::new(Backend::new(&mut device, Settings::default())); + Renderer::new(Backend::new(&mut device, Settings::default(), format)); let mut state = program::State::new( controls, diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index 783079f348..4f34045b42 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -30,23 +30,24 @@ pub struct Backend { impl Backend { /// Creates a new [`Backend`]. - pub fn new(device: &wgpu::Device, settings: Settings) -> Self { + pub fn new( + device: &wgpu::Device, + settings: Settings, + format: wgpu::TextureFormat, + ) -> Self { let text_pipeline = text::Pipeline::new( device, - settings.format, + format, settings.default_font, settings.text_multithreading, ); - let quad_pipeline = quad::Pipeline::new(device, settings.format); - let triangle_pipeline = triangle::Pipeline::new( - device, - settings.format, - settings.antialiasing, - ); + let quad_pipeline = quad::Pipeline::new(device, format); + let triangle_pipeline = + triangle::Pipeline::new(device, format, settings.antialiasing); #[cfg(any(feature = "image_rs", feature = "svg"))] - let image_pipeline = image::Pipeline::new(device, settings.format); + let image_pipeline = image::Pipeline::new(device, format); Self { quad_pipeline, diff --git a/wgpu/src/settings.rs b/wgpu/src/settings.rs index 9a7eed344b..dc06b82d36 100644 --- a/wgpu/src/settings.rs +++ b/wgpu/src/settings.rs @@ -6,11 +6,6 @@ pub use crate::Antialiasing; /// [`Backend`]: crate::Backend #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct Settings { - /// The output format of the [`Backend`]. - /// - /// [`Backend`]: crate::Backend - pub format: wgpu::TextureFormat, - /// The present mode of the [`Backend`]. /// /// [`Backend`]: crate::Backend @@ -68,7 +63,6 @@ impl Settings { 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, diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 9b65596fa1..68ebf23413 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -13,6 +13,7 @@ pub struct Compositor { queue: wgpu::Queue, staging_belt: wgpu::util::StagingBelt, local_pool: futures::executor::LocalPool, + format: wgpu::TextureFormat, } impl Compositor { @@ -42,6 +43,10 @@ impl Compositor { }) .await?; + let format = compatible_surface + .as_ref() + .and_then(|surf| adapter.get_swap_chain_preferred_format(surf))?; + let (device, queue) = adapter .request_device( &wgpu::DeviceDescriptor { @@ -69,12 +74,13 @@ impl Compositor { queue, staging_belt, local_pool, + format, }) } /// Creates a new rendering [`Backend`] for this [`Compositor`]. pub fn create_backend(&self) -> Backend { - Backend::new(&self.device, self.settings) + Backend::new(&self.device, self.settings, self.format) } } @@ -119,7 +125,7 @@ impl iced_graphics::window::Compositor for Compositor { surface, &wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: self.settings.format, + format: self.format, present_mode: self.settings.present_mode, width, height,