From 155c291c8e0f09956175dc4c307ef674ccd01ead Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 16:00:24 -0700 Subject: [PATCH] gpu: implement Device.createBuffer Signed-off-by: Stephen Gutekanst --- gpu/src/Buffer.zig | 3 ++- gpu/src/Device.zig | 9 +++++++-- gpu/src/NativeInstance.zig | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gpu/src/Buffer.zig b/gpu/src/Buffer.zig index 34e692f7..d12d4d80 100644 --- a/gpu/src/Buffer.zig +++ b/gpu/src/Buffer.zig @@ -78,7 +78,8 @@ pub inline fn unmap(buf: Buffer) void { buf.vtable.unmap(buf.ptr); } -pub const Descriptor = struct { +pub const Descriptor = extern struct { + reserved: ?*anyopaque = null, label: ?[*:0]const u8 = null, usage: BufferUsage, size: usize, diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index c5b8e271..f8fec286 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -18,6 +18,7 @@ const CommandEncoder = @import("CommandEncoder.zig"); const ComputePipeline = @import("ComputePipeline.zig"); const BindGroup = @import("BindGroup.zig"); const BindGroupLayout = @import("BindGroupLayout.zig"); +const Buffer = @import("Buffer.zig"); const Device = @This(); @@ -31,8 +32,7 @@ pub const VTable = struct { release: fn (ptr: *anyopaque) void, createBindGroup: fn (ptr: *anyopaque, descriptor: *const BindGroup.Descriptor) BindGroup, createBindGroupLayout: fn (ptr: *anyopaque, descriptor: *const BindGroupLayout.Descriptor) BindGroupLayout, - // createBuffer: fn (ptr: *anyopaque, descriptor: *const Buffer.Descriptor) Buffer, - // WGPU_EXPORT WGPUBuffer wgpuDeviceCreateBuffer(WGPUDevice device, WGPUBufferDescriptor const * descriptor); + createBuffer: fn (ptr: *anyopaque, descriptor: *const Buffer.Descriptor) Buffer, createCommandEncoder: fn (ptr: *anyopaque, descriptor: ?*const CommandEncoder.Descriptor) CommandEncoder, createComputePipeline: fn (ptr: *anyopaque, descriptor: *const ComputePipeline.Descriptor) ComputePipeline, createComputePipelineAsync: fn ( @@ -126,6 +126,10 @@ pub inline fn destroy(device: Device) void { device.vtable.destroy(device.ptr); } +pub inline fn createBuffer(device: Device, descriptor: *const Buffer.Descriptor) Buffer { + return device.vtable.createBuffer(device.ptr, descriptor); +} + pub inline fn createCommandEncoder(device: Device, descriptor: ?*const CommandEncoder.Descriptor) CommandEncoder { return device.vtable.createCommandEncoder(device.ptr, descriptor); } @@ -183,6 +187,7 @@ test { _ = createShaderModule; _ = nativeCreateSwapChain; _ = destroy; + _ = createBuffer; _ = createCommandEncoder; _ = createComputePipeline; _ = createComputePipelineAsync; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 845c8afa..5d038ede 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -441,6 +441,14 @@ const device_vtable = Device.VTable{ c.wgpuDeviceDestroy(@ptrCast(c.WGPUDevice, ptr)); } }).destroy, + .createBuffer = (struct { + pub fn createBuffer(ptr: *anyopaque, descriptor: *const Buffer.Descriptor) Buffer { + return wrapBuffer(c.wgpuDeviceCreateBuffer( + @ptrCast(c.WGPUDevice, ptr), + @ptrCast(*const c.WGPUBufferDescriptor, descriptor), + )); + } + }).createBuffer, .createCommandEncoder = (struct { pub fn createCommandEncoder(ptr: *anyopaque, descriptor: ?*const CommandEncoder.Descriptor) CommandEncoder { const desc: ?*c.WGPUCommandEncoderDescriptor = if (descriptor) |d| &.{