gpu: make Buffer.get*MappedRange a friendlier slice API

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-08-11 06:39:10 -07:00 committed by Stephen Gutekanst
parent 1848ac8ac7
commit 825a07ac2f
4 changed files with 34 additions and 12 deletions

View file

@ -69,16 +69,38 @@ pub const Buffer = opaque {
Impl.bufferDestroy(buffer);
}
/// Default `offset`: 0
/// Default `size`: `gpu.whole_map_size`
pub inline fn getConstMappedRange(buffer: *Buffer, offset: usize, size: usize) ?*const anyopaque {
return Impl.bufferGetConstMappedRange(buffer, offset, size);
/// Default `offset_bytes`: 0
/// Default `len`: `gpu.whole_map_size` / `std.math.maxint(usize)` (whole range)
pub inline fn getConstMappedRange(
buffer: *Buffer,
comptime T: type,
offset_bytes: usize,
len: usize,
) ?[]const T {
const size = @sizeOf(T) * len;
const data = Impl.bufferGetConstMappedRange(
buffer,
offset_bytes,
size + size % 4,
);
return if (data) |d| @ptrCast([*]const T, @alignCast(@alignOf(T), d.ptr))[0..len] else null;
}
/// Default `offset`: 0
/// Default `size`: `gpu.whole_map_size`
pub inline fn getMappedRange(buffer: *Buffer, offset: usize, size: usize) ?*anyopaque {
return Impl.bufferGetMappedRange(buffer, offset, size);
/// Default `offset_bytes`: 0
/// Default `len`: `gpu.whole_map_size` / `std.math.maxint(usize)` (whole range)
pub inline fn getMappedRange(
buffer: *Buffer,
comptime T: type,
offset_bytes: usize,
len: usize,
) ?[]T {
const size = @sizeOf(T) * len;
const data = Impl.bufferGetMappedRange(
buffer,
offset_bytes,
size + size % 4,
);
return if (data) |d| @ptrCast([*]T, @alignCast(@alignOf(T), d.ptr))[0..len] else null;
}
pub inline fn getSize(buffer: *Buffer) u64 {

View file

@ -1,3 +1,4 @@
const std = @import("std");
const ComputePassEncoder = @import("compute_pass_encoder.zig").ComputePassEncoder;
const RenderPassEncoder = @import("render_pass_encoder.zig").RenderPassEncoder;
const CommandBuffer = @import("command_buffer.zig").CommandBuffer;
@ -91,8 +92,6 @@ pub const CommandEncoder = opaque {
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))),
);

View file

@ -1,3 +1,4 @@
const std = @import("std");
const CommandBuffer = @import("command_buffer.zig").CommandBuffer;
const Buffer = @import("buffer.zig").Buffer;
const Texture = @import("texture.zig").Texture;