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/draw_state.cpp b/layers/draw_state.cpp
index 024df63..95fa1f5 100755
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -1458,7 +1458,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);
@@ -2872,6 +2872,35 @@
     else {
         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 = gpuw;
+    //loader_platform_thread_once(&g_initInstanceOnce, initInstanceDrawState);
+
+    if (!strcmp(funcName, "vkGetInstanceProcAddr"))
+        return (void *) vkGetInstanceProcAddr;
+    if (!strcmp(funcName, "vkGetProcAddr"))
+        return (void *) vkGetProcAddr;
+    if (!strcmp(funcName, "vkCreateDevice"))
+        return (void*) vkCreateDevice;
+    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);
     }
 }