From 693bc58bdd7251e33e8e95df075748a4135cee15 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Sat, 6 Nov 2021 17:09:52 -0400 Subject: [PATCH] Validate device descriptor before opening (#2159) --- wgpu-core/src/instance.rs | 41 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/wgpu-core/src/instance.rs b/wgpu-core/src/instance.rs index 205f87bfbe..a093fae44c 100644 --- a/wgpu-core/src/instance.rs +++ b/wgpu-core/src/instance.rs @@ -279,6 +279,27 @@ impl Adapter { open: hal::OpenDevice, desc: &DeviceDescriptor, trace_path: Option<&std::path::Path>, + ) -> Result, RequestDeviceError> { + let caps = &self.raw.capabilities; + Device::new( + open, + Stored { + value: Valid(self_id), + ref_count: self.life_guard.add_ref(), + }, + caps.alignments.clone(), + caps.downlevel.clone(), + desc, + trace_path, + ) + .or(Err(RequestDeviceError::OutOfMemory)) + } + + fn create_device( + &self, + self_id: AdapterId, + desc: &DeviceDescriptor, + trace_path: Option<&std::path::Path>, ) -> Result, RequestDeviceError> { // Verify all features were exposed by the adapter if !self.raw.features.contains(desc.features) { @@ -317,26 +338,6 @@ impl Adapter { return Err(RequestDeviceError::LimitsExceeded(failed)); } - Device::new( - open, - Stored { - value: Valid(self_id), - ref_count: self.life_guard.add_ref(), - }, - caps.alignments.clone(), - caps.downlevel.clone(), - desc, - trace_path, - ) - .or(Err(RequestDeviceError::OutOfMemory)) - } - - fn create_device( - &self, - self_id: AdapterId, - desc: &DeviceDescriptor, - trace_path: Option<&std::path::Path>, - ) -> Result, RequestDeviceError> { let open = unsafe { self.raw.adapter.open(desc.features, &desc.limits) }.map_err( |err| match err { hal::DeviceError::Lost => RequestDeviceError::DeviceLost,