Commit 67e991cf authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

vulkan: add binding for VK_KHR_external_{memory,semaphore}_win32

vkGetSemaphoreWin32HandleKHR, vkImportSemaphoreWin32HandleKHR,
vkGetMemoryWin32HandleKHR and vkGetMemoryWin32HandlePropertiesKHR are
added. They will be used for Vulkan and GL interop on Windows.

Bug: 1067709
Change-Id: Ie735a25c31d41ac5af1d8734c5ba830b1f340465
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2135974
Commit-Queue: Peng Huang <penghuang@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Auto-Submit: Peng Huang <penghuang@chromium.org>
Reviewed-by: default avatarVasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756392}
parent bc3daca9
......@@ -188,6 +188,14 @@ VULKAN_DEVICE_FUNCTIONS = [
'vkImportSemaphoreFdKHR',
]
},
{
'ifdef': 'defined(OS_WIN)',
'extension': 'VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME',
'functions': [
'vkGetSemaphoreWin32HandleKHR',
'vkImportSemaphoreWin32HandleKHR',
]
},
{
'ifdef': 'defined(OS_LINUX) || defined(OS_ANDROID)',
'extension': 'VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME',
......@@ -196,6 +204,14 @@ VULKAN_DEVICE_FUNCTIONS = [
'vkGetMemoryFdPropertiesKHR',
]
},
{
'ifdef': 'defined(OS_WIN)',
'extension': 'VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME',
'functions': [
'vkGetMemoryWin32HandleKHR',
'vkGetMemoryWin32HandlePropertiesKHR',
]
},
{
'ifdef': 'defined(OS_FUCHSIA)',
'extension': 'VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME',
......
......@@ -849,6 +849,29 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(
}
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
if (gfx::HasExtension(enabled_extensions,
VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME)) {
vkGetSemaphoreWin32HandleKHRFn =
reinterpret_cast<PFN_vkGetSemaphoreWin32HandleKHR>(
vkGetDeviceProcAddr(vk_device, "vkGetSemaphoreWin32HandleKHR"));
if (!vkGetSemaphoreWin32HandleKHRFn) {
DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
<< "vkGetSemaphoreWin32HandleKHR";
return false;
}
vkImportSemaphoreWin32HandleKHRFn =
reinterpret_cast<PFN_vkImportSemaphoreWin32HandleKHR>(
vkGetDeviceProcAddr(vk_device, "vkImportSemaphoreWin32HandleKHR"));
if (!vkImportSemaphoreWin32HandleKHRFn) {
DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
<< "vkImportSemaphoreWin32HandleKHR";
return false;
}
}
#endif // defined(OS_WIN)
#if defined(OS_LINUX) || defined(OS_ANDROID)
if (gfx::HasExtension(enabled_extensions,
VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME)) {
......@@ -871,6 +894,30 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(
}
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
if (gfx::HasExtension(enabled_extensions,
VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME)) {
vkGetMemoryWin32HandleKHRFn =
reinterpret_cast<PFN_vkGetMemoryWin32HandleKHR>(
vkGetDeviceProcAddr(vk_device, "vkGetMemoryWin32HandleKHR"));
if (!vkGetMemoryWin32HandleKHRFn) {
DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
<< "vkGetMemoryWin32HandleKHR";
return false;
}
vkGetMemoryWin32HandlePropertiesKHRFn =
reinterpret_cast<PFN_vkGetMemoryWin32HandlePropertiesKHR>(
vkGetDeviceProcAddr(vk_device,
"vkGetMemoryWin32HandlePropertiesKHR"));
if (!vkGetMemoryWin32HandlePropertiesKHRFn) {
DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
<< "vkGetMemoryWin32HandlePropertiesKHR";
return false;
}
}
#endif // defined(OS_WIN)
#if defined(OS_FUCHSIA)
if (gfx::HasExtension(enabled_extensions,
VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME)) {
......
......@@ -232,11 +232,24 @@ struct VulkanFunctionPointers {
VulkanFunction<PFN_vkImportSemaphoreFdKHR> vkImportSemaphoreFdKHRFn;
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
VulkanFunction<PFN_vkGetSemaphoreWin32HandleKHR>
vkGetSemaphoreWin32HandleKHRFn;
VulkanFunction<PFN_vkImportSemaphoreWin32HandleKHR>
vkImportSemaphoreWin32HandleKHRFn;
#endif // defined(OS_WIN)
#if defined(OS_LINUX) || defined(OS_ANDROID)
VulkanFunction<PFN_vkGetMemoryFdKHR> vkGetMemoryFdKHRFn;
VulkanFunction<PFN_vkGetMemoryFdPropertiesKHR> vkGetMemoryFdPropertiesKHRFn;
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
VulkanFunction<PFN_vkGetMemoryWin32HandleKHR> vkGetMemoryWin32HandleKHRFn;
VulkanFunction<PFN_vkGetMemoryWin32HandlePropertiesKHR>
vkGetMemoryWin32HandlePropertiesKHRFn;
#endif // defined(OS_WIN)
#if defined(OS_FUCHSIA)
VulkanFunction<PFN_vkImportSemaphoreZirconHandleFUCHSIA>
vkImportSemaphoreZirconHandleFUCHSIAFn;
......@@ -454,12 +467,26 @@ struct VulkanFunctionPointers {
gpu::GetVulkanFunctionPointers()->vkImportSemaphoreFdKHRFn
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
#define vkGetSemaphoreWin32HandleKHR \
gpu::GetVulkanFunctionPointers()->vkGetSemaphoreWin32HandleKHRFn
#define vkImportSemaphoreWin32HandleKHR \
gpu::GetVulkanFunctionPointers()->vkImportSemaphoreWin32HandleKHRFn
#endif // defined(OS_WIN)
#if defined(OS_LINUX) || defined(OS_ANDROID)
#define vkGetMemoryFdKHR gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHRFn
#define vkGetMemoryFdPropertiesKHR \
gpu::GetVulkanFunctionPointers()->vkGetMemoryFdPropertiesKHRFn
#endif // defined(OS_LINUX) || defined(OS_ANDROID)
#if defined(OS_WIN)
#define vkGetMemoryWin32HandleKHR \
gpu::GetVulkanFunctionPointers()->vkGetMemoryWin32HandleKHRFn
#define vkGetMemoryWin32HandlePropertiesKHR \
gpu::GetVulkanFunctionPointers()->vkGetMemoryWin32HandlePropertiesKHRFn
#endif // defined(OS_WIN)
#if defined(OS_FUCHSIA)
#define vkImportSemaphoreZirconHandleFUCHSIA \
gpu::GetVulkanFunctionPointers()->vkImportSemaphoreZirconHandleFUCHSIAFn
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment