From 9c7aa55273e4e5e9dac98a3ce15b4d97a18cb270 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 11 Mar 2022 20:29:32 -0700 Subject: [PATCH] gpu: implement Device.createCommandEncoder Signed-off-by: Stephen Gutekanst --- gpu/src/Device.zig | 7 ++++++- gpu/src/NativeInstance.zig | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index f59ad84d..70471616 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -13,6 +13,7 @@ const ShaderModule = @import("ShaderModule.zig"); const Surface = @import("Surface.zig"); const SwapChain = @import("SwapChain.zig"); const RenderPipeline = @import("RenderPipeline.zig"); +const CommandEncoder = @import("CommandEncoder.zig"); const Device = @This(); @@ -26,7 +27,7 @@ pub const VTable = struct { // WGPU_EXPORT WGPUBindGroup wgpuDeviceCreateBindGroup(WGPUDevice device, WGPUBindGroupDescriptor const * descriptor); // WGPU_EXPORT WGPUBindGroupLayout wgpuDeviceCreateBindGroupLayout(WGPUDevice device, WGPUBindGroupLayoutDescriptor const * descriptor); // WGPU_EXPORT WGPUBuffer wgpuDeviceCreateBuffer(WGPUDevice device, WGPUBufferDescriptor const * descriptor); - // WGPU_EXPORT WGPUCommandEncoder wgpuDeviceCreateCommandEncoder(WGPUDevice device, WGPUCommandEncoderDescriptor const * descriptor); + createCommandEncoder: fn (ptr: *anyopaque, descriptor: *const CommandEncoder.Descriptor) CommandEncoder, // WGPU_EXPORT WGPUComputePipeline wgpuDeviceCreateComputePipeline(WGPUDevice device, WGPUComputePipelineDescriptor const * descriptor); // WGPU_EXPORT void wgpuDeviceCreateComputePipelineAsync(WGPUDevice device, WGPUComputePipelineDescriptor const * descriptor, WGPUCreateComputePipelineAsyncCallback callback, void * userdata); // WGPU_EXPORT WGPUBuffer wgpuDeviceCreateErrorBuffer(WGPUDevice device); @@ -82,6 +83,10 @@ pub inline fn destroy(device: Device) void { device.vtable.destroy(device.ptr); } +pub inline fn createCommandEncoder(device: Device, descriptor: *const CommandEncoder.Descriptor) CommandEncoder { + return device.vtable.createCommandEncoder(device.ptr, descriptor); +} + pub inline fn createRenderPipeline(device: Device, descriptor: *const RenderPipeline.Descriptor) RenderPipeline { return device.vtable.createRenderPipeline(device.ptr, descriptor); } diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index ad02d1a5..113caf12 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -378,6 +378,15 @@ const device_vtable = Device.VTable{ c.wgpuDeviceDestroy(@ptrCast(c.WGPUDevice, ptr)); } }).destroy, + .createCommandEncoder = (struct { + pub fn createCommandEncoder(ptr: *anyopaque, descriptor: *const CommandEncoder.Descriptor) CommandEncoder { + const desc = c.WGPUCommandEncoderDescriptor{ + .nextInChain = null, + .label = descriptor.label, + }; + return wrapCommandEncoder(c.wgpuDeviceCreateCommandEncoder(@ptrCast(c.WGPUDevice, ptr), &desc)); + } + }).createCommandEncoder, .createRenderPipeline = (struct { pub fn createRenderPipeline(ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline { var tmp_depth_stencil: c.WGPUDepthStencilState = undefined;