diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index 6c82fd9f..267dc38a 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -249,6 +249,7 @@ pub const Descriptor = struct { label: ?[*:0]const u8 = null, required_features: ?[]Feature = null, required_limits: ?Limits = null, + default_queue: ?Queue.Descriptor = null, }; pub const LostReason = enum(u32) { diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index a79264b9..161ae5fd 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -280,6 +280,7 @@ const adapter_vtable = Adapter.VTable{ .requiredFeaturesCount = if (descriptor.required_features) |f| @intCast(u32, f.len) else 0, .requiredFeatures = if (descriptor.required_features) |f| @ptrCast([*]const c_uint, f.ptr) else null, .requiredLimits = if (required_limits) |*l| l else null, + .defaultQueue = if (descriptor.default_queue) |q| .{ .nextInChain = null, .label = q.label } else .{ .nextInChain = null, .label = null }, }; const cCallback = (struct { @@ -520,10 +521,19 @@ const device_vtable = Device.VTable{ }).nativeCreateSwapChain, .createTexture = (struct { pub fn createTexture(ptr: *anyopaque, descriptor: *const Texture.Descriptor) Texture { - return wrapTexture(c.wgpuDeviceCreateTexture( - @ptrCast(c.WGPUDevice, ptr), - @ptrCast(*const c.WGPUTextureDescriptor, descriptor), - )); + const desc = c.WGPUTextureDescriptor{ + .nextInChain = null, + .label = if (descriptor.label) |l| l else null, + .usage = @bitCast(u32, descriptor.usage), + .dimension = @enumToInt(descriptor.dimension), + .size = @bitCast(c.WGPUExtent3D, descriptor.size), + .format = @enumToInt(descriptor.format), + .mipLevelCount = descriptor.mip_level_count, + .sampleCount = descriptor.sample_count, + .viewFormatCount = if (descriptor.view_formats) |vf| @intCast(u32, vf.len) else 0, + .viewFormats = if (descriptor.view_formats) |vf| @ptrCast([*]const c.WGPUTextureFormat, vf.ptr) else null, + }; + return wrapTexture(c.wgpuDeviceCreateTexture(@ptrCast(c.WGPUDevice, ptr), &desc)); } }).createTexture, .destroy = (struct { diff --git a/gpu/src/Queue.zig b/gpu/src/Queue.zig index 19955c40..ca2a0349 100644 --- a/gpu/src/Queue.zig +++ b/gpu/src/Queue.zig @@ -99,6 +99,10 @@ pub const WorkDoneCallback = struct { } }; +pub const Descriptor = struct { + label: ?[*:0]const u8 = null, +}; + pub const WorkDoneStatus = enum(u32) { Success = 0x00000000, Error = 0x00000001, diff --git a/gpu/src/Texture.zig b/gpu/src/Texture.zig index a788a49b..066c93cb 100644 --- a/gpu/src/Texture.zig +++ b/gpu/src/Texture.zig @@ -48,6 +48,7 @@ pub const Descriptor = struct { format: Format, mip_level_count: u32, sample_count: u32, + view_formats: ?[]const Format = null, }; pub const Usage = packed struct {