From 03a9cbab9a1835b3c42925b8710c01921c58ef8f Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Tue, 16 Aug 2022 17:35:18 -0700 Subject: [PATCH] gpu: add Device.Descriptor.init slice helper Signed-off-by: Stephen Gutekanst --- gpu/README.md | 1 + gpu/src/device.zig | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gpu/README.md b/gpu/README.md index 9e45b701..27012675 100644 --- a/gpu/README.md +++ b/gpu/README.md @@ -169,6 +169,7 @@ And, to initialize data structures with slices in them, the following helpers ar * `BindGroup.Descriptor.init` * `InstanceDescriptor.init` * `TogglesDeviceDescriptor.init` +* `Device.Descriptor.init` ### Typed callbacks diff --git a/gpu/src/device.zig b/gpu/src/device.zig index 21f8d4f2..782a951f 100644 --- a/gpu/src/device.zig +++ b/gpu/src/device.zig @@ -44,11 +44,27 @@ pub const Device = opaque { pub const Descriptor = extern struct { next_in_chain: ?*const ChainedStruct = null, label: ?[*:0]const u8 = null, - // TODO: slice helper required_features_count: u32 = 0, required_features: ?[*]const FeatureName = null, required_limits: ?*const RequiredLimits = null, default_queue: Queue.Descriptor = Queue.Descriptor{}, + + /// Provides a slightly friendlier Zig API to initialize this structure. + pub inline fn init(v: struct { + next_in_chain: ?*const ChainedStruct = null, + label: ?[*:0]const u8 = null, + required_features: ?[]const FeatureName = null, + required_limits: ?*const RequiredLimits = null, + default_queue: Queue.Descriptor = Queue.Descriptor{}, + }) Descriptor { + return .{ + .next_in_chain = v.next_in_chain, + .label = v.label, + .required_features_count = if (v.required_features) |e| @intCast(u32, e.len) else 0, + .required_features = if (v.required_features) |e| e.ptr else null, + .default_queue = v.default_queue, + }; + } }; pub inline fn createBindGroup(device: *Device, descriptor: *const BindGroup.Descriptor) *BindGroup {