From 77e96864eae72d7c782a01e410c87d815bf0d13b Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Thu, 11 Aug 2022 05:14:04 -0700 Subject: [PATCH] gpu: make Queue.writeTexture use a slice helper Signed-off-by: Stephen Gutekanst --- gpu/README.md | 2 +- gpu/src/queue.zig | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gpu/README.md b/gpu/README.md index c56af44a..2698af8b 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` +* `Queue.writeTexture` ### Typed callbacks @@ -219,7 +220,6 @@ The following are definitive candidates for helpers we haven't implemented yet: * `gpu.ComputePassEncoder.setBindGroup` (slice param) * `gpu.Device.enumerateFeatures` (owned slice) * `gpu.Queue.writeBuffer` (slices) -* `gpu.Queue.writeTexture` (slices) * `gpu.RenderBundleEncoder.setBindGroup` (slice param) * `gpu.RenderPassEncoder.executeBundles` (slice param) * `gpu.RenderPassEncoder.setBindGroup` (slice param) diff --git a/gpu/src/queue.zig b/gpu/src/queue.zig index 1a4937f6..b955eb2f 100644 --- a/gpu/src/queue.zig +++ b/gpu/src/queue.zig @@ -57,8 +57,22 @@ pub const Queue = opaque { Impl.queueWriteBuffer(queue, buffer, buffer_offset, data, size); } - pub inline fn writeTexture(queue: *Queue, destination: *const ImageCopyTexture, data: *const anyopaque, data_size: usize, data_layout: *const Texture.DataLayout, write_size: *const Extent3D) void { - Impl.queueWriteTexture(queue, destination, data, data_size, data_layout, write_size); + pub inline fn writeTexture( + queue: *Queue, + destination: *const ImageCopyTexture, + data_layout: *const Texture.DataLayout, + write_size: *const Extent3D, + comptime T: type, + data: []const T, + ) void { + Impl.queueWriteTexture( + queue, + destination, + @ptrCast(*const anyopaque, data.ptr), + @intCast(usize, data.len) * @sizeOf(std.meta.Elem(@TypeOf(data))), + data_layout, + write_size, + ); } pub inline fn reference(queue: *Queue) void {