improving function maps

This commit is contained in:
2025-11-04 07:43:55 +01:00
parent 446ac9c1f0
commit 0664c3e94b

View File

@@ -13,17 +13,25 @@ const VulkanAllocator = @import("VulkanAllocator.zig");
const Instance = @import("Instance.zig"); const Instance = @import("Instance.zig");
const PhysicalDevice = @import("PhysicalDevice.zig"); const PhysicalDevice = @import("PhysicalDevice.zig");
fn functionMapElement(name: []const u8) struct { []const u8, vk.PfnVoidFunction } {
if (!std.meta.hasFn(@This(), name)) {
std.log.scoped(.functionMapElement).err("Could not find function {s}", .{name});
return .{ name, null };
}
return .{ name, @as(vk.PfnVoidFunction, @ptrCast(&@field(@This(), name))) };
}
pub export fn vkGetInstanceProcAddr(p_instance: vk.Instance, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction { pub export fn vkGetInstanceProcAddr(p_instance: vk.Instance, p_name: ?[*:0]const u8) callconv(vk.vulkan_call_conv) vk.PfnVoidFunction {
const global_pfn_map = std.StaticStringMap(vk.PfnVoidFunction).initComptime(.{ const global_pfn_map = std.StaticStringMap(vk.PfnVoidFunction).initComptime(.{
.{ "vkGetInstanceProcAddr", @as(vk.PfnVoidFunction, @ptrCast(&vkGetInstanceProcAddr)) }, functionMapElement("vkGetInstanceProcAddr"),
.{ "vkCreateInstance", @as(vk.PfnVoidFunction, @ptrCast(&vkCreateInstance)) }, functionMapElement("vkCreateInstance"),
}); });
const instance_pfn_map = std.StaticStringMap(vk.PfnVoidFunction).initComptime(.{ const instance_pfn_map = std.StaticStringMap(vk.PfnVoidFunction).initComptime(.{
.{ "vkDestroyInstance", @as(vk.PfnVoidFunction, @ptrCast(&vkDestroyInstance)) }, functionMapElement("vkDestroyInstance"),
.{ "vkEnumeratePhysicalDevices", @as(vk.PfnVoidFunction, @ptrCast(&vkEnumeratePhysicalDevices)) }, functionMapElement("vkEnumeratePhysicalDevices"),
.{ "vkGetPhysicalDeviceProperties", @as(vk.PfnVoidFunction, @ptrCast(&vkGetPhysicalDeviceProperties)) }, functionMapElement("vkGetPhysicalDeviceProperties"),
.{ "vkGetPhysicalDeviceProperties", @as(vk.PfnVoidFunction, @ptrCast(&vkGetPhysicalDeviceMemoryProperties)) }, functionMapElement("vkGetPhysicalDeviceProperties"),
}); });
if (p_name == null) { if (p_name == null) {