From 6d954555fb7f8bc3a26116cf2763c19eb1f79e74 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Mon, 25 Jul 2022 21:38:00 -0700 Subject: [PATCH] gpu: add Adapter.requestDevice Signed-off-by: Stephen Gutekanst --- gpu/TODO-webgpu.h | 15 --------------- gpu/src/adapter.zig | 4 ++++ gpu/src/interface.zig | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/gpu/TODO-webgpu.h b/gpu/TODO-webgpu.h index c285c639..4ce174be 100644 --- a/gpu/TODO-webgpu.h +++ b/gpu/TODO-webgpu.h @@ -1,18 +1,3 @@ -// NOTE: descriptor is nullable, see https://bugs.chromium.org/p/dawn/issues/detail?id=1502 -// WGPU_EXPORT void wgpuAdapterRequestDevice(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor, WGPURequestDeviceCallback callback, void * userdata); -export fn wgpuAdapterRequestDevice(adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) void { - impl.adapterRequestDevice(adapter, descriptor, callback, userdata); -} -pub inline fn adapterRequestDevice(adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) void { - _ = adapter; - _ = descriptor; - _ = callback; - _ = userdata; -} -pub inline fn requestDevice(adapter: Adapter, descriptor: ?*const DeviceDescriptor, callback: RequestDeviceCallback, userdata: *anyopaque) void { - impl.adapterRequestDevice(adapter, descriptor, callback, userdata); -} - // WGPU_EXPORT void wgpuAdapterReference(WGPUAdapter adapter); export fn wgpuAdapterReference(adapter: gpu.Adapter) void { impl.adapterReference(adapter); diff --git a/gpu/src/adapter.zig b/gpu/src/adapter.zig index 0280c045..fb01aed4 100644 --- a/gpu/src/adapter.zig +++ b/gpu/src/adapter.zig @@ -28,6 +28,10 @@ pub const Adapter = *opaque { pub inline fn hasFeature(adapter: Adapter, feature: FeatureName) bool { return impl.adapterHasFeature(adapter, feature); } + + pub inline fn requestDevice(adapter: Adapter, descriptor: ?*const DeviceDescriptor, callback: RequestDeviceCallback, userdata: *anyopaque) void { + impl.adapterRequestDevice(adapter, descriptor, callback, userdata); + } }; pub const RequestDeviceCallback = fn ( diff --git a/gpu/src/interface.zig b/gpu/src/interface.zig index 8794776a..f5302fca 100644 --- a/gpu/src/interface.zig +++ b/gpu/src/interface.zig @@ -24,7 +24,7 @@ pub fn Interface(comptime Impl: type) type { assertDecl(Impl, "adapterGetLimits", fn (adapter: gpu.Adapter, limits: *gpu.SupportedLimits) callconv(.Inline) bool); assertDecl(Impl, "adapterGetProperties", fn (adapter: gpu.Adapter, properties: *gpu.AdapterProperties) callconv(.Inline) void); assertDecl(Impl, "adapterHasFeature", fn (adapter: gpu.Adapter, feature: gpu.FeatureName) callconv(.Inline) bool); - // assertDecl(Impl, "adapterRequestDevice", fn (adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) callconv(.Inline) void); + assertDecl(Impl, "adapterRequestDevice", fn (adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) callconv(.Inline) void); // assertDecl(Impl, "adapterReference", fn (adapter: gpu.Adapter) callconv(.Inline) void); // assertDecl(Impl, "adapterRelease", fn (adapter: gpu.Adapter) callconv(.Inline) void); // assertDecl(Impl, "bindGroupSetLabel", fn (bind_group: gpu.BindGroup, label: [*:0]const u8) callconv(.Inline) void); @@ -265,6 +265,12 @@ pub fn Export(comptime Impl: type) type { export fn wgpuAdapterHasFeature(adapter: gpu.Adapter, feature: gpu.FeatureName) bool { return Impl.adapterHasFeature(adapter, feature); } + + // NOTE: descriptor is nullable, see https://bugs.chromium.org/p/dawn/issues/detail?id=1502 + // WGPU_EXPORT void wgpuAdapterRequestDevice(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor, WGPURequestDeviceCallback callback, void * userdata); + export fn wgpuAdapterRequestDevice(adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) void { + Impl.adapterRequestDevice(adapter, descriptor, callback, userdata); + } }; } @@ -309,6 +315,13 @@ pub const NullInterface = Interface(struct { _ = feature; return false; } + + pub inline fn adapterRequestDevice(adapter: gpu.Adapter, descriptor: ?*const gpu.DeviceDescriptor, callback: gpu.RequestDeviceCallback, userdata: *anyopaque) void { + _ = adapter; + _ = descriptor; + _ = callback; + _ = userdata; + } }); test "null" {