layers: Add GetInstanceProcAddr() to all layers
Loader will use this for constructing instance layer instance chains.
Layer instance dispatch table is not yet added.
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 0a2d61d..2e9307d 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -793,7 +793,7 @@
// 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 @@
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 @@
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);
}
}