From 3f4ebd68c2e621de4b527de82c732b6d285904e9 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 29 Jul 2022 18:58:32 -0700 Subject: [PATCH] gpu: internalize BindGroupLayout types Signed-off-by: Stephen Gutekanst --- gpu/src/bind_group_layout.zig | 36 +++++++++++++++++------------------ gpu/src/device.zig | 3 +-- gpu/src/interface.zig | 8 ++++---- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/gpu/src/bind_group_layout.zig b/gpu/src/bind_group_layout.zig index 7e89c776..c5e47898 100644 --- a/gpu/src/bind_group_layout.zig +++ b/gpu/src/bind_group_layout.zig @@ -10,6 +10,24 @@ const StorageTextureBindingLayout = @import("types.zig").StorageTextureBindingLa const Impl = @import("interface.zig").Impl; pub const BindGroupLayout = opaque { + pub const Entry = extern struct { + next_in_chain: ?*const ChainedStruct = null, + binding: u32, + visibility: ShaderStageFlags, + buffer: BufferBindingLayout, + sampler: SamplerBindingLayout, + texture: TextureBindingLayout, + storage_texture: StorageTextureBindingLayout, + }; + + pub const Descriptor = extern struct { + next_in_chain: ?*const ChainedStruct = null, + label: ?[*:0]const u8 = null, + 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_layout: *BindGroupLayout, label: [*:0]const u8) void { Impl.bindGroupLayoutSetLabel(bind_group_layout, label); } @@ -22,21 +40,3 @@ pub const BindGroupLayout = opaque { Impl.bindGroupLayoutRelease(bind_group_layout); } }; - -pub const BindGroupLayoutEntry = extern struct { - next_in_chain: ?*const ChainedStruct = null, - binding: u32, - visibility: ShaderStageFlags, - buffer: BufferBindingLayout, - sampler: SamplerBindingLayout, - texture: TextureBindingLayout, - storage_texture: StorageTextureBindingLayout, -}; - -pub const BindGroupLayoutDescriptor = extern struct { - next_in_chain: ?*const ChainedStruct = null, - label: ?[*:0]const u8 = null, - entry_count: u32, - // TODO: file a bug on Dawn, this is not marked as nullable but in fact is. - entries: ?[*]const BindGroupLayoutEntry, -}; diff --git a/gpu/src/device.zig b/gpu/src/device.zig index 554c3570..66daaf5b 100644 --- a/gpu/src/device.zig +++ b/gpu/src/device.zig @@ -3,7 +3,6 @@ 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 BindGroupLayoutDescriptor = @import("bind_group_layout.zig").BindGroupLayoutDescriptor; const Buffer = @import("buffer.zig").Buffer; const BufferDescriptor = @import("buffer.zig").BufferDescriptor; const CommandEncoder = @import("command_encoder.zig").CommandEncoder; @@ -46,7 +45,7 @@ pub const Device = *opaque { return Impl.deviceCreateBindGroup(device, descriptor); } - pub inline fn createBindGroupLayout(device: Device, descriptor: *const BindGroupLayoutDescriptor) *BindGroupLayout { + pub inline fn createBindGroupLayout(device: Device, descriptor: *const BindGroupLayout.Descriptor) *BindGroupLayout { return Impl.deviceCreateBindGroupLayout(device, descriptor); } diff --git a/gpu/src/interface.zig b/gpu/src/interface.zig index d8a17f3e..61eb6f4a 100644 --- a/gpu/src/interface.zig +++ b/gpu/src/interface.zig @@ -82,7 +82,7 @@ pub fn Interface(comptime T: type) type { 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, "deviceCreateBindGroupLayout", fn (device: gpu.Device, descriptor: *const gpu.BindGroupLayoutDescriptor) callconv(.Inline) *gpu.BindGroupLayout); + 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); assertDecl(T, "deviceCreateComputePipeline", fn (device: gpu.Device, descriptor: *const gpu.ComputePipelineDescriptor) callconv(.Inline) gpu.ComputePipeline); @@ -555,8 +555,8 @@ pub fn Export(comptime T: type) type { return T.deviceCreateBindGroup(device, descriptor); } - // WGPU_EXPORT WGPUBindGroupLayout wgpuDeviceCreateBindGroupLayout(WGPUDevice device, WGPUBindGroupLayoutDescriptor const * descriptor); - export fn wgpuDeviceCreateBindGroupLayout(device: gpu.Device, descriptor: *const gpu.BindGroupLayoutDescriptor) *gpu.BindGroupLayout { + // WGPU_EXPORT WGPUBindGroupLayout wgpuDeviceCreateBindGroupLayout(WGPUDevice device, WGPUBindGroupLayout.Descriptor const * descriptor); + export fn wgpuDeviceCreateBindGroupLayout(device: gpu.Device, descriptor: *const gpu.BindGroupLayout.Descriptor) *gpu.BindGroupLayout { return T.deviceCreateBindGroupLayout(device, descriptor); } @@ -1625,7 +1625,7 @@ pub const StubInterface = Interface(struct { unreachable; } - pub inline fn deviceCreateBindGroupLayout(device: gpu.Device, descriptor: *const gpu.BindGroupLayoutDescriptor) *gpu.BindGroupLayout { + pub inline fn deviceCreateBindGroupLayout(device: gpu.Device, descriptor: *const gpu.BindGroupLayout.Descriptor) *gpu.BindGroupLayout { _ = device; _ = descriptor; unreachable;