gpu: Queue: OnSubmittedWorkDone -> WorkDoneCallback, consistent w/other callbacks

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-15 11:19:32 -07:00 committed by Stephen Gutekanst
parent 356e4102cd
commit 3ffc1ca5d8
2 changed files with 21 additions and 15 deletions

View file

@ -516,10 +516,10 @@ const queue_vtable = Queue.VTable{
const callback = (struct { const callback = (struct {
pub fn callback(status: c.WGPUQueueWorkDoneStatus, userdata: ?*anyopaque) callconv(.C) void { pub fn callback(status: c.WGPUQueueWorkDoneStatus, userdata: ?*anyopaque) callconv(.C) void {
const _on_submitted_work_done = @ptrCast(*Queue.OnSubmittedWorkDone, @alignCast(@alignOf(*Queue.OnSubmittedWorkDone), userdata)); const callback_info = @ptrCast(*Queue.WorkDoneCallback, @alignCast(@alignOf(*Queue.WorkDoneCallback), userdata));
_on_submitted_work_done.callback( callback_info.type_erased_callback(
callback_info.type_erased_ctx,
@intToEnum(Queue.WorkDoneStatus, status), @intToEnum(Queue.WorkDoneStatus, status),
_on_submitted_work_done.userdata,
); );
} }
}).callback; }).callback;

View file

@ -2,7 +2,7 @@ const CommandBuffer = @import("CommandBuffer.zig");
const Queue = @This(); const Queue = @This();
on_submitted_work_done: ?OnSubmittedWorkDone = null, on_submitted_work_done: ?WorkDoneCallback = null,
/// The type erased pointer to the Queue implementation /// The type erased pointer to the Queue implementation
/// Equal to c.WGPUQueue for NativeInstance. /// Equal to c.WGPUQueue for NativeInstance.
@ -32,18 +32,24 @@ pub inline fn submit(queue: Queue, commands: []const CommandBuffer) void {
queue.vtable.submit(queue, commands); queue.vtable.submit(queue, commands);
} }
pub const OnSubmittedWorkDone = struct { pub const WorkDoneCallback = struct {
userdata: *anyopaque, type_erased_ctx: *anyopaque,
callback: fn (status: WorkDoneStatus, userdata: *anyopaque) void, type_erased_callback: fn (ctx: *anyopaque, status: WorkDoneStatus) callconv(.Inline) void,
pub fn init(
comptime Context: type,
ctx: *Context,
comptime callback: fn (ctx: *Context, status: WorkDoneStatus) void,
) WorkDoneCallback {
const erased = (struct {
pub inline fn erased(type_erased_ctx: *anyopaque, status: WorkDoneStatus) void {
callback(@ptrCast(*Context, @alignCast(@alignOf(*Context), type_erased_ctx)), status);
}
}).erased;
fn init(comptime Context: type, userdata: *Context, comptime callback: fn (status: WorkDoneStatus, userdata: *Context) void) OnSubmittedWorkDone {
return .{ return .{
.userdata = userdata, .type_erased_ctx = ctx,
.callback = (struct { .type_erased_callback = erased,
pub inline fn untyped(status: WorkDoneStatus, _userdata: *anyopaque) void {
callback(status, @ptrCast(*Context, @alignCast(@alignOf(*Context), _userdata)));
}
}).untyped,
}; };
} }
}; };
@ -61,6 +67,6 @@ test "syntax" {
_ = reference; _ = reference;
_ = release; _ = release;
_ = submit; _ = submit;
_ = OnSubmittedWorkDone; _ = WorkDoneCallback;
_ = WorkDoneStatus; _ = WorkDoneStatus;
} }