diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index b7880f2a..10405cd3 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -28,6 +28,7 @@ const RenderPassEncoder = @import("RenderPassEncoder.zig"); const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); const RenderBundle = @import("RenderBundle.zig"); const QuerySet = @import("QuerySet.zig"); +const PipelineLayout = @import("PipelineLayout.zig"); const TextureUsage = @import("enums.zig").TextureUsage; const TextureFormat = @import("enums.zig").TextureFormat; @@ -665,6 +666,26 @@ const query_set_vtable = QuerySet.VTable{ }).release, }; +fn wrapPipelineLayout(layout: c.WGPUPipelineLayout) PipelineLayout { + return .{ + .ptr = layout.?, + .vtable = &pipeline_layout_vtable, + }; +} + +const pipeline_layout_vtable = PipelineLayout.VTable{ + .reference = (struct { + pub fn reference(ptr: *anyopaque) void { + c.wgpuPipelineLayoutReference(@ptrCast(c.WGPUPipelineLayout, ptr)); + } + }).reference, + .release = (struct { + pub fn release(ptr: *anyopaque) void { + c.wgpuPipelineLayoutRelease(@ptrCast(c.WGPUPipelineLayout, ptr)); + } + }).release, +}; + test "syntax" { _ = wrap; _ = interface_vtable; @@ -686,4 +707,5 @@ test "syntax" { _ = wrapRenderBundleEncoder; _ = wrapRenderBundle; _ = wrapQuerySet; + _ = wrapPipelineLayout; } diff --git a/gpu/src/PipelineLayout.zig b/gpu/src/PipelineLayout.zig new file mode 100644 index 00000000..9e72e7af --- /dev/null +++ b/gpu/src/PipelineLayout.zig @@ -0,0 +1,27 @@ +const PipelineLayout = @This(); + +/// The type erased pointer to the PipelineLayout implementation +/// Equal to c.WGPUPipelineLayout for NativeInstance. +ptr: *anyopaque, +vtable: *const VTable, + +pub const VTable = struct { + reference: fn (ptr: *anyopaque) void, + release: fn (ptr: *anyopaque) void, + // TODO: + // WGPU_EXPORT void wgpuPipelineLayoutSetLabel(WGPUPipelineLayout pipelineLayout, char const * label); +}; + +pub inline fn reference(qset: PipelineLayout) void { + qset.vtable.reference(qset.ptr); +} + +pub inline fn release(qset: PipelineLayout) void { + qset.vtable.release(qset.ptr); +} + +test "syntax" { + _ = VTable; + _ = reference; + _ = release; +} diff --git a/gpu/src/main.zig b/gpu/src/main.zig index 6b3eba33..15a6b1be 100644 --- a/gpu/src/main.zig +++ b/gpu/src/main.zig @@ -43,6 +43,7 @@ pub const RenderPassEncoder = @import("RenderPassEncoder.zig"); pub const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); pub const RenderBundle = @import("RenderBundle.zig"); pub const QuerySet = @import("QuerySet.zig"); +pub const PipelineLayout = @import("PipelineLayout.zig"); pub const Feature = @import("enums.zig").Feature; pub const TextureUsage = @import("enums.zig").TextureUsage; @@ -110,6 +111,7 @@ test "syntax" { _ = RenderBundleEncoder; _ = RenderBundle; _ = QuerySet; + _ = PipelineLayout; _ = Feature; }