loader: Make VkInstance a dispatchable object and init with instance table
diff --git a/loader/loader.c b/loader/loader.c
index c452ce5..a69801d 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -720,14 +720,6 @@
     loader.layer_scanned = true;
 }
 
-static void loader_init_dispatch_table(VkLayerDispatchTable *tab, PFN_vkGetProcAddr fpGPA, VkPhysicalDevice gpu)
-{
-    loader_initialize_dispatch_table(tab, fpGPA, gpu);
-
-    if (tab->EnumerateLayers == NULL)
-        tab->EnumerateLayers = vkEnumerateLayers;
-}
-
 static void * VKAPI loader_gpa_internal(VkPhysicalDevice gpu, const char * pName)
 {
     if (gpu == VK_NULL_HANDLE) {
@@ -1056,7 +1048,7 @@
             }
 
             if (i == 0) {
-                loader_init_dispatch_table(icd->loader_dispatch + gpu_index, nextGPA, (VkPhysicalDevice) gpuObj);
+                loader_init_device_dispatch_table(icd->loader_dispatch + gpu_index, nextGPA, (VkPhysicalDevice) gpuObj);
                 //Insert the new wrapped objects into the list with loader object at head
                 gpu->nextObject = (VkObject) gpuObj;
                 gpu->pGPA = nextGPA;
@@ -1145,6 +1137,7 @@
         return VK_ERROR_INCOMPATIBLE_DRIVER;
     }
 
+    loader_init_instance_dispatch_table(&ptr_instance->disp);
     *pInstance = (VkInstance) ptr_instance;
     return VK_SUCCESS;
 }
@@ -1255,7 +1248,7 @@
                     (wrapped_gpus + i)->pGPA = get_proc_addr;
                     (wrapped_gpus + i)->nextObject = gpus[i];
                     memcpy(pPhysicalDevices + count, gpus, sizeof(*pPhysicalDevices));
-                    loader_init_dispatch_table(icd->loader_dispatch + i,
+                    loader_init_device_dispatch_table(icd->loader_dispatch + i,
                                                get_proc_addr, gpus[i]);
 
                     /* Verify ICD compatibility */