mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
iOS: Fix crash on device (#4684)
Currently causes a crash on launch in iOS devices (not Simulators) since [isHeadless](https://developer.apple.com/documentation/metal/mtldevice/1433377-isheadless), [isRemovable](https://developer.apple.com/documentation/metal/mtldevice/2889851-isremovable) and [isLowPower](https://developer.apple.com/documentation/metal/mtldevice/1433409-islowpower) are only available on macOS (raises `[AGXG16GDevice isHeadless]: unrecognized selector sent to instance ... `). The [preferred method](https://developer.apple.com/documentation/metal/gpu_devices_and_work_submission/getting_the_default_gpu) in iOS is to access the single GPU device by attempting to create a default one. Fixes #4685.
This commit is contained in:
@ -209,9 +209,13 @@ pub const GPUState = struct {
|
||||
}
|
||||
|
||||
fn chooseDevice() error{NoMetalDevice}!objc.Object {
|
||||
var chosen_device: ?objc.Object = null;
|
||||
|
||||
switch (comptime builtin.os.tag) {
|
||||
.macos => {
|
||||
const devices = objc.Object.fromId(mtl.MTLCopyAllDevices());
|
||||
defer devices.release();
|
||||
var chosen_device: ?objc.Object = null;
|
||||
|
||||
var iter = devices.iterate();
|
||||
while (iter.next()) |device| {
|
||||
// We want a GPU that’s connected to a display.
|
||||
@ -223,6 +227,13 @@ pub const GPUState = struct {
|
||||
if (device.getProperty(bool, "isRemovable") or
|
||||
device.getProperty(bool, "isLowPower")) break;
|
||||
}
|
||||
},
|
||||
.ios => {
|
||||
chosen_device = objc.Object.fromId(mtl.MTLCreateSystemDefaultDevice());
|
||||
},
|
||||
else => @compileError("unsupported target for Metal"),
|
||||
}
|
||||
|
||||
const device = chosen_device orelse return error.NoMetalDevice;
|
||||
return device.retain();
|
||||
}
|
||||
|
@ -175,4 +175,8 @@ pub const MTLSize = extern struct {
|
||||
depth: c_ulong,
|
||||
};
|
||||
|
||||
/// https://developer.apple.com/documentation/metal/1433367-mtlcopyalldevices
|
||||
pub extern "c" fn MTLCopyAllDevices() ?*anyopaque;
|
||||
|
||||
/// https://developer.apple.com/documentation/metal/1433401-mtlcreatesystemdefaultdevice
|
||||
pub extern "c" fn MTLCreateSystemDefaultDevice() ?*anyopaque;
|
||||
|
Reference in New Issue
Block a user