diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2024-05-05 07:22:18 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-05 07:22:18 -0700 |
commit | cd12d416271e9e9fd0f00303525021f75688ff9f (patch) | |
tree | af1fd7a88590e37b09e61ae5a1aaeec4c325b907 /ext/webgpu/byow.rs | |
parent | b2628e4a069ed9fc13f34f6e4fd75f29c657e5a9 (diff) |
chore: update wgpu (#23684)
Diffstat (limited to 'ext/webgpu/byow.rs')
-rw-r--r-- | ext/webgpu/byow.rs | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/ext/webgpu/byow.rs b/ext/webgpu/byow.rs index 30824c52b..8864e8d2b 100644 --- a/ext/webgpu/byow.rs +++ b/ext/webgpu/byow.rs @@ -6,6 +6,8 @@ use deno_core::op2; use deno_core::OpState; use deno_core::ResourceId; use std::ffi::c_void; +#[cfg(any(target_os = "linux", target_os = "macos"))] +use std::ptr::NonNull; use crate::surface::WebGpuSurface; @@ -36,8 +38,10 @@ pub fn op_webgpu_surface_create( } let (win_handle, display_handle) = raw_window(system, p1, p2)?; - let surface = - instance.instance_create_surface(display_handle, win_handle, ()); + // SAFETY: see above comment + let surface = unsafe { + instance.instance_create_surface(display_handle, win_handle, None)? + }; let rid = state .resource_table @@ -53,22 +57,22 @@ type RawHandles = ( #[cfg(target_os = "macos")] fn raw_window( system: &str, - ns_window: *const c_void, + _ns_window: *const c_void, ns_view: *const c_void, ) -> Result<RawHandles, AnyError> { if system != "cocoa" { return Err(type_error("Invalid system on macOS")); } - let win_handle = { - let mut handle = raw_window_handle::AppKitWindowHandle::empty(); - handle.ns_window = ns_window as *mut c_void; - handle.ns_view = ns_view as *mut c_void; + let win_handle = raw_window_handle::RawWindowHandle::AppKit( + raw_window_handle::AppKitWindowHandle::new( + NonNull::new(ns_view as *mut c_void) + .ok_or(type_error("ns_view is null"))?, + ), + ); - raw_window_handle::RawWindowHandle::AppKit(handle) - }; let display_handle = raw_window_handle::RawDisplayHandle::AppKit( - raw_window_handle::AppKitDisplayHandle::empty(), + raw_window_handle::AppKitDisplayHandle::new(), ); Ok((win_handle, display_handle)) } @@ -85,17 +89,17 @@ fn raw_window( } let win_handle = { - use raw_window_handle::Win32WindowHandle; - - let mut handle = Win32WindowHandle::empty(); - handle.hwnd = window as *mut c_void; - handle.hinstance = hinstance as *mut c_void; + let mut handle = raw_window_handle::Win32WindowHandle::new( + std::num::NonZeroIsize::new(window as isize) + .ok_or(type_error("window is null"))?, + ); + handle.hinstance = std::num::NonZeroIsize::new(hinstance as isize); raw_window_handle::RawWindowHandle::Win32(handle) }; let display_handle = - raw_window_handle::RawDisplayHandle::Windows(WindowsDisplayHandle::empty()); + raw_window_handle::RawDisplayHandle::Windows(WindowsDisplayHandle::new()); Ok((win_handle, display_handle)) } @@ -107,33 +111,30 @@ fn raw_window( ) -> Result<RawHandles, AnyError> { let (win_handle, display_handle); if system == "x11" { - win_handle = { - let mut handle = raw_window_handle::XlibWindowHandle::empty(); - handle.window = window as *mut c_void as _; - - raw_window_handle::RawWindowHandle::Xlib(handle) - }; - - display_handle = { - let mut handle = raw_window_handle::XlibDisplayHandle::empty(); - handle.display = display as *mut c_void; - - raw_window_handle::RawDisplayHandle::Xlib(handle) - }; + win_handle = raw_window_handle::RawWindowHandle::Xlib( + raw_window_handle::XlibWindowHandle::new(window as *mut c_void as _), + ); + + display_handle = raw_window_handle::RawDisplayHandle::Xlib( + raw_window_handle::XlibDisplayHandle::new( + NonNull::new(display as *mut c_void), + 0, + ), + ); } else if system == "wayland" { - win_handle = { - let mut handle = raw_window_handle::WaylandWindowHandle::empty(); - handle.surface = window as _; - - raw_window_handle::RawWindowHandle::Wayland(handle) - }; - - display_handle = { - let mut handle = raw_window_handle::WaylandDisplayHandle::empty(); - handle.display = display as _; - - raw_window_handle::RawDisplayHandle::Wayland(handle) - }; + win_handle = raw_window_handle::RawWindowHandle::Wayland( + raw_window_handle::WaylandWindowHandle::new( + NonNull::new(window as *mut c_void) + .ok_or(type_error("window is null"))?, + ), + ); + + display_handle = raw_window_handle::RawDisplayHandle::Wayland( + raw_window_handle::WaylandDisplayHandle::new( + NonNull::new(display as *mut c_void) + .ok_or(type_error("display is null"))?, + ), + ); } else { return Err(type_error("Invalid system on Linux")); } |