renderer/metal: clean up some memory management

This commit is contained in:
Mitchell Hashimoto
2023-11-17 20:55:36 -08:00
parent cc389c81c2
commit 5d7c47a469
2 changed files with 9 additions and 35 deletions

View File

@ -73,41 +73,6 @@ pub fn create(
};
errdefer app.surfaces.deinit(alloc);
// TODO: remove this temporary crap
// const glslang = @import("glslang");
// try glslang.init();
// {
// const c = glslang.c;
// const glsl_input: c.glslang_input_t = .{
// .language = c.GLSLANG_SOURCE_GLSL,
// .stage = c.GLSLANG_STAGE_FRAGMENT,
// .client = c.GLSLANG_CLIENT_VULKAN,
// .client_version = c.GLSLANG_TARGET_VULKAN_1_2,
// .target_language = c.GLSLANG_TARGET_SPV,
// .target_language_version = c.GLSLANG_TARGET_SPV_1_5,
// .code = @embedFile("temp.frag"),
// .default_version = 100,
// .default_profile = c.GLSLANG_NO_PROFILE,
// .force_default_version_and_profile = 0,
// .forward_compatible = 0,
// .messages = c.GLSLANG_MSG_DEFAULT_BIT,
// .resource = c.glslang_default_resource(),
// };
//
// const shader = try glslang.Shader.create(&glsl_input);
// defer shader.delete();
// try shader.preprocess(&glsl_input);
// try shader.parse(&glsl_input);
//
// const program = try glslang.Program.create();
// defer program.delete();
// program.addShader(shader);
// try program.link(c.GLSLANG_MSG_SPV_RULES_BIT | c.GLSLANG_MSG_VULKAN_RULES_BIT);
// program.spirvGenerate(c.GLSLANG_STAGE_FRAGMENT);
// const size = program.spirvGetSize();
// log.warn("SPIRV PROGRAM size={d}", .{size});
// }
return app;
}

View File

@ -254,6 +254,8 @@ fn initPostPipeline(
const ptr = post_library.msgSend(?*anyopaque, objc.sel("newFunctionWithName:"), .{str});
break :func_frag objc.Object.fromId(ptr.?);
};
defer func_vert.msgSend(void, objc.sel("release"), .{});
defer func_frag.msgSend(void, objc.sel("release"), .{});
// Create our descriptor
const desc = init: {
@ -262,6 +264,7 @@ fn initPostPipeline(
const id_init = id_alloc.msgSend(objc.Object, objc.sel("init"), .{});
break :init id_init;
};
defer desc.msgSend(void, objc.sel("release"), .{});
desc.setProperty("vertexFunction", func_vert);
desc.setProperty("fragmentFunction", func_frag);
@ -315,6 +318,8 @@ fn initCellPipeline(device: objc.Object, library: objc.Object) !objc.Object {
const ptr = library.msgSend(?*anyopaque, objc.sel("newFunctionWithName:"), .{str});
break :func_frag objc.Object.fromId(ptr.?);
};
defer func_vert.msgSend(void, objc.sel("release"), .{});
defer func_frag.msgSend(void, objc.sel("release"), .{});
// Create the vertex descriptor. The vertex descriptor describes the
// data layout of the vertex inputs. We use indexed (or "instanced")
@ -501,6 +506,8 @@ fn initImagePipeline(device: objc.Object, library: objc.Object) !objc.Object {
const ptr = library.msgSend(?*anyopaque, objc.sel("newFunctionWithName:"), .{str});
break :func_frag objc.Object.fromId(ptr.?);
};
defer func_vert.msgSend(void, objc.sel("release"), .{});
defer func_frag.msgSend(void, objc.sel("release"), .{});
// Create the vertex descriptor. The vertex descriptor describes the
// data layout of the vertex inputs. We use indexed (or "instanced")
@ -577,6 +584,7 @@ fn initImagePipeline(device: objc.Object, library: objc.Object) !objc.Object {
break :vertex_desc desc;
};
defer vertex_desc.msgSend(void, objc.sel("release"), .{});
// Create our descriptor
const desc = init: {
@ -585,6 +593,7 @@ fn initImagePipeline(device: objc.Object, library: objc.Object) !objc.Object {
const id_init = id_alloc.msgSend(objc.Object, objc.sel("init"), .{});
break :init id_init;
};
defer desc.msgSend(void, objc.sel("release"), .{});
// Set our properties
desc.setProperty("vertexFunction", func_vert);