From 12e8bef9eb01d5b33d37bf1495d14be2ab2f5588 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sun, 31 Jul 2022 10:41:59 -0700 Subject: [PATCH] gpu: make Queue.onSubmittedWorkDone friendlier Signed-off-by: Stephen Gutekanst --- gpu/src/queue.zig | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gpu/src/queue.zig b/gpu/src/queue.zig index 76bea83c..44a792e7 100644 --- a/gpu/src/queue.zig +++ b/gpu/src/queue.zig @@ -29,8 +29,20 @@ pub const Queue = opaque { Impl.queueCopyTextureForBrowser(queue, source, destination, copy_size, options); } - pub inline fn onSubmittedWorkDone(queue: *Queue, signal_value: u64, callback: Queue.WorkDoneCallback, userdata: ?*anyopaque) void { - Impl.queueOnSubmittedWorkDone(queue, signal_value, callback, userdata); + // TODO: is it not possible to *unset* this callback? Presumably it should be nullable? + pub inline fn onSubmittedWorkDone( + queue: *Queue, + signal_value: u64, + comptime Context: type, + comptime callback: fn (status: WorkDoneStatus, ctx: Context) callconv(.Inline) void, + context: Context, + ) void { + const Helper = struct { + pub fn callback(status: WorkDoneStatus, userdata: ?*anyopaque) callconv(.C) void { + callback(status, if (Context == void) {} orelse @ptrCast(Context, userdata)); + } + }; + Impl.queueOnSubmittedWorkDone(queue, signal_value, Helper.callback, if (Context == void) null orelse context); } pub inline fn setLabel(queue: *Queue, label: [*:0]const u8) void {