diff --git a/gpu/src/ComputePassEncoder.zig b/gpu/src/ComputePassEncoder.zig index f5b401c9..d1453840 100644 --- a/gpu/src/ComputePassEncoder.zig +++ b/gpu/src/ComputePassEncoder.zig @@ -2,6 +2,7 @@ const ComputePassTimestampWrite = @import("structs.zig").ComputePassTimestampWri const ComputePipeline = @import("ComputePipeline.zig"); const QuerySet = @import("QuerySet.zig"); const BindGroup = @import("BindGroup.zig"); +const Buffer = @import("Buffer.zig"); const ComputePassEncoder = @This(); @@ -14,8 +15,7 @@ pub const VTable = struct { reference: fn (ptr: *anyopaque) void, release: fn (ptr: *anyopaque) void, dispatch: fn (ptr: *anyopaque, workgroup_count_x: u32, workgroup_count_y: u32, workgroup_count_z: u32) void, - // dispatchIndirect: fn (ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void, - // WGPU_EXPORT void wgpuComputePassEncoderDispatchIndirect(WGPUComputePassEncoder computePassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset); + dispatchIndirect: fn (ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void, end: fn (ptr: *anyopaque) void, insertDebugMarker: fn (ptr: *anyopaque, marker_label: [*:0]const u8) void, popDebugGroup: fn (ptr: *anyopaque) void, @@ -43,6 +43,14 @@ pub inline fn dispatch( enc.vtable.dispatch(enc.ptr, workgroup_count_x, workgroup_count_y, workgroup_count_z); } +pub inline fn dispatchIndirect( + enc: ComputePassEncoder, + indirect_buffer: Buffer, + indirect_offset: u64, +) void { + enc.vtable.dispatchIndirect(enc.ptr, indirect_buffer, indirect_offset); +} + pub inline fn end(enc: ComputePassEncoder) void { enc.vtable.end(enc.ptr); } @@ -90,6 +98,7 @@ test { _ = reference; _ = release; _ = dispatch; + _ = dispatchIndirect; _ = end; _ = insertDebugMarker; _ = popDebugGroup; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index d474d04a..5e08358f 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -1625,6 +1625,19 @@ const compute_pass_encoder_vtable = ComputePassEncoder.VTable{ ); } }).dispatch, + .dispatchIndirect = (struct { + pub fn dispatchIndirect( + ptr: *anyopaque, + indirect_buffer: Buffer, + indirect_offset: u64, + ) void { + c.wgpuComputePassEncoderDispatchIndirect( + @ptrCast(c.WGPUComputePassEncoder, ptr), + @ptrCast(c.WGPUBuffer, indirect_buffer.ptr), + indirect_offset, + ); + } + }).dispatchIndirect, .end = (struct { pub fn end(ptr: *anyopaque) void { c.wgpuComputePassEncoderEnd(@ptrCast(c.WGPUComputePassEncoder, ptr));