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); 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 // Add the shared dependencies
_ = try addDeps(b, exe, static); _ = 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); 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 // Once the above linked issue is fixed, this is what we actually
// want to do: // want to do:
// //
// texture.msgSend( texture.msgSend(
// void, void,
// objc.sel("replaceRegion:mipmapLevel:withBytes:bytesPerRow:"), objc.sel("replaceRegion:mipmapLevel:withBytes:bytesPerRow:"),
// .{ .{
// MTLRegion{ MTLRegion{
// .origin = .{ .x = 0, .y = 0, .z = 0 }, .origin = .{ .x = 0, .y = 0, .z = 0 },
// .size = .{ .size = .{
// .width = @intCast(c_ulong, atlas.size), .width = @intCast(atlas.size),
// .height = @intCast(c_ulong, atlas.size), .height = @intCast(atlas.size),
// .depth = 1, .depth = 1,
// }, },
// }, },
// @as(c_ulong, 0), @as(c_ulong, 0),
// atlas.data.ptr, atlas.data.ptr,
// @as(c_ulong, atlas.format.depth() * atlas.size), @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. /// Initialize the shader library.
fn initLibrary(device: objc.Object, data: []const u8) !objc.Object { fn initLibrary(device: objc.Object, data: []const u8) !objc.Object {
const source = try macos.foundation.String.createWithBytes( 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);
}