From 1848ac8ac7e59e36b3dd0c9441405892e508db3a Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Thu, 11 Aug 2022 06:25:55 -0700 Subject: [PATCH] gpu: make CommandEncoder.writeBuffer use a slice helper Signed-off-by: Stephen Gutekanst --- gpu/README.md | 2 +- gpu/src/command_encoder.zig | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gpu/README.md b/gpu/README.md index 93b98534..ceb3c8dd 100644 --- a/gpu/README.md +++ b/gpu/README.md @@ -152,6 +152,7 @@ Some WebGPU APIs expose slices as pointers and lengths, we either wrap these to The slice helpers are: * `Adapter.enumerateFeaturesOwned` +* `CommandEncoder.writeBuffer` * `Queue.writeTexture` * `Queue.writeBuffer` @@ -217,7 +218,6 @@ The following are definitive candidates for helpers we haven't implemented yet: * `gpu.Buffer.getConstMappedRange` (slices) * `gpu.Buffer.getMappedRange` (slices) -* `gpu.CommandEncoder.writeBuffer` (slices) * `gpu.ComputePassEncoder.setBindGroup` (slice param) * `gpu.Device.enumerateFeatures` (owned slice) * `gpu.RenderBundleEncoder.setBindGroup` (slice param) diff --git a/gpu/src/command_encoder.zig b/gpu/src/command_encoder.zig index a2de1ac1..1d95182d 100644 --- a/gpu/src/command_encoder.zig +++ b/gpu/src/command_encoder.zig @@ -81,8 +81,21 @@ pub const CommandEncoder = opaque { Impl.commandEncoderSetLabel(command_encoder, label); } - pub inline fn writeBuffer(command_encoder: *CommandEncoder, buffer: *Buffer, buffer_offset: u64, data: [*]const u8, size: u64) void { - Impl.commandEncoderWriteBuffer(command_encoder, buffer, buffer_offset, data, size); + pub inline fn writeBuffer( + command_encoder: *CommandEncoder, + buffer: *Buffer, + buffer_offset_bytes: u64, + data_slice: anytype, + ) void { + Impl.commandEncoderWriteBuffer( + command_encoder, + buffer, + buffer_offset_bytes, + data, + size, + @ptrCast([*]const u8, data_slice.ptr), + @intCast(u64, data_slice.len) * @sizeOf(std.meta.Elem(@TypeOf(data_slice))), + ); } pub inline fn writeTimestamp(command_encoder: *CommandEncoder, query_set: *QuerySet, query_index: u32) void {