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