summaryrefslogtreecommitdiff
path: root/ext/webgpu/byow.rs
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2024-05-05 07:22:18 -0700
committerGitHub <noreply@github.com>2024-05-05 07:22:18 -0700
commitcd12d416271e9e9fd0f00303525021f75688ff9f (patch)
treeaf1fd7a88590e37b09e61ae5a1aaeec4c325b907 /ext/webgpu/byow.rs
parentb2628e4a069ed9fc13f34f6e4fd75f29c657e5a9 (diff)
chore: update wgpu (#23684)
Diffstat (limited to 'ext/webgpu/byow.rs')
-rw-r--r--ext/webgpu/byow.rs85
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"));
}