From c16d6bf615df5403244ad93fc6f6ee2adc4f7bf3 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sun, 31 Oct 2021 01:00:02 -0700 Subject: [PATCH] glfw: improve ABI compatability with zig-vulkan library Signed-off-by: Stephen Gutekanst --- glfw/src/vulkan.zig | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/glfw/src/vulkan.zig b/glfw/src/vulkan.zig index bbc5ef6b..f848b814 100644 --- a/glfw/src/vulkan.zig +++ b/glfw/src/vulkan.zig @@ -189,11 +189,18 @@ pub inline fn getPhysicalDevicePresentationSupport(vk_instance: *opaque {}, vk_p /// Vulkan objects, see the Vulkan specification. /// /// see also: vulkan_surface, glfw.getRequiredInstanceExtensions -pub inline fn createWindowSurface(vk_instance: *opaque {}, window: Window, vk_allocation_callbacks: *opaque {}, vk_surface_khr: *opaque {}) Error!i32 { +pub inline fn createWindowSurface(vk_instance: anytype, window: Window, vk_allocation_callbacks: anytype, vk_surface_khr: anytype) Error!i32 { + // zig-vulkan uses enums to represent opaque pointers: + // pub const Instance = enum(usize) { null_handle = 0, _ }; + const instance: c.VkInstance = switch (@typeInfo(@TypeOf(vk_instance))) { + .Enum => @intToPtr(c.VkInstance, @enumToInt(vk_instance)), + else => @ptrCast(c.VkInstance, vk_instance), + }; + const v = c.glfwCreateWindowSurface( - @ptrCast(c.VkInstance, vk_instance), + instance, window.handle, - @ptrCast(*c.VkAllocationCallbacks, @alignCast(@alignOf(*c.VkAllocationCallbacks), vk_allocation_callbacks)), + if (vk_allocation_callbacks == null) null else @ptrCast(*c.VkAllocationCallbacks, @alignCast(@alignOf(*c.VkAllocationCallbacks), vk_allocation_callbacks)), @ptrCast(*c.VkSurfaceKHR, @alignCast(@alignOf(*c.VkSurfaceKHR), vk_surface_khr)), ); try getError();