compat: support latest zig, vulkan-zig
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -37,7 +37,7 @@ modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
zig-cache/
|
||||
[.]zig-cache/
|
||||
zig-out/
|
||||
build/
|
||||
build-*/
|
||||
|
21
build.zig
21
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,
|
||||
});
|
||||
|
@@ -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",
|
||||
},
|
||||
},
|
||||
|
||||
|
16
src/gfx.zig
16
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,
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user