layers: Add VK_NV_external_memory_win32 ext to OT
authorMark Lobodzinski <mark@lunarg.com>
Wed, 28 Sep 2016 18:53:27 +0000 (12:53 -0600)
committerMark Lobodzinski <mark@lunarg.com>
Mon, 3 Oct 2016 21:03:35 +0000 (15:03 -0600)
Added GetMemoryWin32HandleNV API for this extension to object_tracker.

Change-Id: I94cc6a3928f90c6ff964f7a2e5cba9aa2548d653

layers/object_tracker.cpp

index 65a6a6b..250eaca 100644 (file)
@@ -3662,6 +3662,23 @@ VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
     return result;
 }
 
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+// VK_NV_external_memory_win32 Extension
+VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(VkDevice device, VkDeviceMemory memory,
+                                                      VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE *pHandle) {
+    bool skip_call = VK_FALSE;
+    std::unique_lock<std::mutex> lock(global_lock);
+    skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false);
+    skip_call |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false);
+    lock.unlock();
+    if (skip_call) {
+        return VK_ERROR_VALIDATION_FAILED_EXT;
+    }
+    VkResult result = get_dispatch_table(ot_device_table_map, device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
+    return result;
+}
+#endif // VK_USE_PLATFORM_WIN32_KHR
+
 static inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) {
     if (!name || name[0] != 'v' || name[1] != 'k')
         return NULL;
@@ -3919,6 +3936,10 @@ static inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) {
         return (PFN_vkVoidFunction)CmdDebugMarkerEndEXT;
     if (!strcmp(name, "CmdDebugMarkerInsertEXT"))
         return (PFN_vkVoidFunction)CmdDebugMarkerInsertEXT;
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    if (!strcmp(name, "GetMemoryWin32HandleNV"))
+        return (PFN_vkVoidFunction)GetMemoryWin32HandleNV;
+#endif // VK_USE_PLATFORM_WIN32_KHR
 
     return NULL;
 }