From f58107ad7766f14761a0b95ab1ff1931fe8966a0 Mon Sep 17 00:00:00 2001 From: David Allemang Date: Wed, 5 Jun 2024 16:04:50 -0400 Subject: [PATCH] compat: support latest zig, vulkan-zig --- .gitignore | 2 +- build.zig | 21 +++------------- build.zig.zon | 4 +-- src/gfx.zig | 16 ++++++++++++ src/gfx/Base.zig | 6 ++--- src/gfx/Device.zig | 59 +++----------------------------------------- src/gfx/Instance.zig | 48 ++++++++++------------------------- 7 files changed, 42 insertions(+), 114 deletions(-) diff --git a/.gitignore b/.gitignore index 7ac1866..7626714 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,7 @@ modules.order Module.symvers Mkfile.old dkms.conf -zig-cache/ +[.]zig-cache/ zig-out/ build/ build-*/ diff --git a/build.zig b/build.zig index 523bea7..c213265 100644 --- a/build.zig +++ b/build.zig @@ -13,7 +13,7 @@ pub fn build(b: *std.Build) void { const exe = b.addExecutable(.{ .name = "scratchzig", - .root_source_file = .{ .path = "src/main.zig" }, + .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); @@ -39,19 +39,6 @@ pub fn build(b: *std.Build) void { b.installArtifact(exe); - var docs_dir: std.Build.GeneratedFile = .{ - .path = "docs", - .step = &exe.step, - }; - exe.generated_docs = &docs_dir; - const docs = b.addInstallDirectory(.{ - .source_dir = .{ .generated = &docs_dir }, - .install_dir = .{ .custom = "docs" }, - .install_subdir = "", - }); - const docs_step = b.step("docs", "Build the docs"); - docs_step.dependOn(&docs.step); - const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); @@ -63,7 +50,7 @@ pub fn build(b: *std.Build) void { run_step.dependOn(&run_cmd.step); const exe_unit_tests = b.addTest(.{ - .root_source_file = .{ .path = "src/main.zig" }, + .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); @@ -77,7 +64,7 @@ pub fn build(b: *std.Build) void { const dsa_unit_tests = b.addTest(.{ .name = "dsa.zig tests", - .root_source_file = .{ .path = "src/dsa.zig" }, + .root_source_file = b.path("src/dsa.zig"), .target = target, .optimize = optimize, }); @@ -89,7 +76,7 @@ pub fn build(b: *std.Build) void { const inspect = b.addExecutable(.{ .name = "vkinspect", - .root_source_file = .{ .path = "src/inspect.zig" }, + .root_source_file = b.path("src/inspect.zig"), .target = target, .optimize = optimize, }); diff --git a/build.zig.zon b/build.zig.zon index 9936a80..43a3b53 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -4,8 +4,8 @@ .dependencies = .{ .@"vulkan-zig" = .{ - .url = "https://github.com/Snektron/vulkan-zig/archive/2047f7e7f22d9aca17d0abb4ea5fb03763fce39a.tar.gz", - .hash = "122067b39a4f454ece4e800ee95e0002a767b535d647c6042ac93bc195100683ba03", + .url = "https://github.com/Snektron/vulkan-zig/archive/f2c2e0ff80374563357cc4fe72bf7d8a2c956824.tar.gz", + .hash = "1220cf0972c6fe05437c1a8689b955084385eb7ca1f8c14010d49ca5a89570a5d90d", }, }, diff --git a/src/gfx.zig b/src/gfx.zig index 208312e..e3b51c9 100644 --- a/src/gfx.zig +++ b/src/gfx.zig @@ -11,6 +11,22 @@ pub const Instance = @import("gfx/Instance.zig"); pub const Swapchain = @import("gfx/Swapchain.zig"); pub const Window = @import("gfx/Window.zig"); +pub const use_debug_messenger = switch (builtin.mode) { + .Debug, .ReleaseSafe => true, + .ReleaseSmall, .ReleaseFast => false, +}; + +pub const apis: []const vk.ApiInfo = &.{ + vk.features.version_1_0, + vk.features.version_1_1, + vk.features.version_1_2, + vk.features.version_1_3, + vk.extensions.khr_surface, + vk.extensions.khr_swapchain, + vk.extensions.khr_dynamic_rendering, + if (use_debug_messenger) vk.extensions.ext_debug_utils else .{}, +}; + pub fn uploadData( comptime T: type, pdev: vk.PhysicalDevice, diff --git a/src/gfx/Base.zig b/src/gfx/Base.zig index a348067..e0f3fd7 100644 --- a/src/gfx/Base.zig +++ b/src/gfx/Base.zig @@ -3,6 +3,7 @@ const builtin = @import("builtin"); const vk = @import("vk"); const c = @import("../c.zig"); +const gfx = @import("../gfx.zig"); const Self = @This(); @@ -26,7 +27,4 @@ pub fn deinit(_: Self) void { c.glfwTerminate(); } -pub const Wrapper = vk.BaseWrapper(.{ - .createInstance = true, - .getInstanceProcAddr = true, -}); +pub const Wrapper = vk.BaseWrapper(gfx.apis); diff --git a/src/gfx/Device.zig b/src/gfx/Device.zig index f43e445..d27f63c 100644 --- a/src/gfx/Device.zig +++ b/src/gfx/Device.zig @@ -5,6 +5,7 @@ const builtin = @import("builtin"); const vk = @import("vk"); const c = @import("../c.zig"); +const gfx = @import("../gfx.zig"); const Instance = @import("Instance.zig"); const Window = @import("Window.zig"); @@ -12,8 +13,8 @@ const Window = @import("Window.zig"); const Self = @This(); const required_extensions: []const [*:0]const u8 = &.{ - vk.extension_info.khr_swapchain.name, - vk.extension_info.khr_dynamic_rendering.name, + vk.extensions.khr_swapchain.name, + vk.extensions.khr_dynamic_rendering.name, }; const preferred_surface_format: vk.SurfaceFormatKHR = .{ @@ -178,56 +179,4 @@ pub fn deinit(self: Self) void { self.vkd.destroyDevice(self.dev, null); } -pub const Wrapper = vk.DeviceWrapper(.{ - .destroyDevice = true, - .getDeviceQueue = true, - .createSemaphore = true, - .createFence = true, - .createImageView = true, - .destroyImageView = true, - .destroySemaphore = true, - .destroyFence = true, - .getSwapchainImagesKHR = true, - .createSwapchainKHR = true, - .destroySwapchainKHR = true, - .acquireNextImageKHR = true, - .deviceWaitIdle = true, - .waitForFences = true, - .resetFences = true, - .queueSubmit = true, - .queuePresentKHR = true, - .createCommandPool = true, - .destroyCommandPool = true, - .allocateCommandBuffers = true, - .freeCommandBuffers = true, - .queueWaitIdle = true, - .createShaderModule = true, - .destroyShaderModule = true, - .createPipelineLayout = true, - .destroyPipelineLayout = true, - .createGraphicsPipelines = true, - .destroyPipeline = true, - .beginCommandBuffer = true, - .endCommandBuffer = true, - .allocateMemory = true, - .freeMemory = true, - .createBuffer = true, - .destroyBuffer = true, - .getBufferMemoryRequirements = true, - .mapMemory = true, - .unmapMemory = true, - .bindBufferMemory = true, - .cmdBeginRenderPass = true, - .cmdEndRenderPass = true, - .cmdBindPipeline = true, - .cmdDraw = true, - .cmdDrawIndexed = true, - .cmdSetViewport = true, - .cmdSetScissor = true, - .cmdBindVertexBuffers = true, - .cmdBindIndexBuffer = true, - .cmdCopyBuffer = true, - .cmdBeginRenderingKHR = true, - .cmdEndRenderingKHR = true, - .cmdPipelineBarrier = true, -}); +pub const Wrapper = vk.DeviceWrapper(gfx.apis); diff --git a/src/gfx/Instance.zig b/src/gfx/Instance.zig index c3f553b..c5c04d3 100644 --- a/src/gfx/Instance.zig +++ b/src/gfx/Instance.zig @@ -3,8 +3,7 @@ const builtin = @import("builtin"); const vk = @import("vk"); const c = @import("../c.zig"); - -const Base = @import("Base.zig"); +const gfx = @import("../gfx.zig"); const Self = @This(); @@ -16,26 +15,21 @@ const app_info: vk.ApplicationInfo = .{ .api_version = vk.API_VERSION_1_3, }; -pub const use_debug_messenger = switch (builtin.mode) { - .Debug, .ReleaseSafe => true, - .ReleaseSmall, .ReleaseFast => false, -}; - ref: vk.Instance, vki: Wrapper, -base: *const Base, +base: *const gfx.Base, -messenger: if (use_debug_messenger) vk.DebugUtilsMessengerEXT else void, +messenger: if (gfx.use_debug_messenger) vk.DebugUtilsMessengerEXT else void, pub fn init( - base: *const Base, + base: *const gfx.Base, ) !Self { var exts: std.BoundedArray([*:0]const u8, 32) = .{}; var layers: std.BoundedArray([*:0]const u8, 32) = .{}; - if (use_debug_messenger) { + if (gfx.use_debug_messenger) { try exts.appendSlice(&.{ - vk.extension_info.ext_debug_utils.name, + vk.extensions.ext_debug_utils.name, }); try layers.appendSlice(&.{ @@ -71,18 +65,18 @@ pub fn init( .pp_enabled_extension_names = &exts.buffer, .enabled_layer_count = @intCast(layers.len), .pp_enabled_layer_names = &layers.buffer, - .p_next = if (use_debug_messenger) &mci else null, + .p_next = if (gfx.use_debug_messenger) &mci else null, }, null); const vki = try Wrapper.load(ref, base.vkb.dispatch.vkGetInstanceProcAddr); errdefer vki.destroyInstance(ref, null); - const messenger = if (use_debug_messenger) + const messenger = if (gfx.use_debug_messenger) try vki.createDebugUtilsMessengerEXT(ref, &mci, null) else void{}; - errdefer if (use_debug_messenger) + errdefer if (gfx.use_debug_messenger) vki.destroyDebugUtilsMessengerEXT(ref, messenger, null); return .{ @@ -94,28 +88,12 @@ pub fn init( } pub fn deinit(self: Self) void { - if (use_debug_messenger) + if (gfx.use_debug_messenger) self.vki.destroyDebugUtilsMessengerEXT(self.ref, self.messenger, null); self.vki.destroyInstance(self.ref, null); } -pub const Wrapper = vk.InstanceWrapper(.{ - .destroyInstance = true, - .createDevice = true, - .destroySurfaceKHR = true, - .enumeratePhysicalDevices = true, - .getPhysicalDeviceProperties = true, - .enumerateDeviceExtensionProperties = true, - .getPhysicalDeviceSurfaceFormatsKHR = true, - .getPhysicalDeviceSurfacePresentModesKHR = true, - .getPhysicalDeviceSurfaceCapabilitiesKHR = true, - .getPhysicalDeviceQueueFamilyProperties = true, - .getPhysicalDeviceSurfaceSupportKHR = true, - .getPhysicalDeviceMemoryProperties = true, - .getDeviceProcAddr = true, - .createDebugUtilsMessengerEXT = use_debug_messenger, - .destroyDebugUtilsMessengerEXT = use_debug_messenger, -}); +pub const Wrapper = vk.InstanceWrapper(gfx.apis); pub fn debug_callback( msg_severity: vk.DebugUtilsMessageSeverityFlagsEXT, @@ -154,8 +132,8 @@ pub fn debug_callback( var bw = std.io.bufferedWriter(stderr); const writer = bw.writer(); - std.debug.getStderrMutex().lock(); - defer std.debug.getStderrMutex().unlock(); + std.debug.lockStdErr(); + defer std.debug.unlockStdErr(); nosuspend { writer.print("vk-{s}{s} {s}\n", .{ severity_prefix, type_prefix, message }) catch return vk.FALSE; bw.flush() catch return vk.FALSE;