On Tue, Mar 27, 2018 at 9:00 AM, Roderick Colenbrander thunderbird2k@gmail.com wrote:
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;
Is there a reason to load winevulkan.dll dynamically? We could simplify code by linking to winevulkan.dll. Otherwise, we should probably take care of unloading winevulkan.dll, e.g. in case of failures.
- 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 TRUE;return vk_loader_init();
}
2.14.3