[PATCH 3/5] vulkan-1: Implement vkEnumerateInstanceExtensionProperties.

Roderick Colenbrander thunderbird2k at gmail.com
Tue Mar 27 02:00:04 CDT 2018


Signed-off-by: Roderick Colenbrander <thunderbird2k at 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;
 }
-- 
2.14.3




More information about the wine-devel mailing list