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

Roderick Colenbrander thunderbird2k at gmail.com
Tue Oct 31 12:24:55 CDT 2017


Signed-off-by: Roderick Colenbrander <thunderbird2k at gmail.com>
---
 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




More information about the wine-patches mailing list