From cd6691f6bbdf6d6e8686cc4b2b6f0a08b20482f2 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Thu, 17 Mar 2022 11:19:02 -0700 Subject: [PATCH] gpu: implement CommandEncoder.copyBufferToBuffer Signed-off-by: Stephen Gutekanst --- gpu/src/CommandEncoder.zig | 15 +++++++++++++-- gpu/src/NativeInstance.zig | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/gpu/src/CommandEncoder.zig b/gpu/src/CommandEncoder.zig index 68c0d9d5..26205bd7 100644 --- a/gpu/src/CommandEncoder.zig +++ b/gpu/src/CommandEncoder.zig @@ -17,8 +17,7 @@ pub const VTable = struct { beginComputePass: fn (ptr: *anyopaque, descriptor: *const ComputePassEncoder.Descriptor) ComputePassEncoder, beginRenderPass: fn (ptr: *anyopaque, descriptor: *const RenderPassEncoder.Descriptor) RenderPassEncoder, clearBuffer: fn (ptr: *anyopaque, buffer: Buffer, offset: u64, size: u64) void, - // copyBufferToBuffer: fn (ptr: *anyopaque, source: Buffer, source_offset: u64, destination: Buffer, destination_offset: u64, size: u64) void, - // WGPU_EXPORT void wgpuCommandEncoderCopyBufferToBuffer(WGPUCommandEncoder commandEncoder, WGPUBuffer source, uint64_t sourceOffset, WGPUBuffer destination, uint64_t destinationOffset, uint64_t size); + copyBufferToBuffer: fn (ptr: *anyopaque, source: Buffer, source_offset: u64, destination: Buffer, destination_offset: u64, size: u64) void, // copyBufferToTexture: fn (ptr: *anyopaque, source: *const ImageCopyBuffer, destination: *const ImageCopyTexture, copy_size: Extent3D) void, // WGPU_EXPORT void wgpuCommandEncoderCopyBufferToTexture(WGPUCommandEncoder commandEncoder, WGPUImageCopyBuffer const * source, WGPUImageCopyTexture const * destination, WGPUExtent3D const * copySize); // copyTextureToBuffer: fn (ptr: *anyopaque, source: *const ImageCopyTexture, destination: *const ImageCopyBuffer, copy_size: Extent3D) void, @@ -59,6 +58,17 @@ pub inline fn clearBuffer(enc: CommandEncoder, buffer: Buffer, offset: u64, size enc.vtable.clearBuffer(enc.ptr, buffer, offset, size); } +pub inline fn copyBufferToBuffer( + enc: CommandEncoder, + source: Buffer, + source_offset: u64, + destination: Buffer, + destination_offset: u64, + size: u64, +) void { + enc.vtable.copyBufferToBuffer(enc.ptr, source, source_offset, destination, destination_offset, size); +} + pub inline fn finish(enc: CommandEncoder, descriptor: ?*const CommandBuffer.Descriptor) CommandBuffer { return enc.vtable.finish(enc.ptr, descriptor); } @@ -94,6 +104,7 @@ test { _ = beginComputePass; _ = beginRenderPass; _ = clearBuffer; + _ = copyBufferToBuffer; _ = finish; _ = insertDebugMarker; _ = popDebugGroup; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 07e5a815..ed61535e 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -1615,6 +1615,25 @@ const command_encoder_vtable = CommandEncoder.VTable{ ); } }).clearBuffer, + .copyBufferToBuffer = (struct { + pub fn copyBufferToBuffer( + ptr: *anyopaque, + source: Buffer, + source_offset: u64, + destination: Buffer, + destination_offset: u64, + size: u64, + ) void { + c.wgpuCommandEncoderCopyBufferToBuffer( + @ptrCast(c.WGPUCommandEncoder, ptr), + @ptrCast(c.WGPUBuffer, source.ptr), + source_offset, + @ptrCast(c.WGPUBuffer, destination.ptr), + destination_offset, + size, + ); + } + }).copyBufferToBuffer, .popDebugGroup = (struct { pub fn popDebugGroup(ptr: *anyopaque) void { c.wgpuCommandEncoderPopDebugGroup(@ptrCast(c.WGPUCommandEncoder, ptr));