From 9508521d8aa9983d5127b90fbcc2fa6006a28f70 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Tue, 5 May 2015 14:22:52 -0600 Subject: layers: Add GetInstanceProcAddr() to all layers Loader will use this for constructing instance layer instance chains. Layer instance dispatch table is not yet added. --- layers/mem_tracker.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'layers/mem_tracker.cpp') diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 0a2d61d4..2e9307d5 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -793,7 +793,7 @@ static void initMemTracker( // initialize Layer dispatch table // TODO handle multiple GPUs PFN_vkGetProcAddr fpNextGPA; - fpNextGPA = pCurObj->pGPA; + fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA; assert(fpNextGPA); layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject); @@ -2156,6 +2156,8 @@ VK_LAYER_EXPORT void* VKAPI vkGetProcAddr( return (void*) vkCreateDevice; if (!strcmp(funcName, "vkDestroyDevice")) return (void*) vkDestroyDevice; + if (!strcmp(funcName, "GetGlobalExtensionInfo")) + return (void*) vkGetGlobalExtensionInfo; if (!strcmp(funcName, "vkEnumerateLayers")) return (void*) vkEnumerateLayers; if (!strcmp(funcName, "vkQueueSubmit")) @@ -2296,6 +2298,41 @@ VK_LAYER_EXPORT void* VKAPI vkGetProcAddr( if (gpuw->pGPA == NULL) { return NULL; } - return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName); + return gpuw->pGPA((VkObject)gpuw->nextObject, funcName); + } +} + +VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr( + VkInstance instance, + const char *funcName) +{ + VkBaseLayerObject* instw = (VkBaseLayerObject *) instance; + + if (instance == NULL) { + return NULL; + } + //TODO + //pCurObj = instw; + //loader_platform_thread_once(&g_initInstanceOnce, initInstanceMemTracker); + + if (!strcmp(funcName, "vkGetProcAddr")) + return (void *) vkGetProcAddr; + if (!strcmp(funcName, "vkGetInstanceProcAddr")) + return (void *) vkGetInstanceProcAddr; + if (!strcmp(funcName, "vkCreateDevice")) + return (void*) vkCreateDevice; + if (!strcmp(funcName, "GetGlobalExtensionInfo")) + return (void*) vkGetGlobalExtensionInfo; + if (!strcmp(funcName, "vkEnumerateLayers")) + return (void*) vkEnumerateLayers; + if (!strcmp(funcName, "vkDbgRegisterMsgCallback")) + return (void*) vkDbgRegisterMsgCallback; + if (!strcmp(funcName, "vkDbgUnregisterMsgCallback")) + return (void*) vkDbgUnregisterMsgCallback; + else { + if (instw->pGPA == NULL) { + return NULL; + } + return instw->pGPA((VkObject)instw->nextObject, funcName); } } -- cgit v1.2.3