diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-08-29 15:36:23 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-08-31 13:27:14 -0600 |
| commit | a71dfb7eab11c7bb8d5308b2f9b607a4e043e763 (patch) | |
| tree | f3ad4b8e87ae921fb994a7cd3560ddb8cac58cf4 /loader | |
| parent | 0ec7f3d96390a6a68debec142b1bdac106b6529f (diff) | |
| download | usermoji-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')
| -rw-r--r-- | loader/extensions.c | 41 | ||||
| -rw-r--r-- | loader/table_ops.h | 4 |
2 files changed, 45 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 } } diff --git a/loader/table_ops.h b/loader/table_ops.h index 014607ad..5a9abf17 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -272,6 +272,10 @@ static inline void loader_init_device_extension_dispatch_table( table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)gpa( dev, "vkCmdDrawIndexedIndirectCountAMD"); +#ifdef VK_USE_PLATFORM_WIN32_KHR + table->GetMemoryWin32HandleNV = + (PFN_vkGetMemoryWin32HandleNV)gpa(dev, "vkGetMemoryWin32HandleNV"); +#endif // VK_USE_PLATFORM_WIN32_KHR } static inline void * |
