Support self-resolving vkGetInstanceProcAddr

The spec states that "Starting with Vulkan 1.2, vkGetInstanceProcAddr
can resolve itself with a NULL instance pointer."

Bug: b/200679975
Change-Id: Icd53a0b916e7930a4efacea81244dfb9975f3087
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/57289
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Sean Risser <srisser@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index 38b9f8c..3a778cb 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -27,11 +27,13 @@
 
 namespace vk {
 
+// Functions that can be obtained through GetInstanceProcAddr without an instance
 #define MAKE_VULKAN_GLOBAL_ENTRY(aFunction)                           \
 	{                                                                 \
 #		aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
 	}
 static const std::unordered_map<std::string, PFN_vkVoidFunction> globalFunctionPointers = {
+	MAKE_VULKAN_GLOBAL_ENTRY(vkGetInstanceProcAddr),
 	MAKE_VULKAN_GLOBAL_ENTRY(vkCreateInstance),
 	MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceExtensionProperties),
 	MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceLayerProperties),
@@ -39,11 +41,13 @@
 };
 #undef MAKE_VULKAN_GLOBAL_ENTRY
 
+// Functions that can be obtained through GetInstanceProcAddr with an instance object
 #define MAKE_VULKAN_INSTANCE_ENTRY(aFunction)                         \
 	{                                                                 \
 #		aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
 	}
 static const std::unordered_map<std::string, PFN_vkVoidFunction> instanceFunctionPointers = {
+
 	MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyInstance),
 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDevices),
 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures),
@@ -151,12 +155,12 @@
 };
 #undef MAKE_VULKAN_INSTANCE_ENTRY
 
+// Functions that can be obtained through GetDeviceProcAddr with a device object
 #define MAKE_VULKAN_DEVICE_ENTRY(aFunction)                           \
 	{                                                                 \
 #		aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
 	}
 static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionPointers = {
-	MAKE_VULKAN_DEVICE_ENTRY(vkGetInstanceProcAddr),
 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceProcAddr),
 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDevice),
 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue),