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 {