aboutsummaryrefslogtreecommitdiff
path: root/loader/extensions.c
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-08-29 15:36:23 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-08-31 13:27:14 -0600
commita71dfb7eab11c7bb8d5308b2f9b607a4e043e763 (patch)
treef3ad4b8e87ae921fb994a7cd3560ddb8cac58cf4 /loader/extensions.c
parent0ec7f3d96390a6a68debec142b1bdac106b6529f (diff)
downloadusermoji-a71dfb7eab11c7bb8d5308b2f9b607a4e043e763.tar.xz
loader: Add support for NV device extension
Added vkGetMemoryWin32HandleNV from the VK_NV_external_memory_win32 extension to the loader. Change-Id: If6a959f126cc48ebf2608ed6e113e2883deae871
Diffstat (limited to 'loader/extensions.c')
-rw-r--r--loader/extensions.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/loader/extensions.c b/loader/extensions.c
index 3ba4b77b..17190a4b 100644
--- a/loader/extensions.c
+++ b/loader/extensions.c
@@ -105,6 +105,28 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
maxDrawCount, stride);
}
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+
+// Definitions for the VK_NV_external_memory_win32 extension
+
+static const VkExtensionProperties nv_external_memory_win32_extension_info = {
+ .extensionName = VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
+ .specVersion = VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION,
+};
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
+ VkDevice device, VkDeviceMemory memory,
+ VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE *pHandle) {
+ const VkLayerDispatchTable *disp;
+
+ disp = loader_get_dispatch(device);
+ return disp->GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
+}
+
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
+// GPA helpers for non-KHR extensions
+
bool extension_instance_gpa(struct loader_instance *ptr_instance,
const char *name, void **addr) {
*addr = NULL;
@@ -128,6 +150,17 @@ bool extension_instance_gpa(struct loader_instance *ptr_instance,
return true;
}
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+
+ // Functions for the VK_NV_external_memory_win32 extension
+
+ if (!strcmp("vkGetMemoryWin32HandleNV", name)) {
+ *addr = (void *)vkGetMemoryWin32HandleNV;
+ return true;
+ }
+
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
return false;
}
@@ -146,5 +179,13 @@ void extensions_create_instance(struct loader_instance *ptr_instance,
// Nothing to do;
return;
}
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
+ VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME) == 0) {
+ // Nothing to do;
+ return;
+ }
+#endif // VK_USE_PLATFORM_WIN32_KHR
}
}