On Sat, Mar 24, 2018 at 6:27 AM, Józef Kucia jkucia@codeweavers.com wrote:
The following patch series was written mainly for Direct3D 12 integration. Our Direct3D 12 is going to use host Vulkan, but we want to share platform-specific WSI code with Wine Vulkan. The series makes sense on its own as well, as it lets us to use autogenerated thunks for more Vulkan functions.
We add additional requirement for Wine Vulkan drivers: vkGetInstanceProcAddr() and vkGetDeviceProcAddr() must return function pointers to overridden Vulkan functions. This requirement allow us to treat Wine Vulkan driver as host Vulkan implementation extended with VK_KHR_win32_surface.
The plan is to make our D3D12 implementation another client of Wine Vulkan driver, i.e. D3D12 is going to call __wine_get_vulkan_driver(). Thanks to this series, we'll be able to pass vkGetInstanceProcAddr() to libvkd3d and tell libvkd3d enable VK_KHR_win32_surface.
We could take this idea further and minimize Wine Vulkan driver interface to a single function: vkGetInstanceProcAddr(). The only requirement would be that Wine Vulkan driver has to provide an implementation of VK_KHR_win32_surface. On the other hand, the vulkan_funcs structure makes it more explicit what is expected to be implemented by Wine Vulkan driver.
CC: Roderick Colenbrander thunderbird2k@gmail.com
Józef Kucia (7): winevulkan: Get rid of unnecessary forward declarations. winex11: Return Wine Vulkan driver functions from vkGetInstanceProcAddr(). winex11: Return Wine Vulkan driver functions from vkGetDeviceProcAddr(). winevulkan: Generate conversions only for autogenerated thunks. winevulkan: Put all required functions into function tables. winevulkan: Mark explicitly if driver function is needed in dispatch tables. winevulkan: Autogenerate thunks for functions overridden by Wine Vulkan driver.
dlls/winevulkan/make_vulkan | 49 +++--- dlls/winevulkan/vulkan.c | 341 +++++++++++----------------------------- dlls/winevulkan/vulkan_thunks.c | 118 ++++++++++++-- dlls/winevulkan/vulkan_thunks.h | 42 +++-- dlls/winex11.drv/vulkan.c | 94 ++++++++++- 5 files changed, 338 insertions(+), 306 deletions(-)
-- 2.16.1
Hi Jozef,
I hadn't considered this use case, but indeed for libvkd3d it makes sense to use Wine graphics drivers as 'host libraries' and avoid the unneeded winevulkan thunks. I glanced over the patches and they look fine on the surface, but need to take a closer look.
Thanks, Roderick