From 45b5e4ce233914925ac5a12c6c84e30dbf86a80f Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sun, 31 Jul 2022 10:48:58 -0700 Subject: [PATCH] gpu: make Instance.requestAdapter friendlier Signed-off-by: Stephen Gutekanst --- gpu/src/instance.zig | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/gpu/src/instance.zig b/gpu/src/instance.zig index 7d2138bf..4ef5961f 100644 --- a/gpu/src/instance.zig +++ b/gpu/src/instance.zig @@ -15,8 +15,34 @@ pub const Instance = opaque { return Impl.instanceCreateSurface(instance, descriptor); } - pub inline fn requestAdapter(instance: *Instance, options: *const RequestAdapterOptions, callback: RequestAdapterCallback, userdata: ?*anyopaque) void { - Impl.instanceRequestAdapter(instance, options, callback, userdata); + pub inline fn requestAdapter( + instance: *Instance, + options: *const RequestAdapterOptions, + comptime Context: type, + comptime callback: fn ( + status: RequestAdapterStatus, + adapter: *Adapter, + message: ?[*:0]const u8, + ctx: Context, + ) callconv(.Inline) void, + context: Context, + ) void { + const Helper = struct { + pub fn callback( + status: RequestAdapterStatus, + adapter: *Adapter, + message: ?[*:0]const u8, + userdata: ?*anyopaque, + ) callconv(.C) void { + callback( + status, + adapter, + message, + if (Context == void) {} orelse @ptrCast(Context, userdata), + ); + } + }; + Impl.instanceRequestAdapter(instance, options, Helper.callback, if (Context == void) null orelse context); } pub inline fn reference(instance: *Instance) void {