From 8bdb105897d262c477dc12f8934419de7e6947d9 Mon Sep 17 00:00:00 2001 From: Philip Rideout Date: Wed, 3 Aug 2016 11:20:30 -0700 Subject: [PATCH] Add _GLFW_VULKAN_STATIC build macro This allows clients to link GLFW with a staticly-built loader library. This is useful in hermetic build systems that build the Khronos loader from source, rather than depending on the LunarG SDK binaries. Closes #820. --- src/internal.h | 19 +++++++++++++------ src/vulkan.c | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/internal.h b/src/internal.h index fc57f364..b35af6a4 100644 --- a/src/internal.h +++ b/src/internal.h @@ -149,11 +149,16 @@ typedef struct VkExtensionProperties } VkExtensionProperties; typedef void (APIENTRY * PFN_vkVoidFunction)(void); -typedef PFN_vkVoidFunction (APIENTRY * PFN_vkGetInstanceProcAddr)(VkInstance,const char*); -typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const char*,uint32_t*,VkExtensionProperties*); -#define vkEnumerateInstanceExtensionProperties _glfw.vk.EnumerateInstanceExtensionProperties -#define vkGetInstanceProcAddr _glfw.vk.GetInstanceProcAddr +#if defined(_GLFW_VULKAN_STATIC) + PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance,const char*); + VkResult vkEnumerateInstanceExtensionProperties(const char*,uint32_t*,VkExtensionProperties*); +#else + typedef PFN_vkVoidFunction (APIENTRY * PFN_vkGetInstanceProcAddr)(VkInstance,const char*); + typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const char*,uint32_t*,VkExtensionProperties*); + #define vkEnumerateInstanceExtensionProperties _glfw.vk.EnumerateInstanceExtensionProperties + #define vkGetInstanceProcAddr _glfw.vk.GetInstanceProcAddr +#endif #if defined(_GLFW_COCOA) #include "cocoa_platform.h" @@ -445,8 +450,10 @@ struct _GLFWlibrary void* handle; char** extensions; uint32_t extensionCount; - PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; - PFN_vkGetInstanceProcAddr GetInstanceProcAddr; + #if !defined(_GLFW_VULKAN_STATIC) + PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; + PFN_vkGetInstanceProcAddr GetInstanceProcAddr; + #endif GLFWbool KHR_surface; GLFWbool KHR_win32_surface; GLFWbool KHR_xlib_surface; diff --git a/src/vulkan.c b/src/vulkan.c index 586a2593..b851402b 100644 --- a/src/vulkan.c +++ b/src/vulkan.c @@ -41,6 +41,8 @@ GLFWbool _glfwInitVulkan(void) VkResult err; VkExtensionProperties* ep; uint32_t i, count; + +#if !defined(_GLFW_VULKAN_STATIC) #if defined(_GLFW_WIN32) const char* name = "vulkan-1.dll"; #else @@ -79,6 +81,8 @@ GLFWbool _glfwInitVulkan(void) return GLFW_FALSE; } +#endif // _GLFW_VULKAN_STATIC + err = vkEnumerateInstanceExtensionProperties(NULL, &count, NULL); if (err) {