diff --git a/gpu/src/Buffer.zig b/gpu/src/Buffer.zig index d12d4d80..bc8f253a 100644 --- a/gpu/src/Buffer.zig +++ b/gpu/src/Buffer.zig @@ -11,10 +11,8 @@ pub const VTable = struct { reference: fn (ptr: *anyopaque) void, release: fn (ptr: *anyopaque) void, destroy: fn (ptr: *anyopaque) void, - // TODO: typed buffer pointer? - // WGPU_EXPORT void const * wgpuBufferGetConstMappedRange(WGPUBuffer buffer, size_t offset, size_t size); - // TODO: typed buffer pointer? - // WGPU_EXPORT void * wgpuBufferGetMappedRange(WGPUBuffer buffer, size_t offset, size_t size); + getConstMappedRange: fn (ptr: *anyopaque, offset: usize, size: usize) []const u8, + getMappedRange: fn (ptr: *anyopaque, offset: usize, size: usize) []u8, setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void, mapAsync: fn ( ptr: *anyopaque, @@ -38,6 +36,14 @@ pub inline fn destroy(buf: Buffer) void { buf.vtable.destroy(buf.ptr); } +pub inline fn getConstMappedRange(buf: Buffer, offset: usize, size: usize) []const u8 { + return buf.vtable.getConstMappedRange(buf.ptr, offset, size); +} + +pub inline fn getMappedRange(buf: Buffer, offset: usize, size: usize) []u8 { + return buf.vtable.getMappedRange(buf.ptr, offset, size); +} + pub inline fn setLabel(buf: Buffer, label: [:0]const u8) void { buf.vtable.setLabel(buf.ptr, label); } @@ -120,6 +126,8 @@ test { _ = reference; _ = release; _ = destroy; + _ = getConstMappedRange; + _ = getMappedRange; _ = setLabel; _ = Descriptor; _ = BindingType; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 635127b3..9facd1fe 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -1700,6 +1700,18 @@ const buffer_vtable = Buffer.VTable{ c.wgpuBufferRelease(@ptrCast(c.WGPUBuffer, ptr)); } }).release, + .getConstMappedRange = (struct { + pub fn getConstMappedRange(ptr: *anyopaque, offset: usize, size: usize) []const u8 { + const range = c.wgpuBufferGetConstMappedRange(@ptrCast(c.WGPUBuffer, ptr), offset, size); + return @ptrCast([*c]const u8, range.?)[0..size]; + } + }).getConstMappedRange, + .getMappedRange = (struct { + pub fn getMappedRange(ptr: *anyopaque, offset: usize, size: usize) []u8 { + const range = c.wgpuBufferGetMappedRange(@ptrCast(c.WGPUBuffer, ptr), offset, size); + return @ptrCast([*c]u8, range.?)[0..size]; + } + }).getMappedRange, .setLabel = (struct { pub fn setLabel(ptr: *anyopaque, label: [:0]const u8) void { c.wgpuBufferSetLabel(@ptrCast(c.WGPUBuffer, ptr), label);