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
|
Module.symvers
|
||||||
Mkfile.old
|
Mkfile.old
|
||||||
dkms.conf
|
dkms.conf
|
||||||
zig-cache/
|
[.]zig-cache/
|
||||||
zig-out/
|
zig-out/
|
||||||
build/
|
build/
|
||||||
build-*/
|
build-*/
|
||||||
|
21
build.zig
21
build.zig
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build) void {
|
|||||||
|
|
||||||
const exe = b.addExecutable(.{
|
const exe = b.addExecutable(.{
|
||||||
.name = "scratchzig",
|
.name = "scratchzig",
|
||||||
.root_source_file = .{ .path = "src/main.zig" },
|
.root_source_file = b.path("src/main.zig"),
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
@@ -39,19 +39,6 @@ pub fn build(b: *std.Build) void {
|
|||||||
|
|
||||||
b.installArtifact(exe);
|
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);
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
run_cmd.step.dependOn(b.getInstallStep());
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
|
||||||
@@ -63,7 +50,7 @@ pub fn build(b: *std.Build) void {
|
|||||||
run_step.dependOn(&run_cmd.step);
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
const exe_unit_tests = b.addTest(.{
|
const exe_unit_tests = b.addTest(.{
|
||||||
.root_source_file = .{ .path = "src/main.zig" },
|
.root_source_file = b.path("src/main.zig"),
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
@@ -77,7 +64,7 @@ pub fn build(b: *std.Build) void {
|
|||||||
|
|
||||||
const dsa_unit_tests = b.addTest(.{
|
const dsa_unit_tests = b.addTest(.{
|
||||||
.name = "dsa.zig tests",
|
.name = "dsa.zig tests",
|
||||||
.root_source_file = .{ .path = "src/dsa.zig" },
|
.root_source_file = b.path("src/dsa.zig"),
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
@@ -89,7 +76,7 @@ pub fn build(b: *std.Build) void {
|
|||||||
|
|
||||||
const inspect = b.addExecutable(.{
|
const inspect = b.addExecutable(.{
|
||||||
.name = "vkinspect",
|
.name = "vkinspect",
|
||||||
.root_source_file = .{ .path = "src/inspect.zig" },
|
.root_source_file = b.path("src/inspect.zig"),
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
|
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
.@"vulkan-zig" = .{
|
.@"vulkan-zig" = .{
|
||||||
.url = "https://github.com/Snektron/vulkan-zig/archive/2047f7e7f22d9aca17d0abb4ea5fb03763fce39a.tar.gz",
|
.url = "https://github.com/Snektron/vulkan-zig/archive/f2c2e0ff80374563357cc4fe72bf7d8a2c956824.tar.gz",
|
||||||
.hash = "122067b39a4f454ece4e800ee95e0002a767b535d647c6042ac93bc195100683ba03",
|
.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 Swapchain = @import("gfx/Swapchain.zig");
|
||||||
pub const Window = @import("gfx/Window.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(
|
pub fn uploadData(
|
||||||
comptime T: type,
|
comptime T: type,
|
||||||
pdev: vk.PhysicalDevice,
|
pdev: vk.PhysicalDevice,
|
||||||
|
@@ -3,6 +3,7 @@ const builtin = @import("builtin");
|
|||||||
|
|
||||||
const vk = @import("vk");
|
const vk = @import("vk");
|
||||||
const c = @import("../c.zig");
|
const c = @import("../c.zig");
|
||||||
|
const gfx = @import("../gfx.zig");
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
@@ -26,7 +27,4 @@ pub fn deinit(_: Self) void {
|
|||||||
c.glfwTerminate();
|
c.glfwTerminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Wrapper = vk.BaseWrapper(.{
|
pub const Wrapper = vk.BaseWrapper(gfx.apis);
|
||||||
.createInstance = true,
|
|
||||||
.getInstanceProcAddr = true,
|
|
||||||
});
|
|
||||||
|
@@ -5,6 +5,7 @@ const builtin = @import("builtin");
|
|||||||
|
|
||||||
const vk = @import("vk");
|
const vk = @import("vk");
|
||||||
const c = @import("../c.zig");
|
const c = @import("../c.zig");
|
||||||
|
const gfx = @import("../gfx.zig");
|
||||||
|
|
||||||
const Instance = @import("Instance.zig");
|
const Instance = @import("Instance.zig");
|
||||||
const Window = @import("Window.zig");
|
const Window = @import("Window.zig");
|
||||||
@@ -12,8 +13,8 @@ const Window = @import("Window.zig");
|
|||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
const required_extensions: []const [*:0]const u8 = &.{
|
const required_extensions: []const [*:0]const u8 = &.{
|
||||||
vk.extension_info.khr_swapchain.name,
|
vk.extensions.khr_swapchain.name,
|
||||||
vk.extension_info.khr_dynamic_rendering.name,
|
vk.extensions.khr_dynamic_rendering.name,
|
||||||
};
|
};
|
||||||
|
|
||||||
const preferred_surface_format: vk.SurfaceFormatKHR = .{
|
const preferred_surface_format: vk.SurfaceFormatKHR = .{
|
||||||
@@ -178,56 +179,4 @@ pub fn deinit(self: Self) void {
|
|||||||
self.vkd.destroyDevice(self.dev, null);
|
self.vkd.destroyDevice(self.dev, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Wrapper = vk.DeviceWrapper(.{
|
pub const Wrapper = vk.DeviceWrapper(gfx.apis);
|
||||||
.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,
|
|
||||||
});
|
|
||||||
|
@@ -3,8 +3,7 @@ const builtin = @import("builtin");
|
|||||||
|
|
||||||
const vk = @import("vk");
|
const vk = @import("vk");
|
||||||
const c = @import("../c.zig");
|
const c = @import("../c.zig");
|
||||||
|
const gfx = @import("../gfx.zig");
|
||||||
const Base = @import("Base.zig");
|
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
@@ -16,26 +15,21 @@ const app_info: vk.ApplicationInfo = .{
|
|||||||
.api_version = vk.API_VERSION_1_3,
|
.api_version = vk.API_VERSION_1_3,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const use_debug_messenger = switch (builtin.mode) {
|
|
||||||
.Debug, .ReleaseSafe => true,
|
|
||||||
.ReleaseSmall, .ReleaseFast => false,
|
|
||||||
};
|
|
||||||
|
|
||||||
ref: vk.Instance,
|
ref: vk.Instance,
|
||||||
vki: Wrapper,
|
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(
|
pub fn init(
|
||||||
base: *const Base,
|
base: *const gfx.Base,
|
||||||
) !Self {
|
) !Self {
|
||||||
var exts: std.BoundedArray([*:0]const u8, 32) = .{};
|
var exts: std.BoundedArray([*:0]const u8, 32) = .{};
|
||||||
var layers: 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(&.{
|
try exts.appendSlice(&.{
|
||||||
vk.extension_info.ext_debug_utils.name,
|
vk.extensions.ext_debug_utils.name,
|
||||||
});
|
});
|
||||||
|
|
||||||
try layers.appendSlice(&.{
|
try layers.appendSlice(&.{
|
||||||
@@ -71,18 +65,18 @@ pub fn init(
|
|||||||
.pp_enabled_extension_names = &exts.buffer,
|
.pp_enabled_extension_names = &exts.buffer,
|
||||||
.enabled_layer_count = @intCast(layers.len),
|
.enabled_layer_count = @intCast(layers.len),
|
||||||
.pp_enabled_layer_names = &layers.buffer,
|
.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);
|
}, null);
|
||||||
|
|
||||||
const vki = try Wrapper.load(ref, base.vkb.dispatch.vkGetInstanceProcAddr);
|
const vki = try Wrapper.load(ref, base.vkb.dispatch.vkGetInstanceProcAddr);
|
||||||
errdefer vki.destroyInstance(ref, null);
|
errdefer vki.destroyInstance(ref, null);
|
||||||
|
|
||||||
const messenger = if (use_debug_messenger)
|
const messenger = if (gfx.use_debug_messenger)
|
||||||
try vki.createDebugUtilsMessengerEXT(ref, &mci, null)
|
try vki.createDebugUtilsMessengerEXT(ref, &mci, null)
|
||||||
else
|
else
|
||||||
void{};
|
void{};
|
||||||
|
|
||||||
errdefer if (use_debug_messenger)
|
errdefer if (gfx.use_debug_messenger)
|
||||||
vki.destroyDebugUtilsMessengerEXT(ref, messenger, null);
|
vki.destroyDebugUtilsMessengerEXT(ref, messenger, null);
|
||||||
|
|
||||||
return .{
|
return .{
|
||||||
@@ -94,28 +88,12 @@ pub fn init(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: Self) void {
|
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.destroyDebugUtilsMessengerEXT(self.ref, self.messenger, null);
|
||||||
self.vki.destroyInstance(self.ref, null);
|
self.vki.destroyInstance(self.ref, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Wrapper = vk.InstanceWrapper(.{
|
pub const Wrapper = vk.InstanceWrapper(gfx.apis);
|
||||||
.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 fn debug_callback(
|
pub fn debug_callback(
|
||||||
msg_severity: vk.DebugUtilsMessageSeverityFlagsEXT,
|
msg_severity: vk.DebugUtilsMessageSeverityFlagsEXT,
|
||||||
@@ -154,8 +132,8 @@ pub fn debug_callback(
|
|||||||
var bw = std.io.bufferedWriter(stderr);
|
var bw = std.io.bufferedWriter(stderr);
|
||||||
const writer = bw.writer();
|
const writer = bw.writer();
|
||||||
|
|
||||||
std.debug.getStderrMutex().lock();
|
std.debug.lockStdErr();
|
||||||
defer std.debug.getStderrMutex().unlock();
|
defer std.debug.unlockStdErr();
|
||||||
nosuspend {
|
nosuspend {
|
||||||
writer.print("vk-{s}{s} {s}\n", .{ severity_prefix, type_prefix, message }) catch return vk.FALSE;
|
writer.print("vk-{s}{s} {s}\n", .{ severity_prefix, type_prefix, message }) catch return vk.FALSE;
|
||||||
bw.flush() catch return vk.FALSE;
|
bw.flush() catch return vk.FALSE;
|
||||||
|
Reference in New Issue
Block a user