gpu: add Device.Descriptor.init slice helper

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-08-16 17:35:18 -07:00
parent 5e4aa7e6df
commit 03a9cbab9a
2 changed files with 18 additions and 1 deletions

View file

@ -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

View file

@ -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 {