From 03d6e003a4223b1e335f2c08f55a791f332d7f3c Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sun, 31 Jul 2022 10:39:08 -0700 Subject: [PATCH] gpu: make ShaderModule.getCompilationInfo friendlier Signed-off-by: Stephen Gutekanst --- gpu/src/shader_module.zig | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/gpu/src/shader_module.zig b/gpu/src/shader_module.zig index 233fd228..c943a8f7 100644 --- a/gpu/src/shader_module.zig +++ b/gpu/src/shader_module.zig @@ -1,5 +1,7 @@ const ChainedStruct = @import("types.zig").ChainedStruct; const CompilationInfoCallback = @import("callbacks.zig").CompilationInfoCallback; +const CompilationInfoRequestStatus = @import("types.zig").CompilationInfoRequestStatus; +const CompilationInfo = @import("types.zig").CompilationInfo; const Impl = @import("interface.zig").Impl; pub const ShaderModule = opaque { @@ -19,8 +21,30 @@ pub const ShaderModule = opaque { source: [*:0]const u8, }; - pub inline fn getCompilationInfo(shader_module: *ShaderModule, callback: CompilationInfoCallback, userdata: ?*anyopaque) void { - Impl.shaderModuleGetCompilationInfo(shader_module, callback, userdata); + pub inline fn getCompilationInfo( + shader_module: *ShaderModule, + comptime Context: type, + comptime callback: fn ( + status: CompilationInfoRequestStatus, + compilation_info: *const CompilationInfo, + ctx: Context, + ) callconv(.Inline) void, + context: Context, + ) void { + const Helper = struct { + pub fn callback( + status: CompilationInfoRequestStatus, + compilation_info: *const CompilationInfo, + userdata: ?*anyopaque, + ) callconv(.C) void { + callback( + status, + compilation_info, + if (Context == void) {} orelse @ptrCast(Context, userdata), + ); + } + }; + Impl.shaderModuleGetCompilationInfo(shader_module, Helper.callback, if (Context == void) null orelse context); } pub inline fn setLabel(shader_module: *ShaderModule, label: [*:0]const u8) void {