renderer: remove metal workaround, this caused crashes on x86_64

And it now works.
This commit is contained in:
Mitchell Hashimoto
2023-07-01 15:14:24 -07:00
parent 1d1b868958
commit f537d7aab1
3 changed files with 17 additions and 84 deletions

View File

@ -213,11 +213,6 @@ pub fn build(b: *std.Build) !void {
{
exe.addOptions("build_options", exe_options);
if (target.isDarwin()) {
// See the comment in this file
exe.addCSourceFile("src/renderer/metal_workaround.c", &.{});
}
// Add the shared dependencies
_ = try addDeps(b, exe, static);

View File

@ -1176,55 +1176,28 @@ fn syncAtlasTexture(device: objc.Object, atlas: *const font.Atlas, texture: *obj
texture.* = try initAtlasTexture(device, atlas);
}
// Workaround for: https://github.com/ziglang/zig/issues/13598
ghostty_metal_replaceregion(
texture.value,
objc.sel("replaceRegion:mipmapLevel:withBytes:bytesPerRow:").value,
MTLRegion{
.origin = .{ .x = 0, .y = 0, .z = 0 },
.size = .{
.width = @intCast(atlas.size),
.height = @intCast(atlas.size),
.depth = 1,
},
},
0,
atlas.data.ptr,
@as(c_ulong, atlas.format.depth() * atlas.size),
);
// Once the above linked issue is fixed, this is what we actually
// want to do:
//
// texture.msgSend(
// void,
// objc.sel("replaceRegion:mipmapLevel:withBytes:bytesPerRow:"),
// .{
// MTLRegion{
// .origin = .{ .x = 0, .y = 0, .z = 0 },
// .size = .{
// .width = @intCast(c_ulong, atlas.size),
// .height = @intCast(c_ulong, atlas.size),
// .depth = 1,
// },
// },
// @as(c_ulong, 0),
// atlas.data.ptr,
// @as(c_ulong, atlas.format.depth() * atlas.size),
// },
// );
texture.msgSend(
void,
objc.sel("replaceRegion:mipmapLevel:withBytes:bytesPerRow:"),
.{
MTLRegion{
.origin = .{ .x = 0, .y = 0, .z = 0 },
.size = .{
.width = @intCast(atlas.size),
.height = @intCast(atlas.size),
.depth = 1,
},
},
@as(c_ulong, 0),
atlas.data.ptr,
@as(c_ulong, atlas.format.depth() * atlas.size),
},
);
}
extern "c" fn ghostty_metal_replaceregion(
objc.c.id,
objc.c.SEL,
MTLRegion,
c_ulong,
*anyopaque,
c_ulong,
) void;
/// Initialize the shader library.
fn initLibrary(device: objc.Object, data: []const u8) !objc.Object {
const source = try macos.foundation.String.createWithBytes(

View File

@ -1,35 +0,0 @@
// Workaround for:
// https://github.com/ziglang/zig/issues/13598
#include <objc/message.h>
#include <objc/runtime.h>
// From Metal.h
typedef struct Origin {
unsigned long x;
unsigned long y;
unsigned long z;
} Origin;
typedef struct Size {
unsigned long width;
unsigned long height;
unsigned long depth;
} Size;
typedef struct MTLRegion {
Origin origin;
Size size;
} MTLRegion;
void ghostty_metal_replaceregion(
id target,
SEL sel,
MTLRegion region,
unsigned long offset,
void *ptr,
unsigned long len
) {
void (*replaceRegion)(id, SEL, MTLRegion, unsigned long, void *, unsigned long) = (void (*)(id, SEL, MTLRegion, unsigned long, void *, unsigned long)) objc_msgSend;
replaceRegion(target, sel, region, offset, ptr, len);
}