[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