diff --git a/gpu/src/ComputePassEncoder.zig b/gpu/src/ComputePassEncoder.zig new file mode 100644 index 00000000..5955c78a --- /dev/null +++ b/gpu/src/ComputePassEncoder.zig @@ -0,0 +1,37 @@ +const ComputePassEncoder = @This(); + +/// The type erased pointer to the ComputePassEncoder implementation +/// Equal to c.WGPUComputePassEncoder 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 wgpuComputePassEncoderDispatch(WGPUComputePassEncoder computePassEncoder, uint32_t workgroupCountX, uint32_t workgroupCountY, uint32_t workgroupCountZ); + // WGPU_EXPORT void wgpuComputePassEncoderDispatchIndirect(WGPUComputePassEncoder computePassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset); + // WGPU_EXPORT void wgpuComputePassEncoderEnd(WGPUComputePassEncoder computePassEncoder); + // WGPU_EXPORT void wgpuComputePassEncoderEndPass(WGPUComputePassEncoder computePassEncoder); + // WGPU_EXPORT void wgpuComputePassEncoderInsertDebugMarker(WGPUComputePassEncoder computePassEncoder, char const * markerLabel); + // WGPU_EXPORT void wgpuComputePassEncoderPopDebugGroup(WGPUComputePassEncoder computePassEncoder); + // WGPU_EXPORT void wgpuComputePassEncoderPushDebugGroup(WGPUComputePassEncoder computePassEncoder, char const * groupLabel); + // WGPU_EXPORT void wgpuComputePassEncoderSetBindGroup(WGPUComputePassEncoder computePassEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets); + // WGPU_EXPORT void wgpuComputePassEncoderSetLabel(WGPUComputePassEncoder computePassEncoder, char const * label); + // WGPU_EXPORT void wgpuComputePassEncoderSetPipeline(WGPUComputePassEncoder computePassEncoder, WGPUComputePipeline pipeline); + // WGPU_EXPORT void wgpuComputePassEncoderWriteTimestamp(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex); +}; + +pub inline fn reference(enc: ComputePassEncoder) void { + enc.vtable.reference(enc.ptr); +} + +pub inline fn release(enc: ComputePassEncoder) void { + enc.vtable.release(enc.ptr); +} + +test "syntax" { + _ = VTable; + _ = reference; + _ = release; +} diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 5dfc957f..0f215691 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -34,6 +34,7 @@ const BindGroup = @import("BindGroup.zig"); const BindGroupLayout = @import("BindGroupLayout.zig"); const Buffer = @import("Buffer.zig"); const CommandEncoder = @import("CommandEncoder.zig"); +const ComputePassEncoder = @import("ComputePassEncoder.zig"); const TextureUsage = @import("enums.zig").TextureUsage; const TextureFormat = @import("enums.zig").TextureFormat; @@ -791,6 +792,26 @@ const command_encoder_vtable = CommandEncoder.VTable{ }).release, }; +fn wrapComputePassEncoder(buffer: c.WGPUComputePassEncoder) ComputePassEncoder { + return .{ + .ptr = buffer.?, + .vtable = &command_pass_encoder_vtable, + }; +} + +const command_pass_encoder_vtable = ComputePassEncoder.VTable{ + .reference = (struct { + pub fn reference(ptr: *anyopaque) void { + c.wgpuComputePassEncoderReference(@ptrCast(c.WGPUComputePassEncoder, ptr)); + } + }).reference, + .release = (struct { + pub fn release(ptr: *anyopaque) void { + c.wgpuComputePassEncoderRelease(@ptrCast(c.WGPUComputePassEncoder, ptr)); + } + }).release, +}; + test "syntax" { _ = wrap; _ = interface_vtable; @@ -818,4 +839,5 @@ test "syntax" { _ = wrapBindGroupLayout; _ = wrapBuffer; _ = wrapCommandEncoder; + _ = wrapComputePassEncoder; } diff --git a/gpu/src/main.zig b/gpu/src/main.zig index 567d1c16..71df76be 100644 --- a/gpu/src/main.zig +++ b/gpu/src/main.zig @@ -49,6 +49,7 @@ pub const BindGroup = @import("BindGroup.zig"); pub const BindGroupLayout = @import("BindGroupLayout.zig"); pub const Buffer = @import("Buffer.zig"); pub const CommandEncoder = @import("CommandEncoder.zig"); +pub const ComputePassEncoder = @import("ComputePassEncoder.zig"); pub const Feature = @import("enums.zig").Feature; pub const TextureUsage = @import("enums.zig").TextureUsage; @@ -122,6 +123,7 @@ test "syntax" { _ = BindGroupLayout; _ = Buffer; _ = CommandEncoder; + _ = ComputePassEncoder; _ = Feature; }