From 05d1eeb9ee640f39dac7c7bbe09274d004546122 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 22:42:56 -0700 Subject: [PATCH] gpu: implement basic Buffer .getConstMappedRange, .getMappedRange Signed-off-by: Stephen Gutekanst --- gpu/src/Buffer.zig | 16 ++++++++++++---- gpu/src/NativeInstance.zig | 12 ++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) 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);