From 3404a12b76c0e93721ec01946c9fda8cbbdf22aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20L=C3=B6bel?= Date: Wed, 17 Jun 2020 21:18:10 +0200 Subject: [PATCH] [rs] Move `backends: BackendBit` paramter to `Instance::new()` --- wgpu/Cargo.toml | 4 ++-- wgpu/examples/capture/main.rs | 3 +-- wgpu/examples/framework.rs | 3 +-- wgpu/examples/hello-compute/main.rs | 3 +-- wgpu/examples/hello-triangle/main.rs | 3 +-- wgpu/examples/hello/main.rs | 3 +-- wgpu/src/backend/direct.rs | 7 +++---- wgpu/src/backend/web.rs | 3 +-- wgpu/src/lib.rs | 29 ++++++++++++---------------- 9 files changed, 23 insertions(+), 35 deletions(-) diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index 4d8d0a16d3..6ce0039e46 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -28,14 +28,14 @@ vulkan = ["wgc/gfx-backend-vulkan"] package = "wgpu-core" version = "0.5" git = "https://github.com/gfx-rs/wgpu" -rev = "6bca38feed155aa80776ae5e7dfa4769c655b638" +rev = "a02a56684114da702a64e30af49d0167e273402b" features = ["raw-window-handle"] [dependencies.wgt] package = "wgpu-types" version = "0.5" git = "https://github.com/gfx-rs/wgpu" -rev = "6bca38feed155aa80776ae5e7dfa4769c655b638" +rev = "a02a56684114da702a64e30af49d0167e273402b" [dependencies] arrayvec = "0.5" diff --git a/wgpu/examples/capture/main.rs b/wgpu/examples/capture/main.rs index c4fabdf0a2..09c8d035ca 100644 --- a/wgpu/examples/capture/main.rs +++ b/wgpu/examples/capture/main.rs @@ -7,14 +7,13 @@ use std::io::Write; use std::mem::size_of; async fn run() { - let adapter = wgpu::Instance::new() + let adapter = wgpu::Instance::new(wgpu::BackendBit::PRIMARY) .request_adapter( &wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::Default, compatible_surface: None, }, wgpu::UnsafeExtensions::disallow(), - wgpu::BackendBit::PRIMARY, ) .await .unwrap(); diff --git a/wgpu/examples/framework.rs b/wgpu/examples/framework.rs index 76a1223c3a..b113342899 100644 --- a/wgpu/examples/framework.rs +++ b/wgpu/examples/framework.rs @@ -56,7 +56,7 @@ pub trait Example: 'static + Sized { async fn run_async(event_loop: EventLoop<()>, window: Window) { log::info!("Initializing the surface..."); - let instance = wgpu::Instance::new(); + let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); let (size, surface) = unsafe { let size = window.inner_size(); let surface = instance.create_surface(&window); @@ -72,7 +72,6 @@ async fn run_async(event_loop: EventLoop<()>, window: Window) { compatible_surface: Some(&surface), }, unsafe_extensions, - wgpu::BackendBit::PRIMARY, ) .await .unwrap(); diff --git a/wgpu/examples/hello-compute/main.rs b/wgpu/examples/hello-compute/main.rs index abe3b22c50..b37ef2f978 100644 --- a/wgpu/examples/hello-compute/main.rs +++ b/wgpu/examples/hello-compute/main.rs @@ -22,7 +22,7 @@ async fn execute_gpu(numbers: Vec) -> Vec { let slice_size = numbers.len() * std::mem::size_of::(); let size = slice_size as wgpu::BufferAddress; - let instance = wgpu::Instance::new(); + let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); let adapter = instance .request_adapter( &wgpu::RequestAdapterOptions { @@ -30,7 +30,6 @@ async fn execute_gpu(numbers: Vec) -> Vec { compatible_surface: None, }, wgpu::UnsafeExtensions::disallow(), - wgpu::BackendBit::PRIMARY, ) .await .unwrap(); diff --git a/wgpu/examples/hello-triangle/main.rs b/wgpu/examples/hello-triangle/main.rs index ec5d8fdc44..f6febdb682 100644 --- a/wgpu/examples/hello-triangle/main.rs +++ b/wgpu/examples/hello-triangle/main.rs @@ -6,7 +6,7 @@ use winit::{ async fn run(event_loop: EventLoop<()>, window: Window, swapchain_format: wgpu::TextureFormat) { let size = window.inner_size(); - let instance = wgpu::Instance::new(); + let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); let surface = unsafe { instance.create_surface(&window) }; let adapter = instance .request_adapter( @@ -15,7 +15,6 @@ async fn run(event_loop: EventLoop<()>, window: Window, swapchain_format: wgpu:: compatible_surface: Some(&surface), }, wgpu::UnsafeExtensions::disallow(), - wgpu::BackendBit::PRIMARY, ) .await .unwrap(); diff --git a/wgpu/examples/hello/main.rs b/wgpu/examples/hello/main.rs index befdaf4bb2..a8c498d120 100644 --- a/wgpu/examples/hello/main.rs +++ b/wgpu/examples/hello/main.rs @@ -1,13 +1,12 @@ /// This example shows how to describe the adapter in use. async fn run() { - let adapter = wgpu::Instance::new() + let adapter = wgpu::Instance::new(wgpu::BackendBit::PRIMARY) .request_adapter( &wgpu::RequestAdapterOptions { power_preference: wgpu::PowerPreference::Default, compatible_surface: None, }, unsafe { wgpu::UnsafeExtensions::allow() }, - wgpu::BackendBit::PRIMARY, ) .await .unwrap(); diff --git a/wgpu/src/backend/direct.rs b/wgpu/src/backend/direct.rs index 2683a8f8c8..5dba242c4b 100644 --- a/wgpu/src/backend/direct.rs +++ b/wgpu/src/backend/direct.rs @@ -329,8 +329,8 @@ impl crate::Context for Context { Ready>; type MapAsyncFuture = native_gpu_future::GpuFuture>; - fn init() -> Self { - wgc::hub::Global::new("wgpu", wgc::hub::IdentityManagerFactory) + fn init(backends: wgt::BackendBit) -> Self { + wgc::hub::Global::new("wgpu", wgc::hub::IdentityManagerFactory, backends) } fn instance_create_surface( @@ -344,7 +344,6 @@ impl crate::Context for Context { &self, options: &crate::RequestAdapterOptions<'_>, unsafe_extensions: wgt::UnsafeExtensions, - backends: wgt::BackendBit, ) -> Self::RequestAdapterFuture { let id = self.pick_adapter( &wgc::instance::RequestAdapterOptions { @@ -352,7 +351,7 @@ impl crate::Context for Context { compatible_surface: options.compatible_surface.map(|surface| surface.id), }, unsafe_extensions, - wgc::instance::AdapterInputs::Mask(backends, |_| PhantomData), + wgc::instance::AdapterInputs::Mask(wgt::BackendBit::all(), |_| PhantomData), ); ready(id) } diff --git a/wgpu/src/backend/web.rs b/wgpu/src/backend/web.rs index b8164cdb7f..ccbb50da66 100644 --- a/wgpu/src/backend/web.rs +++ b/wgpu/src/backend/web.rs @@ -649,7 +649,7 @@ impl crate::Context for Context { >; type MapAsyncFuture = MakeSendFuture>; - fn init() -> Self { + fn init(_backends: wgt::BackendBit) -> Self { Sendable(web_sys::window().unwrap().navigator().gpu()) } @@ -682,7 +682,6 @@ impl crate::Context for Context { &self, options: &crate::RequestAdapterOptions<'_>, _unsafe_extensions: wgt::UnsafeExtensions, - _backends: wgt::BackendBit, ) -> Self::RequestAdapterFuture { //TODO: support this check, return `None` if the flag is not set. // It's not trivial, since we need the Future logic to have this check, diff --git a/wgpu/src/lib.rs b/wgpu/src/lib.rs index 11ac9f74eb..b5e839581a 100644 --- a/wgpu/src/lib.rs +++ b/wgpu/src/lib.rs @@ -130,7 +130,7 @@ trait Context: Sized { + Send; type MapAsyncFuture: Future> + Send; - fn init() -> Self; + fn init(backends: BackendBit) -> Self; fn instance_create_surface( &self, handle: &impl raw_window_handle::HasRawWindowHandle, @@ -139,7 +139,6 @@ trait Context: Sized { &self, options: &RequestAdapterOptions<'_>, unsafe_extensions: UnsafeExtensions, - backends: BackendBit, ) -> Self::RequestAdapterFuture; fn adapter_request_device( &self, @@ -981,10 +980,11 @@ pub struct TextureCopyView<'a> { } impl Instance { - /// Create an new instance of wgpu. - pub fn new() -> Self { + /// Create an new instance of wgpu. The `backends` parameter controls + /// among which backends wgpu will decide during instantiation. + pub fn new(backends: BackendBit) -> Self { Instance { - context: Arc::new(C::init()), + context: Arc::new(C::init(backends)), } } @@ -1029,16 +1029,12 @@ impl Instance { ) -> Surface { let surface = wgc::instance::Surface { #[cfg(feature = "vulkan-portability")] - vulkan: self - .context - .instance - .vulkan - .create_surface_from_layer(layer as *mut _, cfg!(debug_assertions)), - metal: self - .context - .instance - .metal - .create_surface_from_layer(layer as *mut _, cfg!(debug_assertions)), + vulkan: self.context.instance.vulkan.as_ref().map(|inst| { + inst.create_surface_from_layer(layer as *mut _, cfg!(debug_assertions)) + }), + metal: self.context.instance.metal.as_ref().map(|inst| { + inst.create_surface_from_layer(layer as *mut _, cfg!(debug_assertions)) + }), }; crate::Surface { @@ -1059,11 +1055,10 @@ impl Instance { &self, options: &RequestAdapterOptions<'_>, unsafe_extensions: UnsafeExtensions, - backends: BackendBit, ) -> impl Future> + Send { let context = Arc::clone(&self.context); self.context - .instance_request_adapter(options, unsafe_extensions, backends) + .instance_request_adapter(options, unsafe_extensions) .map(|option| option.map(|id| Adapter { context, id })) } }