diff --git a/gpu/src/bind_group.zig b/gpu/src/bind_group.zig index 6564f35f..414b614d 100644 --- a/gpu/src/bind_group.zig +++ b/gpu/src/bind_group.zig @@ -6,6 +6,25 @@ const BindGroupLayout = @import("bind_group_layout.zig").BindGroupLayout; const Impl = @import("interface.zig").Impl; pub const BindGroup = opaque { + pub const Entry = extern struct { + next_in_chain: ?*const ChainedStruct = null, + binding: u32, + buffer: ?*Buffer, + offset: u64 = 0, + size: u64, + sampler: ?*Sampler, + texture_view: ?*TextureView, + }; + + pub const Descriptor = extern struct { + next_in_chain: ?*const ChainedStruct = null, + label: ?[*:0]const u8 = null, + layout: *BindGroupLayout, + entry_count: u32, + // TODO: file a bug on Dawn, this is not marked as nullable but in fact is. + entries: ?[*]const Entry, + }; + pub inline fn setLabel(bind_group: *BindGroup, label: [*:0]const u8) void { Impl.bindGroupSetLabel(bind_group, label); } @@ -18,22 +37,3 @@ pub const BindGroup = opaque { Impl.bindGroupRelease(bind_group); } }; - -pub const BindGroupEntry = extern struct { - next_in_chain: ?*const ChainedStruct = null, - binding: u32, - buffer: ?*Buffer, - offset: u64 = 0, - size: u64, - sampler: ?*Sampler, - texture_view: ?*TextureView, -}; - -pub const BindGroupDescriptor = extern struct { - next_in_chain: ?*const ChainedStruct = null, - label: ?[*:0]const u8 = null, - layout: *BindGroupLayout, - entry_count: u32, - // TODO: file a bug on Dawn, this is not marked as nullable but in fact is. - entries: ?[*]const BindGroupEntry, -}; diff --git a/gpu/src/device.zig b/gpu/src/device.zig index 19ce7da5..79e680d1 100644 --- a/gpu/src/device.zig +++ b/gpu/src/device.zig @@ -1,7 +1,6 @@ const Queue = @import("queue.zig").Queue; const QueueDescriptor = @import("queue.zig").QueueDescriptor; const BindGroup = @import("bind_group.zig").BindGroup; -const BindGroupDescriptor = @import("bind_group.zig").BindGroupDescriptor; const BindGroupLayout = @import("bind_group_layout.zig").BindGroupLayout; const Buffer = @import("buffer.zig").Buffer; const BufferDescriptor = @import("buffer.zig").BufferDescriptor; @@ -41,7 +40,7 @@ const CreateRenderPipelineAsyncCallback = @import("callbacks.zig").CreateRenderP const Impl = @import("interface.zig").Impl; pub const Device = opaque { - pub inline fn createBindGroup(device: *Device, descriptor: *const BindGroupDescriptor) *BindGroup { + pub inline fn createBindGroup(device: *Device, descriptor: *const BindGroup.Descriptor) *BindGroup { return Impl.deviceCreateBindGroup(device, descriptor); } diff --git a/gpu/src/interface.zig b/gpu/src/interface.zig index 689add3f..0b798d1e 100644 --- a/gpu/src/interface.zig +++ b/gpu/src/interface.zig @@ -79,7 +79,7 @@ pub fn Interface(comptime T: type) type { assertDecl(T, "computePipelineSetLabel", fn (compute_pipeline: *gpu.ComputePipeline, label: [*:0]const u8) callconv(.Inline) void); assertDecl(T, "computePipelineReference", fn (compute_pipeline: *gpu.ComputePipeline) callconv(.Inline) void); assertDecl(T, "computePipelineRelease", fn (compute_pipeline: *gpu.ComputePipeline) callconv(.Inline) void); - assertDecl(T, "deviceCreateBindGroup", fn (device: *gpu.Device, descriptor: *const gpu.BindGroupDescriptor) callconv(.Inline) *gpu.BindGroup); + assertDecl(T, "deviceCreateBindGroup", fn (device: *gpu.Device, descriptor: *const gpu.BindGroup.Descriptor) callconv(.Inline) *gpu.BindGroup); assertDecl(T, "deviceCreateBindGroupLayout", fn (device: *gpu.Device, descriptor: *const gpu.BindGroupLayout.Descriptor) callconv(.Inline) *gpu.BindGroupLayout); assertDecl(T, "deviceCreateBuffer", fn (device: *gpu.Device, descriptor: *const gpu.BufferDescriptor) callconv(.Inline) *gpu.Buffer); assertDecl(T, "deviceCreateCommandEncoder", fn (device: *gpu.Device, descriptor: ?*const gpu.CommandEncoderDescriptor) callconv(.Inline) *gpu.CommandEncoder); @@ -549,7 +549,7 @@ pub fn Export(comptime T: type) type { } // WGPU_EXPORT WGPUBindGroup wgpuDeviceCreateBindGroup(WGPUDevice device, WGPUBindGroupDescriptor const * descriptor); - export fn wgpuDeviceCreateBindGroup(device: *gpu.Device, descriptor: *const gpu.BindGroupDescriptor) *gpu.BindGroup { + export fn wgpuDeviceCreateBindGroup(device: *gpu.Device, descriptor: *const gpu.BindGroup.Descriptor) *gpu.BindGroup { return T.deviceCreateBindGroup(device, descriptor); } @@ -1617,7 +1617,7 @@ pub const StubInterface = Interface(struct { unreachable; } - pub inline fn deviceCreateBindGroup(device: *gpu.Device, descriptor: *const gpu.BindGroupDescriptor) *gpu.BindGroup { + pub inline fn deviceCreateBindGroup(device: *gpu.Device, descriptor: *const gpu.BindGroup.Descriptor) *gpu.BindGroup { _ = device; _ = descriptor; unreachable;