44#include "ra_vk.h"
55#include "malloc.h"
66
7+ #if HAVE_WIN32_DESKTOP
8+ #include <versionhelpers.h>
9+ #endif
10+
711static struct ra_fns ra_fns_vk ;
812
913enum queue_type {
@@ -933,10 +937,27 @@ static bool vk_tex_upload(struct ra *ra,
933937 return false;
934938}
935939
936- static bool ra_vk_mem_get_external_fd (struct ra * ra , struct vk_memslice * mem , struct vk_external_fd * ret )
940+ static bool ra_vk_mem_get_external_info (struct ra * ra , struct vk_memslice * mem , struct vk_external_mem * ret )
937941{
938942 struct mpvk_ctx * vk = ra_vk_get (ra );
939943
944+ #if HAVE_WIN32_DESKTOP
945+ HANDLE mem_handle ;
946+
947+ VkMemoryGetWin32HandleInfoKHR info = {
948+ .sType = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR ,
949+ .pNext = NULL ,
950+ .memory = mem -> vkmem ,
951+ .handleType = IsWindows8OrGreater ()
952+ ? VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
953+ : VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT ,
954+ };
955+
956+ VK_LOAD_PFN (vkGetMemoryWin32HandleKHR );
957+ VK (pfn_vkGetMemoryWin32HandleKHR (vk -> dev , & info , & mem_handle ));
958+
959+ ret -> mem_handle = mem_handle ;
960+ #else
940961 int mem_fd ;
941962
942963 VkMemoryGetFdInfoKHR info = {
@@ -950,6 +971,7 @@ static bool ra_vk_mem_get_external_fd(struct ra *ra, struct vk_memslice *mem, st
950971 VK (pfn_vkGetMemoryFdKHR (vk -> dev , & info , & mem_fd ));
951972
952973 ret -> mem_fd = mem_fd ;
974+ #endif
953975 ret -> size = mem -> size ;
954976 ret -> offset = mem -> offset ;
955977 ret -> mem_size = mem -> slab_size ;
@@ -960,7 +982,7 @@ static bool ra_vk_mem_get_external_fd(struct ra *ra, struct vk_memslice *mem, st
960982 return false;
961983}
962984
963- bool ra_vk_buf_get_external_fd (struct ra * ra , struct ra_buf * buf , struct vk_external_fd * ret )
985+ bool ra_vk_buf_get_external_info (struct ra * ra , struct ra_buf * buf , struct vk_external_mem * ret )
964986{
965987 if (buf -> params .type != RA_BUF_TYPE_SHARED_MEMORY ) {
966988 MP_ERR (ra , "Buffer must be of TYPE_SHARED_MEMORY to be able to export it..." );
@@ -970,7 +992,7 @@ bool ra_vk_buf_get_external_fd(struct ra *ra, struct ra_buf *buf, struct vk_exte
970992 struct ra_buf_vk * buf_vk = buf -> priv ;
971993 struct vk_memslice * mem = & buf_vk -> slice .mem ;
972994
973- return ra_vk_mem_get_external_fd (ra , mem , ret );
995+ return ra_vk_mem_get_external_info (ra , mem , ret );
974996}
975997
976998#define MPVK_NUM_DS MPVK_MAX_STREAMING_DEPTH
0 commit comments