Merge pull request #348 from billhollings/master

Align MoltenVK with Vulkan SDK 1.1.92
diff --git a/.gitignore b/.gitignore
index beed184..a213433 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,14 @@
 # MoltenVK specific
 Package/
 
+# MoltenVK Dependencies
+External/cereal
+External/glslang
+External/SPIRV-Cross
+External/Vulkan-Headers
+External/Vulkan-Tools
+External/VulkanSamples
+
 # Mac OS X Finder
 .DS_Store
 
@@ -14,14 +22,6 @@
 build/
 *.[oa]
 
-# Dependencies
-External/cereal
-External/glslang
-External/SPIRV-Cross
-External/Vulkan-Headers
-External/Vulkan-Tools
-External/VulkanSamples
-
 # Other source repository archive directories (protects when importing)
 .hg
 .svn
diff --git a/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.cpp b/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.cpp
deleted file mode 100644
index 96357d3..0000000
--- a/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.cpp
+++ /dev/null
@@ -1,525 +0,0 @@
-// This file is generated.
-#include "HelpersDispatchTable.h"
-
-namespace vk {
-
-PFN_vkCreateInstance CreateInstance;
-PFN_vkDestroyInstance DestroyInstance;
-PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
-PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
-PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
-PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
-PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
-PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
-PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
-PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
-PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
-PFN_vkCreateDevice CreateDevice;
-PFN_vkDestroyDevice DestroyDevice;
-PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
-PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
-PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
-PFN_vkGetDeviceQueue GetDeviceQueue;
-PFN_vkQueueSubmit QueueSubmit;
-PFN_vkQueueWaitIdle QueueWaitIdle;
-PFN_vkDeviceWaitIdle DeviceWaitIdle;
-PFN_vkAllocateMemory AllocateMemory;
-PFN_vkFreeMemory FreeMemory;
-PFN_vkMapMemory MapMemory;
-PFN_vkUnmapMemory UnmapMemory;
-PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
-PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
-PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
-PFN_vkBindBufferMemory BindBufferMemory;
-PFN_vkBindImageMemory BindImageMemory;
-PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
-PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
-PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
-PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
-PFN_vkQueueBindSparse QueueBindSparse;
-PFN_vkCreateFence CreateFence;
-PFN_vkDestroyFence DestroyFence;
-PFN_vkResetFences ResetFences;
-PFN_vkGetFenceStatus GetFenceStatus;
-PFN_vkWaitForFences WaitForFences;
-PFN_vkCreateSemaphore CreateSemaphore;
-PFN_vkDestroySemaphore DestroySemaphore;
-PFN_vkCreateEvent CreateEvent;
-PFN_vkDestroyEvent DestroyEvent;
-PFN_vkGetEventStatus GetEventStatus;
-PFN_vkSetEvent SetEvent;
-PFN_vkResetEvent ResetEvent;
-PFN_vkCreateQueryPool CreateQueryPool;
-PFN_vkDestroyQueryPool DestroyQueryPool;
-PFN_vkGetQueryPoolResults GetQueryPoolResults;
-PFN_vkCreateBuffer CreateBuffer;
-PFN_vkDestroyBuffer DestroyBuffer;
-PFN_vkCreateBufferView CreateBufferView;
-PFN_vkDestroyBufferView DestroyBufferView;
-PFN_vkCreateImage CreateImage;
-PFN_vkDestroyImage DestroyImage;
-PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
-PFN_vkCreateImageView CreateImageView;
-PFN_vkDestroyImageView DestroyImageView;
-PFN_vkCreateShaderModule CreateShaderModule;
-PFN_vkDestroyShaderModule DestroyShaderModule;
-PFN_vkCreatePipelineCache CreatePipelineCache;
-PFN_vkDestroyPipelineCache DestroyPipelineCache;
-PFN_vkGetPipelineCacheData GetPipelineCacheData;
-PFN_vkMergePipelineCaches MergePipelineCaches;
-PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
-PFN_vkCreateComputePipelines CreateComputePipelines;
-PFN_vkDestroyPipeline DestroyPipeline;
-PFN_vkCreatePipelineLayout CreatePipelineLayout;
-PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
-PFN_vkCreateSampler CreateSampler;
-PFN_vkDestroySampler DestroySampler;
-PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
-PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
-PFN_vkCreateDescriptorPool CreateDescriptorPool;
-PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
-PFN_vkResetDescriptorPool ResetDescriptorPool;
-PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
-PFN_vkFreeDescriptorSets FreeDescriptorSets;
-PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
-PFN_vkCreateFramebuffer CreateFramebuffer;
-PFN_vkDestroyFramebuffer DestroyFramebuffer;
-PFN_vkCreateRenderPass CreateRenderPass;
-PFN_vkDestroyRenderPass DestroyRenderPass;
-PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
-PFN_vkCreateCommandPool CreateCommandPool;
-PFN_vkDestroyCommandPool DestroyCommandPool;
-PFN_vkResetCommandPool ResetCommandPool;
-PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
-PFN_vkFreeCommandBuffers FreeCommandBuffers;
-PFN_vkBeginCommandBuffer BeginCommandBuffer;
-PFN_vkEndCommandBuffer EndCommandBuffer;
-PFN_vkResetCommandBuffer ResetCommandBuffer;
-PFN_vkCmdBindPipeline CmdBindPipeline;
-PFN_vkCmdSetViewport CmdSetViewport;
-PFN_vkCmdSetScissor CmdSetScissor;
-PFN_vkCmdSetLineWidth CmdSetLineWidth;
-PFN_vkCmdSetDepthBias CmdSetDepthBias;
-PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
-PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
-PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
-PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
-PFN_vkCmdSetStencilReference CmdSetStencilReference;
-PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
-PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
-PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
-PFN_vkCmdDraw CmdDraw;
-PFN_vkCmdDrawIndexed CmdDrawIndexed;
-PFN_vkCmdDrawIndirect CmdDrawIndirect;
-PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
-PFN_vkCmdDispatch CmdDispatch;
-PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
-PFN_vkCmdCopyBuffer CmdCopyBuffer;
-PFN_vkCmdCopyImage CmdCopyImage;
-PFN_vkCmdBlitImage CmdBlitImage;
-PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
-PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
-PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
-PFN_vkCmdFillBuffer CmdFillBuffer;
-PFN_vkCmdClearColorImage CmdClearColorImage;
-PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
-PFN_vkCmdClearAttachments CmdClearAttachments;
-PFN_vkCmdResolveImage CmdResolveImage;
-PFN_vkCmdSetEvent CmdSetEvent;
-PFN_vkCmdResetEvent CmdResetEvent;
-PFN_vkCmdWaitEvents CmdWaitEvents;
-PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
-PFN_vkCmdBeginQuery CmdBeginQuery;
-PFN_vkCmdEndQuery CmdEndQuery;
-PFN_vkCmdResetQueryPool CmdResetQueryPool;
-PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
-PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
-PFN_vkCmdPushConstants CmdPushConstants;
-PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
-PFN_vkCmdNextSubpass CmdNextSubpass;
-PFN_vkCmdEndRenderPass CmdEndRenderPass;
-PFN_vkCmdExecuteCommands CmdExecuteCommands;
-PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
-PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
-PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
-PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
-PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
-PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
-PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
-PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
-PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
-PFN_vkQueuePresentKHR QueuePresentKHR;
-PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
-PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
-PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
-PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
-PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
-PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
-PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
-PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
-PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
-PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
-PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
-PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_MIR_KHR
-PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
-PFN_vkGetPhysicalDeviceMirPresentationSupportKHR GetPhysicalDeviceMirPresentationSupportKHR;
-#endif
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
-#endif
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
-PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
-#endif
-PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
-PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
-PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
-
-void init_dispatch_table_top(PFN_vkGetInstanceProcAddr get_instance_proc_addr)
-{
-    GetInstanceProcAddr = get_instance_proc_addr;
-
-    CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(GetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance"));
-    EnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>(GetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceExtensionProperties"));
-    EnumerateInstanceLayerProperties = reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(GetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceLayerProperties"));
-}
-
-void init_dispatch_table_middle(VkInstance instance, bool include_bottom)
-{
-    GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(GetInstanceProcAddr(instance, "vkGetInstanceProcAddr"));
-
-    DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(GetInstanceProcAddr(instance, "vkDestroyInstance"));
-    EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(GetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices"));
-    GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures"));
-    GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties"));
-    GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
-    GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties"));
-    GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
-    GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceMemoryProperties"));
-    CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(GetInstanceProcAddr(instance, "vkCreateDevice"));
-    EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(GetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties"));
-    GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
-    DestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(GetInstanceProcAddr(instance, "vkDestroySurfaceKHR"));
-    GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
-    GetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
-    GetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
-    GetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfacePresentModesKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
-    GetPhysicalDeviceDisplayPropertiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceDisplayPropertiesKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR"));
-    GetPhysicalDeviceDisplayPlanePropertiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"));
-    GetDisplayPlaneSupportedDisplaysKHR = reinterpret_cast<PFN_vkGetDisplayPlaneSupportedDisplaysKHR>(GetInstanceProcAddr(instance, "vkGetDisplayPlaneSupportedDisplaysKHR"));
-    GetDisplayModePropertiesKHR = reinterpret_cast<PFN_vkGetDisplayModePropertiesKHR>(GetInstanceProcAddr(instance, "vkGetDisplayModePropertiesKHR"));
-    CreateDisplayModeKHR = reinterpret_cast<PFN_vkCreateDisplayModeKHR>(GetInstanceProcAddr(instance, "vkCreateDisplayModeKHR"));
-    GetDisplayPlaneCapabilitiesKHR = reinterpret_cast<PFN_vkGetDisplayPlaneCapabilitiesKHR>(GetInstanceProcAddr(instance, "vkGetDisplayPlaneCapabilitiesKHR"));
-    CreateDisplayPlaneSurfaceKHR = reinterpret_cast<PFN_vkCreateDisplayPlaneSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateDisplayPlaneSurfaceKHR"));
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-    CreateXlibSurfaceKHR = reinterpret_cast<PFN_vkCreateXlibSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-    GetPhysicalDeviceXlibPresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
-    CreateXcbSurfaceKHR = reinterpret_cast<PFN_vkCreateXcbSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_XCB_KHR
-    GetPhysicalDeviceXcbPresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-    CreateWaylandSurfaceKHR = reinterpret_cast<PFN_vkCreateWaylandSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateWaylandSurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-    GetPhysicalDeviceWaylandPresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_MIR_KHR
-    CreateMirSurfaceKHR = reinterpret_cast<PFN_vkCreateMirSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateMirSurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_MIR_KHR
-    GetPhysicalDeviceMirPresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceMirPresentationSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-    CreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-    CreateWin32SurfaceKHR = reinterpret_cast<PFN_vkCreateWin32SurfaceKHR>(GetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR"));
-#endif
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-    GetPhysicalDeviceWin32PresentationSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR>(GetInstanceProcAddr(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR"));
-#endif
-    CreateDebugReportCallbackEXT = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(GetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
-    DestroyDebugReportCallbackEXT = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(GetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
-    DebugReportMessageEXT = reinterpret_cast<PFN_vkDebugReportMessageEXT>(GetInstanceProcAddr(instance, "vkDebugReportMessageEXT"));
-
-    if (!include_bottom)
-        return;
-
-    GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(GetInstanceProcAddr(instance, "vkGetDeviceProcAddr"));
-    DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(GetInstanceProcAddr(instance, "vkDestroyDevice"));
-    GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(GetInstanceProcAddr(instance, "vkGetDeviceQueue"));
-    QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(GetInstanceProcAddr(instance, "vkQueueSubmit"));
-    QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(GetInstanceProcAddr(instance, "vkQueueWaitIdle"));
-    DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(GetInstanceProcAddr(instance, "vkDeviceWaitIdle"));
-    AllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(GetInstanceProcAddr(instance, "vkAllocateMemory"));
-    FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(GetInstanceProcAddr(instance, "vkFreeMemory"));
-    MapMemory = reinterpret_cast<PFN_vkMapMemory>(GetInstanceProcAddr(instance, "vkMapMemory"));
-    UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(GetInstanceProcAddr(instance, "vkUnmapMemory"));
-    FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(GetInstanceProcAddr(instance, "vkFlushMappedMemoryRanges"));
-    InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(GetInstanceProcAddr(instance, "vkInvalidateMappedMemoryRanges"));
-    GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(GetInstanceProcAddr(instance, "vkGetDeviceMemoryCommitment"));
-    BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(GetInstanceProcAddr(instance, "vkBindBufferMemory"));
-    BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(GetInstanceProcAddr(instance, "vkBindImageMemory"));
-    GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(GetInstanceProcAddr(instance, "vkGetBufferMemoryRequirements"));
-    GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(GetInstanceProcAddr(instance, "vkGetImageMemoryRequirements"));
-    GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(GetInstanceProcAddr(instance, "vkGetImageSparseMemoryRequirements"));
-    QueueBindSparse = reinterpret_cast<PFN_vkQueueBindSparse>(GetInstanceProcAddr(instance, "vkQueueBindSparse"));
-    CreateFence = reinterpret_cast<PFN_vkCreateFence>(GetInstanceProcAddr(instance, "vkCreateFence"));
-    DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(GetInstanceProcAddr(instance, "vkDestroyFence"));
-    ResetFences = reinterpret_cast<PFN_vkResetFences>(GetInstanceProcAddr(instance, "vkResetFences"));
-    GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(GetInstanceProcAddr(instance, "vkGetFenceStatus"));
-    WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(GetInstanceProcAddr(instance, "vkWaitForFences"));
-    CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(GetInstanceProcAddr(instance, "vkCreateSemaphore"));
-    DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(GetInstanceProcAddr(instance, "vkDestroySemaphore"));
-    CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(GetInstanceProcAddr(instance, "vkCreateEvent"));
-    DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(GetInstanceProcAddr(instance, "vkDestroyEvent"));
-    GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(GetInstanceProcAddr(instance, "vkGetEventStatus"));
-    SetEvent = reinterpret_cast<PFN_vkSetEvent>(GetInstanceProcAddr(instance, "vkSetEvent"));
-    ResetEvent = reinterpret_cast<PFN_vkResetEvent>(GetInstanceProcAddr(instance, "vkResetEvent"));
-    CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(GetInstanceProcAddr(instance, "vkCreateQueryPool"));
-    DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(GetInstanceProcAddr(instance, "vkDestroyQueryPool"));
-    GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(GetInstanceProcAddr(instance, "vkGetQueryPoolResults"));
-    CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(GetInstanceProcAddr(instance, "vkCreateBuffer"));
-    DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(GetInstanceProcAddr(instance, "vkDestroyBuffer"));
-    CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(GetInstanceProcAddr(instance, "vkCreateBufferView"));
-    DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(GetInstanceProcAddr(instance, "vkDestroyBufferView"));
-    CreateImage = reinterpret_cast<PFN_vkCreateImage>(GetInstanceProcAddr(instance, "vkCreateImage"));
-    DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(GetInstanceProcAddr(instance, "vkDestroyImage"));
-    GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(GetInstanceProcAddr(instance, "vkGetImageSubresourceLayout"));
-    CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(GetInstanceProcAddr(instance, "vkCreateImageView"));
-    DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(GetInstanceProcAddr(instance, "vkDestroyImageView"));
-    CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(GetInstanceProcAddr(instance, "vkCreateShaderModule"));
-    DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(GetInstanceProcAddr(instance, "vkDestroyShaderModule"));
-    CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(GetInstanceProcAddr(instance, "vkCreatePipelineCache"));
-    DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(GetInstanceProcAddr(instance, "vkDestroyPipelineCache"));
-    GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(GetInstanceProcAddr(instance, "vkGetPipelineCacheData"));
-    MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(GetInstanceProcAddr(instance, "vkMergePipelineCaches"));
-    CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(GetInstanceProcAddr(instance, "vkCreateGraphicsPipelines"));
-    CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(GetInstanceProcAddr(instance, "vkCreateComputePipelines"));
-    DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(GetInstanceProcAddr(instance, "vkDestroyPipeline"));
-    CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(GetInstanceProcAddr(instance, "vkCreatePipelineLayout"));
-    DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(GetInstanceProcAddr(instance, "vkDestroyPipelineLayout"));
-    CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(GetInstanceProcAddr(instance, "vkCreateSampler"));
-    DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(GetInstanceProcAddr(instance, "vkDestroySampler"));
-    CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(GetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout"));
-    DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(GetInstanceProcAddr(instance, "vkDestroyDescriptorSetLayout"));
-    CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(GetInstanceProcAddr(instance, "vkCreateDescriptorPool"));
-    DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(GetInstanceProcAddr(instance, "vkDestroyDescriptorPool"));
-    ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(GetInstanceProcAddr(instance, "vkResetDescriptorPool"));
-    AllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(GetInstanceProcAddr(instance, "vkAllocateDescriptorSets"));
-    FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(GetInstanceProcAddr(instance, "vkFreeDescriptorSets"));
-    UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(GetInstanceProcAddr(instance, "vkUpdateDescriptorSets"));
-    CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(GetInstanceProcAddr(instance, "vkCreateFramebuffer"));
-    DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(GetInstanceProcAddr(instance, "vkDestroyFramebuffer"));
-    CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(GetInstanceProcAddr(instance, "vkCreateRenderPass"));
-    DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(GetInstanceProcAddr(instance, "vkDestroyRenderPass"));
-    GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(GetInstanceProcAddr(instance, "vkGetRenderAreaGranularity"));
-    CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(GetInstanceProcAddr(instance, "vkCreateCommandPool"));
-    DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(GetInstanceProcAddr(instance, "vkDestroyCommandPool"));
-    ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(GetInstanceProcAddr(instance, "vkResetCommandPool"));
-    AllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(GetInstanceProcAddr(instance, "vkAllocateCommandBuffers"));
-    FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(GetInstanceProcAddr(instance, "vkFreeCommandBuffers"));
-    BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(GetInstanceProcAddr(instance, "vkBeginCommandBuffer"));
-    EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(GetInstanceProcAddr(instance, "vkEndCommandBuffer"));
-    ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(GetInstanceProcAddr(instance, "vkResetCommandBuffer"));
-    CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(GetInstanceProcAddr(instance, "vkCmdBindPipeline"));
-    CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(GetInstanceProcAddr(instance, "vkCmdSetViewport"));
-    CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(GetInstanceProcAddr(instance, "vkCmdSetScissor"));
-    CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(GetInstanceProcAddr(instance, "vkCmdSetLineWidth"));
-    CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(GetInstanceProcAddr(instance, "vkCmdSetDepthBias"));
-    CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(GetInstanceProcAddr(instance, "vkCmdSetBlendConstants"));
-    CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(GetInstanceProcAddr(instance, "vkCmdSetDepthBounds"));
-    CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(GetInstanceProcAddr(instance, "vkCmdSetStencilCompareMask"));
-    CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(GetInstanceProcAddr(instance, "vkCmdSetStencilWriteMask"));
-    CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(GetInstanceProcAddr(instance, "vkCmdSetStencilReference"));
-    CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(GetInstanceProcAddr(instance, "vkCmdBindDescriptorSets"));
-    CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(GetInstanceProcAddr(instance, "vkCmdBindIndexBuffer"));
-    CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(GetInstanceProcAddr(instance, "vkCmdBindVertexBuffers"));
-    CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(GetInstanceProcAddr(instance, "vkCmdDraw"));
-    CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(GetInstanceProcAddr(instance, "vkCmdDrawIndexed"));
-    CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(GetInstanceProcAddr(instance, "vkCmdDrawIndirect"));
-    CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(GetInstanceProcAddr(instance, "vkCmdDrawIndexedIndirect"));
-    CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(GetInstanceProcAddr(instance, "vkCmdDispatch"));
-    CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(GetInstanceProcAddr(instance, "vkCmdDispatchIndirect"));
-    CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(GetInstanceProcAddr(instance, "vkCmdCopyBuffer"));
-    CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(GetInstanceProcAddr(instance, "vkCmdCopyImage"));
-    CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(GetInstanceProcAddr(instance, "vkCmdBlitImage"));
-    CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(GetInstanceProcAddr(instance, "vkCmdCopyBufferToImage"));
-    CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(GetInstanceProcAddr(instance, "vkCmdCopyImageToBuffer"));
-    CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(GetInstanceProcAddr(instance, "vkCmdUpdateBuffer"));
-    CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(GetInstanceProcAddr(instance, "vkCmdFillBuffer"));
-    CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(GetInstanceProcAddr(instance, "vkCmdClearColorImage"));
-    CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(GetInstanceProcAddr(instance, "vkCmdClearDepthStencilImage"));
-    CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(GetInstanceProcAddr(instance, "vkCmdClearAttachments"));
-    CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(GetInstanceProcAddr(instance, "vkCmdResolveImage"));
-    CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(GetInstanceProcAddr(instance, "vkCmdSetEvent"));
-    CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(GetInstanceProcAddr(instance, "vkCmdResetEvent"));
-    CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(GetInstanceProcAddr(instance, "vkCmdWaitEvents"));
-    CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(GetInstanceProcAddr(instance, "vkCmdPipelineBarrier"));
-    CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(GetInstanceProcAddr(instance, "vkCmdBeginQuery"));
-    CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(GetInstanceProcAddr(instance, "vkCmdEndQuery"));
-    CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(GetInstanceProcAddr(instance, "vkCmdResetQueryPool"));
-    CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(GetInstanceProcAddr(instance, "vkCmdWriteTimestamp"));
-    CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(GetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults"));
-    CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(GetInstanceProcAddr(instance, "vkCmdPushConstants"));
-    CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(GetInstanceProcAddr(instance, "vkCmdBeginRenderPass"));
-    CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(GetInstanceProcAddr(instance, "vkCmdNextSubpass"));
-    CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(GetInstanceProcAddr(instance, "vkCmdEndRenderPass"));
-    CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(GetInstanceProcAddr(instance, "vkCmdExecuteCommands"));
-    CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(GetInstanceProcAddr(instance, "vkCreateSwapchainKHR"));
-    DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(GetInstanceProcAddr(instance, "vkDestroySwapchainKHR"));
-    GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(GetInstanceProcAddr(instance, "vkGetSwapchainImagesKHR"));
-    AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(GetInstanceProcAddr(instance, "vkAcquireNextImageKHR"));
-    QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(GetInstanceProcAddr(instance, "vkQueuePresentKHR"));
-    CreateSharedSwapchainsKHR = reinterpret_cast<PFN_vkCreateSharedSwapchainsKHR>(GetInstanceProcAddr(instance, "vkCreateSharedSwapchainsKHR"));
-}
-
-void init_dispatch_table_bottom(VkInstance instance, VkDevice dev)
-{
-    GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(GetInstanceProcAddr(instance, "vkGetDeviceProcAddr"));
-    GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(GetDeviceProcAddr(dev, "vkGetDeviceProcAddr"));
-
-    DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(GetDeviceProcAddr(dev, "vkDestroyDevice"));
-    GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(GetDeviceProcAddr(dev, "vkGetDeviceQueue"));
-    QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(GetDeviceProcAddr(dev, "vkQueueSubmit"));
-    QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(GetDeviceProcAddr(dev, "vkQueueWaitIdle"));
-    DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(GetDeviceProcAddr(dev, "vkDeviceWaitIdle"));
-    AllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(GetDeviceProcAddr(dev, "vkAllocateMemory"));
-    FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(GetDeviceProcAddr(dev, "vkFreeMemory"));
-    MapMemory = reinterpret_cast<PFN_vkMapMemory>(GetDeviceProcAddr(dev, "vkMapMemory"));
-    UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(GetDeviceProcAddr(dev, "vkUnmapMemory"));
-    FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(GetDeviceProcAddr(dev, "vkFlushMappedMemoryRanges"));
-    InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(GetDeviceProcAddr(dev, "vkInvalidateMappedMemoryRanges"));
-    GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(GetDeviceProcAddr(dev, "vkGetDeviceMemoryCommitment"));
-    BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(GetDeviceProcAddr(dev, "vkBindBufferMemory"));
-    BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(GetDeviceProcAddr(dev, "vkBindImageMemory"));
-    GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(GetDeviceProcAddr(dev, "vkGetBufferMemoryRequirements"));
-    GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(GetDeviceProcAddr(dev, "vkGetImageMemoryRequirements"));
-    GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(GetDeviceProcAddr(dev, "vkGetImageSparseMemoryRequirements"));
-    QueueBindSparse = reinterpret_cast<PFN_vkQueueBindSparse>(GetDeviceProcAddr(dev, "vkQueueBindSparse"));
-    CreateFence = reinterpret_cast<PFN_vkCreateFence>(GetDeviceProcAddr(dev, "vkCreateFence"));
-    DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(GetDeviceProcAddr(dev, "vkDestroyFence"));
-    ResetFences = reinterpret_cast<PFN_vkResetFences>(GetDeviceProcAddr(dev, "vkResetFences"));
-    GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(GetDeviceProcAddr(dev, "vkGetFenceStatus"));
-    WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(GetDeviceProcAddr(dev, "vkWaitForFences"));
-    CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(GetDeviceProcAddr(dev, "vkCreateSemaphore"));
-    DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(GetDeviceProcAddr(dev, "vkDestroySemaphore"));
-    CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(GetDeviceProcAddr(dev, "vkCreateEvent"));
-    DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(GetDeviceProcAddr(dev, "vkDestroyEvent"));
-    GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(GetDeviceProcAddr(dev, "vkGetEventStatus"));
-    SetEvent = reinterpret_cast<PFN_vkSetEvent>(GetDeviceProcAddr(dev, "vkSetEvent"));
-    ResetEvent = reinterpret_cast<PFN_vkResetEvent>(GetDeviceProcAddr(dev, "vkResetEvent"));
-    CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(GetDeviceProcAddr(dev, "vkCreateQueryPool"));
-    DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(GetDeviceProcAddr(dev, "vkDestroyQueryPool"));
-    GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(GetDeviceProcAddr(dev, "vkGetQueryPoolResults"));
-    CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(GetDeviceProcAddr(dev, "vkCreateBuffer"));
-    DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(GetDeviceProcAddr(dev, "vkDestroyBuffer"));
-    CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(GetDeviceProcAddr(dev, "vkCreateBufferView"));
-    DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(GetDeviceProcAddr(dev, "vkDestroyBufferView"));
-    CreateImage = reinterpret_cast<PFN_vkCreateImage>(GetDeviceProcAddr(dev, "vkCreateImage"));
-    DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(GetDeviceProcAddr(dev, "vkDestroyImage"));
-    GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(GetDeviceProcAddr(dev, "vkGetImageSubresourceLayout"));
-    CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(GetDeviceProcAddr(dev, "vkCreateImageView"));
-    DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(GetDeviceProcAddr(dev, "vkDestroyImageView"));
-    CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(GetDeviceProcAddr(dev, "vkCreateShaderModule"));
-    DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(GetDeviceProcAddr(dev, "vkDestroyShaderModule"));
-    CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(GetDeviceProcAddr(dev, "vkCreatePipelineCache"));
-    DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(GetDeviceProcAddr(dev, "vkDestroyPipelineCache"));
-    GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(GetDeviceProcAddr(dev, "vkGetPipelineCacheData"));
-    MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(GetDeviceProcAddr(dev, "vkMergePipelineCaches"));
-    CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(GetDeviceProcAddr(dev, "vkCreateGraphicsPipelines"));
-    CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(GetDeviceProcAddr(dev, "vkCreateComputePipelines"));
-    DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(GetDeviceProcAddr(dev, "vkDestroyPipeline"));
-    CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(GetDeviceProcAddr(dev, "vkCreatePipelineLayout"));
-    DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(GetDeviceProcAddr(dev, "vkDestroyPipelineLayout"));
-    CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(GetDeviceProcAddr(dev, "vkCreateSampler"));
-    DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(GetDeviceProcAddr(dev, "vkDestroySampler"));
-    CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(GetDeviceProcAddr(dev, "vkCreateDescriptorSetLayout"));
-    DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(GetDeviceProcAddr(dev, "vkDestroyDescriptorSetLayout"));
-    CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(GetDeviceProcAddr(dev, "vkCreateDescriptorPool"));
-    DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(GetDeviceProcAddr(dev, "vkDestroyDescriptorPool"));
-    ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(GetDeviceProcAddr(dev, "vkResetDescriptorPool"));
-    AllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(GetDeviceProcAddr(dev, "vkAllocateDescriptorSets"));
-    FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(GetDeviceProcAddr(dev, "vkFreeDescriptorSets"));
-    UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(GetDeviceProcAddr(dev, "vkUpdateDescriptorSets"));
-    CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(GetDeviceProcAddr(dev, "vkCreateFramebuffer"));
-    DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(GetDeviceProcAddr(dev, "vkDestroyFramebuffer"));
-    CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(GetDeviceProcAddr(dev, "vkCreateRenderPass"));
-    DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(GetDeviceProcAddr(dev, "vkDestroyRenderPass"));
-    GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(GetDeviceProcAddr(dev, "vkGetRenderAreaGranularity"));
-    CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(GetDeviceProcAddr(dev, "vkCreateCommandPool"));
-    DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(GetDeviceProcAddr(dev, "vkDestroyCommandPool"));
-    ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(GetDeviceProcAddr(dev, "vkResetCommandPool"));
-    AllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(GetDeviceProcAddr(dev, "vkAllocateCommandBuffers"));
-    FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(GetDeviceProcAddr(dev, "vkFreeCommandBuffers"));
-    BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(GetDeviceProcAddr(dev, "vkBeginCommandBuffer"));
-    EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(GetDeviceProcAddr(dev, "vkEndCommandBuffer"));
-    ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(GetDeviceProcAddr(dev, "vkResetCommandBuffer"));
-    CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(GetDeviceProcAddr(dev, "vkCmdBindPipeline"));
-    CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(GetDeviceProcAddr(dev, "vkCmdSetViewport"));
-    CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(GetDeviceProcAddr(dev, "vkCmdSetScissor"));
-    CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(GetDeviceProcAddr(dev, "vkCmdSetLineWidth"));
-    CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(GetDeviceProcAddr(dev, "vkCmdSetDepthBias"));
-    CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(GetDeviceProcAddr(dev, "vkCmdSetBlendConstants"));
-    CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(GetDeviceProcAddr(dev, "vkCmdSetDepthBounds"));
-    CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(GetDeviceProcAddr(dev, "vkCmdSetStencilCompareMask"));
-    CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(GetDeviceProcAddr(dev, "vkCmdSetStencilWriteMask"));
-    CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(GetDeviceProcAddr(dev, "vkCmdSetStencilReference"));
-    CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(GetDeviceProcAddr(dev, "vkCmdBindDescriptorSets"));
-    CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(GetDeviceProcAddr(dev, "vkCmdBindIndexBuffer"));
-    CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(GetDeviceProcAddr(dev, "vkCmdBindVertexBuffers"));
-    CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(GetDeviceProcAddr(dev, "vkCmdDraw"));
-    CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(GetDeviceProcAddr(dev, "vkCmdDrawIndexed"));
-    CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(GetDeviceProcAddr(dev, "vkCmdDrawIndirect"));
-    CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(GetDeviceProcAddr(dev, "vkCmdDrawIndexedIndirect"));
-    CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(GetDeviceProcAddr(dev, "vkCmdDispatch"));
-    CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(GetDeviceProcAddr(dev, "vkCmdDispatchIndirect"));
-    CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(GetDeviceProcAddr(dev, "vkCmdCopyBuffer"));
-    CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(GetDeviceProcAddr(dev, "vkCmdCopyImage"));
-    CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(GetDeviceProcAddr(dev, "vkCmdBlitImage"));
-    CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(GetDeviceProcAddr(dev, "vkCmdCopyBufferToImage"));
-    CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(GetDeviceProcAddr(dev, "vkCmdCopyImageToBuffer"));
-    CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(GetDeviceProcAddr(dev, "vkCmdUpdateBuffer"));
-    CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(GetDeviceProcAddr(dev, "vkCmdFillBuffer"));
-    CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(GetDeviceProcAddr(dev, "vkCmdClearColorImage"));
-    CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(GetDeviceProcAddr(dev, "vkCmdClearDepthStencilImage"));
-    CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(GetDeviceProcAddr(dev, "vkCmdClearAttachments"));
-    CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(GetDeviceProcAddr(dev, "vkCmdResolveImage"));
-    CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(GetDeviceProcAddr(dev, "vkCmdSetEvent"));
-    CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(GetDeviceProcAddr(dev, "vkCmdResetEvent"));
-    CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(GetDeviceProcAddr(dev, "vkCmdWaitEvents"));
-    CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(GetDeviceProcAddr(dev, "vkCmdPipelineBarrier"));
-    CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(GetDeviceProcAddr(dev, "vkCmdBeginQuery"));
-    CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(GetDeviceProcAddr(dev, "vkCmdEndQuery"));
-    CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(GetDeviceProcAddr(dev, "vkCmdResetQueryPool"));
-    CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(GetDeviceProcAddr(dev, "vkCmdWriteTimestamp"));
-    CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(GetDeviceProcAddr(dev, "vkCmdCopyQueryPoolResults"));
-    CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(GetDeviceProcAddr(dev, "vkCmdPushConstants"));
-    CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(GetDeviceProcAddr(dev, "vkCmdBeginRenderPass"));
-    CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(GetDeviceProcAddr(dev, "vkCmdNextSubpass"));
-    CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(GetDeviceProcAddr(dev, "vkCmdEndRenderPass"));
-    CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(GetDeviceProcAddr(dev, "vkCmdExecuteCommands"));
-    CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(GetDeviceProcAddr(dev, "vkCreateSwapchainKHR"));
-    DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(GetDeviceProcAddr(dev, "vkDestroySwapchainKHR"));
-    GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(GetDeviceProcAddr(dev, "vkGetSwapchainImagesKHR"));
-    AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(GetDeviceProcAddr(dev, "vkAcquireNextImageKHR"));
-    QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(GetDeviceProcAddr(dev, "vkQueuePresentKHR"));
-    CreateSharedSwapchainsKHR = reinterpret_cast<PFN_vkCreateSharedSwapchainsKHR>(GetDeviceProcAddr(dev, "vkCreateSharedSwapchainsKHR"));
-}
-
-} // namespace vk
diff --git a/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.h b/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.h
deleted file mode 100644
index 78ef317..0000000
--- a/Demos/LunarG-VulkanSamples/Hologram/HelpersDispatchTable.h
+++ /dev/null
@@ -1,219 +0,0 @@
-// This file is generated.
-#ifndef HELPERSDISPATCHTABLE_H
-#define HELPERSDISPATCHTABLE_H
-
-#include <vulkan/vulkan.h>
-
-namespace vk {
-
-// VK_core
-extern PFN_vkCreateInstance CreateInstance;
-extern PFN_vkDestroyInstance DestroyInstance;
-extern PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
-extern PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
-extern PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
-extern PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
-extern PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
-extern PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
-extern PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
-extern PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
-extern PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
-extern PFN_vkCreateDevice CreateDevice;
-extern PFN_vkDestroyDevice DestroyDevice;
-extern PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
-extern PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
-extern PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
-extern PFN_vkGetDeviceQueue GetDeviceQueue;
-extern PFN_vkQueueSubmit QueueSubmit;
-extern PFN_vkQueueWaitIdle QueueWaitIdle;
-extern PFN_vkDeviceWaitIdle DeviceWaitIdle;
-extern PFN_vkAllocateMemory AllocateMemory;
-extern PFN_vkFreeMemory FreeMemory;
-extern PFN_vkMapMemory MapMemory;
-extern PFN_vkUnmapMemory UnmapMemory;
-extern PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
-extern PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
-extern PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
-extern PFN_vkBindBufferMemory BindBufferMemory;
-extern PFN_vkBindImageMemory BindImageMemory;
-extern PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
-extern PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
-extern PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
-extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
-extern PFN_vkQueueBindSparse QueueBindSparse;
-extern PFN_vkCreateFence CreateFence;
-extern PFN_vkDestroyFence DestroyFence;
-extern PFN_vkResetFences ResetFences;
-extern PFN_vkGetFenceStatus GetFenceStatus;
-extern PFN_vkWaitForFences WaitForFences;
-extern PFN_vkCreateSemaphore CreateSemaphore;
-extern PFN_vkDestroySemaphore DestroySemaphore;
-extern PFN_vkCreateEvent CreateEvent;
-extern PFN_vkDestroyEvent DestroyEvent;
-extern PFN_vkGetEventStatus GetEventStatus;
-extern PFN_vkSetEvent SetEvent;
-extern PFN_vkResetEvent ResetEvent;
-extern PFN_vkCreateQueryPool CreateQueryPool;
-extern PFN_vkDestroyQueryPool DestroyQueryPool;
-extern PFN_vkGetQueryPoolResults GetQueryPoolResults;
-extern PFN_vkCreateBuffer CreateBuffer;
-extern PFN_vkDestroyBuffer DestroyBuffer;
-extern PFN_vkCreateBufferView CreateBufferView;
-extern PFN_vkDestroyBufferView DestroyBufferView;
-extern PFN_vkCreateImage CreateImage;
-extern PFN_vkDestroyImage DestroyImage;
-extern PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
-extern PFN_vkCreateImageView CreateImageView;
-extern PFN_vkDestroyImageView DestroyImageView;
-extern PFN_vkCreateShaderModule CreateShaderModule;
-extern PFN_vkDestroyShaderModule DestroyShaderModule;
-extern PFN_vkCreatePipelineCache CreatePipelineCache;
-extern PFN_vkDestroyPipelineCache DestroyPipelineCache;
-extern PFN_vkGetPipelineCacheData GetPipelineCacheData;
-extern PFN_vkMergePipelineCaches MergePipelineCaches;
-extern PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
-extern PFN_vkCreateComputePipelines CreateComputePipelines;
-extern PFN_vkDestroyPipeline DestroyPipeline;
-extern PFN_vkCreatePipelineLayout CreatePipelineLayout;
-extern PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
-extern PFN_vkCreateSampler CreateSampler;
-extern PFN_vkDestroySampler DestroySampler;
-extern PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
-extern PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
-extern PFN_vkCreateDescriptorPool CreateDescriptorPool;
-extern PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
-extern PFN_vkResetDescriptorPool ResetDescriptorPool;
-extern PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
-extern PFN_vkFreeDescriptorSets FreeDescriptorSets;
-extern PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
-extern PFN_vkCreateFramebuffer CreateFramebuffer;
-extern PFN_vkDestroyFramebuffer DestroyFramebuffer;
-extern PFN_vkCreateRenderPass CreateRenderPass;
-extern PFN_vkDestroyRenderPass DestroyRenderPass;
-extern PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
-extern PFN_vkCreateCommandPool CreateCommandPool;
-extern PFN_vkDestroyCommandPool DestroyCommandPool;
-extern PFN_vkResetCommandPool ResetCommandPool;
-extern PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
-extern PFN_vkFreeCommandBuffers FreeCommandBuffers;
-extern PFN_vkBeginCommandBuffer BeginCommandBuffer;
-extern PFN_vkEndCommandBuffer EndCommandBuffer;
-extern PFN_vkResetCommandBuffer ResetCommandBuffer;
-extern PFN_vkCmdBindPipeline CmdBindPipeline;
-extern PFN_vkCmdSetViewport CmdSetViewport;
-extern PFN_vkCmdSetScissor CmdSetScissor;
-extern PFN_vkCmdSetLineWidth CmdSetLineWidth;
-extern PFN_vkCmdSetDepthBias CmdSetDepthBias;
-extern PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
-extern PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
-extern PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
-extern PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
-extern PFN_vkCmdSetStencilReference CmdSetStencilReference;
-extern PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
-extern PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
-extern PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
-extern PFN_vkCmdDraw CmdDraw;
-extern PFN_vkCmdDrawIndexed CmdDrawIndexed;
-extern PFN_vkCmdDrawIndirect CmdDrawIndirect;
-extern PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
-extern PFN_vkCmdDispatch CmdDispatch;
-extern PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
-extern PFN_vkCmdCopyBuffer CmdCopyBuffer;
-extern PFN_vkCmdCopyImage CmdCopyImage;
-extern PFN_vkCmdBlitImage CmdBlitImage;
-extern PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
-extern PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
-extern PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
-extern PFN_vkCmdFillBuffer CmdFillBuffer;
-extern PFN_vkCmdClearColorImage CmdClearColorImage;
-extern PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
-extern PFN_vkCmdClearAttachments CmdClearAttachments;
-extern PFN_vkCmdResolveImage CmdResolveImage;
-extern PFN_vkCmdSetEvent CmdSetEvent;
-extern PFN_vkCmdResetEvent CmdResetEvent;
-extern PFN_vkCmdWaitEvents CmdWaitEvents;
-extern PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
-extern PFN_vkCmdBeginQuery CmdBeginQuery;
-extern PFN_vkCmdEndQuery CmdEndQuery;
-extern PFN_vkCmdResetQueryPool CmdResetQueryPool;
-extern PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
-extern PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
-extern PFN_vkCmdPushConstants CmdPushConstants;
-extern PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
-extern PFN_vkCmdNextSubpass CmdNextSubpass;
-extern PFN_vkCmdEndRenderPass CmdEndRenderPass;
-extern PFN_vkCmdExecuteCommands CmdExecuteCommands;
-
-// VK_KHR_surface
-extern PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
-extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
-extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
-extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
-extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
-
-// VK_KHR_swapchain
-extern PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
-extern PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
-extern PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
-extern PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
-extern PFN_vkQueuePresentKHR QueuePresentKHR;
-
-// VK_KHR_display
-extern PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
-extern PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
-extern PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
-extern PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
-extern PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
-extern PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
-extern PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
-
-// VK_KHR_display_swapchain
-extern PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
-
-#ifdef VK_USE_PLATFORM_XLIB_KHR
-// VK_KHR_xlib_surface
-extern PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
-extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
-#endif
-
-#ifdef VK_USE_PLATFORM_XCB_KHR
-// VK_KHR_xcb_surface
-extern PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
-extern PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
-#endif
-
-#ifdef VK_USE_PLATFORM_WAYLAND_KHR
-// VK_KHR_wayland_surface
-extern PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
-extern PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
-#endif
-
-#ifdef VK_USE_PLATFORM_MIR_KHR
-// VK_KHR_mir_surface
-extern PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
-extern PFN_vkGetPhysicalDeviceMirPresentationSupportKHR GetPhysicalDeviceMirPresentationSupportKHR;
-#endif
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-// VK_KHR_android_surface
-extern PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
-#endif
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-// VK_KHR_win32_surface
-extern PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
-extern PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
-#endif
-
-// VK_EXT_debug_report
-extern PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
-extern PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
-extern PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
-
-void init_dispatch_table_top(PFN_vkGetInstanceProcAddr get_instance_proc_addr);
-void init_dispatch_table_middle(VkInstance instance, bool include_bottom);
-void init_dispatch_table_bottom(VkInstance instance, VkDevice dev);
-
-} // namespace vk
-
-#endif // HELPERSDISPATCHTABLE_H
diff --git a/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj b/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
index 1b654fc..95ef5bc 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
+++ b/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
@@ -91,8 +91,8 @@
 		A9C2AB98218503A400DDBC03 /* MoltenVKGLSLToSPIRVConverter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MoltenVKGLSLToSPIRVConverter.framework; path = ../../../MoltenVKShaderConverter/MoltenVKGLSLToSPIRVConverter/iOS/MoltenVKGLSLToSPIRVConverter.framework; sourceTree = "<group>"; };
 		A9C2AB9B218503BA00DDBC03 /* MoltenVKGLSLToSPIRVConverter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MoltenVKGLSLToSPIRVConverter.framework; path = ../../../MoltenVKShaderConverter/MoltenVKGLSLToSPIRVConverter/macOS/MoltenVKGLSLToSPIRVConverter.framework; sourceTree = "<group>"; };
 		A9C2AB9C218503BA00DDBC03 /* libMoltenVK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libMoltenVK.a; path = ../../../MoltenVK/macOS/static/libMoltenVK.a; sourceTree = "<group>"; };
-		A9D516F61CD575E300097D96 /* HelpersDispatchTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HelpersDispatchTable.cpp; sourceTree = SOURCE_ROOT; };
-		A9D516F71CD575E300097D96 /* HelpersDispatchTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelpersDispatchTable.h; sourceTree = SOURCE_ROOT; };
+		A9D516F61CD575E300097D96 /* HelpersDispatchTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HelpersDispatchTable.cpp; sourceTree = "<group>"; };
+		A9D516F71CD575E300097D96 /* HelpersDispatchTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HelpersDispatchTable.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -243,8 +243,6 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Hologram-iOS" */;
 			buildPhases = (
-				A99789D71CD41746005E7DAC /* ShellScript */,
-				A9006C4A1CDAB49000C6BC7B /* ShellScript */,
 				1D60588D0D05DD3D006BFB54 /* Resources */,
 				1D60588E0D05DD3D006BFB54 /* Sources */,
 				1D60588F0D05DD3D006BFB54 /* Frameworks */,
@@ -262,8 +260,6 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = A977BCFB1B66BB010067E5BF /* Build configuration list for PBXNativeTarget "Hologram-macOS" */;
 			buildPhases = (
-				A99789CD1CD3FFEB005E7DAC /* Run Script */,
-				A9D516F41CD5752C00097D96 /* ShellScript */,
 				A977BCBE1B66BB010067E5BF /* Resources */,
 				A977BCC91B66BB010067E5BF /* Sources */,
 				A977BCF11B66BB010067E5BF /* Frameworks */,
@@ -339,63 +335,6 @@
 		};
 /* End PBXResourcesBuildPhase section */
 
-/* Begin PBXShellScriptBuildPhase section */
-		A9006C4A1CDAB49000C6BC7B /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "../VulkanSamples/Sample-Programs/Hologram/generate-dispatch-table HelpersDispatchTable.cpp";
-		};
-		A99789CD1CD3FFEB005E7DAC /* Run Script */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"",
-			);
-			name = "Run Script";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "../VulkanSamples/Sample-Programs/Hologram/generate-dispatch-table HelpersDispatchTable.h";
-		};
-		A99789D71CD41746005E7DAC /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "../VulkanSamples/Sample-Programs/Hologram/generate-dispatch-table HelpersDispatchTable.h";
-		};
-		A9D516F41CD5752C00097D96 /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "../VulkanSamples/Sample-Programs/Hologram/generate-dispatch-table HelpersDispatchTable.cpp\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
 /* Begin PBXSourcesBuildPhase section */
 		1D60588E0D05DD3D006BFB54 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index f729bf0..601dd1b 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -12,6 +12,24 @@
 For best results, use a Markdown reader.*
 
 
+MoltenVK 1.0.27
+---------------
+
+Released 2018/11/15
+
+- Remove destroyed resources from descriptor sets.
+- Forbid compressed formats on non-2D images.
+- Update to latest dependency libraries for Vulkan SDK 1.1.92.
+- Update to latest SPIRV-Cross version:
+	- MSL: Print early_fragment_tests specifier before fragment shader declaration.
+	- MSL: Also pack members at unaligned offsets.
+	- MSL: Also pack 2- and 4- element vectors when necessary.
+	- MSL: Emit wrapper for SSign (sign() for int types).
+	- MSL: Support extended arithmetic opcodes.
+	- Handle opcode OpSourceContinued.
+	- Handle group decorations.
+
+
 MoltenVK 1.0.26
 ---------------
 
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index 5d4511b..916e701 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-daaffc4717cad9fbeb8848867f38a732120c6317
+ea6bdacd056b77ec1004822482d08b6f31473f25
diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision
index ed804a3..9776a04 100644
--- a/ExternalRevisions/Vulkan-Headers_repo_revision
+++ b/ExternalRevisions/Vulkan-Headers_repo_revision
@@ -1 +1 @@
-2fd5a24ec4a6df303b2155b3f85b6b8c1d56f6c0
+114c3546e195819bd53a34b39f5194b2989a5b12
diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision
index 79882a7..5880146 100644
--- a/ExternalRevisions/Vulkan-Tools_repo_revision
+++ b/ExternalRevisions/Vulkan-Tools_repo_revision
@@ -1 +1 @@
-f2c941819838c349fe0cc8eb2dddac294fe012e9
+d74a02234851dfacf6b140c1ab4d81becf704098
diff --git a/ExternalRevisions/VulkanSamples_repo_revision b/ExternalRevisions/VulkanSamples_repo_revision
index ee1ae7b..627b593 100644
--- a/ExternalRevisions/VulkanSamples_repo_revision
+++ b/ExternalRevisions/VulkanSamples_repo_revision
@@ -1 +1 @@
-7cca1899215bbb043914cc5ef74924dc7f189b64
+1a849458db984f77c9ecfa79041ede550094c2f2
diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision
index 26eb722..ab41838 100644
--- a/ExternalRevisions/glslang_repo_revision
+++ b/ExternalRevisions/glslang_repo_revision
@@ -1 +1 @@
-91ac4290bcf2cb930b4fb0981f09c00c0b6797e1
+d509a5eec6f5a65b3ffdfa0a19096f338d2582be
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 4c725bb..6366d29 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -48,7 +48,7 @@
  */
 #define MVK_VERSION_MAJOR   1
 #define MVK_VERSION_MINOR   0
-#define MVK_VERSION_PATCH   26
+#define MVK_VERSION_PATCH   27
 
 #define MVK_MAKE_VERSION(major, minor, patch)    (((major) * 10000) + ((minor) * 100) + (patch))
 #define MVK_VERSION     MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
index cb4778c..fa77752 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
@@ -635,6 +635,7 @@
 				const auto* pImgInfo = &get<VkDescriptorImageInfo>(pData, stride, srcStartIndex + i);
 				auto* oldSampler = (MVKSampler*)_imageBindings[dstIdx].sampler;
 				_imageBindings[dstIdx] = *pImgInfo;
+				_imageBindings[dstIdx].imageView = nullptr;		// Sampler only. Guard against app not explicitly clearing ImageView.
 				if (_hasDynamicSamplers) {
 					auto* mvkSampler = (MVKSampler*)pImgInfo->sampler;
 					mvkSampler->retain();
@@ -682,6 +683,7 @@
                     mvkImageView->retain();
                 }
 				_imageBindings[dstIdx] = *pImgInfo;
+				_imageBindings[dstIdx].sampler = nullptr;		// ImageView only. Guard against app not explicitly clearing Sampler.
 				_mtlTextures[dstIdx] = mvkImageView ? mvkImageView->getMTLTexture() : nil;
                 if (oldImageView) {
                     oldImageView->release();
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index 213c690..1f7d53f 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -649,17 +649,37 @@
 #pragma mark -
 #pragma mark MVKRefCountedDeviceObject
 
-/** Represents a device-spawned object that can live past destruction by the client. */
+/**
+ * Represents a device-spawned object that supports basic reference counting.
+ *
+ * An object of this type will automatically be deleted iff it has been destroyed
+ * by the client, and all references have been released. An object of this type is
+ * therefore allowed to live past its destruction by the client, until it is no
+ * longer referenced by other objects.
+ */
 class MVKRefCountedDeviceObject : public MVKBaseDeviceObject {
 
 public:
 
-    /** Increments the object reference count by one. */
+    /**
+	 * Called when this instance has been retained as a reference by another object,
+	 * indicating that this instance will not be deleted until that reference is released.
+	 */
     void retain();
 
-    /** Decrements the object reference count by one. */
+    /**
+	 * Called when this instance has been released as a reference from another object.
+	 * Once all references have been released, this object is free to be deleted.
+	 * If the destroy() function has already been called on this instance by the time
+	 * this function is called, this instance will be deleted.
+	 */
     void release();
 
+	/**
+	 * Marks this instance as destroyed. If all previous references to this instance
+	 * have been released, this instance will be deleted, otherwise deletion of this
+	 * instance will automatically be deferred until all references have been released.
+	 */
     void destroy() override;
 
 #pragma mark Construction
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index e6edb3d..bdc7167 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -993,14 +993,14 @@
 
 // Tell the semaphore and fence that they are being tracked for future signaling.
 void MVKSwapchainImage::markAsTracked(MVKSwapchainSignaler& signaler) {
-	if (signaler.first) { signaler.first->wasAddedToSignaler(); }
-	if (signaler.second) { signaler.second->wasAddedToSignaler(); }
+	if (signaler.first) { signaler.first->retain(); }
+	if (signaler.second) { signaler.second->retain(); }
 }
 
 // Tell the semaphore and fence that they are no longer being tracked for future signaling.
 void MVKSwapchainImage::unmarkAsTracked(MVKSwapchainSignaler& signaler) {
-	if (signaler.first) { signaler.first->wasRemovedFromSignaler(); }
-	if (signaler.second) { signaler.second->wasRemovedFromSignaler(); }
+	if (signaler.first) { signaler.first->release(); }
+	if (signaler.second) { signaler.second->release(); }
 }
 
 const MVKSwapchainImageAvailability* MVKSwapchainImage::getAvailability() {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSync.h b/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
index 9fbf517..14a01c1 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSync.h
@@ -98,34 +98,10 @@
 
 
 #pragma mark -
-#pragma mark MVKSignalable
-
-/** Abstract class for Vulkan semaphores and fences. */
-class MVKSignalable : public MVKRefCountedDeviceObject {
-
-public:
-
-	/* Called when this object has been added to a tracker for later signaling. */
-	void wasAddedToSignaler() { retain(); }
-
-	/**
-	 * Called when this object has been removed from a tracker for later signaling.
-	 * If this object was destroyed while this signal was pending, it will now be deleted.
-	 */
-	void wasRemovedFromSignaler() { release(); }
-
-
-#pragma mark Construction
-
-	MVKSignalable(MVKDevice* device) : MVKRefCountedDeviceObject(device) {}
-};
-
-
-#pragma mark -
 #pragma mark MVKSemaphore
 
 /** Represents a Vulkan semaphore. */
-class MVKSemaphore : public MVKSignalable {
+class MVKSemaphore : public MVKRefCountedDeviceObject {
 
 public:
 
@@ -146,7 +122,7 @@
 #pragma mark Construction
 
     MVKSemaphore(MVKDevice* device, const VkSemaphoreCreateInfo* pCreateInfo)
-        : MVKSignalable(device), _blocker(false, 1) {}
+        : MVKRefCountedDeviceObject(device), _blocker(false, 1) {}
 
 protected:
 	MVKSemaphoreImpl _blocker;
@@ -157,7 +133,7 @@
 #pragma mark MVKFence
 
 /** Represents a Vulkan fence. */
-class MVKFence : public MVKSignalable {
+class MVKFence : public MVKRefCountedDeviceObject {
 
 public:
 
@@ -190,7 +166,7 @@
 	
 #pragma mark Construction
 
-    MVKFence(MVKDevice* device, const VkFenceCreateInfo* pCreateInfo) : MVKSignalable(device),
+    MVKFence(MVKDevice* device, const VkFenceCreateInfo* pCreateInfo) : MVKRefCountedDeviceObject(device),
     _isSignaled(mvkAreFlagsEnabled(pCreateInfo->flags, VK_FENCE_CREATE_SIGNALED_BIT)) {}
 
 	~MVKFence() override;
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
index 0c7abb6..6b0fe65 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
@@ -3200,7 +3200,6 @@
 				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
@@ -3246,7 +3245,6 @@
 				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
diff --git a/fetchDependencies b/fetchDependencies
index eadd1d3..0cbceaa 100755
--- a/fetchDependencies
+++ b/fetchDependencies
@@ -214,6 +214,12 @@
 
 update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
 
+# Generate dispatch files needed for Hologram demo
+cd "${REPO_NAME}/Sample-Programs/Hologram"
+./generate-dispatch-table HelpersDispatchTable.h
+./generate-dispatch-table HelpersDispatchTable.cpp
+cd -
+
 
 # ----------------- Cleanup -------------------