Avoid panic when unable to access a GPU

This will remove noise from our panic logs.

Co-authored-by: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Max Brunsfeld 2022-07-18 14:13:12 -07:00
parent 59366a5c44
commit 7998771d9f

View File

@ -11,8 +11,8 @@ use crate::{
use block::ConcreteBlock;
use cocoa::{
appkit::{
CGPoint, NSApplication, NSBackingStoreBuffered, NSScreen, NSView, NSViewHeightSizable,
NSViewWidthSizable, NSWindow, NSWindowButton, NSWindowStyleMask,
CGPoint, NSApplication, NSBackingStoreBuffered, NSModalResponse, NSScreen, NSView,
NSViewHeightSizable, NSViewWidthSizable, NSWindow, NSWindowButton, NSWindowStyleMask,
},
base::{id, nil},
foundation::{NSAutoreleasePool, NSInteger, NSSize, NSString},
@ -228,8 +228,16 @@ impl Window {
native_window.setFrame_display_(screen.visibleFrame(), YES);
}
let device =
metal::Device::system_default().expect("could not find default metal device");
let device = if let Some(device) = metal::Device::system_default() {
device
} else {
let alert: id = msg_send![class!(NSAlert), alloc];
let _: () = msg_send![alert, init];
let _: () = msg_send![alert, setAlertStyle: 2];
let _: () = msg_send![alert, setMessageText: ns_string("Unable to access a compatible graphics device")];
let _: NSModalResponse = msg_send![alert, runModal];
std::process::exit(1);
};
let layer: id = msg_send![class!(CAMetalLayer), layer];
let _: () = msg_send![layer, setDevice: device.as_ptr()];