mach/gpu/src/buffer.zig
Stephen Gutekanst ceb6c2b41b gpu: correct name Buffer.Usage -> Buffer.UsageFlags
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2022-08-12 00:43:43 -07:00

111 lines
3.4 KiB
Zig

const std = @import("std");
const ChainedStruct = @import("types.zig").ChainedStruct;
const MapModeFlags = @import("types.zig").MapModeFlags;
const Impl = @import("interface.zig").Impl;
pub const Buffer = opaque {
pub const MapCallback = fn (status: MapAsyncStatus, userdata: *anyopaque) callconv(.C) void;
pub const BindingType = enum(u32) {
undef = 0x00000000,
uniform = 0x00000001,
storage = 0x00000002,
read_only_storage = 0x00000003,
};
pub const MapAsyncStatus = enum(u32) {
success = 0x00000000,
err = 0x00000001,
unknown = 0x00000002,
device_lost = 0x00000003,
destroyed_before_callback = 0x00000004,
unmapped_before_callback = 0x00000005,
};
pub const UsageFlags = packed struct {
map_read: bool = false,
map_write: bool = false,
copy_src: bool = false,
copy_dst: bool = false,
index: bool = false,
vertex: bool = false,
uniform: bool = false,
storage: bool = false,
indirect: bool = false,
query_resolve: bool = false,
_padding: u22 = 0,
comptime {
std.debug.assert(
@sizeOf(@This()) == @sizeOf(u32) and
@bitSizeOf(@This()) == @bitSizeOf(u32),
);
}
pub const none = UsageFlags{};
pub fn equal(a: UsageFlags, b: UsageFlags) bool {
return @truncate(u10, @bitCast(u32, a)) == @truncate(u10, @bitCast(u32, b));
}
};
pub const BindingLayout = extern struct {
next_in_chain: ?*const ChainedStruct = null,
type: BindingType = .undef,
has_dynamic_offset: bool = false,
min_binding_size: u64 = 0,
};
pub const Descriptor = extern struct {
next_in_chain: ?*const ChainedStruct = null,
label: ?[*:0]const u8 = null,
usage: UsageFlags,
size: u64,
mapped_at_creation: bool = true,
};
pub inline fn destroy(buffer: *Buffer) void {
Impl.bufferDestroy(buffer);
}
/// Default `offset`: 0
/// Default `size`: `gpu.whole_map_size`
pub inline fn bufferGetConstMappedRange(buffer: *Buffer, offset: usize, size: usize) ?*const anyopaque {
return Impl.bufferGetConstMappedRange(buffer, offset, size);
}
/// Default `offset`: 0
/// Default `size`: `gpu.whole_map_size`
pub inline fn bufferGetMappedRange(buffer: *Buffer, offset: usize, size: usize) ?*anyopaque {
return Impl.bufferGetMappedRange(buffer, offset, size);
}
pub inline fn bufferGetSize(buffer: *Buffer) u64 {
return Impl.bufferGetSize(buffer);
}
pub inline fn bufferGetUsage(buffer: *Buffer) Buffer.UsageFlags {
return Impl.bufferGetUsage(buffer);
}
pub inline fn bufferMapAsync(buffer: *Buffer, mode: MapModeFlags, offset: usize, size: usize, callback: MapCallback, userdata: *anyopaque) void {
Impl.bufferMapAsync(buffer, mode, offset, size, callback, userdata);
}
pub inline fn bufferSetLabel(buffer: *Buffer, label: [*:0]const u8) void {
Impl.bufferSetLabel(buffer, label);
}
pub inline fn bufferUnmap(buffer: *Buffer) void {
Impl.bufferUnmap(buffer);
}
pub inline fn bufferReference(buffer: *Buffer) void {
Impl.bufferReference(buffer);
}
pub inline fn bufferRelease(buffer: *Buffer) void {
Impl.bufferRelease(buffer);
}
};