[PATCH 09/10] winex11: Add stubs for core Vulkan instance functions.

Roderick Colenbrander <[email protected]>
Newsgroups gmane.comp.emulators.wine.patches
Message-ID <[email protected]>
Signed-off-by: Roderick Colenbrander <[email protected]>
---
 dlls/winex11.drv/vulkan.c         | 24 +++++++++-
 dlls/winex11.drv/vulkan_private.h |  2 +
 dlls/winex11.drv/vulkan_thunks.c  | 98 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 122 insertions(+), 2 deletions(-)

diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c
index f1c41908d8..70adbe5a92 100644
--- a/dlls/winex11.drv/vulkan.c
+++ b/dlls/winex11.drv/vulkan.c
@@ -98,6 +98,20 @@ static void *wine_vk_get_global_proc_addr(const char* name)
     return NULL;
 }
 
+static void *wine_vk_get_instance_proc_addr(const char* name)
+{
+    int i;
+    for (i = 0; i < vk_instance_dispatch_table_size; i++)
+    {
+        if (strcmp(name, vk_instance_dispatch_table[i].name) == 0)
+        {
+            TRACE("Found pName=%s in instance table\n", name);
+            return vk_instance_dispatch_table[i].func;
+        }
+    }
+    return NULL;
+}
+
 static void wine_vk_application_dump_info(const VkApplicationInfo *info)
 {
     TRACE("pApplicationName \"%s\", applicationVersion %d\n", info->pApplicationName, info->applicationVersion);
@@ -259,8 +273,14 @@ void* WINAPI X11DRV_vk_icdGetInstanceProcAddr(VkInstance instance, const char* p
         return func;
     }
 
-    /* TODO: add loading of instance and device functions. */
-    FIXME("Function %s not found\n", pName);
+    /* Now find any instance function. */
+    func = wine_vk_get_instance_proc_addr(pName);
+    if (func)
+        return func;
+
+    /* TODO: add device function loading. */
+
+    TRACE("Function %s not found\n", pName);
     return NULL;
 }
 
diff --git a/dlls/winex11.drv/vulkan_private.h b/dlls/winex11.drv/vulkan_private.h
index d3fa7be167..15c0b16fc8 100644
--- a/dlls/winex11.drv/vulkan_private.h
+++ b/dlls/winex11.drv/vulkan_private.h
@@ -63,6 +63,8 @@ struct vulkan_func
 /* For use by vk_icdGetInstanceProcAddr / vkGetInstanceProcAddr */
 extern const struct vulkan_func vk_global_dispatch_table[] DECLSPEC_HIDDEN;
 extern const int vk_global_dispatch_table_size DECLSPEC_HIDDEN;
+extern const struct vulkan_func vk_instance_dispatch_table[] DECLSPEC_HIDDEN;
+extern const int vk_instance_dispatch_table_size DECLSPEC_HIDDEN;
 
 VkResult WINAPI X11DRV_vkCreateInstance(const VkInstanceCreateInfo*, const VkAllocationCallbacks*, VkInstance*) DECLSPEC_HIDDEN;
 VkResult WINAPI X11DRV_vkEnumerateInstanceExtensionProperties(const char*, uint32_t*, VkExtensionProperties*) DECLSPEC_HIDDEN;
diff --git a/dlls/winex11.drv/vulkan_thunks.c b/dlls/winex11.drv/vulkan_thunks.c
index fc3c65762a..653f10955d 100644
--- a/dlls/winex11.drv/vulkan_thunks.c
+++ b/dlls/winex11.drv/vulkan_thunks.c
@@ -5,9 +5,90 @@
 
 #ifdef SONAME_LIBVULKAN
 
+#include "wine/debug.h"
 #include "wine/vulkan.h"
 #include "vulkan_private.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
+
+static VkResult WINAPI X11DRV_vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDevice * pDevice)
+{
+    FIXME("stub: %p, %p, %p, %p\n", physicalDevice, pCreateInfo, pAllocator, pDevice);
+    return VK_ERROR_OUT_OF_HOST_MEMORY;
+}
+
+static void WINAPI X11DRV_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks * pAllocator)
+{
+    FIXME("stub: %p, %p\n", instance, pAllocator);
+    return;
+}
+
+static VkResult WINAPI X11DRV_vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char * pLayerName, uint32_t * pPropertyCount, VkExtensionProperties * pProperties)
+{
+    FIXME("stub: %p, %p, %p, %p\n", physicalDevice, pLayerName, pPropertyCount, pProperties);
+    return VK_ERROR_OUT_OF_HOST_MEMORY;
+}
+
+static VkResult WINAPI X11DRV_vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t * pPropertyCount, VkLayerProperties * pProperties)
+{
+    FIXME("stub: %p, %p, %p\n", physicalDevice, pPropertyCount, pProperties);
+    return VK_ERROR_OUT_OF_HOST_MEMORY;
+}
+
+static VkResult WINAPI X11DRV_vkEnumeratePhysicalDevices(VkInstance instance, uint32_t * pPhysicalDeviceCount, VkPhysicalDevice * pPhysicalDevices)
+{
+    FIXME("stub: %p, %p, %p\n", instance, pPhysicalDeviceCount, pPhysicalDevices);
+    return VK_ERROR_OUT_OF_HOST_MEMORY;
+}
+
+static PFN_vkVoidFunction WINAPI X11DRV_vkGetDeviceProcAddr(VkDevice device, const char * pName)
+{
+    FIXME("stub: %p, %p\n", device, pName);
+    return NULL;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures * pFeatures)
+{
+    FIXME("stub: %p, %p\n", physicalDevice, pFeatures);
+    return;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties * pFormatProperties)
+{
+    FIXME("stub: %p, %d, %p\n", physicalDevice, format, pFormatProperties);
+    return;
+}
+
+static VkResult WINAPI X11DRV_vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties * pImageFormatProperties)
+{
+    FIXME("stub: %p, %d, %d, %d, %#x, %#x, %p\n", physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
+    return VK_ERROR_OUT_OF_HOST_MEMORY;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties * pMemoryProperties)
+{
+    FIXME("stub: %p, %p\n", physicalDevice, pMemoryProperties);
+    return;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties * pProperties)
+{
+    FIXME("stub: %p, %p\n", physicalDevice, pProperties);
+    return;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t * pQueueFamilyPropertyCount, VkQueueFamilyProperties * pQueueFamilyProperties)
+{
+    FIXME("stub: %p, %p, %p\n", physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
+    return;
+}
+
+static void WINAPI X11DRV_vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t * pPropertyCount, VkSparseImageFormatProperties * pProperties)
+{
+    FIXME("stub: %p, %d, %d, %d, %#x, %d, %p, %p\n", physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
+    return;
+}
+
 const struct vulkan_func vk_global_dispatch_table[] = {
     {"vkCreateInstance", NULL, &X11DRV_vkCreateInstance},
     {"vkEnumerateInstanceExtensionProperties", NULL, &X11DRV_vkEnumerateInstanceExtensionProperties},
@@ -15,4 +96,21 @@ const struct vulkan_func vk_global_dispatch_table[] = {
 };
 const int vk_global_dispatch_table_size = 3;
 
+const struct vulkan_func vk_instance_dispatch_table[] = {
+    {"vkCreateDevice", NULL, &X11DRV_vkCreateDevice},
+    {"vkDestroyInstance", NULL, &X11DRV_vkDestroyInstance},
+    {"vkEnumerateDeviceExtensionProperties", NULL, &X11DRV_vkEnumerateDeviceExtensionProperties},
+    {"vkEnumerateDeviceLayerProperties", NULL, &X11DRV_vkEnumerateDeviceLayerProperties},
+    {"vkEnumeratePhysicalDevices", NULL, &X11DRV_vkEnumeratePhysicalDevices},
+    {"vkGetDeviceProcAddr", NULL, &X11DRV_vkGetDeviceProcAddr},
+    {"vkGetPhysicalDeviceFeatures", NULL, &X11DRV_vkGetPhysicalDeviceFeatures},
+    {"vkGetPhysicalDeviceFormatProperties", NULL, &X11DRV_vkGetPhysicalDeviceFormatProperties},
+    {"vkGetPhysicalDeviceImageFormatProperties", NULL, &X11DRV_vkGetPhysicalDeviceImageFormatProperties},
+    {"vkGetPhysicalDeviceMemoryProperties", NULL, &X11DRV_vkGetPhysicalDeviceMemoryProperties},
+    {"vkGetPhysicalDeviceProperties", NULL, &X11DRV_vkGetPhysicalDeviceProperties},
+    {"vkGetPhysicalDeviceQueueFamilyProperties", NULL, &X11DRV_vkGetPhysicalDeviceQueueFamilyProperties},
+    {"vkGetPhysicalDeviceSparseImageFormatProperties", NULL, &X11DRV_vkGetPhysicalDeviceSparseImageFormatProperties},
+};
+const int vk_instance_dispatch_table_size = 13;
+
 #endif /* SONAME_LIBVULKAN */
-- 
2.13.6
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.