gpu: implement CommandEncoder.copyBufferToBuffer

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-17 11:19:02 -07:00 committed by Stephen Gutekanst
parent 2b33f36908
commit cd6691f6bb
2 changed files with 32 additions and 2 deletions

View file

@ -17,8 +17,7 @@ pub const VTable = struct {
beginComputePass: fn (ptr: *anyopaque, descriptor: *const ComputePassEncoder.Descriptor) ComputePassEncoder, beginComputePass: fn (ptr: *anyopaque, descriptor: *const ComputePassEncoder.Descriptor) ComputePassEncoder,
beginRenderPass: fn (ptr: *anyopaque, descriptor: *const RenderPassEncoder.Descriptor) RenderPassEncoder, beginRenderPass: fn (ptr: *anyopaque, descriptor: *const RenderPassEncoder.Descriptor) RenderPassEncoder,
clearBuffer: fn (ptr: *anyopaque, buffer: Buffer, offset: u64, size: u64) void, 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, 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);
// copyBufferToTexture: fn (ptr: *anyopaque, source: *const ImageCopyBuffer, destination: *const ImageCopyTexture, copy_size: Extent3D) 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); // 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, // 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); 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 { pub inline fn finish(enc: CommandEncoder, descriptor: ?*const CommandBuffer.Descriptor) CommandBuffer {
return enc.vtable.finish(enc.ptr, descriptor); return enc.vtable.finish(enc.ptr, descriptor);
} }
@ -94,6 +104,7 @@ test {
_ = beginComputePass; _ = beginComputePass;
_ = beginRenderPass; _ = beginRenderPass;
_ = clearBuffer; _ = clearBuffer;
_ = copyBufferToBuffer;
_ = finish; _ = finish;
_ = insertDebugMarker; _ = insertDebugMarker;
_ = popDebugGroup; _ = popDebugGroup;

View file

@ -1615,6 +1615,25 @@ const command_encoder_vtable = CommandEncoder.VTable{
); );
} }
}).clearBuffer, }).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 { .popDebugGroup = (struct {
pub fn popDebugGroup(ptr: *anyopaque) void { pub fn popDebugGroup(ptr: *anyopaque) void {
c.wgpuCommandEncoderPopDebugGroup(@ptrCast(c.WGPUCommandEncoder, ptr)); c.wgpuCommandEncoderPopDebugGroup(@ptrCast(c.WGPUCommandEncoder, ptr));