Signed-off-by: Roderick Colenbrander thunderbird2k@gmail.com --- dlls/vulkan-1/vulkan.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-)
diff --git a/dlls/vulkan-1/vulkan.c b/dlls/vulkan-1/vulkan.c index b8db08a312..e3981b63ef 100644 --- a/dlls/vulkan-1/vulkan.c +++ b/dlls/vulkan-1/vulkan.c @@ -27,6 +27,32 @@
WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
+static VkResult (WINAPI *p_vkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *); +static void * (WINAPI *p_vk_icdGetInstanceProcAddr)(VkInstance, const char *); + +static BOOL vk_loader_init(void) +{ + HMODULE icd_handle = NULL; + + icd_handle = LoadLibraryA("winevulkan.dll"); + if (!icd_handle) + { + ERR("Failed to load Vulkan ICD (winevulkan.dll).\n"); + return FALSE; + } + + p_vk_icdGetInstanceProcAddr = (void *)GetProcAddress(icd_handle, "vk_icdGetInstanceProcAddr"); + if (!p_vk_icdGetInstanceProcAddr) + return FALSE; + + p_vkEnumerateInstanceExtensionProperties = p_vk_icdGetInstanceProcAddr(NULL, + "vkEnumerateInstanceExtensionProperties"); + if (!p_vkEnumerateInstanceExtensionProperties) + return FALSE; + + return TRUE; +} + VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info, const VkAllocationCallbacks *allocator, VkInstance *instance) { @@ -37,8 +63,12 @@ VkResult WINAPI vkCreateInstance(const VkInstanceCreateInfo *create_info, VkResult WINAPI vkEnumerateInstanceExtensionProperties(const char *layer_name, uint32_t *count, VkExtensionProperties *properties) { - FIXME("stub: %p %p %p\n", layer_name, count, properties); - return VK_ERROR_OUT_OF_HOST_MEMORY; + TRACE("%p %p %p\n", layer_name, count, properties); + + if (layer_name) + return VK_ERROR_LAYER_NOT_PRESENT; + + return p_vkEnumerateInstanceExtensionProperties(NULL, count, properties); }
VkResult WINAPI vkEnumerateInstanceLayerProperties(uint32_t *count, VkLayerProperties *properties) @@ -64,7 +94,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hinst); - return TRUE; + return vk_loader_init(); } return TRUE; }