From a1c9fe6897f41623e1643ac6a3e6c533b35fd208 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Mon, 7 Mar 2022 20:17:41 -0700 Subject: [PATCH] gpu: implement Adapter.reference, Adapter.release Signed-off-by: Stephen Gutekanst --- gpu/src/Adapter.zig | 12 ++++++++++-- gpu/src/NativeInstance.zig | 13 ++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gpu/src/Adapter.zig b/gpu/src/Adapter.zig index bcb703c8..f0449792 100644 --- a/gpu/src/Adapter.zig +++ b/gpu/src/Adapter.zig @@ -51,10 +51,18 @@ pub const VTable = struct { // TODO: // WGPU_EXPORT void wgpuAdapterRequestDevice(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor, WGPURequestDeviceCallback callback, void * userdata); // WGPU_EXPORT WGPUDevice wgpuAdapterCreateDevice(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor); - // WGPU_EXPORT void wgpuAdapterReference(WGPUAdapter adapter); - // WGPU_EXPORT void wgpuAdapterRelease(WGPUAdapter adapter); + reference: fn (ptr: *anyopaque) void, + release: fn (ptr: *anyopaque) void, }; +pub inline fn reference(adapter: Adapter) void { + adapter.vtable.reference(adapter.ptr); +} + +pub inline fn release(adapter: Adapter) void { + adapter.vtable.release(adapter.ptr); +} + /// Tests of the given feature can be used to create devices on this adapter. pub fn hasFeature(adapter: Adapter, feature: FeatureName) bool { for (adapter.features) |f| { diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index cf7ab628..2e912e3d 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -210,7 +210,18 @@ fn wrapAdapter(adapter: c.WGPUAdapter) Adapter { }; } -const adapter_vtable = Adapter.VTable{}; +const adapter_vtable = Adapter.VTable{ + .reference = (struct { + pub fn reference(ptr: *anyopaque) void { + c.wgpuAdapterReference(@ptrCast(c.WGPUAdapter, ptr)); + } + }).reference, + .release = (struct { + pub fn release(ptr: *anyopaque) void { + c.wgpuAdapterRelease(@ptrCast(c.WGPUAdapter, ptr)); + } + }).release, +}; // TODO: implement Device interface