[PATCH v5 3/4] winevulkan: Implement vkDestroyInstance.

Józef Kucia jkucia at codeweavers.com
Thu Mar 1 09:37:05 CST 2018


From: Roderick Colenbrander <thunderbird2k at gmail.com>

Signed-off-by: Roderick Colenbrander <thunderbird2k at gmail.com>
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/winevulkan/make_vulkan     | 17 ++++++++++++++++-
 dlls/winevulkan/vulkan.c        | 10 ++++++++++
 dlls/winevulkan/vulkan_thunks.c |  5 -----
 dlls/winevulkan/vulkan_thunks.h |  3 +++
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index c22619af1bf6..6c6cf2ea3cad 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -89,7 +89,7 @@ FUNCTION_OVERRIDES = {
     "vkGetInstanceProcAddr": {"dispatch" : False, "driver" : True, "thunk" : False},
 
     # Instance functions
-    "vkDestroyInstance" : {"dispatch" : True, "driver" : True, "thunk" : True },
+    "vkDestroyInstance" : {"dispatch" : True, "driver" : True, "thunk" : False },
 }
 
 
@@ -1032,6 +1032,21 @@ class VkGenerator(object):
         f.write("/* For use by vk_icdGetInstanceProcAddr / vkGetInstanceProcAddr */\n")
         f.write("void *wine_vk_get_instance_proc_addr(const char *name) DECLSPEC_HIDDEN;\n\n")
 
+        # Generate prototypes for device and instance functions requiring a custom implementation.
+        f.write("/* Functions for which we have custom implementations outside of the thunks. */\n")
+        for vk_func in self.registry.funcs.values():
+            if not vk_func.is_required():
+                continue
+
+            if vk_func.is_global_func():
+                continue
+
+            if vk_func.needs_thunk():
+                continue
+
+            f.write("{0};\n".format(vk_func.prototype("WINAPI", prefix="wine_", postfix="DECLSPEC_HIDDEN")))
+        f.write("\n")
+
         f.write("#endif /* __WINE_VULKAN_THUNKS_H */\n")
 
     def generate_vulkan_h(self, f):
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index 9d2cdd2fa483..85836bdd4267 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -108,6 +108,16 @@ err:
     return res;
 }
 
+void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *allocator)
+{
+    TRACE("%p, %p\n", instance, allocator);
+
+    if (allocator)
+        FIXME("Support allocation allocators\n");
+
+    wine_vk_instance_free(instance);
+}
+
 static VkResult WINAPI wine_vkEnumerateInstanceExtensionProperties(const char *layer_name,
         uint32_t *count, VkExtensionProperties *properties)
 {
diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c
index 57d4f3549b25..c1c0b079a534 100644
--- a/dlls/winevulkan/vulkan_thunks.c
+++ b/dlls/winevulkan/vulkan_thunks.c
@@ -16,11 +16,6 @@ static VkResult WINAPI wine_vkCreateDevice(VkPhysicalDevice physicalDevice, cons
     return VK_ERROR_OUT_OF_HOST_MEMORY;
 }
 
-static void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator)
-{
-    FIXME("stub: %p, %p\n", instance, pAllocator);
-}
-
 static VkResult WINAPI wine_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)
 {
     FIXME("stub: %p, %p, %p, %p\n", physicalDevice, pLayerName, pPropertyCount, pProperties);
diff --git a/dlls/winevulkan/vulkan_thunks.h b/dlls/winevulkan/vulkan_thunks.h
index dbfd83c1156d..969bf125f974 100644
--- a/dlls/winevulkan/vulkan_thunks.h
+++ b/dlls/winevulkan/vulkan_thunks.h
@@ -6,4 +6,7 @@
 /* For use by vk_icdGetInstanceProcAddr / vkGetInstanceProcAddr */
 void *wine_vk_get_instance_proc_addr(const char *name) DECLSPEC_HIDDEN;
 
+/* Functions for which we have custom implementations outside of the thunks. */
+void WINAPI wine_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) DECLSPEC_HIDDEN;
+
 #endif /* __WINE_VULKAN_THUNKS_H */
-- 
2.16.1




More information about the wine-devel mailing list