zgpu

git clone git://git.electrosoup.com/zgpu
Log | Files | Refs | Submodules | README

commit 7c537cbc796a39d42a2a9592fcae2875aafcee7c
parent c81a9ca715aac3ccdc03f5562aa2c91ae31219eb
Author: Christian Ermann <christianermann@gmail.com>
Date:   Sun, 20 Apr 2025 19:43:35 -0700

Add logging configuration

Diffstat:
Asrc/logging.zig | 35+++++++++++++++++++++++++++++++++++
Msrc/main.zig | 22++++++++++++++++++++++
2 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/src/logging.zig b/src/logging.zig @@ -0,0 +1,35 @@ +const std = @import("std"); + +const c = @cImport({ + @cInclude("wgpu.h"); +}); + +pub const LogLevel = enum(u32) { + off = 0x00000000, + err = 0x00000001, + warn = 0x00000002, + info = 0x00000003, + debug = 0x00000004, + trace = 0x00000005, +}; + +pub const LogCallback = fn (LogLevel, []const u8) void; + +pub fn setLogLevel(level: LogLevel) void { + c.wgpuSetLogLevel(@intCast(@intFromEnum(level))); +} + +pub fn setLogCallback(comptime callback: LogCallback) void { + const Callback = struct { + const user_callback = callback; + pub fn callback_c( + level: c_int, + message: ?[*:0]const u8, + userdata: ?*anyopaque, + ) callconv(.C) void { + _ = userdata; + user_callback(@enumFromInt(level), std.mem.span(message.?)); + } + }; + c.wgpuSetLogCallback(@ptrCast(&Callback.callback_c), null); +} diff --git a/src/main.zig b/src/main.zig @@ -2,6 +2,25 @@ const std = @import("std"); const glfw = @import("glfw.zig"); const Instance = @import("instance.zig").Instance; +const Logging = @import("logging.zig"); + +pub fn zgpu_log_callback(level: Logging.LogLevel, message: []const u8) void { + switch (level) { + .err => { + std.log.err("[wgpu] {s}", .{message}); + }, + .warn => { + std.log.warn("[wgpu] {s}", .{message}); + }, + .info => { + std.log.debug("[wgpu] {s}", .{message}); + }, + .debug, .trace => { + std.log.debug("[wgpu] {s}", .{message}); + }, + .off => unreachable, + } +} pub fn main() !void { try glfw.init(); @@ -13,6 +32,9 @@ pub fn main() !void { const display = try glfw.native.getX11Display(); const window_id = try glfw.native.getX11Window(window); + Logging.setLogCallback(zgpu_log_callback); + Logging.setLogLevel(.warn); + const instance = Instance.create(&.{ .next = .{ .extras = &.{