From 418d379f1cbe5c68f415e519c69a31376a247571 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 17:49:30 -0700 Subject: [PATCH] gpu: implement Device.createSampler Signed-off-by: Stephen Gutekanst --- gpu/src/Device.zig | 9 +++++++-- gpu/src/NativeInstance.zig | 8 ++++++++ gpu/src/Sampler.zig | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index 17fef222..0b540bfe 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -23,6 +23,7 @@ const ExternalTexture = @import("ExternalTexture.zig"); const PipelineLayout = @import("PipelineLayout.zig"); const QuerySet = @import("QuerySet.zig"); const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); +const Sampler = @import("Sampler.zig"); const Device = @This(); @@ -55,8 +56,7 @@ pub const VTable = struct { descriptor: *const RenderPipeline.Descriptor, callback: *RenderPipeline.CreateCallback, ) void, - // createSampler: fn (ptr: *anyopaque, descriptor: *const Sampler.Descriptor) Sampler, - // WGPU_EXPORT WGPUSampler wgpuDeviceCreateSampler(WGPUDevice device, WGPUSamplerDescriptor const * descriptor); + createSampler: fn (ptr: *anyopaque, descriptor: *const Sampler.Descriptor) Sampler, createShaderModule: fn (ptr: *anyopaque, descriptor: *const ShaderModule.Descriptor) ShaderModule, nativeCreateSwapChain: fn (ptr: *anyopaque, surface: ?Surface, descriptor: *const SwapChain.Descriptor) SwapChain, // createTexture: fn (ptr: *anyopaque, descriptor: *const Texture.Descriptor) Texture, @@ -113,6 +113,10 @@ pub inline fn createBindGroupLayout(device: Device, descriptor: *const BindGroup return device.vtable.createBindGroupLayout(device.ptr, descriptor); } +pub inline fn createSampler(device: Device, descriptor: *const Sampler.Descriptor) Sampler { + return device.vtable.createSampler(device.ptr, descriptor); +} + pub inline fn createShaderModule(device: Device, descriptor: *const ShaderModule.Descriptor) ShaderModule { return device.vtable.createShaderModule(device.ptr, descriptor); } @@ -203,6 +207,7 @@ test { _ = injectError; _ = createBindGroup; _ = createBindGroupLayout; + _ = createSampler; _ = createShaderModule; _ = nativeCreateSwapChain; _ = destroy; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 3de92d4f..bb809fa3 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -382,6 +382,14 @@ const device_vtable = Device.VTable{ return wrapBindGroupLayout(c.wgpuDeviceCreateBindGroupLayout(@ptrCast(c.WGPUDevice, ptr), &desc)); } }).createBindGroupLayout, + .createSampler = (struct { + pub fn createSampler(ptr: *anyopaque, descriptor: *const Sampler.Descriptor) Sampler { + return wrapSampler(c.wgpuDeviceCreateSampler( + @ptrCast(c.WGPUDevice, ptr), + @ptrCast(*const c.WGPUSamplerDescriptor, descriptor), + )); + } + }).createSampler, .createShaderModule = (struct { pub fn createShaderModule(ptr: *anyopaque, descriptor: *const ShaderModule.Descriptor) ShaderModule { switch (descriptor.code) { diff --git a/gpu/src/Sampler.zig b/gpu/src/Sampler.zig index cb7bd433..4d5dfde5 100644 --- a/gpu/src/Sampler.zig +++ b/gpu/src/Sampler.zig @@ -39,7 +39,8 @@ pub const BindingLayout = extern struct { type: BindingType, }; -pub const Descriptor = struct { +pub const Descriptor = extern struct { + reserved: ?*anyopaque = null, label: ?[*:0]const u8 = null, address_mode_u: AddressMode, address_mode_v: AddressMode,