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/basic.cpp b/layers/basic.cpp
index 260f7c3..e889e31 100644
--- a/layers/basic.cpp
+++ b/layers/basic.cpp
@@ -49,7 +49,7 @@
return it->second;
}
- layer_initialize_dispatch_table(pTable, gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
+ layer_initialize_dispatch_table(pTable, (PFN_vkGetProcAddr) gpuw->pGPA, (VkPhysicalDevice) gpuw->nextObject);
return pTable;
}
@@ -173,20 +173,47 @@
initLayerTable((const VkBaseLayerObject *) gpu);
- if (!strncmp("vkGetProcAddr", pName, sizeof("vkGetProcAddr")))
+ if (!strcmp("vkGetProcAddr", pName))
return (void *) vkGetProcAddr;
- else if (!strncmp("vkCreateDevice", pName, sizeof ("vkCreateDevice")))
+ if (!strcmp("vkCreateDevice", pName))
return (void *) vkCreateDevice;
- else if (!strncmp("vkEnumerateLayers", pName, sizeof ("vkEnumerateLayers")))
+ if (!strcmp("GetGlobalExtensionInfo", pName))
+ return (void*) vkGetGlobalExtensionInfo;
+ if (!strcmp("vkEnumerateLayers", pName))
return (void *) vkEnumerateLayers;
- else if (!strncmp("vkGetFormatInfo", pName, sizeof ("vkGetFormatInfo")))
+ if (!strcmp("vkGetFormatInfo", pName))
return (void *) vkGetFormatInfo;
- else if (!strncmp("vkLayerExtension1", pName, sizeof("vkLayerExtension1")))
+ if (!strcmp("vkLayerExtension1", pName))
return (void *) vkLayerExtension1;
else {
VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
if (gpuw->pGPA == NULL)
return NULL;
- return gpuw->pGPA((VkPhysicalDevice) gpuw->nextObject, pName);
+ return gpuw->pGPA((VkObject) gpuw->nextObject, pName);
+ }
+}
+
+VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* pName)
+{
+ if (instance == NULL)
+ return NULL;
+
+ // TODO initInstanceLayerTable((const VkBaseLayerObject *) instance);
+
+ if (!strcmp("vkGetInstanceProcAddr", pName))
+ return (void *) vkGetInstanceProcAddr;
+ if (!strcmp("vkGetProcAddr", pName))
+ return (void *) vkGetProcAddr;
+ if (!strcmp("GetGlobalExtensionInfo", pName))
+ return (void*) vkGetGlobalExtensionInfo;
+ if (!strcmp("vkCreateDevice", pName))
+ return (void *) vkCreateDevice;
+ if (!strcmp("vkEnumerateLayers", pName))
+ return (void *) vkEnumerateLayers;
+ else {
+ VkBaseLayerObject* instancew = (VkBaseLayerObject *) instance;
+ if (instancew->pGPA == NULL)
+ return NULL;
+ return instancew->pGPA((VkObject) instancew->nextObject, pName);
}
}