This patchset adds support for Vulkan shared memory in wine, which can in turn be used by API layers like DXVK or D9VK to support D3D shared resources. The final commit in the patchset adds a wine extension allowing layers to associate a custom struct describing a resource, so that they can recreate it with no outside information. In the case of DXVK and D3D11 shared resources, this is a D3D11_COMMON_TEXTURE_DESC.
While this is the simplest solution, it may be a better idea to define a standard structure/s, so that interop between i.e. DXVK and vkd3d would be possible.
Keep in mind that this functionality may also be used for resources other than textures/surfaces, like synchronization primtives.
Derek Lesho (4): server: Implement GPU Resource object type. ntdll: Add custom helpers for interfacing with GPU Resource objects. winevulkan: Add support for VK_KHR_external_memory_fd. server,ntdll: Allow storage of API data inside of GPU Resource objects.
dlls/ntdll/Makefile.in | 1 + dlls/ntdll/gpu_resource.c | 128 ++++++++++++ dlls/ntdll/ntdll.spec | 6 + dlls/winevulkan/make_vulkan | 11 +- dlls/winevulkan/vulkan.c | 336 +++++++++++++++++++++++++++++- dlls/winevulkan/vulkan_private.h | 26 +++ server/Makefile.in | 1 + server/gpu_resource.c | 339 +++++++++++++++++++++++++++++++ server/protocol.def | 41 ++++ 9 files changed, 878 insertions(+), 11 deletions(-) create mode 100644 dlls/ntdll/gpu_resource.c create mode 100644 server/gpu_resource.c