chassis: Limit GetPhysDevProcAddr to physical device funcs

LoaderLayer interface doc says this func should return NULL for any
function that is NOT a physical device function. Changed the boolean
'instance' flag in name_to_functpr_map to be an enum, indicating
instance, pdev, or dev for each API and updated GetPhysDevProcAddr
to use this information.

Change-Id: If590ee62d06f6adcfd9b1c3036f5005b1be73749
diff --git a/layers/generated/chassis.cpp b/layers/generated/chassis.cpp
index a549a55..6667499 100644
--- a/layers/generated/chassis.cpp
+++ b/layers/generated/chassis.cpp
@@ -69,8 +69,14 @@
     {VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_EXT_TOOLING_INFO_SPEC_VERSION}
 };
 
+typedef enum ApiFunctionType {
+    kFuncTypeInst = 0,
+    kFuncTypePdev = 1,
+    kFuncTypeDev = 2
+} ApiFunctionType;
+
 typedef struct {
-    bool is_instance_api;
+    ApiFunctionType function_type;
     void* funcptr;
 } function_data;
 
@@ -316,7 +322,7 @@
     }
     const auto &item = name_to_funcptr_map.find(funcName);
     if (item != name_to_funcptr_map.end()) {
-        if (item->second.is_instance_api) {
+        if (item->second.function_type != kFuncTypeDev) {
             return nullptr;
         } else {
             return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
@@ -341,7 +347,11 @@
 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) {
     const auto &item = name_to_funcptr_map.find(funcName);
     if (item != name_to_funcptr_map.end()) {
-        return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
+        if (item->second.function_type != kFuncTypePdev) {
+            return nullptr;
+        } else {
+            return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
+        }
     }
     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
     auto &table = layer_data->instance_dispatch_table;
@@ -9790,456 +9800,456 @@
 #pragma warning( suppress: 6262 ) // VS analysis: this uses more than 16 kiB, which is fine here at global scope
 #endif
 const std::unordered_map<std::string, function_data> name_to_funcptr_map = {
-    {"vkCreateInstance", {true, (void*)CreateInstance}},
-    {"vkDestroyInstance", {true, (void*)DestroyInstance}},
-    {"vkEnumeratePhysicalDevices", {true, (void*)EnumeratePhysicalDevices}},
-    {"vkGetPhysicalDeviceFeatures", {true, (void*)GetPhysicalDeviceFeatures}},
-    {"vkGetPhysicalDeviceFormatProperties", {true, (void*)GetPhysicalDeviceFormatProperties}},
-    {"vkGetPhysicalDeviceImageFormatProperties", {true, (void*)GetPhysicalDeviceImageFormatProperties}},
-    {"vkGetPhysicalDeviceProperties", {true, (void*)GetPhysicalDeviceProperties}},
-    {"vkGetPhysicalDeviceQueueFamilyProperties", {true, (void*)GetPhysicalDeviceQueueFamilyProperties}},
-    {"vkGetPhysicalDeviceMemoryProperties", {true, (void*)GetPhysicalDeviceMemoryProperties}},
-    {"vkGetInstanceProcAddr", {true, (void*)GetInstanceProcAddr}},
-    {"vkGetDeviceProcAddr", {false, (void*)GetDeviceProcAddr}},
-    {"vkCreateDevice", {true, (void*)CreateDevice}},
-    {"vkDestroyDevice", {false, (void*)DestroyDevice}},
-    {"vkEnumerateInstanceExtensionProperties", {false, (void*)EnumerateInstanceExtensionProperties}},
-    {"vkEnumerateDeviceExtensionProperties", {true, (void*)EnumerateDeviceExtensionProperties}},
-    {"vkEnumerateInstanceLayerProperties", {false, (void*)EnumerateInstanceLayerProperties}},
-    {"vkEnumerateDeviceLayerProperties", {true, (void*)EnumerateDeviceLayerProperties}},
-    {"vkGetDeviceQueue", {false, (void*)GetDeviceQueue}},
-    {"vkQueueSubmit", {false, (void*)QueueSubmit}},
-    {"vkQueueWaitIdle", {false, (void*)QueueWaitIdle}},
-    {"vkDeviceWaitIdle", {false, (void*)DeviceWaitIdle}},
-    {"vkAllocateMemory", {false, (void*)AllocateMemory}},
-    {"vkFreeMemory", {false, (void*)FreeMemory}},
-    {"vkMapMemory", {false, (void*)MapMemory}},
-    {"vkUnmapMemory", {false, (void*)UnmapMemory}},
-    {"vkFlushMappedMemoryRanges", {false, (void*)FlushMappedMemoryRanges}},
-    {"vkInvalidateMappedMemoryRanges", {false, (void*)InvalidateMappedMemoryRanges}},
-    {"vkGetDeviceMemoryCommitment", {false, (void*)GetDeviceMemoryCommitment}},
-    {"vkBindBufferMemory", {false, (void*)BindBufferMemory}},
-    {"vkBindImageMemory", {false, (void*)BindImageMemory}},
-    {"vkGetBufferMemoryRequirements", {false, (void*)GetBufferMemoryRequirements}},
-    {"vkGetImageMemoryRequirements", {false, (void*)GetImageMemoryRequirements}},
-    {"vkGetImageSparseMemoryRequirements", {false, (void*)GetImageSparseMemoryRequirements}},
-    {"vkGetPhysicalDeviceSparseImageFormatProperties", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties}},
-    {"vkQueueBindSparse", {false, (void*)QueueBindSparse}},
-    {"vkCreateFence", {false, (void*)CreateFence}},
-    {"vkDestroyFence", {false, (void*)DestroyFence}},
-    {"vkResetFences", {false, (void*)ResetFences}},
-    {"vkGetFenceStatus", {false, (void*)GetFenceStatus}},
-    {"vkWaitForFences", {false, (void*)WaitForFences}},
-    {"vkCreateSemaphore", {false, (void*)CreateSemaphore}},
-    {"vkDestroySemaphore", {false, (void*)DestroySemaphore}},
-    {"vkCreateEvent", {false, (void*)CreateEvent}},
-    {"vkDestroyEvent", {false, (void*)DestroyEvent}},
-    {"vkGetEventStatus", {false, (void*)GetEventStatus}},
-    {"vkSetEvent", {false, (void*)SetEvent}},
-    {"vkResetEvent", {false, (void*)ResetEvent}},
-    {"vkCreateQueryPool", {false, (void*)CreateQueryPool}},
-    {"vkDestroyQueryPool", {false, (void*)DestroyQueryPool}},
-    {"vkGetQueryPoolResults", {false, (void*)GetQueryPoolResults}},
-    {"vkCreateBuffer", {false, (void*)CreateBuffer}},
-    {"vkDestroyBuffer", {false, (void*)DestroyBuffer}},
-    {"vkCreateBufferView", {false, (void*)CreateBufferView}},
-    {"vkDestroyBufferView", {false, (void*)DestroyBufferView}},
-    {"vkCreateImage", {false, (void*)CreateImage}},
-    {"vkDestroyImage", {false, (void*)DestroyImage}},
-    {"vkGetImageSubresourceLayout", {false, (void*)GetImageSubresourceLayout}},
-    {"vkCreateImageView", {false, (void*)CreateImageView}},
-    {"vkDestroyImageView", {false, (void*)DestroyImageView}},
-    {"vkCreateShaderModule", {false, (void*)CreateShaderModule}},
-    {"vkDestroyShaderModule", {false, (void*)DestroyShaderModule}},
-    {"vkCreatePipelineCache", {false, (void*)CreatePipelineCache}},
-    {"vkDestroyPipelineCache", {false, (void*)DestroyPipelineCache}},
-    {"vkGetPipelineCacheData", {false, (void*)GetPipelineCacheData}},
-    {"vkMergePipelineCaches", {false, (void*)MergePipelineCaches}},
-    {"vkCreateGraphicsPipelines", {false, (void*)CreateGraphicsPipelines}},
-    {"vkCreateComputePipelines", {false, (void*)CreateComputePipelines}},
-    {"vkDestroyPipeline", {false, (void*)DestroyPipeline}},
-    {"vkCreatePipelineLayout", {false, (void*)CreatePipelineLayout}},
-    {"vkDestroyPipelineLayout", {false, (void*)DestroyPipelineLayout}},
-    {"vkCreateSampler", {false, (void*)CreateSampler}},
-    {"vkDestroySampler", {false, (void*)DestroySampler}},
-    {"vkCreateDescriptorSetLayout", {false, (void*)CreateDescriptorSetLayout}},
-    {"vkDestroyDescriptorSetLayout", {false, (void*)DestroyDescriptorSetLayout}},
-    {"vkCreateDescriptorPool", {false, (void*)CreateDescriptorPool}},
-    {"vkDestroyDescriptorPool", {false, (void*)DestroyDescriptorPool}},
-    {"vkResetDescriptorPool", {false, (void*)ResetDescriptorPool}},
-    {"vkAllocateDescriptorSets", {false, (void*)AllocateDescriptorSets}},
-    {"vkFreeDescriptorSets", {false, (void*)FreeDescriptorSets}},
-    {"vkUpdateDescriptorSets", {false, (void*)UpdateDescriptorSets}},
-    {"vkCreateFramebuffer", {false, (void*)CreateFramebuffer}},
-    {"vkDestroyFramebuffer", {false, (void*)DestroyFramebuffer}},
-    {"vkCreateRenderPass", {false, (void*)CreateRenderPass}},
-    {"vkDestroyRenderPass", {false, (void*)DestroyRenderPass}},
-    {"vkGetRenderAreaGranularity", {false, (void*)GetRenderAreaGranularity}},
-    {"vkCreateCommandPool", {false, (void*)CreateCommandPool}},
-    {"vkDestroyCommandPool", {false, (void*)DestroyCommandPool}},
-    {"vkResetCommandPool", {false, (void*)ResetCommandPool}},
-    {"vkAllocateCommandBuffers", {false, (void*)AllocateCommandBuffers}},
-    {"vkFreeCommandBuffers", {false, (void*)FreeCommandBuffers}},
-    {"vkBeginCommandBuffer", {false, (void*)BeginCommandBuffer}},
-    {"vkEndCommandBuffer", {false, (void*)EndCommandBuffer}},
-    {"vkResetCommandBuffer", {false, (void*)ResetCommandBuffer}},
-    {"vkCmdBindPipeline", {false, (void*)CmdBindPipeline}},
-    {"vkCmdSetViewport", {false, (void*)CmdSetViewport}},
-    {"vkCmdSetScissor", {false, (void*)CmdSetScissor}},
-    {"vkCmdSetLineWidth", {false, (void*)CmdSetLineWidth}},
-    {"vkCmdSetDepthBias", {false, (void*)CmdSetDepthBias}},
-    {"vkCmdSetBlendConstants", {false, (void*)CmdSetBlendConstants}},
-    {"vkCmdSetDepthBounds", {false, (void*)CmdSetDepthBounds}},
-    {"vkCmdSetStencilCompareMask", {false, (void*)CmdSetStencilCompareMask}},
-    {"vkCmdSetStencilWriteMask", {false, (void*)CmdSetStencilWriteMask}},
-    {"vkCmdSetStencilReference", {false, (void*)CmdSetStencilReference}},
-    {"vkCmdBindDescriptorSets", {false, (void*)CmdBindDescriptorSets}},
-    {"vkCmdBindIndexBuffer", {false, (void*)CmdBindIndexBuffer}},
-    {"vkCmdBindVertexBuffers", {false, (void*)CmdBindVertexBuffers}},
-    {"vkCmdDraw", {false, (void*)CmdDraw}},
-    {"vkCmdDrawIndexed", {false, (void*)CmdDrawIndexed}},
-    {"vkCmdDrawIndirect", {false, (void*)CmdDrawIndirect}},
-    {"vkCmdDrawIndexedIndirect", {false, (void*)CmdDrawIndexedIndirect}},
-    {"vkCmdDispatch", {false, (void*)CmdDispatch}},
-    {"vkCmdDispatchIndirect", {false, (void*)CmdDispatchIndirect}},
-    {"vkCmdCopyBuffer", {false, (void*)CmdCopyBuffer}},
-    {"vkCmdCopyImage", {false, (void*)CmdCopyImage}},
-    {"vkCmdBlitImage", {false, (void*)CmdBlitImage}},
-    {"vkCmdCopyBufferToImage", {false, (void*)CmdCopyBufferToImage}},
-    {"vkCmdCopyImageToBuffer", {false, (void*)CmdCopyImageToBuffer}},
-    {"vkCmdUpdateBuffer", {false, (void*)CmdUpdateBuffer}},
-    {"vkCmdFillBuffer", {false, (void*)CmdFillBuffer}},
-    {"vkCmdClearColorImage", {false, (void*)CmdClearColorImage}},
-    {"vkCmdClearDepthStencilImage", {false, (void*)CmdClearDepthStencilImage}},
-    {"vkCmdClearAttachments", {false, (void*)CmdClearAttachments}},
-    {"vkCmdResolveImage", {false, (void*)CmdResolveImage}},
-    {"vkCmdSetEvent", {false, (void*)CmdSetEvent}},
-    {"vkCmdResetEvent", {false, (void*)CmdResetEvent}},
-    {"vkCmdWaitEvents", {false, (void*)CmdWaitEvents}},
-    {"vkCmdPipelineBarrier", {false, (void*)CmdPipelineBarrier}},
-    {"vkCmdBeginQuery", {false, (void*)CmdBeginQuery}},
-    {"vkCmdEndQuery", {false, (void*)CmdEndQuery}},
-    {"vkCmdResetQueryPool", {false, (void*)CmdResetQueryPool}},
-    {"vkCmdWriteTimestamp", {false, (void*)CmdWriteTimestamp}},
-    {"vkCmdCopyQueryPoolResults", {false, (void*)CmdCopyQueryPoolResults}},
-    {"vkCmdPushConstants", {false, (void*)CmdPushConstants}},
-    {"vkCmdBeginRenderPass", {false, (void*)CmdBeginRenderPass}},
-    {"vkCmdNextSubpass", {false, (void*)CmdNextSubpass}},
-    {"vkCmdEndRenderPass", {false, (void*)CmdEndRenderPass}},
-    {"vkCmdExecuteCommands", {false, (void*)CmdExecuteCommands}},
-    {"vkBindBufferMemory2", {false, (void*)BindBufferMemory2}},
-    {"vkBindImageMemory2", {false, (void*)BindImageMemory2}},
-    {"vkGetDeviceGroupPeerMemoryFeatures", {false, (void*)GetDeviceGroupPeerMemoryFeatures}},
-    {"vkCmdSetDeviceMask", {false, (void*)CmdSetDeviceMask}},
-    {"vkCmdDispatchBase", {false, (void*)CmdDispatchBase}},
-    {"vkEnumeratePhysicalDeviceGroups", {true, (void*)EnumeratePhysicalDeviceGroups}},
-    {"vkGetImageMemoryRequirements2", {false, (void*)GetImageMemoryRequirements2}},
-    {"vkGetBufferMemoryRequirements2", {false, (void*)GetBufferMemoryRequirements2}},
-    {"vkGetImageSparseMemoryRequirements2", {false, (void*)GetImageSparseMemoryRequirements2}},
-    {"vkGetPhysicalDeviceFeatures2", {true, (void*)GetPhysicalDeviceFeatures2}},
-    {"vkGetPhysicalDeviceProperties2", {true, (void*)GetPhysicalDeviceProperties2}},
-    {"vkGetPhysicalDeviceFormatProperties2", {true, (void*)GetPhysicalDeviceFormatProperties2}},
-    {"vkGetPhysicalDeviceImageFormatProperties2", {true, (void*)GetPhysicalDeviceImageFormatProperties2}},
-    {"vkGetPhysicalDeviceQueueFamilyProperties2", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2}},
-    {"vkGetPhysicalDeviceMemoryProperties2", {true, (void*)GetPhysicalDeviceMemoryProperties2}},
-    {"vkGetPhysicalDeviceSparseImageFormatProperties2", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2}},
-    {"vkTrimCommandPool", {false, (void*)TrimCommandPool}},
-    {"vkGetDeviceQueue2", {false, (void*)GetDeviceQueue2}},
-    {"vkCreateSamplerYcbcrConversion", {false, (void*)CreateSamplerYcbcrConversion}},
-    {"vkDestroySamplerYcbcrConversion", {false, (void*)DestroySamplerYcbcrConversion}},
-    {"vkCreateDescriptorUpdateTemplate", {false, (void*)CreateDescriptorUpdateTemplate}},
-    {"vkDestroyDescriptorUpdateTemplate", {false, (void*)DestroyDescriptorUpdateTemplate}},
-    {"vkUpdateDescriptorSetWithTemplate", {false, (void*)UpdateDescriptorSetWithTemplate}},
-    {"vkGetPhysicalDeviceExternalBufferProperties", {true, (void*)GetPhysicalDeviceExternalBufferProperties}},
-    {"vkGetPhysicalDeviceExternalFenceProperties", {true, (void*)GetPhysicalDeviceExternalFenceProperties}},
-    {"vkGetPhysicalDeviceExternalSemaphoreProperties", {true, (void*)GetPhysicalDeviceExternalSemaphoreProperties}},
-    {"vkGetDescriptorSetLayoutSupport", {false, (void*)GetDescriptorSetLayoutSupport}},
-    {"vkCmdDrawIndirectCount", {false, (void*)CmdDrawIndirectCount}},
-    {"vkCmdDrawIndexedIndirectCount", {false, (void*)CmdDrawIndexedIndirectCount}},
-    {"vkCreateRenderPass2", {false, (void*)CreateRenderPass2}},
-    {"vkCmdBeginRenderPass2", {false, (void*)CmdBeginRenderPass2}},
-    {"vkCmdNextSubpass2", {false, (void*)CmdNextSubpass2}},
-    {"vkCmdEndRenderPass2", {false, (void*)CmdEndRenderPass2}},
-    {"vkResetQueryPool", {false, (void*)ResetQueryPool}},
-    {"vkGetSemaphoreCounterValue", {false, (void*)GetSemaphoreCounterValue}},
-    {"vkWaitSemaphores", {false, (void*)WaitSemaphores}},
-    {"vkSignalSemaphore", {false, (void*)SignalSemaphore}},
-    {"vkGetBufferDeviceAddress", {false, (void*)GetBufferDeviceAddress}},
-    {"vkGetBufferOpaqueCaptureAddress", {false, (void*)GetBufferOpaqueCaptureAddress}},
-    {"vkGetDeviceMemoryOpaqueCaptureAddress", {false, (void*)GetDeviceMemoryOpaqueCaptureAddress}},
-    {"vkDestroySurfaceKHR", {true, (void*)DestroySurfaceKHR}},
-    {"vkGetPhysicalDeviceSurfaceSupportKHR", {true, (void*)GetPhysicalDeviceSurfaceSupportKHR}},
-    {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilitiesKHR}},
-    {"vkGetPhysicalDeviceSurfaceFormatsKHR", {true, (void*)GetPhysicalDeviceSurfaceFormatsKHR}},
-    {"vkGetPhysicalDeviceSurfacePresentModesKHR", {true, (void*)GetPhysicalDeviceSurfacePresentModesKHR}},
-    {"vkCreateSwapchainKHR", {false, (void*)CreateSwapchainKHR}},
-    {"vkDestroySwapchainKHR", {false, (void*)DestroySwapchainKHR}},
-    {"vkGetSwapchainImagesKHR", {false, (void*)GetSwapchainImagesKHR}},
-    {"vkAcquireNextImageKHR", {false, (void*)AcquireNextImageKHR}},
-    {"vkQueuePresentKHR", {false, (void*)QueuePresentKHR}},
-    {"vkGetDeviceGroupPresentCapabilitiesKHR", {false, (void*)GetDeviceGroupPresentCapabilitiesKHR}},
-    {"vkGetDeviceGroupSurfacePresentModesKHR", {false, (void*)GetDeviceGroupSurfacePresentModesKHR}},
-    {"vkGetPhysicalDevicePresentRectanglesKHR", {true, (void*)GetPhysicalDevicePresentRectanglesKHR}},
-    {"vkAcquireNextImage2KHR", {false, (void*)AcquireNextImage2KHR}},
-    {"vkGetPhysicalDeviceDisplayPropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPropertiesKHR}},
-    {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPlanePropertiesKHR}},
-    {"vkGetDisplayPlaneSupportedDisplaysKHR", {true, (void*)GetDisplayPlaneSupportedDisplaysKHR}},
-    {"vkGetDisplayModePropertiesKHR", {true, (void*)GetDisplayModePropertiesKHR}},
-    {"vkCreateDisplayModeKHR", {true, (void*)CreateDisplayModeKHR}},
-    {"vkGetDisplayPlaneCapabilitiesKHR", {true, (void*)GetDisplayPlaneCapabilitiesKHR}},
-    {"vkCreateDisplayPlaneSurfaceKHR", {true, (void*)CreateDisplayPlaneSurfaceKHR}},
-    {"vkCreateSharedSwapchainsKHR", {false, (void*)CreateSharedSwapchainsKHR}},
+    {"vkCreateInstance", {kFuncTypeInst, (void*)CreateInstance}},
+    {"vkDestroyInstance", {kFuncTypeInst, (void*)DestroyInstance}},
+    {"vkEnumeratePhysicalDevices", {kFuncTypeInst, (void*)EnumeratePhysicalDevices}},
+    {"vkGetPhysicalDeviceFeatures", {kFuncTypePdev, (void*)GetPhysicalDeviceFeatures}},
+    {"vkGetPhysicalDeviceFormatProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceFormatProperties}},
+    {"vkGetPhysicalDeviceImageFormatProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceImageFormatProperties}},
+    {"vkGetPhysicalDeviceProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceProperties}},
+    {"vkGetPhysicalDeviceQueueFamilyProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceQueueFamilyProperties}},
+    {"vkGetPhysicalDeviceMemoryProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceMemoryProperties}},
+    {"vkGetInstanceProcAddr", {kFuncTypeInst, (void*)GetInstanceProcAddr}},
+    {"vkGetDeviceProcAddr", {kFuncTypeDev, (void*)GetDeviceProcAddr}},
+    {"vkCreateDevice", {kFuncTypePdev, (void*)CreateDevice}},
+    {"vkDestroyDevice", {kFuncTypeDev, (void*)DestroyDevice}},
+    {"vkEnumerateInstanceExtensionProperties", {kFuncTypeInst, (void*)EnumerateInstanceExtensionProperties}},
+    {"vkEnumerateDeviceExtensionProperties", {kFuncTypePdev, (void*)EnumerateDeviceExtensionProperties}},
+    {"vkEnumerateInstanceLayerProperties", {kFuncTypeInst, (void*)EnumerateInstanceLayerProperties}},
+    {"vkEnumerateDeviceLayerProperties", {kFuncTypePdev, (void*)EnumerateDeviceLayerProperties}},
+    {"vkGetDeviceQueue", {kFuncTypeDev, (void*)GetDeviceQueue}},
+    {"vkQueueSubmit", {kFuncTypeDev, (void*)QueueSubmit}},
+    {"vkQueueWaitIdle", {kFuncTypeDev, (void*)QueueWaitIdle}},
+    {"vkDeviceWaitIdle", {kFuncTypeDev, (void*)DeviceWaitIdle}},
+    {"vkAllocateMemory", {kFuncTypeDev, (void*)AllocateMemory}},
+    {"vkFreeMemory", {kFuncTypeDev, (void*)FreeMemory}},
+    {"vkMapMemory", {kFuncTypeDev, (void*)MapMemory}},
+    {"vkUnmapMemory", {kFuncTypeDev, (void*)UnmapMemory}},
+    {"vkFlushMappedMemoryRanges", {kFuncTypeDev, (void*)FlushMappedMemoryRanges}},
+    {"vkInvalidateMappedMemoryRanges", {kFuncTypeDev, (void*)InvalidateMappedMemoryRanges}},
+    {"vkGetDeviceMemoryCommitment", {kFuncTypeDev, (void*)GetDeviceMemoryCommitment}},
+    {"vkBindBufferMemory", {kFuncTypeDev, (void*)BindBufferMemory}},
+    {"vkBindImageMemory", {kFuncTypeDev, (void*)BindImageMemory}},
+    {"vkGetBufferMemoryRequirements", {kFuncTypeDev, (void*)GetBufferMemoryRequirements}},
+    {"vkGetImageMemoryRequirements", {kFuncTypeDev, (void*)GetImageMemoryRequirements}},
+    {"vkGetImageSparseMemoryRequirements", {kFuncTypeDev, (void*)GetImageSparseMemoryRequirements}},
+    {"vkGetPhysicalDeviceSparseImageFormatProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceSparseImageFormatProperties}},
+    {"vkQueueBindSparse", {kFuncTypeDev, (void*)QueueBindSparse}},
+    {"vkCreateFence", {kFuncTypeDev, (void*)CreateFence}},
+    {"vkDestroyFence", {kFuncTypeDev, (void*)DestroyFence}},
+    {"vkResetFences", {kFuncTypeDev, (void*)ResetFences}},
+    {"vkGetFenceStatus", {kFuncTypeDev, (void*)GetFenceStatus}},
+    {"vkWaitForFences", {kFuncTypeDev, (void*)WaitForFences}},
+    {"vkCreateSemaphore", {kFuncTypeDev, (void*)CreateSemaphore}},
+    {"vkDestroySemaphore", {kFuncTypeDev, (void*)DestroySemaphore}},
+    {"vkCreateEvent", {kFuncTypeDev, (void*)CreateEvent}},
+    {"vkDestroyEvent", {kFuncTypeDev, (void*)DestroyEvent}},
+    {"vkGetEventStatus", {kFuncTypeDev, (void*)GetEventStatus}},
+    {"vkSetEvent", {kFuncTypeDev, (void*)SetEvent}},
+    {"vkResetEvent", {kFuncTypeDev, (void*)ResetEvent}},
+    {"vkCreateQueryPool", {kFuncTypeDev, (void*)CreateQueryPool}},
+    {"vkDestroyQueryPool", {kFuncTypeDev, (void*)DestroyQueryPool}},
+    {"vkGetQueryPoolResults", {kFuncTypeDev, (void*)GetQueryPoolResults}},
+    {"vkCreateBuffer", {kFuncTypeDev, (void*)CreateBuffer}},
+    {"vkDestroyBuffer", {kFuncTypeDev, (void*)DestroyBuffer}},
+    {"vkCreateBufferView", {kFuncTypeDev, (void*)CreateBufferView}},
+    {"vkDestroyBufferView", {kFuncTypeDev, (void*)DestroyBufferView}},
+    {"vkCreateImage", {kFuncTypeDev, (void*)CreateImage}},
+    {"vkDestroyImage", {kFuncTypeDev, (void*)DestroyImage}},
+    {"vkGetImageSubresourceLayout", {kFuncTypeDev, (void*)GetImageSubresourceLayout}},
+    {"vkCreateImageView", {kFuncTypeDev, (void*)CreateImageView}},
+    {"vkDestroyImageView", {kFuncTypeDev, (void*)DestroyImageView}},
+    {"vkCreateShaderModule", {kFuncTypeDev, (void*)CreateShaderModule}},
+    {"vkDestroyShaderModule", {kFuncTypeDev, (void*)DestroyShaderModule}},
+    {"vkCreatePipelineCache", {kFuncTypeDev, (void*)CreatePipelineCache}},
+    {"vkDestroyPipelineCache", {kFuncTypeDev, (void*)DestroyPipelineCache}},
+    {"vkGetPipelineCacheData", {kFuncTypeDev, (void*)GetPipelineCacheData}},
+    {"vkMergePipelineCaches", {kFuncTypeDev, (void*)MergePipelineCaches}},
+    {"vkCreateGraphicsPipelines", {kFuncTypeDev, (void*)CreateGraphicsPipelines}},
+    {"vkCreateComputePipelines", {kFuncTypeDev, (void*)CreateComputePipelines}},
+    {"vkDestroyPipeline", {kFuncTypeDev, (void*)DestroyPipeline}},
+    {"vkCreatePipelineLayout", {kFuncTypeDev, (void*)CreatePipelineLayout}},
+    {"vkDestroyPipelineLayout", {kFuncTypeDev, (void*)DestroyPipelineLayout}},
+    {"vkCreateSampler", {kFuncTypeDev, (void*)CreateSampler}},
+    {"vkDestroySampler", {kFuncTypeDev, (void*)DestroySampler}},
+    {"vkCreateDescriptorSetLayout", {kFuncTypeDev, (void*)CreateDescriptorSetLayout}},
+    {"vkDestroyDescriptorSetLayout", {kFuncTypeDev, (void*)DestroyDescriptorSetLayout}},
+    {"vkCreateDescriptorPool", {kFuncTypeDev, (void*)CreateDescriptorPool}},
+    {"vkDestroyDescriptorPool", {kFuncTypeDev, (void*)DestroyDescriptorPool}},
+    {"vkResetDescriptorPool", {kFuncTypeDev, (void*)ResetDescriptorPool}},
+    {"vkAllocateDescriptorSets", {kFuncTypeDev, (void*)AllocateDescriptorSets}},
+    {"vkFreeDescriptorSets", {kFuncTypeDev, (void*)FreeDescriptorSets}},
+    {"vkUpdateDescriptorSets", {kFuncTypeDev, (void*)UpdateDescriptorSets}},
+    {"vkCreateFramebuffer", {kFuncTypeDev, (void*)CreateFramebuffer}},
+    {"vkDestroyFramebuffer", {kFuncTypeDev, (void*)DestroyFramebuffer}},
+    {"vkCreateRenderPass", {kFuncTypeDev, (void*)CreateRenderPass}},
+    {"vkDestroyRenderPass", {kFuncTypeDev, (void*)DestroyRenderPass}},
+    {"vkGetRenderAreaGranularity", {kFuncTypeDev, (void*)GetRenderAreaGranularity}},
+    {"vkCreateCommandPool", {kFuncTypeDev, (void*)CreateCommandPool}},
+    {"vkDestroyCommandPool", {kFuncTypeDev, (void*)DestroyCommandPool}},
+    {"vkResetCommandPool", {kFuncTypeDev, (void*)ResetCommandPool}},
+    {"vkAllocateCommandBuffers", {kFuncTypeDev, (void*)AllocateCommandBuffers}},
+    {"vkFreeCommandBuffers", {kFuncTypeDev, (void*)FreeCommandBuffers}},
+    {"vkBeginCommandBuffer", {kFuncTypeDev, (void*)BeginCommandBuffer}},
+    {"vkEndCommandBuffer", {kFuncTypeDev, (void*)EndCommandBuffer}},
+    {"vkResetCommandBuffer", {kFuncTypeDev, (void*)ResetCommandBuffer}},
+    {"vkCmdBindPipeline", {kFuncTypeDev, (void*)CmdBindPipeline}},
+    {"vkCmdSetViewport", {kFuncTypeDev, (void*)CmdSetViewport}},
+    {"vkCmdSetScissor", {kFuncTypeDev, (void*)CmdSetScissor}},
+    {"vkCmdSetLineWidth", {kFuncTypeDev, (void*)CmdSetLineWidth}},
+    {"vkCmdSetDepthBias", {kFuncTypeDev, (void*)CmdSetDepthBias}},
+    {"vkCmdSetBlendConstants", {kFuncTypeDev, (void*)CmdSetBlendConstants}},
+    {"vkCmdSetDepthBounds", {kFuncTypeDev, (void*)CmdSetDepthBounds}},
+    {"vkCmdSetStencilCompareMask", {kFuncTypeDev, (void*)CmdSetStencilCompareMask}},
+    {"vkCmdSetStencilWriteMask", {kFuncTypeDev, (void*)CmdSetStencilWriteMask}},
+    {"vkCmdSetStencilReference", {kFuncTypeDev, (void*)CmdSetStencilReference}},
+    {"vkCmdBindDescriptorSets", {kFuncTypeDev, (void*)CmdBindDescriptorSets}},
+    {"vkCmdBindIndexBuffer", {kFuncTypeDev, (void*)CmdBindIndexBuffer}},
+    {"vkCmdBindVertexBuffers", {kFuncTypeDev, (void*)CmdBindVertexBuffers}},
+    {"vkCmdDraw", {kFuncTypeDev, (void*)CmdDraw}},
+    {"vkCmdDrawIndexed", {kFuncTypeDev, (void*)CmdDrawIndexed}},
+    {"vkCmdDrawIndirect", {kFuncTypeDev, (void*)CmdDrawIndirect}},
+    {"vkCmdDrawIndexedIndirect", {kFuncTypeDev, (void*)CmdDrawIndexedIndirect}},
+    {"vkCmdDispatch", {kFuncTypeDev, (void*)CmdDispatch}},
+    {"vkCmdDispatchIndirect", {kFuncTypeDev, (void*)CmdDispatchIndirect}},
+    {"vkCmdCopyBuffer", {kFuncTypeDev, (void*)CmdCopyBuffer}},
+    {"vkCmdCopyImage", {kFuncTypeDev, (void*)CmdCopyImage}},
+    {"vkCmdBlitImage", {kFuncTypeDev, (void*)CmdBlitImage}},
+    {"vkCmdCopyBufferToImage", {kFuncTypeDev, (void*)CmdCopyBufferToImage}},
+    {"vkCmdCopyImageToBuffer", {kFuncTypeDev, (void*)CmdCopyImageToBuffer}},
+    {"vkCmdUpdateBuffer", {kFuncTypeDev, (void*)CmdUpdateBuffer}},
+    {"vkCmdFillBuffer", {kFuncTypeDev, (void*)CmdFillBuffer}},
+    {"vkCmdClearColorImage", {kFuncTypeDev, (void*)CmdClearColorImage}},
+    {"vkCmdClearDepthStencilImage", {kFuncTypeDev, (void*)CmdClearDepthStencilImage}},
+    {"vkCmdClearAttachments", {kFuncTypeDev, (void*)CmdClearAttachments}},
+    {"vkCmdResolveImage", {kFuncTypeDev, (void*)CmdResolveImage}},
+    {"vkCmdSetEvent", {kFuncTypeDev, (void*)CmdSetEvent}},
+    {"vkCmdResetEvent", {kFuncTypeDev, (void*)CmdResetEvent}},
+    {"vkCmdWaitEvents", {kFuncTypeDev, (void*)CmdWaitEvents}},
+    {"vkCmdPipelineBarrier", {kFuncTypeDev, (void*)CmdPipelineBarrier}},
+    {"vkCmdBeginQuery", {kFuncTypeDev, (void*)CmdBeginQuery}},
+    {"vkCmdEndQuery", {kFuncTypeDev, (void*)CmdEndQuery}},
+    {"vkCmdResetQueryPool", {kFuncTypeDev, (void*)CmdResetQueryPool}},
+    {"vkCmdWriteTimestamp", {kFuncTypeDev, (void*)CmdWriteTimestamp}},
+    {"vkCmdCopyQueryPoolResults", {kFuncTypeDev, (void*)CmdCopyQueryPoolResults}},
+    {"vkCmdPushConstants", {kFuncTypeDev, (void*)CmdPushConstants}},
+    {"vkCmdBeginRenderPass", {kFuncTypeDev, (void*)CmdBeginRenderPass}},
+    {"vkCmdNextSubpass", {kFuncTypeDev, (void*)CmdNextSubpass}},
+    {"vkCmdEndRenderPass", {kFuncTypeDev, (void*)CmdEndRenderPass}},
+    {"vkCmdExecuteCommands", {kFuncTypeDev, (void*)CmdExecuteCommands}},
+    {"vkBindBufferMemory2", {kFuncTypeDev, (void*)BindBufferMemory2}},
+    {"vkBindImageMemory2", {kFuncTypeDev, (void*)BindImageMemory2}},
+    {"vkGetDeviceGroupPeerMemoryFeatures", {kFuncTypeDev, (void*)GetDeviceGroupPeerMemoryFeatures}},
+    {"vkCmdSetDeviceMask", {kFuncTypeDev, (void*)CmdSetDeviceMask}},
+    {"vkCmdDispatchBase", {kFuncTypeDev, (void*)CmdDispatchBase}},
+    {"vkEnumeratePhysicalDeviceGroups", {kFuncTypeInst, (void*)EnumeratePhysicalDeviceGroups}},
+    {"vkGetImageMemoryRequirements2", {kFuncTypeDev, (void*)GetImageMemoryRequirements2}},
+    {"vkGetBufferMemoryRequirements2", {kFuncTypeDev, (void*)GetBufferMemoryRequirements2}},
+    {"vkGetImageSparseMemoryRequirements2", {kFuncTypeDev, (void*)GetImageSparseMemoryRequirements2}},
+    {"vkGetPhysicalDeviceFeatures2", {kFuncTypePdev, (void*)GetPhysicalDeviceFeatures2}},
+    {"vkGetPhysicalDeviceProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceProperties2}},
+    {"vkGetPhysicalDeviceFormatProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceFormatProperties2}},
+    {"vkGetPhysicalDeviceImageFormatProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceImageFormatProperties2}},
+    {"vkGetPhysicalDeviceQueueFamilyProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceQueueFamilyProperties2}},
+    {"vkGetPhysicalDeviceMemoryProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceMemoryProperties2}},
+    {"vkGetPhysicalDeviceSparseImageFormatProperties2", {kFuncTypePdev, (void*)GetPhysicalDeviceSparseImageFormatProperties2}},
+    {"vkTrimCommandPool", {kFuncTypeDev, (void*)TrimCommandPool}},
+    {"vkGetDeviceQueue2", {kFuncTypeDev, (void*)GetDeviceQueue2}},
+    {"vkCreateSamplerYcbcrConversion", {kFuncTypeDev, (void*)CreateSamplerYcbcrConversion}},
+    {"vkDestroySamplerYcbcrConversion", {kFuncTypeDev, (void*)DestroySamplerYcbcrConversion}},
+    {"vkCreateDescriptorUpdateTemplate", {kFuncTypeDev, (void*)CreateDescriptorUpdateTemplate}},
+    {"vkDestroyDescriptorUpdateTemplate", {kFuncTypeDev, (void*)DestroyDescriptorUpdateTemplate}},
+    {"vkUpdateDescriptorSetWithTemplate", {kFuncTypeDev, (void*)UpdateDescriptorSetWithTemplate}},
+    {"vkGetPhysicalDeviceExternalBufferProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalBufferProperties}},
+    {"vkGetPhysicalDeviceExternalFenceProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalFenceProperties}},
+    {"vkGetPhysicalDeviceExternalSemaphoreProperties", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalSemaphoreProperties}},
+    {"vkGetDescriptorSetLayoutSupport", {kFuncTypeDev, (void*)GetDescriptorSetLayoutSupport}},
+    {"vkCmdDrawIndirectCount", {kFuncTypeDev, (void*)CmdDrawIndirectCount}},
+    {"vkCmdDrawIndexedIndirectCount", {kFuncTypeDev, (void*)CmdDrawIndexedIndirectCount}},
+    {"vkCreateRenderPass2", {kFuncTypeDev, (void*)CreateRenderPass2}},
+    {"vkCmdBeginRenderPass2", {kFuncTypeDev, (void*)CmdBeginRenderPass2}},
+    {"vkCmdNextSubpass2", {kFuncTypeDev, (void*)CmdNextSubpass2}},
+    {"vkCmdEndRenderPass2", {kFuncTypeDev, (void*)CmdEndRenderPass2}},
+    {"vkResetQueryPool", {kFuncTypeDev, (void*)ResetQueryPool}},
+    {"vkGetSemaphoreCounterValue", {kFuncTypeDev, (void*)GetSemaphoreCounterValue}},
+    {"vkWaitSemaphores", {kFuncTypeDev, (void*)WaitSemaphores}},
+    {"vkSignalSemaphore", {kFuncTypeDev, (void*)SignalSemaphore}},
+    {"vkGetBufferDeviceAddress", {kFuncTypeDev, (void*)GetBufferDeviceAddress}},
+    {"vkGetBufferOpaqueCaptureAddress", {kFuncTypeDev, (void*)GetBufferOpaqueCaptureAddress}},
+    {"vkGetDeviceMemoryOpaqueCaptureAddress", {kFuncTypeDev, (void*)GetDeviceMemoryOpaqueCaptureAddress}},
+    {"vkDestroySurfaceKHR", {kFuncTypeInst, (void*)DestroySurfaceKHR}},
+    {"vkGetPhysicalDeviceSurfaceSupportKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceSupportKHR}},
+    {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceCapabilitiesKHR}},
+    {"vkGetPhysicalDeviceSurfaceFormatsKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceFormatsKHR}},
+    {"vkGetPhysicalDeviceSurfacePresentModesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfacePresentModesKHR}},
+    {"vkCreateSwapchainKHR", {kFuncTypeDev, (void*)CreateSwapchainKHR}},
+    {"vkDestroySwapchainKHR", {kFuncTypeDev, (void*)DestroySwapchainKHR}},
+    {"vkGetSwapchainImagesKHR", {kFuncTypeDev, (void*)GetSwapchainImagesKHR}},
+    {"vkAcquireNextImageKHR", {kFuncTypeDev, (void*)AcquireNextImageKHR}},
+    {"vkQueuePresentKHR", {kFuncTypeDev, (void*)QueuePresentKHR}},
+    {"vkGetDeviceGroupPresentCapabilitiesKHR", {kFuncTypeDev, (void*)GetDeviceGroupPresentCapabilitiesKHR}},
+    {"vkGetDeviceGroupSurfacePresentModesKHR", {kFuncTypeDev, (void*)GetDeviceGroupSurfacePresentModesKHR}},
+    {"vkGetPhysicalDevicePresentRectanglesKHR", {kFuncTypePdev, (void*)GetPhysicalDevicePresentRectanglesKHR}},
+    {"vkAcquireNextImage2KHR", {kFuncTypeDev, (void*)AcquireNextImage2KHR}},
+    {"vkGetPhysicalDeviceDisplayPropertiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceDisplayPropertiesKHR}},
+    {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceDisplayPlanePropertiesKHR}},
+    {"vkGetDisplayPlaneSupportedDisplaysKHR", {kFuncTypePdev, (void*)GetDisplayPlaneSupportedDisplaysKHR}},
+    {"vkGetDisplayModePropertiesKHR", {kFuncTypePdev, (void*)GetDisplayModePropertiesKHR}},
+    {"vkCreateDisplayModeKHR", {kFuncTypePdev, (void*)CreateDisplayModeKHR}},
+    {"vkGetDisplayPlaneCapabilitiesKHR", {kFuncTypePdev, (void*)GetDisplayPlaneCapabilitiesKHR}},
+    {"vkCreateDisplayPlaneSurfaceKHR", {kFuncTypeInst, (void*)CreateDisplayPlaneSurfaceKHR}},
+    {"vkCreateSharedSwapchainsKHR", {kFuncTypeDev, (void*)CreateSharedSwapchainsKHR}},
 #ifdef VK_USE_PLATFORM_XLIB_KHR
-    {"vkCreateXlibSurfaceKHR", {true, (void*)CreateXlibSurfaceKHR}},
+    {"vkCreateXlibSurfaceKHR", {kFuncTypeInst, (void*)CreateXlibSurfaceKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_XLIB_KHR
-    {"vkGetPhysicalDeviceXlibPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXlibPresentationSupportKHR}},
+    {"vkGetPhysicalDeviceXlibPresentationSupportKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceXlibPresentationSupportKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_XCB_KHR
-    {"vkCreateXcbSurfaceKHR", {true, (void*)CreateXcbSurfaceKHR}},
+    {"vkCreateXcbSurfaceKHR", {kFuncTypeInst, (void*)CreateXcbSurfaceKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_XCB_KHR
-    {"vkGetPhysicalDeviceXcbPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXcbPresentationSupportKHR}},
+    {"vkGetPhysicalDeviceXcbPresentationSupportKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceXcbPresentationSupportKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-    {"vkCreateWaylandSurfaceKHR", {true, (void*)CreateWaylandSurfaceKHR}},
+    {"vkCreateWaylandSurfaceKHR", {kFuncTypeInst, (void*)CreateWaylandSurfaceKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-    {"vkGetPhysicalDeviceWaylandPresentationSupportKHR", {true, (void*)GetPhysicalDeviceWaylandPresentationSupportKHR}},
+    {"vkGetPhysicalDeviceWaylandPresentationSupportKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceWaylandPresentationSupportKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-    {"vkCreateAndroidSurfaceKHR", {true, (void*)CreateAndroidSurfaceKHR}},
+    {"vkCreateAndroidSurfaceKHR", {kFuncTypeInst, (void*)CreateAndroidSurfaceKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkCreateWin32SurfaceKHR", {true, (void*)CreateWin32SurfaceKHR}},
+    {"vkCreateWin32SurfaceKHR", {kFuncTypeInst, (void*)CreateWin32SurfaceKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetPhysicalDeviceWin32PresentationSupportKHR", {true, (void*)GetPhysicalDeviceWin32PresentationSupportKHR}},
+    {"vkGetPhysicalDeviceWin32PresentationSupportKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceWin32PresentationSupportKHR}},
 #endif
-    {"vkGetPhysicalDeviceFeatures2KHR", {true, (void*)GetPhysicalDeviceFeatures2KHR}},
-    {"vkGetPhysicalDeviceProperties2KHR", {true, (void*)GetPhysicalDeviceProperties2KHR}},
-    {"vkGetPhysicalDeviceFormatProperties2KHR", {true, (void*)GetPhysicalDeviceFormatProperties2KHR}},
-    {"vkGetPhysicalDeviceImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceImageFormatProperties2KHR}},
-    {"vkGetPhysicalDeviceQueueFamilyProperties2KHR", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2KHR}},
-    {"vkGetPhysicalDeviceMemoryProperties2KHR", {true, (void*)GetPhysicalDeviceMemoryProperties2KHR}},
-    {"vkGetPhysicalDeviceSparseImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2KHR}},
-    {"vkGetDeviceGroupPeerMemoryFeaturesKHR", {false, (void*)GetDeviceGroupPeerMemoryFeaturesKHR}},
-    {"vkCmdSetDeviceMaskKHR", {false, (void*)CmdSetDeviceMaskKHR}},
-    {"vkCmdDispatchBaseKHR", {false, (void*)CmdDispatchBaseKHR}},
-    {"vkTrimCommandPoolKHR", {false, (void*)TrimCommandPoolKHR}},
-    {"vkEnumeratePhysicalDeviceGroupsKHR", {true, (void*)EnumeratePhysicalDeviceGroupsKHR}},
-    {"vkGetPhysicalDeviceExternalBufferPropertiesKHR", {true, (void*)GetPhysicalDeviceExternalBufferPropertiesKHR}},
+    {"vkGetPhysicalDeviceFeatures2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceFeatures2KHR}},
+    {"vkGetPhysicalDeviceProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceProperties2KHR}},
+    {"vkGetPhysicalDeviceFormatProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceFormatProperties2KHR}},
+    {"vkGetPhysicalDeviceImageFormatProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceImageFormatProperties2KHR}},
+    {"vkGetPhysicalDeviceQueueFamilyProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceQueueFamilyProperties2KHR}},
+    {"vkGetPhysicalDeviceMemoryProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceMemoryProperties2KHR}},
+    {"vkGetPhysicalDeviceSparseImageFormatProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSparseImageFormatProperties2KHR}},
+    {"vkGetDeviceGroupPeerMemoryFeaturesKHR", {kFuncTypeDev, (void*)GetDeviceGroupPeerMemoryFeaturesKHR}},
+    {"vkCmdSetDeviceMaskKHR", {kFuncTypeDev, (void*)CmdSetDeviceMaskKHR}},
+    {"vkCmdDispatchBaseKHR", {kFuncTypeDev, (void*)CmdDispatchBaseKHR}},
+    {"vkTrimCommandPoolKHR", {kFuncTypeDev, (void*)TrimCommandPoolKHR}},
+    {"vkEnumeratePhysicalDeviceGroupsKHR", {kFuncTypeInst, (void*)EnumeratePhysicalDeviceGroupsKHR}},
+    {"vkGetPhysicalDeviceExternalBufferPropertiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalBufferPropertiesKHR}},
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetMemoryWin32HandleKHR", {false, (void*)GetMemoryWin32HandleKHR}},
+    {"vkGetMemoryWin32HandleKHR", {kFuncTypeDev, (void*)GetMemoryWin32HandleKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetMemoryWin32HandlePropertiesKHR", {false, (void*)GetMemoryWin32HandlePropertiesKHR}},
+    {"vkGetMemoryWin32HandlePropertiesKHR", {kFuncTypeDev, (void*)GetMemoryWin32HandlePropertiesKHR}},
 #endif
-    {"vkGetMemoryFdKHR", {false, (void*)GetMemoryFdKHR}},
-    {"vkGetMemoryFdPropertiesKHR", {false, (void*)GetMemoryFdPropertiesKHR}},
-    {"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalSemaphorePropertiesKHR}},
+    {"vkGetMemoryFdKHR", {kFuncTypeDev, (void*)GetMemoryFdKHR}},
+    {"vkGetMemoryFdPropertiesKHR", {kFuncTypeDev, (void*)GetMemoryFdPropertiesKHR}},
+    {"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalSemaphorePropertiesKHR}},
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkImportSemaphoreWin32HandleKHR", {false, (void*)ImportSemaphoreWin32HandleKHR}},
+    {"vkImportSemaphoreWin32HandleKHR", {kFuncTypeDev, (void*)ImportSemaphoreWin32HandleKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetSemaphoreWin32HandleKHR", {false, (void*)GetSemaphoreWin32HandleKHR}},
+    {"vkGetSemaphoreWin32HandleKHR", {kFuncTypeDev, (void*)GetSemaphoreWin32HandleKHR}},
 #endif
-    {"vkImportSemaphoreFdKHR", {false, (void*)ImportSemaphoreFdKHR}},
-    {"vkGetSemaphoreFdKHR", {false, (void*)GetSemaphoreFdKHR}},
-    {"vkCmdPushDescriptorSetKHR", {false, (void*)CmdPushDescriptorSetKHR}},
-    {"vkCmdPushDescriptorSetWithTemplateKHR", {false, (void*)CmdPushDescriptorSetWithTemplateKHR}},
-    {"vkCreateDescriptorUpdateTemplateKHR", {false, (void*)CreateDescriptorUpdateTemplateKHR}},
-    {"vkDestroyDescriptorUpdateTemplateKHR", {false, (void*)DestroyDescriptorUpdateTemplateKHR}},
-    {"vkUpdateDescriptorSetWithTemplateKHR", {false, (void*)UpdateDescriptorSetWithTemplateKHR}},
-    {"vkCreateRenderPass2KHR", {false, (void*)CreateRenderPass2KHR}},
-    {"vkCmdBeginRenderPass2KHR", {false, (void*)CmdBeginRenderPass2KHR}},
-    {"vkCmdNextSubpass2KHR", {false, (void*)CmdNextSubpass2KHR}},
-    {"vkCmdEndRenderPass2KHR", {false, (void*)CmdEndRenderPass2KHR}},
-    {"vkGetSwapchainStatusKHR", {false, (void*)GetSwapchainStatusKHR}},
-    {"vkGetPhysicalDeviceExternalFencePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalFencePropertiesKHR}},
+    {"vkImportSemaphoreFdKHR", {kFuncTypeDev, (void*)ImportSemaphoreFdKHR}},
+    {"vkGetSemaphoreFdKHR", {kFuncTypeDev, (void*)GetSemaphoreFdKHR}},
+    {"vkCmdPushDescriptorSetKHR", {kFuncTypeDev, (void*)CmdPushDescriptorSetKHR}},
+    {"vkCmdPushDescriptorSetWithTemplateKHR", {kFuncTypeDev, (void*)CmdPushDescriptorSetWithTemplateKHR}},
+    {"vkCreateDescriptorUpdateTemplateKHR", {kFuncTypeDev, (void*)CreateDescriptorUpdateTemplateKHR}},
+    {"vkDestroyDescriptorUpdateTemplateKHR", {kFuncTypeDev, (void*)DestroyDescriptorUpdateTemplateKHR}},
+    {"vkUpdateDescriptorSetWithTemplateKHR", {kFuncTypeDev, (void*)UpdateDescriptorSetWithTemplateKHR}},
+    {"vkCreateRenderPass2KHR", {kFuncTypeDev, (void*)CreateRenderPass2KHR}},
+    {"vkCmdBeginRenderPass2KHR", {kFuncTypeDev, (void*)CmdBeginRenderPass2KHR}},
+    {"vkCmdNextSubpass2KHR", {kFuncTypeDev, (void*)CmdNextSubpass2KHR}},
+    {"vkCmdEndRenderPass2KHR", {kFuncTypeDev, (void*)CmdEndRenderPass2KHR}},
+    {"vkGetSwapchainStatusKHR", {kFuncTypeDev, (void*)GetSwapchainStatusKHR}},
+    {"vkGetPhysicalDeviceExternalFencePropertiesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalFencePropertiesKHR}},
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkImportFenceWin32HandleKHR", {false, (void*)ImportFenceWin32HandleKHR}},
+    {"vkImportFenceWin32HandleKHR", {kFuncTypeDev, (void*)ImportFenceWin32HandleKHR}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetFenceWin32HandleKHR", {false, (void*)GetFenceWin32HandleKHR}},
+    {"vkGetFenceWin32HandleKHR", {kFuncTypeDev, (void*)GetFenceWin32HandleKHR}},
 #endif
-    {"vkImportFenceFdKHR", {false, (void*)ImportFenceFdKHR}},
-    {"vkGetFenceFdKHR", {false, (void*)GetFenceFdKHR}},
-    {"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR", {true, (void*)EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR}},
-    {"vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", {true, (void*)GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR}},
-    {"vkAcquireProfilingLockKHR", {false, (void*)AcquireProfilingLockKHR}},
-    {"vkReleaseProfilingLockKHR", {false, (void*)ReleaseProfilingLockKHR}},
-    {"vkGetPhysicalDeviceSurfaceCapabilities2KHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2KHR}},
-    {"vkGetPhysicalDeviceSurfaceFormats2KHR", {true, (void*)GetPhysicalDeviceSurfaceFormats2KHR}},
-    {"vkGetPhysicalDeviceDisplayProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayProperties2KHR}},
-    {"vkGetPhysicalDeviceDisplayPlaneProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayPlaneProperties2KHR}},
-    {"vkGetDisplayModeProperties2KHR", {true, (void*)GetDisplayModeProperties2KHR}},
-    {"vkGetDisplayPlaneCapabilities2KHR", {true, (void*)GetDisplayPlaneCapabilities2KHR}},
-    {"vkGetImageMemoryRequirements2KHR", {false, (void*)GetImageMemoryRequirements2KHR}},
-    {"vkGetBufferMemoryRequirements2KHR", {false, (void*)GetBufferMemoryRequirements2KHR}},
-    {"vkGetImageSparseMemoryRequirements2KHR", {false, (void*)GetImageSparseMemoryRequirements2KHR}},
-    {"vkCreateSamplerYcbcrConversionKHR", {false, (void*)CreateSamplerYcbcrConversionKHR}},
-    {"vkDestroySamplerYcbcrConversionKHR", {false, (void*)DestroySamplerYcbcrConversionKHR}},
-    {"vkBindBufferMemory2KHR", {false, (void*)BindBufferMemory2KHR}},
-    {"vkBindImageMemory2KHR", {false, (void*)BindImageMemory2KHR}},
-    {"vkGetDescriptorSetLayoutSupportKHR", {false, (void*)GetDescriptorSetLayoutSupportKHR}},
-    {"vkCmdDrawIndirectCountKHR", {false, (void*)CmdDrawIndirectCountKHR}},
-    {"vkCmdDrawIndexedIndirectCountKHR", {false, (void*)CmdDrawIndexedIndirectCountKHR}},
-    {"vkGetSemaphoreCounterValueKHR", {false, (void*)GetSemaphoreCounterValueKHR}},
-    {"vkWaitSemaphoresKHR", {false, (void*)WaitSemaphoresKHR}},
-    {"vkSignalSemaphoreKHR", {false, (void*)SignalSemaphoreKHR}},
-    {"vkGetBufferDeviceAddressKHR", {false, (void*)GetBufferDeviceAddressKHR}},
-    {"vkGetBufferOpaqueCaptureAddressKHR", {false, (void*)GetBufferOpaqueCaptureAddressKHR}},
-    {"vkGetDeviceMemoryOpaqueCaptureAddressKHR", {false, (void*)GetDeviceMemoryOpaqueCaptureAddressKHR}},
-    {"vkGetPipelineExecutablePropertiesKHR", {false, (void*)GetPipelineExecutablePropertiesKHR}},
-    {"vkGetPipelineExecutableStatisticsKHR", {false, (void*)GetPipelineExecutableStatisticsKHR}},
-    {"vkGetPipelineExecutableInternalRepresentationsKHR", {false, (void*)GetPipelineExecutableInternalRepresentationsKHR}},
-    {"vkCreateDebugReportCallbackEXT", {true, (void*)CreateDebugReportCallbackEXT}},
-    {"vkDestroyDebugReportCallbackEXT", {true, (void*)DestroyDebugReportCallbackEXT}},
-    {"vkDebugReportMessageEXT", {true, (void*)DebugReportMessageEXT}},
-    {"vkDebugMarkerSetObjectTagEXT", {false, (void*)DebugMarkerSetObjectTagEXT}},
-    {"vkDebugMarkerSetObjectNameEXT", {false, (void*)DebugMarkerSetObjectNameEXT}},
-    {"vkCmdDebugMarkerBeginEXT", {false, (void*)CmdDebugMarkerBeginEXT}},
-    {"vkCmdDebugMarkerEndEXT", {false, (void*)CmdDebugMarkerEndEXT}},
-    {"vkCmdDebugMarkerInsertEXT", {false, (void*)CmdDebugMarkerInsertEXT}},
-    {"vkCmdBindTransformFeedbackBuffersEXT", {false, (void*)CmdBindTransformFeedbackBuffersEXT}},
-    {"vkCmdBeginTransformFeedbackEXT", {false, (void*)CmdBeginTransformFeedbackEXT}},
-    {"vkCmdEndTransformFeedbackEXT", {false, (void*)CmdEndTransformFeedbackEXT}},
-    {"vkCmdBeginQueryIndexedEXT", {false, (void*)CmdBeginQueryIndexedEXT}},
-    {"vkCmdEndQueryIndexedEXT", {false, (void*)CmdEndQueryIndexedEXT}},
-    {"vkCmdDrawIndirectByteCountEXT", {false, (void*)CmdDrawIndirectByteCountEXT}},
-    {"vkGetImageViewHandleNVX", {false, (void*)GetImageViewHandleNVX}},
-    {"vkCmdDrawIndirectCountAMD", {false, (void*)CmdDrawIndirectCountAMD}},
-    {"vkCmdDrawIndexedIndirectCountAMD", {false, (void*)CmdDrawIndexedIndirectCountAMD}},
-    {"vkGetShaderInfoAMD", {false, (void*)GetShaderInfoAMD}},
+    {"vkImportFenceFdKHR", {kFuncTypeDev, (void*)ImportFenceFdKHR}},
+    {"vkGetFenceFdKHR", {kFuncTypeDev, (void*)GetFenceFdKHR}},
+    {"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR", {kFuncTypePdev, (void*)EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR}},
+    {"vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR", {kFuncTypePdev, (void*)GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR}},
+    {"vkAcquireProfilingLockKHR", {kFuncTypeDev, (void*)AcquireProfilingLockKHR}},
+    {"vkReleaseProfilingLockKHR", {kFuncTypeDev, (void*)ReleaseProfilingLockKHR}},
+    {"vkGetPhysicalDeviceSurfaceCapabilities2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceCapabilities2KHR}},
+    {"vkGetPhysicalDeviceSurfaceFormats2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceFormats2KHR}},
+    {"vkGetPhysicalDeviceDisplayProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceDisplayProperties2KHR}},
+    {"vkGetPhysicalDeviceDisplayPlaneProperties2KHR", {kFuncTypePdev, (void*)GetPhysicalDeviceDisplayPlaneProperties2KHR}},
+    {"vkGetDisplayModeProperties2KHR", {kFuncTypePdev, (void*)GetDisplayModeProperties2KHR}},
+    {"vkGetDisplayPlaneCapabilities2KHR", {kFuncTypePdev, (void*)GetDisplayPlaneCapabilities2KHR}},
+    {"vkGetImageMemoryRequirements2KHR", {kFuncTypeDev, (void*)GetImageMemoryRequirements2KHR}},
+    {"vkGetBufferMemoryRequirements2KHR", {kFuncTypeDev, (void*)GetBufferMemoryRequirements2KHR}},
+    {"vkGetImageSparseMemoryRequirements2KHR", {kFuncTypeDev, (void*)GetImageSparseMemoryRequirements2KHR}},
+    {"vkCreateSamplerYcbcrConversionKHR", {kFuncTypeDev, (void*)CreateSamplerYcbcrConversionKHR}},
+    {"vkDestroySamplerYcbcrConversionKHR", {kFuncTypeDev, (void*)DestroySamplerYcbcrConversionKHR}},
+    {"vkBindBufferMemory2KHR", {kFuncTypeDev, (void*)BindBufferMemory2KHR}},
+    {"vkBindImageMemory2KHR", {kFuncTypeDev, (void*)BindImageMemory2KHR}},
+    {"vkGetDescriptorSetLayoutSupportKHR", {kFuncTypeDev, (void*)GetDescriptorSetLayoutSupportKHR}},
+    {"vkCmdDrawIndirectCountKHR", {kFuncTypeDev, (void*)CmdDrawIndirectCountKHR}},
+    {"vkCmdDrawIndexedIndirectCountKHR", {kFuncTypeDev, (void*)CmdDrawIndexedIndirectCountKHR}},
+    {"vkGetSemaphoreCounterValueKHR", {kFuncTypeDev, (void*)GetSemaphoreCounterValueKHR}},
+    {"vkWaitSemaphoresKHR", {kFuncTypeDev, (void*)WaitSemaphoresKHR}},
+    {"vkSignalSemaphoreKHR", {kFuncTypeDev, (void*)SignalSemaphoreKHR}},
+    {"vkGetBufferDeviceAddressKHR", {kFuncTypeDev, (void*)GetBufferDeviceAddressKHR}},
+    {"vkGetBufferOpaqueCaptureAddressKHR", {kFuncTypeDev, (void*)GetBufferOpaqueCaptureAddressKHR}},
+    {"vkGetDeviceMemoryOpaqueCaptureAddressKHR", {kFuncTypeDev, (void*)GetDeviceMemoryOpaqueCaptureAddressKHR}},
+    {"vkGetPipelineExecutablePropertiesKHR", {kFuncTypeDev, (void*)GetPipelineExecutablePropertiesKHR}},
+    {"vkGetPipelineExecutableStatisticsKHR", {kFuncTypeDev, (void*)GetPipelineExecutableStatisticsKHR}},
+    {"vkGetPipelineExecutableInternalRepresentationsKHR", {kFuncTypeDev, (void*)GetPipelineExecutableInternalRepresentationsKHR}},
+    {"vkCreateDebugReportCallbackEXT", {kFuncTypeInst, (void*)CreateDebugReportCallbackEXT}},
+    {"vkDestroyDebugReportCallbackEXT", {kFuncTypeInst, (void*)DestroyDebugReportCallbackEXT}},
+    {"vkDebugReportMessageEXT", {kFuncTypeInst, (void*)DebugReportMessageEXT}},
+    {"vkDebugMarkerSetObjectTagEXT", {kFuncTypeDev, (void*)DebugMarkerSetObjectTagEXT}},
+    {"vkDebugMarkerSetObjectNameEXT", {kFuncTypeDev, (void*)DebugMarkerSetObjectNameEXT}},
+    {"vkCmdDebugMarkerBeginEXT", {kFuncTypeDev, (void*)CmdDebugMarkerBeginEXT}},
+    {"vkCmdDebugMarkerEndEXT", {kFuncTypeDev, (void*)CmdDebugMarkerEndEXT}},
+    {"vkCmdDebugMarkerInsertEXT", {kFuncTypeDev, (void*)CmdDebugMarkerInsertEXT}},
+    {"vkCmdBindTransformFeedbackBuffersEXT", {kFuncTypeDev, (void*)CmdBindTransformFeedbackBuffersEXT}},
+    {"vkCmdBeginTransformFeedbackEXT", {kFuncTypeDev, (void*)CmdBeginTransformFeedbackEXT}},
+    {"vkCmdEndTransformFeedbackEXT", {kFuncTypeDev, (void*)CmdEndTransformFeedbackEXT}},
+    {"vkCmdBeginQueryIndexedEXT", {kFuncTypeDev, (void*)CmdBeginQueryIndexedEXT}},
+    {"vkCmdEndQueryIndexedEXT", {kFuncTypeDev, (void*)CmdEndQueryIndexedEXT}},
+    {"vkCmdDrawIndirectByteCountEXT", {kFuncTypeDev, (void*)CmdDrawIndirectByteCountEXT}},
+    {"vkGetImageViewHandleNVX", {kFuncTypeDev, (void*)GetImageViewHandleNVX}},
+    {"vkCmdDrawIndirectCountAMD", {kFuncTypeDev, (void*)CmdDrawIndirectCountAMD}},
+    {"vkCmdDrawIndexedIndirectCountAMD", {kFuncTypeDev, (void*)CmdDrawIndexedIndirectCountAMD}},
+    {"vkGetShaderInfoAMD", {kFuncTypeDev, (void*)GetShaderInfoAMD}},
 #ifdef VK_USE_PLATFORM_GGP
-    {"vkCreateStreamDescriptorSurfaceGGP", {true, (void*)CreateStreamDescriptorSurfaceGGP}},
+    {"vkCreateStreamDescriptorSurfaceGGP", {kFuncTypeInst, (void*)CreateStreamDescriptorSurfaceGGP}},
 #endif
-    {"vkGetPhysicalDeviceExternalImageFormatPropertiesNV", {true, (void*)GetPhysicalDeviceExternalImageFormatPropertiesNV}},
+    {"vkGetPhysicalDeviceExternalImageFormatPropertiesNV", {kFuncTypePdev, (void*)GetPhysicalDeviceExternalImageFormatPropertiesNV}},
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetMemoryWin32HandleNV", {false, (void*)GetMemoryWin32HandleNV}},
+    {"vkGetMemoryWin32HandleNV", {kFuncTypeDev, (void*)GetMemoryWin32HandleNV}},
 #endif
 #ifdef VK_USE_PLATFORM_VI_NN
-    {"vkCreateViSurfaceNN", {true, (void*)CreateViSurfaceNN}},
+    {"vkCreateViSurfaceNN", {kFuncTypeInst, (void*)CreateViSurfaceNN}},
 #endif
-    {"vkCmdBeginConditionalRenderingEXT", {false, (void*)CmdBeginConditionalRenderingEXT}},
-    {"vkCmdEndConditionalRenderingEXT", {false, (void*)CmdEndConditionalRenderingEXT}},
-    {"vkCmdProcessCommandsNVX", {false, (void*)CmdProcessCommandsNVX}},
-    {"vkCmdReserveSpaceForCommandsNVX", {false, (void*)CmdReserveSpaceForCommandsNVX}},
-    {"vkCreateIndirectCommandsLayoutNVX", {false, (void*)CreateIndirectCommandsLayoutNVX}},
-    {"vkDestroyIndirectCommandsLayoutNVX", {false, (void*)DestroyIndirectCommandsLayoutNVX}},
-    {"vkCreateObjectTableNVX", {false, (void*)CreateObjectTableNVX}},
-    {"vkDestroyObjectTableNVX", {false, (void*)DestroyObjectTableNVX}},
-    {"vkRegisterObjectsNVX", {false, (void*)RegisterObjectsNVX}},
-    {"vkUnregisterObjectsNVX", {false, (void*)UnregisterObjectsNVX}},
-    {"vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX", {true, (void*)GetPhysicalDeviceGeneratedCommandsPropertiesNVX}},
-    {"vkCmdSetViewportWScalingNV", {false, (void*)CmdSetViewportWScalingNV}},
-    {"vkReleaseDisplayEXT", {true, (void*)ReleaseDisplayEXT}},
+    {"vkCmdBeginConditionalRenderingEXT", {kFuncTypeDev, (void*)CmdBeginConditionalRenderingEXT}},
+    {"vkCmdEndConditionalRenderingEXT", {kFuncTypeDev, (void*)CmdEndConditionalRenderingEXT}},
+    {"vkCmdProcessCommandsNVX", {kFuncTypeDev, (void*)CmdProcessCommandsNVX}},
+    {"vkCmdReserveSpaceForCommandsNVX", {kFuncTypeDev, (void*)CmdReserveSpaceForCommandsNVX}},
+    {"vkCreateIndirectCommandsLayoutNVX", {kFuncTypeDev, (void*)CreateIndirectCommandsLayoutNVX}},
+    {"vkDestroyIndirectCommandsLayoutNVX", {kFuncTypeDev, (void*)DestroyIndirectCommandsLayoutNVX}},
+    {"vkCreateObjectTableNVX", {kFuncTypeDev, (void*)CreateObjectTableNVX}},
+    {"vkDestroyObjectTableNVX", {kFuncTypeDev, (void*)DestroyObjectTableNVX}},
+    {"vkRegisterObjectsNVX", {kFuncTypeDev, (void*)RegisterObjectsNVX}},
+    {"vkUnregisterObjectsNVX", {kFuncTypeDev, (void*)UnregisterObjectsNVX}},
+    {"vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX", {kFuncTypePdev, (void*)GetPhysicalDeviceGeneratedCommandsPropertiesNVX}},
+    {"vkCmdSetViewportWScalingNV", {kFuncTypeDev, (void*)CmdSetViewportWScalingNV}},
+    {"vkReleaseDisplayEXT", {kFuncTypePdev, (void*)ReleaseDisplayEXT}},
 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
-    {"vkAcquireXlibDisplayEXT", {true, (void*)AcquireXlibDisplayEXT}},
+    {"vkAcquireXlibDisplayEXT", {kFuncTypePdev, (void*)AcquireXlibDisplayEXT}},
 #endif
 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
-    {"vkGetRandROutputDisplayEXT", {true, (void*)GetRandROutputDisplayEXT}},
+    {"vkGetRandROutputDisplayEXT", {kFuncTypePdev, (void*)GetRandROutputDisplayEXT}},
 #endif
-    {"vkGetPhysicalDeviceSurfaceCapabilities2EXT", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2EXT}},
-    {"vkDisplayPowerControlEXT", {false, (void*)DisplayPowerControlEXT}},
-    {"vkRegisterDeviceEventEXT", {false, (void*)RegisterDeviceEventEXT}},
-    {"vkRegisterDisplayEventEXT", {false, (void*)RegisterDisplayEventEXT}},
-    {"vkGetSwapchainCounterEXT", {false, (void*)GetSwapchainCounterEXT}},
-    {"vkGetRefreshCycleDurationGOOGLE", {false, (void*)GetRefreshCycleDurationGOOGLE}},
-    {"vkGetPastPresentationTimingGOOGLE", {false, (void*)GetPastPresentationTimingGOOGLE}},
-    {"vkCmdSetDiscardRectangleEXT", {false, (void*)CmdSetDiscardRectangleEXT}},
-    {"vkSetHdrMetadataEXT", {false, (void*)SetHdrMetadataEXT}},
+    {"vkGetPhysicalDeviceSurfaceCapabilities2EXT", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfaceCapabilities2EXT}},
+    {"vkDisplayPowerControlEXT", {kFuncTypeDev, (void*)DisplayPowerControlEXT}},
+    {"vkRegisterDeviceEventEXT", {kFuncTypeDev, (void*)RegisterDeviceEventEXT}},
+    {"vkRegisterDisplayEventEXT", {kFuncTypeDev, (void*)RegisterDisplayEventEXT}},
+    {"vkGetSwapchainCounterEXT", {kFuncTypeDev, (void*)GetSwapchainCounterEXT}},
+    {"vkGetRefreshCycleDurationGOOGLE", {kFuncTypeDev, (void*)GetRefreshCycleDurationGOOGLE}},
+    {"vkGetPastPresentationTimingGOOGLE", {kFuncTypeDev, (void*)GetPastPresentationTimingGOOGLE}},
+    {"vkCmdSetDiscardRectangleEXT", {kFuncTypeDev, (void*)CmdSetDiscardRectangleEXT}},
+    {"vkSetHdrMetadataEXT", {kFuncTypeDev, (void*)SetHdrMetadataEXT}},
 #ifdef VK_USE_PLATFORM_IOS_MVK
-    {"vkCreateIOSSurfaceMVK", {true, (void*)CreateIOSSurfaceMVK}},
+    {"vkCreateIOSSurfaceMVK", {kFuncTypeInst, (void*)CreateIOSSurfaceMVK}},
 #endif
 #ifdef VK_USE_PLATFORM_MACOS_MVK
-    {"vkCreateMacOSSurfaceMVK", {true, (void*)CreateMacOSSurfaceMVK}},
+    {"vkCreateMacOSSurfaceMVK", {kFuncTypeInst, (void*)CreateMacOSSurfaceMVK}},
 #endif
-    {"vkSetDebugUtilsObjectNameEXT", {false, (void*)SetDebugUtilsObjectNameEXT}},
-    {"vkSetDebugUtilsObjectTagEXT", {false, (void*)SetDebugUtilsObjectTagEXT}},
-    {"vkQueueBeginDebugUtilsLabelEXT", {false, (void*)QueueBeginDebugUtilsLabelEXT}},
-    {"vkQueueEndDebugUtilsLabelEXT", {false, (void*)QueueEndDebugUtilsLabelEXT}},
-    {"vkQueueInsertDebugUtilsLabelEXT", {false, (void*)QueueInsertDebugUtilsLabelEXT}},
-    {"vkCmdBeginDebugUtilsLabelEXT", {false, (void*)CmdBeginDebugUtilsLabelEXT}},
-    {"vkCmdEndDebugUtilsLabelEXT", {false, (void*)CmdEndDebugUtilsLabelEXT}},
-    {"vkCmdInsertDebugUtilsLabelEXT", {false, (void*)CmdInsertDebugUtilsLabelEXT}},
-    {"vkCreateDebugUtilsMessengerEXT", {true, (void*)CreateDebugUtilsMessengerEXT}},
-    {"vkDestroyDebugUtilsMessengerEXT", {true, (void*)DestroyDebugUtilsMessengerEXT}},
-    {"vkSubmitDebugUtilsMessageEXT", {true, (void*)SubmitDebugUtilsMessageEXT}},
+    {"vkSetDebugUtilsObjectNameEXT", {kFuncTypeDev, (void*)SetDebugUtilsObjectNameEXT}},
+    {"vkSetDebugUtilsObjectTagEXT", {kFuncTypeDev, (void*)SetDebugUtilsObjectTagEXT}},
+    {"vkQueueBeginDebugUtilsLabelEXT", {kFuncTypeDev, (void*)QueueBeginDebugUtilsLabelEXT}},
+    {"vkQueueEndDebugUtilsLabelEXT", {kFuncTypeDev, (void*)QueueEndDebugUtilsLabelEXT}},
+    {"vkQueueInsertDebugUtilsLabelEXT", {kFuncTypeDev, (void*)QueueInsertDebugUtilsLabelEXT}},
+    {"vkCmdBeginDebugUtilsLabelEXT", {kFuncTypeDev, (void*)CmdBeginDebugUtilsLabelEXT}},
+    {"vkCmdEndDebugUtilsLabelEXT", {kFuncTypeDev, (void*)CmdEndDebugUtilsLabelEXT}},
+    {"vkCmdInsertDebugUtilsLabelEXT", {kFuncTypeDev, (void*)CmdInsertDebugUtilsLabelEXT}},
+    {"vkCreateDebugUtilsMessengerEXT", {kFuncTypeInst, (void*)CreateDebugUtilsMessengerEXT}},
+    {"vkDestroyDebugUtilsMessengerEXT", {kFuncTypeInst, (void*)DestroyDebugUtilsMessengerEXT}},
+    {"vkSubmitDebugUtilsMessageEXT", {kFuncTypeInst, (void*)SubmitDebugUtilsMessageEXT}},
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-    {"vkGetAndroidHardwareBufferPropertiesANDROID", {false, (void*)GetAndroidHardwareBufferPropertiesANDROID}},
+    {"vkGetAndroidHardwareBufferPropertiesANDROID", {kFuncTypeDev, (void*)GetAndroidHardwareBufferPropertiesANDROID}},
 #endif
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-    {"vkGetMemoryAndroidHardwareBufferANDROID", {false, (void*)GetMemoryAndroidHardwareBufferANDROID}},
+    {"vkGetMemoryAndroidHardwareBufferANDROID", {kFuncTypeDev, (void*)GetMemoryAndroidHardwareBufferANDROID}},
 #endif
-    {"vkCmdSetSampleLocationsEXT", {false, (void*)CmdSetSampleLocationsEXT}},
-    {"vkGetPhysicalDeviceMultisamplePropertiesEXT", {true, (void*)GetPhysicalDeviceMultisamplePropertiesEXT}},
-    {"vkGetImageDrmFormatModifierPropertiesEXT", {false, (void*)GetImageDrmFormatModifierPropertiesEXT}},
-    {"vkCreateValidationCacheEXT", {false, (void*)CreateValidationCacheEXT}},
-    {"vkDestroyValidationCacheEXT", {false, (void*)DestroyValidationCacheEXT}},
-    {"vkMergeValidationCachesEXT", {false, (void*)MergeValidationCachesEXT}},
-    {"vkGetValidationCacheDataEXT", {false, (void*)GetValidationCacheDataEXT}},
-    {"vkCmdBindShadingRateImageNV", {false, (void*)CmdBindShadingRateImageNV}},
-    {"vkCmdSetViewportShadingRatePaletteNV", {false, (void*)CmdSetViewportShadingRatePaletteNV}},
-    {"vkCmdSetCoarseSampleOrderNV", {false, (void*)CmdSetCoarseSampleOrderNV}},
-    {"vkCreateAccelerationStructureNV", {false, (void*)CreateAccelerationStructureNV}},
-    {"vkDestroyAccelerationStructureNV", {false, (void*)DestroyAccelerationStructureNV}},
-    {"vkGetAccelerationStructureMemoryRequirementsNV", {false, (void*)GetAccelerationStructureMemoryRequirementsNV}},
-    {"vkBindAccelerationStructureMemoryNV", {false, (void*)BindAccelerationStructureMemoryNV}},
-    {"vkCmdBuildAccelerationStructureNV", {false, (void*)CmdBuildAccelerationStructureNV}},
-    {"vkCmdCopyAccelerationStructureNV", {false, (void*)CmdCopyAccelerationStructureNV}},
-    {"vkCmdTraceRaysNV", {false, (void*)CmdTraceRaysNV}},
-    {"vkCreateRayTracingPipelinesNV", {false, (void*)CreateRayTracingPipelinesNV}},
-    {"vkGetRayTracingShaderGroupHandlesNV", {false, (void*)GetRayTracingShaderGroupHandlesNV}},
-    {"vkGetAccelerationStructureHandleNV", {false, (void*)GetAccelerationStructureHandleNV}},
-    {"vkCmdWriteAccelerationStructuresPropertiesNV", {false, (void*)CmdWriteAccelerationStructuresPropertiesNV}},
-    {"vkCompileDeferredNV", {false, (void*)CompileDeferredNV}},
-    {"vkGetMemoryHostPointerPropertiesEXT", {false, (void*)GetMemoryHostPointerPropertiesEXT}},
-    {"vkCmdWriteBufferMarkerAMD", {false, (void*)CmdWriteBufferMarkerAMD}},
-    {"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", {true, (void*)GetPhysicalDeviceCalibrateableTimeDomainsEXT}},
-    {"vkGetCalibratedTimestampsEXT", {false, (void*)GetCalibratedTimestampsEXT}},
-    {"vkCmdDrawMeshTasksNV", {false, (void*)CmdDrawMeshTasksNV}},
-    {"vkCmdDrawMeshTasksIndirectNV", {false, (void*)CmdDrawMeshTasksIndirectNV}},
-    {"vkCmdDrawMeshTasksIndirectCountNV", {false, (void*)CmdDrawMeshTasksIndirectCountNV}},
-    {"vkCmdSetExclusiveScissorNV", {false, (void*)CmdSetExclusiveScissorNV}},
-    {"vkCmdSetCheckpointNV", {false, (void*)CmdSetCheckpointNV}},
-    {"vkGetQueueCheckpointDataNV", {false, (void*)GetQueueCheckpointDataNV}},
-    {"vkInitializePerformanceApiINTEL", {false, (void*)InitializePerformanceApiINTEL}},
-    {"vkUninitializePerformanceApiINTEL", {false, (void*)UninitializePerformanceApiINTEL}},
-    {"vkCmdSetPerformanceMarkerINTEL", {false, (void*)CmdSetPerformanceMarkerINTEL}},
-    {"vkCmdSetPerformanceStreamMarkerINTEL", {false, (void*)CmdSetPerformanceStreamMarkerINTEL}},
-    {"vkCmdSetPerformanceOverrideINTEL", {false, (void*)CmdSetPerformanceOverrideINTEL}},
-    {"vkAcquirePerformanceConfigurationINTEL", {false, (void*)AcquirePerformanceConfigurationINTEL}},
-    {"vkReleasePerformanceConfigurationINTEL", {false, (void*)ReleasePerformanceConfigurationINTEL}},
-    {"vkQueueSetPerformanceConfigurationINTEL", {false, (void*)QueueSetPerformanceConfigurationINTEL}},
-    {"vkGetPerformanceParameterINTEL", {false, (void*)GetPerformanceParameterINTEL}},
-    {"vkSetLocalDimmingAMD", {false, (void*)SetLocalDimmingAMD}},
+    {"vkCmdSetSampleLocationsEXT", {kFuncTypeDev, (void*)CmdSetSampleLocationsEXT}},
+    {"vkGetPhysicalDeviceMultisamplePropertiesEXT", {kFuncTypePdev, (void*)GetPhysicalDeviceMultisamplePropertiesEXT}},
+    {"vkGetImageDrmFormatModifierPropertiesEXT", {kFuncTypeDev, (void*)GetImageDrmFormatModifierPropertiesEXT}},
+    {"vkCreateValidationCacheEXT", {kFuncTypeDev, (void*)CreateValidationCacheEXT}},
+    {"vkDestroyValidationCacheEXT", {kFuncTypeDev, (void*)DestroyValidationCacheEXT}},
+    {"vkMergeValidationCachesEXT", {kFuncTypeDev, (void*)MergeValidationCachesEXT}},
+    {"vkGetValidationCacheDataEXT", {kFuncTypeDev, (void*)GetValidationCacheDataEXT}},
+    {"vkCmdBindShadingRateImageNV", {kFuncTypeDev, (void*)CmdBindShadingRateImageNV}},
+    {"vkCmdSetViewportShadingRatePaletteNV", {kFuncTypeDev, (void*)CmdSetViewportShadingRatePaletteNV}},
+    {"vkCmdSetCoarseSampleOrderNV", {kFuncTypeDev, (void*)CmdSetCoarseSampleOrderNV}},
+    {"vkCreateAccelerationStructureNV", {kFuncTypeDev, (void*)CreateAccelerationStructureNV}},
+    {"vkDestroyAccelerationStructureNV", {kFuncTypeDev, (void*)DestroyAccelerationStructureNV}},
+    {"vkGetAccelerationStructureMemoryRequirementsNV", {kFuncTypeDev, (void*)GetAccelerationStructureMemoryRequirementsNV}},
+    {"vkBindAccelerationStructureMemoryNV", {kFuncTypeDev, (void*)BindAccelerationStructureMemoryNV}},
+    {"vkCmdBuildAccelerationStructureNV", {kFuncTypeDev, (void*)CmdBuildAccelerationStructureNV}},
+    {"vkCmdCopyAccelerationStructureNV", {kFuncTypeDev, (void*)CmdCopyAccelerationStructureNV}},
+    {"vkCmdTraceRaysNV", {kFuncTypeDev, (void*)CmdTraceRaysNV}},
+    {"vkCreateRayTracingPipelinesNV", {kFuncTypeDev, (void*)CreateRayTracingPipelinesNV}},
+    {"vkGetRayTracingShaderGroupHandlesNV", {kFuncTypeDev, (void*)GetRayTracingShaderGroupHandlesNV}},
+    {"vkGetAccelerationStructureHandleNV", {kFuncTypeDev, (void*)GetAccelerationStructureHandleNV}},
+    {"vkCmdWriteAccelerationStructuresPropertiesNV", {kFuncTypeDev, (void*)CmdWriteAccelerationStructuresPropertiesNV}},
+    {"vkCompileDeferredNV", {kFuncTypeDev, (void*)CompileDeferredNV}},
+    {"vkGetMemoryHostPointerPropertiesEXT", {kFuncTypeDev, (void*)GetMemoryHostPointerPropertiesEXT}},
+    {"vkCmdWriteBufferMarkerAMD", {kFuncTypeDev, (void*)CmdWriteBufferMarkerAMD}},
+    {"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", {kFuncTypePdev, (void*)GetPhysicalDeviceCalibrateableTimeDomainsEXT}},
+    {"vkGetCalibratedTimestampsEXT", {kFuncTypeDev, (void*)GetCalibratedTimestampsEXT}},
+    {"vkCmdDrawMeshTasksNV", {kFuncTypeDev, (void*)CmdDrawMeshTasksNV}},
+    {"vkCmdDrawMeshTasksIndirectNV", {kFuncTypeDev, (void*)CmdDrawMeshTasksIndirectNV}},
+    {"vkCmdDrawMeshTasksIndirectCountNV", {kFuncTypeDev, (void*)CmdDrawMeshTasksIndirectCountNV}},
+    {"vkCmdSetExclusiveScissorNV", {kFuncTypeDev, (void*)CmdSetExclusiveScissorNV}},
+    {"vkCmdSetCheckpointNV", {kFuncTypeDev, (void*)CmdSetCheckpointNV}},
+    {"vkGetQueueCheckpointDataNV", {kFuncTypeDev, (void*)GetQueueCheckpointDataNV}},
+    {"vkInitializePerformanceApiINTEL", {kFuncTypeDev, (void*)InitializePerformanceApiINTEL}},
+    {"vkUninitializePerformanceApiINTEL", {kFuncTypeDev, (void*)UninitializePerformanceApiINTEL}},
+    {"vkCmdSetPerformanceMarkerINTEL", {kFuncTypeDev, (void*)CmdSetPerformanceMarkerINTEL}},
+    {"vkCmdSetPerformanceStreamMarkerINTEL", {kFuncTypeDev, (void*)CmdSetPerformanceStreamMarkerINTEL}},
+    {"vkCmdSetPerformanceOverrideINTEL", {kFuncTypeDev, (void*)CmdSetPerformanceOverrideINTEL}},
+    {"vkAcquirePerformanceConfigurationINTEL", {kFuncTypeDev, (void*)AcquirePerformanceConfigurationINTEL}},
+    {"vkReleasePerformanceConfigurationINTEL", {kFuncTypeDev, (void*)ReleasePerformanceConfigurationINTEL}},
+    {"vkQueueSetPerformanceConfigurationINTEL", {kFuncTypeDev, (void*)QueueSetPerformanceConfigurationINTEL}},
+    {"vkGetPerformanceParameterINTEL", {kFuncTypeDev, (void*)GetPerformanceParameterINTEL}},
+    {"vkSetLocalDimmingAMD", {kFuncTypeDev, (void*)SetLocalDimmingAMD}},
 #ifdef VK_USE_PLATFORM_FUCHSIA
-    {"vkCreateImagePipeSurfaceFUCHSIA", {true, (void*)CreateImagePipeSurfaceFUCHSIA}},
+    {"vkCreateImagePipeSurfaceFUCHSIA", {kFuncTypeInst, (void*)CreateImagePipeSurfaceFUCHSIA}},
 #endif
 #ifdef VK_USE_PLATFORM_METAL_EXT
-    {"vkCreateMetalSurfaceEXT", {true, (void*)CreateMetalSurfaceEXT}},
+    {"vkCreateMetalSurfaceEXT", {kFuncTypeInst, (void*)CreateMetalSurfaceEXT}},
 #endif
-    {"vkGetBufferDeviceAddressEXT", {false, (void*)GetBufferDeviceAddressEXT}},
-    {"vkGetPhysicalDeviceToolPropertiesEXT", {true, (void*)GetPhysicalDeviceToolPropertiesEXT}},
-    {"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", {true, (void*)GetPhysicalDeviceCooperativeMatrixPropertiesNV}},
-    {"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", {true, (void*)GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV}},
+    {"vkGetBufferDeviceAddressEXT", {kFuncTypeDev, (void*)GetBufferDeviceAddressEXT}},
+    {"vkGetPhysicalDeviceToolPropertiesEXT", {kFuncTypePdev, (void*)GetPhysicalDeviceToolPropertiesEXT}},
+    {"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", {kFuncTypePdev, (void*)GetPhysicalDeviceCooperativeMatrixPropertiesNV}},
+    {"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", {kFuncTypePdev, (void*)GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV}},
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetPhysicalDeviceSurfacePresentModes2EXT", {true, (void*)GetPhysicalDeviceSurfacePresentModes2EXT}},
+    {"vkGetPhysicalDeviceSurfacePresentModes2EXT", {kFuncTypePdev, (void*)GetPhysicalDeviceSurfacePresentModes2EXT}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkAcquireFullScreenExclusiveModeEXT", {false, (void*)AcquireFullScreenExclusiveModeEXT}},
+    {"vkAcquireFullScreenExclusiveModeEXT", {kFuncTypeDev, (void*)AcquireFullScreenExclusiveModeEXT}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkReleaseFullScreenExclusiveModeEXT", {false, (void*)ReleaseFullScreenExclusiveModeEXT}},
+    {"vkReleaseFullScreenExclusiveModeEXT", {kFuncTypeDev, (void*)ReleaseFullScreenExclusiveModeEXT}},
 #endif
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-    {"vkGetDeviceGroupSurfacePresentModes2EXT", {false, (void*)GetDeviceGroupSurfacePresentModes2EXT}},
+    {"vkGetDeviceGroupSurfacePresentModes2EXT", {kFuncTypeDev, (void*)GetDeviceGroupSurfacePresentModes2EXT}},
 #endif
-    {"vkCreateHeadlessSurfaceEXT", {true, (void*)CreateHeadlessSurfaceEXT}},
-    {"vkCmdSetLineStippleEXT", {false, (void*)CmdSetLineStippleEXT}},
-    {"vkResetQueryPoolEXT", {false, (void*)ResetQueryPoolEXT}},
+    {"vkCreateHeadlessSurfaceEXT", {kFuncTypeInst, (void*)CreateHeadlessSurfaceEXT}},
+    {"vkCmdSetLineStippleEXT", {kFuncTypeDev, (void*)CmdSetLineStippleEXT}},
+    {"vkResetQueryPoolEXT", {kFuncTypeDev, (void*)ResetQueryPoolEXT}},
 };
 
 
diff --git a/scripts/layer_chassis_generator.py b/scripts/layer_chassis_generator.py
index 4753a41..0f84ffb 100644
--- a/scripts/layer_chassis_generator.py
+++ b/scripts/layer_chassis_generator.py
@@ -494,8 +494,14 @@
     {VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_EXT_TOOLING_INFO_SPEC_VERSION}
 };
 
+typedef enum ApiFunctionType {
+    kFuncTypeInst = 0,
+    kFuncTypePdev = 1,
+    kFuncTypeDev = 2
+} ApiFunctionType;
+
 typedef struct {
-    bool is_instance_api;
+    ApiFunctionType function_type;
     void* funcptr;
 } function_data;
 
@@ -741,7 +747,7 @@
     }
     const auto &item = name_to_funcptr_map.find(funcName);
     if (item != name_to_funcptr_map.end()) {
-        if (item->second.is_instance_api) {
+        if (item->second.function_type != kFuncTypeDev) {
             return nullptr;
         } else {
             return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
@@ -766,7 +772,11 @@
 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) {
     const auto &item = name_to_funcptr_map.find(funcName);
     if (item != name_to_funcptr_map.end()) {
-        return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
+        if (item->second.function_type != kFuncTypePdev) {
+            return nullptr;
+        } else {
+            return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
+        }
     }
     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
     auto &table = layer_data->instance_dispatch_table;
@@ -1746,8 +1756,8 @@
     # Command generation
     def genCmd(self, cmdinfo, name, alias):
         ignore_functions = [
-        'vkEnumerateInstanceVersion',
-        ]
+            'vkEnumerateInstanceVersion',
+            ]
 
         if name in ignore_functions:
             return
@@ -1764,18 +1774,27 @@
                 self.layer_factory += '#endif\n'
             return
 
-        is_instance = 'false'
         dispatchable_type = cmdinfo.elem.find('param/type').text
-        if dispatchable_type in ["VkPhysicalDevice", "VkInstance"] or name == 'vkCreateInstance':
-            is_instance = 'true'
+        special_case_instance_APIs = [
+            'vkCreateInstance',
+            'vkEnumerateInstanceVersion',
+            'vkEnumerateInstanceLayerProperties',
+            'vkEnumerateInstanceExtensionProperties',
+            ]
+        if dispatchable_type == 'VkInstance' or name in special_case_instance_APIs:
+            function_type = 'kFuncTypeInst'
+        elif dispatchable_type == 'VkPhysicalDevice':
+            function_type = 'kFuncTypePdev'
+        else:
+            function_type = 'kFuncTypeDev'
 
         if name in self.manual_functions:
-            self.intercepts += [ '    {"%s", {%s, (void*)%s}},' % (name, is_instance, name[2:]) ]
+            self.intercepts += [ '    {"%s", {%s, (void*)%s}},' % (name, function_type, name[2:]) ]
             return
         # Record that the function will be intercepted
         if (self.featureExtraProtect != None):
             self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-        self.intercepts += [ '    {"%s", {%s, (void*)%s}},' % (name, is_instance, name[2:]) ]
+        self.intercepts += [ '    {"%s", {%s, (void*)%s}},' % (name, function_type, name[2:]) ]
         if (self.featureExtraProtect != None):
             self.intercepts += [ '#endif' ]
         OutputGenerator.genCmd(self, cmdinfo, name, alias)