From 67a0f60a6821b3df6128c0a5ef42bbcf659903d8 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 23:11:17 -0700 Subject: [PATCH] gpu: fix writeBuffer data lengths Signed-off-by: Stephen Gutekanst --- gpu/src/CommandEncoder.zig | 10 +++++++++- gpu/src/Queue.zig | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gpu/src/CommandEncoder.zig b/gpu/src/CommandEncoder.zig index efb88238..6cfbdf2a 100644 --- a/gpu/src/CommandEncoder.zig +++ b/gpu/src/CommandEncoder.zig @@ -1,3 +1,5 @@ +const std = @import("std"); + const ComputePassEncoder = @import("ComputePassEncoder.zig"); const RenderPassEncoder = @import("RenderPassEncoder.zig"); const CommandBuffer = @import("CommandBuffer.zig"); @@ -129,7 +131,13 @@ pub inline fn setLabel(enc: CommandEncoder, label: [:0]const u8) void { } 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)); + pass.vtable.writeBuffer( + pass.ptr, + buffer, + buffer_offset, + @ptrCast(*const u8, &data[0]), + @intCast(u64, data.len) * @sizeOf(@TypeOf(std.meta.Elem(data))), + ); } pub inline fn writeTimestamp(pass: RenderPassEncoder, query_set: QuerySet, query_index: u32) void { diff --git a/gpu/src/Queue.zig b/gpu/src/Queue.zig index 0c9e66b8..f4f94d09 100644 --- a/gpu/src/Queue.zig +++ b/gpu/src/Queue.zig @@ -1,3 +1,5 @@ +const std = @import("std"); + const CommandBuffer = @import("CommandBuffer.zig"); const Buffer = @import("Buffer.zig"); @@ -34,7 +36,13 @@ pub inline fn submit(queue: Queue, commands: []const CommandBuffer) void { } 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)); + queue.vtable.writeBuffer( + queue.ptr, + buffer, + buffer_offset, + @ptrCast(*const anyopaque, &data[0]), + @intCast(u64, data.len) * @sizeOf(@TypeOf(std.meta.Elem(data))), + ); } pub const WorkDoneCallback = struct {