diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index c3408a91..af38797b 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -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 { diff --git a/gpu/src/Queue.zig b/gpu/src/Queue.zig index 7dd42f29..0c9e66b8 100644 --- a/gpu/src/Queue.zig +++ b/gpu/src/Queue.zig @@ -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; }