gpu: implement CommandEncoder.writeBuffer

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-18 22:32:41 -07:00 committed by Stephen Gutekanst
parent 9f1775aa7c
commit 1209cb590d
2 changed files with 17 additions and 2 deletions

View file

@ -31,8 +31,7 @@ pub const VTable = struct {
pushDebugGroup: fn (ptr: *anyopaque, group_label: [*:0]const u8) void,
resolveQuerySet: fn (ptr: *anyopaque, query_set: QuerySet, first_query: u32, query_count: u32, destination: Buffer, destination_offset: u64) void,
setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void,
// TODO: typed buffer pointer?
// WGPU_EXPORT void wgpuCommandEncoderWriteBuffer(WGPUCommandEncoder commandEncoder, WGPUBuffer buffer, uint64_t bufferOffset, uint8_t const * data, uint64_t size);
writeBuffer: fn (ptr: *anyopaque, buffer: Buffer, buffer_offset: u64, data: *const u8, size: u64) void,
writeTimestamp: fn (ptr: *anyopaque, query_set: QuerySet, query_index: u32) void,
};
@ -129,6 +128,10 @@ pub inline fn setLabel(enc: CommandEncoder, label: [:0]const u8) void {
enc.vtable.setLabel(enc.ptr, label);
}
pub inline fn writeBuffer(pass: RenderPassEncoder, buffer: Buffer, buffer_offset: u64, data: anytype) void {
pass.vtable.writeBuffer(pass.ptr, buffer, buffer_offset, @ptrCast(*const u8, &data[0]), @intCast(u64, data.len));
}
pub inline fn writeTimestamp(pass: RenderPassEncoder, query_set: QuerySet, query_index: u32) void {
pass.vtable.writeTimestamp(pass.ptr, query_set, query_index);
}
@ -155,6 +158,7 @@ test {
_ = pushDebugGroup;
_ = resolveQuerySet;
_ = setLabel;
_ = writeBuffer;
_ = writeTimestamp;
_ = Descriptor;
}

View file

@ -2006,6 +2006,17 @@ const command_encoder_vtable = CommandEncoder.VTable{
c.wgpuCommandEncoderPushDebugGroup(@ptrCast(c.WGPUCommandEncoder, ptr), group_label);
}
}).pushDebugGroup,
.writeBuffer = (struct {
pub fn writeBuffer(ptr: *anyopaque, buffer: Buffer, buffer_offset: u64, data: *const u8, size: u64) void {
c.wgpuCommandEncoderWriteBuffer(
@ptrCast(c.WGPUCommandEncoder, ptr),
@ptrCast(c.WGPUBuffer, buffer.ptr),
buffer_offset,
data,
size,
);
}
}).writeBuffer,
.writeTimestamp = (struct {
pub fn writeTimestamp(ptr: *anyopaque, query_set: QuerySet, query_index: u32) void {
c.wgpuCommandEncoderWriteTimestamp(