loader: Update the loader to 1.0.39

Add new extensions for 1.0.39.  Also, updated layers to include
minimal set of functionality for 1.0.39 extensions. Extensions include:
 - VK_KHR_get_physical_device_properties2
 - VK_KHR_shader_draw_parameters
 - VK_EXT_direct_mode_display
 - VK_EXT_display_surface_counter
 - VK_EXT_display_control

Also, redo the LoaderAndLayerIf document.

Change-Id: I10412086da7a798afe832a3892e18f606259b5af
diff --git a/loader/gpa_helper.h b/loader/gpa_helper.h
index 5089b59..c7e7ba2 100644
--- a/loader/gpa_helper.h
+++ b/loader/gpa_helper.h
@@ -308,6 +308,11 @@
     if (extension_instance_gpa(inst, funcName, &addr))
         return addr;
 
+    // Unknown physical device extensions
+    if (loader_phys_dev_ext_gpa(inst, funcName, true, &addr, NULL))
+        return addr;
+
+    // Unknown device extensions
     addr = loader_dev_ext_gpa(inst, funcName);
     return addr;
 }
@@ -327,36 +332,6 @@
     return NULL;
 }
 
-/* These functions require special handling by the loader.
-*  They are not just generic trampoline code entrypoints.
-*  Thus GPA must return loader entrypoint for these instead of first function
-*  in the chain. */
-static inline void *loader_non_passthrough_gipa(const char *name) {
-    if (!name || name[0] != 'v' || name[1] != 'k')
-        return NULL;
-
-    name += 2;
-    if (!strcmp(name, "CreateInstance"))
-        return (void *)vkCreateInstance;
-    if (!strcmp(name, "DestroyInstance"))
-        return (void *)vkDestroyInstance;
-    if (!strcmp(name, "GetDeviceProcAddr"))
-        return (void *)vkGetDeviceProcAddr;
-    // remove once no longer locks
-    if (!strcmp(name, "EnumeratePhysicalDevices"))
-        return (void *)vkEnumeratePhysicalDevices;
-    if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
-        return (void *)vkEnumerateDeviceExtensionProperties;
-    if (!strcmp(name, "EnumerateDeviceLayerProperties"))
-        return (void *)vkEnumerateDeviceLayerProperties;
-    if (!strcmp(name, "GetInstanceProcAddr"))
-        return (void *)vkGetInstanceProcAddr;
-    if (!strcmp(name, "CreateDevice"))
-        return (void *)vkCreateDevice;
-
-    return NULL;
-}
-
 static inline void *loader_non_passthrough_gdpa(const char *name) {
     if (!name || name[0] != 'v' || name[1] != 'k')
         return NULL;