diff --git a/gpu/src/bind_group.zig b/gpu/src/bind_group.zig index 8d354ec7..97b0e0d5 100644 --- a/gpu/src/bind_group.zig +++ b/gpu/src/bind_group.zig @@ -3,11 +3,17 @@ const Sampler = @import("sampler.zig").Sampler; const TextureView = @import("texture_view.zig").TextureView; const ChainedStruct = @import("types.zig").ChainedStruct; const BindGroupLayout = @import("bind_group_layout.zig").BindGroupLayout; +const ExternalTexture = @import("external_texture.zig").ExternalTexture; const Impl = @import("interface.zig").Impl; pub const BindGroup = opaque { pub const Entry = extern struct { - next_in_chain: ?*const ChainedStruct = null, + pub const NextInChain = extern union { + generic: ?*const ChainedStruct, + external_texture_binding_entry: *const ExternalTexture.BindingEntry, + }; + + next_in_chain: NextInChain = .{ .generic = null }, binding: u32, buffer: ?*Buffer = null, offset: u64 = 0, diff --git a/gpu/src/external_texture.zig b/gpu/src/external_texture.zig index 21916185..fddb5d17 100644 --- a/gpu/src/external_texture.zig +++ b/gpu/src/external_texture.zig @@ -3,7 +3,6 @@ const TextureView = @import("texture_view.zig").TextureView; const Impl = @import("interface.zig").Impl; pub const ExternalTexture = opaque { - /// TODO: Can be chained in gpu.BindGroup.Entry pub const BindingEntry = extern struct { chain: ChainedStruct = .{ .next = null, .s_type = .external_texture_binding_entry }, external_texture: *ExternalTexture, diff --git a/gpu/src/types.zig b/gpu/src/types.zig index c465dd1e..d27bd0d1 100644 --- a/gpu/src/types.zig +++ b/gpu/src/types.zig @@ -92,7 +92,7 @@ pub const RenderPassDescriptor = extern struct { /// Provides a slightly friendlier Zig API to initialize this structure. pub inline fn init(v: struct { - next_in_chain: ?*const ChainedStruct = null, + next_in_chain: NextInChain = .{ .generic = null }, label: ?[*:0]const u8 = null, color_attachments: ?[]const RenderPassColorAttachment = null, depth_stencil_attachment: ?*const RenderPassDepthStencilAttachment = null,