gpu: implement Queue.writeBuffer

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-18 23:08:52 -07:00 committed by Stephen Gutekanst
parent 0aad5812b8
commit eacee682ca
2 changed files with 18 additions and 1 deletions

View file

@ -909,6 +909,17 @@ const queue_vtable = Queue.VTable{
);
}
}).submit,
.writeBuffer = (struct {
pub fn writeBuffer(ptr: *anyopaque, buffer: Buffer, buffer_offset: u64, data: *const anyopaque, size: u64) void {
c.wgpuQueueWriteBuffer(
@ptrCast(c.WGPUQueue, ptr),
@ptrCast(c.WGPUBuffer, buffer.ptr),
buffer_offset,
data,
size,
);
}
}).writeBuffer,
};
fn wrapShaderModule(shader_module: c.WGPUShaderModule) ShaderModule {

View file

@ -1,4 +1,5 @@
const CommandBuffer = @import("CommandBuffer.zig");
const Buffer = @import("Buffer.zig");
const Queue = @This();
@ -15,8 +16,8 @@ pub const VTable = struct {
// TODO: dawn specific?
// copyTextureForBrowser: fn (ptr: *anyopaque, source: *const ImageCopyTexture, destination: *const ImageCopyTexture, copy_size: *const Extent3D, options: *const CopyTextureForBrowserOptions) void,
submit: fn (queue: Queue, commands: []const CommandBuffer) void,
writeBuffer: fn (ptr: *anyopaque, buffer: Buffer, buffer_offset: u64, data: *const anyopaque, size: u64) void,
// TODO(implement):
// writeBuffer: fn (ptr: *anyopaque, buffer: Buffer, buffer_offset: u64, data: *const anyopaque, size: usize);
// writeTexture: fn (ptr: *anyopaque, destination: *const ImageCopyTexture, data: *const anyopaque, data_size: usize, data_layout: *const TextureDataLayout, write_size: *const Extent3D);
};
@ -32,6 +33,10 @@ pub inline fn submit(queue: Queue, commands: []const CommandBuffer) void {
queue.vtable.submit(queue, commands);
}
pub inline fn writeBuffer(queue: Queue, buffer: Buffer, buffer_offset: u64, data: anytype) void {
queue.vtable.writeBuffer(queue.ptr, buffer, buffer_offset, @ptrCast(*const anyopaque, &data[0]), @intCast(u64, data.len));
}
pub const WorkDoneCallback = struct {
type_erased_ctx: *anyopaque,
type_erased_callback: fn (ctx: *anyopaque, status: WorkDoneStatus) callconv(.Inline) void,
@ -67,6 +72,7 @@ test {
_ = reference;
_ = release;
_ = submit;
_ = writeBuffer;
_ = WorkDoneCallback;
_ = WorkDoneStatus;
}