[PATCH 5/5] winevulkan: Generate get_vulkan_driver_*_proc_addr() helper functions.
Józef Kucia
jkucia at codeweavers.com
Mon Jul 16 08:18:23 CDT 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/winemac.drv/vulkan.c | 62 -----------------------------------------
dlls/winevulkan/make_vulkan | 32 ++++++++++++++++++++-
dlls/winex11.drv/vulkan.c | 66 --------------------------------------------
include/wine/vulkan_driver.h | 63 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 94 insertions(+), 129 deletions(-)
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c
index 3f704544c865..b1211dff5448 100644
--- a/dlls/winemac.drv/vulkan.c
+++ b/dlls/winemac.drv/vulkan.c
@@ -488,73 +488,11 @@ static const struct vulkan_funcs vulkan_funcs =
macdrv_vkQueuePresentKHR,
};
-static void *get_vulkan_driver_device_proc_addr(const struct vulkan_funcs *vulkan_funcs,
- const char *name)
-{
- if (!name || name[0] != 'v' || name[1] != 'k')
- return NULL;
-
- name += 2;
-
- if (!strcmp(name, "CreateSwapchainKHR"))
- return vulkan_funcs->p_vkCreateSwapchainKHR;
- if (!strcmp(name, "DestroySwapchainKHR"))
- return vulkan_funcs->p_vkDestroySwapchainKHR;
- if (!strcmp(name, "GetDeviceProcAddr"))
- return vulkan_funcs->p_vkGetDeviceProcAddr;
- if (!strcmp(name, "GetSwapchainImagesKHR"))
- return vulkan_funcs->p_vkGetSwapchainImagesKHR;
- if (!strcmp(name, "QueuePresentKHR"))
- return vulkan_funcs->p_vkQueuePresentKHR;
-
- return NULL;
-}
-
static void *macdrv_get_vk_device_proc_addr(const char *name)
{
return get_vulkan_driver_device_proc_addr(&vulkan_funcs, name);
}
-static void *get_vulkan_driver_instance_proc_addr(const struct vulkan_funcs *vulkan_funcs,
- VkInstance instance, const char *name)
-{
- if (!name || name[0] != 'v' || name[1] != 'k')
- return NULL;
-
- name += 2;
-
- if (!strcmp(name, "CreateInstance"))
- return vulkan_funcs->p_vkCreateInstance;
- if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
- return vulkan_funcs->p_vkEnumerateInstanceExtensionProperties;
-
- if (!instance)
- return NULL;
-
- if (!strcmp(name, "CreateWin32SurfaceKHR"))
- return vulkan_funcs->p_vkCreateWin32SurfaceKHR;
- if (!strcmp(name, "DestroyInstance"))
- return vulkan_funcs->p_vkDestroyInstance;
- if (!strcmp(name, "DestroySurfaceKHR"))
- return vulkan_funcs->p_vkDestroySurfaceKHR;
- if (!strcmp(name, "GetInstanceProcAddr"))
- return vulkan_funcs->p_vkGetInstanceProcAddr;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceFormatsKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfacePresentModesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceSupportKHR;
- if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceWin32PresentationSupportKHR;
-
- name -= 2;
-
- return get_vulkan_driver_device_proc_addr(vulkan_funcs, name);
-}
-
static void *macdrv_get_vk_instance_proc_addr(VkInstance instance, const char *name)
{
return get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name);
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index 7ab92dc940bf..a7dc040a6de4 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -2235,7 +2235,7 @@ class VkGenerator(object):
f.write(" */\n")
for vk_func in self.registry.funcs.values():
- if not vk_func.is_required() or not vk_func.is_driver_func():
+ if not vk_func.is_driver_func():
continue
pfn = vk_func.pfn()
@@ -2246,6 +2246,36 @@ class VkGenerator(object):
f.write("};\n\n")
f.write("extern const struct vulkan_funcs * CDECL __wine_get_vulkan_driver(HDC hdc, UINT version);\n\n")
+
+ f.write("static inline void *get_vulkan_driver_device_proc_addr(\n")
+ f.write(" const struct vulkan_funcs *vulkan_funcs, const char *name)\n{\n")
+ f.write(" if (!name || name[0] != 'v' || name[1] != 'k') return NULL;\n\n")
+ f.write(" name += 2;\n\n")
+ for vk_func in self.registry.funcs.values():
+ if vk_func.is_driver_func() and vk_func.is_device_func():
+ f.write(' if (!strcmp(name, "{0}"))\n'.format(vk_func.name[2:]))
+ f.write(' return vulkan_funcs->p_{0};\n'.format(vk_func.name))
+ f.write("\n")
+ f.write(" return NULL;\n}\n\n")
+
+ f.write("static inline void *get_vulkan_driver_instance_proc_addr(\n")
+ f.write(" const struct vulkan_funcs *vulkan_funcs, VkInstance instance, const char *name)\n{\n")
+ f.write(" if (!name || name[0] != 'v' || name[1] != 'k') return NULL;\n\n")
+ f.write(" name += 2;\n\n")
+ for vk_func in self.registry.funcs.values():
+ if vk_func.is_driver_func() and vk_func.is_global_func() and vk_func.name != "vkGetInstanceProcAddr":
+ f.write(' if (!strcmp(name, "{0}"))\n'.format(vk_func.name[2:]))
+ f.write(' return vulkan_funcs->p_{0};\n'.format(vk_func.name))
+ f.write("\n")
+ f.write(" if (!instance) return NULL;\n\n")
+ for vk_func in self.registry.funcs.values():
+ if vk_func.is_driver_func() and vk_func.is_instance_func():
+ f.write(' if (!strcmp(name, "{0}"))\n'.format(vk_func.name[2:]))
+ f.write(' return vulkan_funcs->p_{0};\n'.format(vk_func.name))
+ f.write("\n")
+ f.write(" name -= 2;\n\n")
+ f.write(" return get_vulkan_driver_device_proc_addr(vulkan_funcs, name);\n}\n\n")
+
f.write("#endif /* __WINE_VULKAN_DRIVER_H */\n")
def generate_vulkan_spec(self, f):
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c
index e0d576b144fd..f9eea74d1bde 100644
--- a/dlls/winex11.drv/vulkan.c
+++ b/dlls/winex11.drv/vulkan.c
@@ -540,77 +540,11 @@ static const struct vulkan_funcs vulkan_funcs =
X11DRV_vkQueuePresentKHR,
};
-static void *get_vulkan_driver_device_proc_addr(const struct vulkan_funcs *vulkan_funcs,
- const char *name)
-{
- if (!name || name[0] != 'v' || name[1] != 'k')
- return NULL;
-
- name += 2;
-
- if (!strcmp(name, "CreateSwapchainKHR"))
- return vulkan_funcs->p_vkCreateSwapchainKHR;
- if (!strcmp(name, "DestroySwapchainKHR"))
- return vulkan_funcs->p_vkDestroySwapchainKHR;
- if (!strcmp(name, "GetDeviceGroupSurfacePresentModesKHR"))
- return vulkan_funcs->p_vkGetDeviceGroupSurfacePresentModesKHR;
- if (!strcmp(name, "GetDeviceProcAddr"))
- return vulkan_funcs->p_vkGetDeviceProcAddr;
- if (!strcmp(name, "GetSwapchainImagesKHR"))
- return vulkan_funcs->p_vkGetSwapchainImagesKHR;
- if (!strcmp(name, "QueuePresentKHR"))
- return vulkan_funcs->p_vkQueuePresentKHR;
-
- return NULL;
-}
-
static void *X11DRV_get_vk_device_proc_addr(const char *name)
{
return get_vulkan_driver_device_proc_addr(&vulkan_funcs, name);
}
-static void *get_vulkan_driver_instance_proc_addr(const struct vulkan_funcs *vulkan_funcs,
- VkInstance instance, const char *name)
-{
- if (!name || name[0] != 'v' || name[1] != 'k')
- return NULL;
-
- name += 2;
-
- if (!strcmp(name, "CreateInstance"))
- return vulkan_funcs->p_vkCreateInstance;
- if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
- return vulkan_funcs->p_vkEnumerateInstanceExtensionProperties;
-
- if (!instance)
- return NULL;
-
- if (!strcmp(name, "CreateWin32SurfaceKHR"))
- return vulkan_funcs->p_vkCreateWin32SurfaceKHR;
- if (!strcmp(name, "DestroyInstance"))
- return vulkan_funcs->p_vkDestroyInstance;
- if (!strcmp(name, "DestroySurfaceKHR"))
- return vulkan_funcs->p_vkDestroySurfaceKHR;
- if (!strcmp(name, "GetInstanceProcAddr"))
- return vulkan_funcs->p_vkGetInstanceProcAddr;
- if (!strcmp(name, "GetPhysicalDevicePresentRectanglesKHR"))
- return vulkan_funcs->p_vkGetPhysicalDevicePresentRectanglesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceFormatsKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfacePresentModesKHR;
- if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceSupportKHR;
- if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR"))
- return vulkan_funcs->p_vkGetPhysicalDeviceWin32PresentationSupportKHR;
-
- name -= 2;
-
- return get_vulkan_driver_device_proc_addr(vulkan_funcs, name);
-}
-
static void *X11DRV_get_vk_instance_proc_addr(VkInstance instance, const char *name)
{
return get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name);
diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h
index d009f12832f3..a5bc50325c7d 100644
--- a/include/wine/vulkan_driver.h
+++ b/include/wine/vulkan_driver.h
@@ -69,4 +69,67 @@ struct vulkan_funcs
extern const struct vulkan_funcs * CDECL __wine_get_vulkan_driver(HDC hdc, UINT version);
+static inline void *get_vulkan_driver_device_proc_addr(
+ const struct vulkan_funcs *vulkan_funcs, const char *name)
+{
+ if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
+
+ name += 2;
+
+ if (!strcmp(name, "CreateSwapchainKHR"))
+ return vulkan_funcs->p_vkCreateSwapchainKHR;
+ if (!strcmp(name, "DestroySwapchainKHR"))
+ return vulkan_funcs->p_vkDestroySwapchainKHR;
+ if (!strcmp(name, "GetDeviceGroupSurfacePresentModesKHR"))
+ return vulkan_funcs->p_vkGetDeviceGroupSurfacePresentModesKHR;
+ if (!strcmp(name, "GetDeviceProcAddr"))
+ return vulkan_funcs->p_vkGetDeviceProcAddr;
+ if (!strcmp(name, "GetSwapchainImagesKHR"))
+ return vulkan_funcs->p_vkGetSwapchainImagesKHR;
+ if (!strcmp(name, "QueuePresentKHR"))
+ return vulkan_funcs->p_vkQueuePresentKHR;
+
+ return NULL;
+}
+
+static inline void *get_vulkan_driver_instance_proc_addr(
+ const struct vulkan_funcs *vulkan_funcs, VkInstance instance, const char *name)
+{
+ if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
+
+ name += 2;
+
+ if (!strcmp(name, "CreateInstance"))
+ return vulkan_funcs->p_vkCreateInstance;
+ if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
+ return vulkan_funcs->p_vkEnumerateInstanceExtensionProperties;
+
+ if (!instance) return NULL;
+
+ if (!strcmp(name, "CreateWin32SurfaceKHR"))
+ return vulkan_funcs->p_vkCreateWin32SurfaceKHR;
+ if (!strcmp(name, "DestroyInstance"))
+ return vulkan_funcs->p_vkDestroyInstance;
+ if (!strcmp(name, "DestroySurfaceKHR"))
+ return vulkan_funcs->p_vkDestroySurfaceKHR;
+ if (!strcmp(name, "GetInstanceProcAddr"))
+ return vulkan_funcs->p_vkGetInstanceProcAddr;
+ if (!strcmp(name, "GetPhysicalDevicePresentRectanglesKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDevicePresentRectanglesKHR;
+ if (!strcmp(name, "GetPhysicalDeviceSurfaceCapabilitiesKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
+ if (!strcmp(name, "GetPhysicalDeviceSurfaceFormatsKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceFormatsKHR;
+ if (!strcmp(name, "GetPhysicalDeviceSurfacePresentModesKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDeviceSurfacePresentModesKHR;
+ if (!strcmp(name, "GetPhysicalDeviceSurfaceSupportKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDeviceSurfaceSupportKHR;
+ if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR"))
+ return vulkan_funcs->p_vkGetPhysicalDeviceWin32PresentationSupportKHR;
+
+ name -= 2;
+
+ return get_vulkan_driver_device_proc_addr(vulkan_funcs, name);
+}
+
#endif /* __WINE_VULKAN_DRIVER_H */
--
2.16.4
More information about the wine-devel
mailing list