From 4d2bec6cab055c59c378d47924e2dec51d2acb89 Mon Sep 17 00:00:00 2001 From: Niklas Korz Date: Mon, 11 Jan 2021 20:32:03 +0100 Subject: [PATCH] [rs] Move get_swap_chain_preferred_format from device to adapter Squashed commit of the following: commit 260976b10e3a54b253768d71e5e47c51b976c25c Author: Niklas Korz Date: Mon Jan 11 20:23:31 2021 +0100 Formatting commit e3f837e1b6a81c8c7a9566ba6a2c6dd8adfbbde7 Author: Niklas Korz Date: Mon Jan 11 20:20:37 2021 +0100 Update examples commit b0774c0aa56fbdfe741dd6c0e86d55b8c6b42de3 Author: Niklas Korz Date: Mon Jan 11 19:31:29 2021 +0100 Use adapter.get_swap_chain_preferred_format --- wgpu/Cargo.toml | 6 +++--- wgpu/examples/framework.rs | 2 +- wgpu/examples/hello-triangle/main.rs | 2 +- wgpu/examples/hello-windows/main.rs | 6 +++--- wgpu/src/backend/direct.rs | 22 +++++++++++++--------- wgpu/src/backend/web.rs | 17 +++++++++-------- wgpu/src/lib.rs | 16 ++++++++++------ 7 files changed, 40 insertions(+), 31 deletions(-) diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index 44f83f2f92..4fa54419c5 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -26,20 +26,20 @@ webgl = ["wgc"] [target.'cfg(not(target_arch = "wasm32"))'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e" +rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5" features = ["raw-window-handle"] [target.'cfg(target_arch = "wasm32")'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e" +rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5" features = ["raw-window-handle"] optional = true [dependencies.wgt] package = "wgpu-types" git = "https://github.com/gfx-rs/wgpu" -rev = "5b9cfeb9413175de366ec1e3d64ec6ee2feffa0e" +rev = "ae3e5057aff64a8e6f13e75be661c0f8a98abcd5" [dependencies] arrayvec = "0.5" diff --git a/wgpu/examples/framework.rs b/wgpu/examples/framework.rs index 263dbbeeee..d9023162c4 100644 --- a/wgpu/examples/framework.rs +++ b/wgpu/examples/framework.rs @@ -201,7 +201,7 @@ fn start( let spawner = Spawner::new(); let mut sc_desc = wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: device.get_swap_chain_preferred_format(), + format: adapter.get_swap_chain_preferred_format(&surface), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Mailbox, diff --git a/wgpu/examples/hello-triangle/main.rs b/wgpu/examples/hello-triangle/main.rs index da1b1680b2..e071c00655 100644 --- a/wgpu/examples/hello-triangle/main.rs +++ b/wgpu/examples/hello-triangle/main.rs @@ -44,7 +44,7 @@ async fn run(event_loop: EventLoop<()>, window: Window) { push_constant_ranges: &[], }); - let swapchain_format = device.get_swap_chain_preferred_format(); + let swapchain_format = adapter.get_swap_chain_preferred_format(&surface); let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { label: None, diff --git a/wgpu/examples/hello-windows/main.rs b/wgpu/examples/hello-windows/main.rs index 105562511c..f06c65940e 100644 --- a/wgpu/examples/hello-windows/main.rs +++ b/wgpu/examples/hello-windows/main.rs @@ -27,12 +27,12 @@ impl ViewportDesc { } } - fn build(self, device: &wgpu::Device) -> Viewport { + fn build(self, adapter: &wgpu::Adapter, device: &wgpu::Device) -> Viewport { let size = self.window.inner_size(); let sc_desc = wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::RENDER_ATTACHMENT, - format: device.get_swap_chain_preferred_format(), + format: adapter.get_swap_chain_preferred_format(&self.surface), width: size.width, height: size.height, present_mode: wgpu::PresentMode::Fifo, @@ -92,7 +92,7 @@ async fn run(event_loop: EventLoop<()>, viewports: Vec<(Window, wgpu::Color)>) { let mut viewports: HashMap = viewports .into_iter() - .map(|desc| (desc.window.id(), desc.build(&device))) + .map(|desc| (desc.window.id(), desc.build(&adapter, &device))) .collect(); event_loop.run(move |event, _, control_flow| { diff --git a/wgpu/src/backend/direct.rs b/wgpu/src/backend/direct.rs index f373dbcae8..6387b84c23 100644 --- a/wgpu/src/backend/direct.rs +++ b/wgpu/src/backend/direct.rs @@ -673,6 +673,19 @@ impl crate::Context for Context { ready(Ok((device, device_id))) } + fn adapter_get_swap_chain_preferred_format( + &self, + adapter: &Self::AdapterId, + surface: &Self::SurfaceId, + ) -> TextureFormat { + let global = &self.0; + match wgc::gfx_select!(adapter => global.adapter_get_swap_chain_preferred_format(*adapter, *surface)) + { + Ok(swap_chain_preferred_format) => swap_chain_preferred_format, + Err(err) => self.handle_error_fatal(err, "Adapter::get_swap_chain_preferred_format"), + } + } + fn adapter_features(&self, adapter: &Self::AdapterId) -> Features { let global = &self.0; match wgc::gfx_select!(*adapter => global.adapter_features(*adapter)) { @@ -713,15 +726,6 @@ impl crate::Context for Context { } } - fn device_get_swap_chain_preferred_format(&self, device: &Self::DeviceId) -> TextureFormat { - let global = &self.0; - match wgc::gfx_select!(device.id => global.device_get_swap_chain_preferred_format(device.id)) - { - Ok(swap_chain_preferred_format) => swap_chain_preferred_format, - Err(err) => self.handle_error_fatal(err, "Device::get_swap_chain_preferred_format"), - } - } - fn device_create_swap_chain( &self, device: &Self::DeviceId, diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index 494643b2a1..753d7555b2 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -954,6 +954,15 @@ impl crate::Context for Context { ) } + fn adapter_get_swap_chain_preferred_format( + &self, + adapter: &Self::AdapterId, + surface: &Self::SurfaceId, + ) -> wgt::TextureFormat { + // TODO: web-sys bindings need to be updated to not return a promise + wgt::TextureFormat::Bgra8Unorm + } + fn adapter_features(&self, _adapter: &Self::AdapterId) -> wgt::Features { // TODO: web-sys has no way of getting extensions on adapters wgt::Features::empty() @@ -985,14 +994,6 @@ impl crate::Context for Context { wgt::Limits::default() } - fn device_get_swap_chain_preferred_format( - &self, - device: &Self::DeviceId, - ) -> wgt::TextureFormat { - // TODO: web-sys bindings need to be updated to not return a promise - wgt::TextureFormat::Bgra8Unorm - } - fn device_create_swap_chain( &self, device: &Self::DeviceId, diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index 287ff2e1c7..c2ee1d38fe 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -189,13 +189,17 @@ trait Context: Debug + Send + Sized + Sync { desc: &DeviceDescriptor, trace_dir: Option<&std::path::Path>, ) -> Self::RequestDeviceFuture; + fn adapter_get_swap_chain_preferred_format( + &self, + adapter: &Self::AdapterId, + surface: &Self::SurfaceId, + ) -> TextureFormat; fn adapter_features(&self, adapter: &Self::AdapterId) -> Features; fn adapter_limits(&self, adapter: &Self::AdapterId) -> Limits; fn adapter_get_info(&self, adapter: &Self::AdapterId) -> AdapterInfo; fn device_features(&self, device: &Self::DeviceId) -> Features; fn device_limits(&self, device: &Self::DeviceId) -> Limits; - fn device_get_swap_chain_preferred_format(&self, device: &Self::DeviceId) -> TextureFormat; fn device_create_swap_chain( &self, device: &Self::DeviceId, @@ -1384,6 +1388,11 @@ impl Adapter { } } + /// Returns an optimal texture format to use for the [`SwapChain`] with this adapter. + pub fn get_swap_chain_preferred_format(&self, surface: &Surface) -> TextureFormat { + Context::adapter_get_swap_chain_preferred_format(&*self.context, &self.id, &surface.id) + } + /// List all features that are supported with this adapter. /// /// Features must be explicitly requested in [`Adapter::request_device`] in order @@ -1428,11 +1437,6 @@ impl Device { Context::device_limits(&*self.context, &self.id) } - /// Returns an optimal texture format to use for the [`SwapChain`] with this device. - pub fn get_swap_chain_preferred_format(&self) -> TextureFormat { - Context::device_get_swap_chain_preferred_format(&*self.context, &self.id) - } - /// Creates a shader module from either SPIR-V or WGSL source code. pub fn create_shader_module(&self, desc: &ShaderModuleDescriptor) -> ShaderModule { ShaderModule {