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, }).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 { fn wrapShaderModule(shader_module: c.WGPUShaderModule) ShaderModule {

View file

@ -1,4 +1,5 @@
const CommandBuffer = @import("CommandBuffer.zig"); const CommandBuffer = @import("CommandBuffer.zig");
const Buffer = @import("Buffer.zig");
const Queue = @This(); const Queue = @This();
@ -15,8 +16,8 @@ pub const VTable = struct {
// TODO: dawn specific? // TODO: dawn specific?
// copyTextureForBrowser: fn (ptr: *anyopaque, source: *const ImageCopyTexture, destination: *const ImageCopyTexture, copy_size: *const Extent3D, options: *const CopyTextureForBrowserOptions) void, // 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, 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): // 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); // 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); 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 { pub const WorkDoneCallback = struct {
type_erased_ctx: *anyopaque, type_erased_ctx: *anyopaque,
type_erased_callback: fn (ctx: *anyopaque, status: WorkDoneStatus) callconv(.Inline) void, type_erased_callback: fn (ctx: *anyopaque, status: WorkDoneStatus) callconv(.Inline) void,
@ -67,6 +72,7 @@ test {
_ = reference; _ = reference;
_ = release; _ = release;
_ = submit; _ = submit;
_ = writeBuffer;
_ = WorkDoneCallback; _ = WorkDoneCallback;
_ = WorkDoneStatus; _ = WorkDoneStatus;
} }