diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp
index ceb10d1..20884a1 100644
--- a/layers/parameter_validation.cpp
+++ b/layers/parameter_validation.cpp
@@ -84,11 +84,12 @@
     bool swapchain_enabled = false;
     bool display_swapchain_enabled = false;
     bool amd_negative_viewport_height_enabled = false;
+
+    VkLayerDispatchTable dispatch_table = {};
 };
 
 static std::unordered_map<void *, layer_data *> layer_data_map;
 static std::unordered_map<void *, instance_layer_data *> instance_layer_data_map;
-static device_table_map pc_device_table_map;
 
 static void init_parameter_validation(instance_layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
 
@@ -1682,7 +1683,7 @@
             assert(my_device_data != nullptr);
 
             my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
-            initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
+            layer_init_device_dispatch_table(*pDevice, &my_device_data->dispatch_table, fpGetDeviceProcAddr);
 
             CheckDeviceRegisterExtensions(pCreateInfo, *pDevice);
 
@@ -1727,8 +1728,7 @@
         fprintf(stderr, "Device:  0x%p, key:  0x%p\n", device, key);
 #endif
 
-        get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
-        pc_device_table_map.erase(key);
+        my_data->dispatch_table.DestroyDevice(device, pAllocator);
         layer_data_map.erase(key);
     }
 }
@@ -1761,7 +1761,7 @@
     if (!skip) {
         PreGetDeviceQueue(device, queueFamilyIndex, queueIndex);
 
-        get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
+        my_data->dispatch_table.GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
     }
 }
 
@@ -1774,7 +1774,7 @@
     skip |= parameter_validation_vkQueueSubmit(my_data->report_data, submitCount, pSubmits, fence);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
+        result = my_data->dispatch_table.QueueSubmit(queue, submitCount, pSubmits, fence);
 
         validate_result(my_data->report_data, "vkQueueSubmit", result);
     }
@@ -1786,7 +1786,7 @@
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map);
     assert(my_data != NULL);
 
-    VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
+    VkResult result = my_data->dispatch_table.QueueWaitIdle(queue);
 
     validate_result(my_data->report_data, "vkQueueWaitIdle", result);
 
@@ -1797,7 +1797,7 @@
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
     assert(my_data != NULL);
 
-    VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
+    VkResult result = my_data->dispatch_table.DeviceWaitIdle(device);
 
     validate_result(my_data->report_data, "vkDeviceWaitIdle", result);
 
@@ -1814,7 +1814,7 @@
     skip |= parameter_validation_vkAllocateMemory(my_data->report_data, pAllocateInfo, pAllocator, pMemory);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
+        result = my_data->dispatch_table.AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
 
         validate_result(my_data->report_data, "vkAllocateMemory", result);
     }
@@ -1830,7 +1830,7 @@
     skip |= parameter_validation_vkFreeMemory(my_data->report_data, memory, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, memory, pAllocator);
+        my_data->dispatch_table.FreeMemory(device, memory, pAllocator);
     }
 }
 
@@ -1844,7 +1844,7 @@
     skip |= parameter_validation_vkMapMemory(my_data->report_data, memory, offset, size, flags, ppData);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, memory, offset, size, flags, ppData);
+        result = my_data->dispatch_table.MapMemory(device, memory, offset, size, flags, ppData);
 
         validate_result(my_data->report_data, "vkMapMemory", result);
     }
@@ -1860,7 +1860,7 @@
     skip |= parameter_validation_vkUnmapMemory(my_data->report_data, memory);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, memory);
+        my_data->dispatch_table.UnmapMemory(device, memory);
     }
 }
 
@@ -1874,7 +1874,7 @@
     skip |= parameter_validation_vkFlushMappedMemoryRanges(my_data->report_data, memoryRangeCount, pMemoryRanges);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+        result = my_data->dispatch_table.FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
 
         validate_result(my_data->report_data, "vkFlushMappedMemoryRanges", result);
     }
@@ -1893,7 +1893,7 @@
 
     if (!skip) {
         result =
-            get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+            my_data->dispatch_table.InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
 
         validate_result(my_data->report_data, "vkInvalidateMappedMemoryRanges", result);
     }
@@ -1910,7 +1910,7 @@
     skip |= parameter_validation_vkGetDeviceMemoryCommitment(my_data->report_data, memory, pCommittedMemoryInBytes);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
+        my_data->dispatch_table.GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
     }
 }
 
@@ -1924,7 +1924,7 @@
     skip |= parameter_validation_vkBindBufferMemory(my_data->report_data, buffer, memory, memoryOffset);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, memory, memoryOffset);
+        result = my_data->dispatch_table.BindBufferMemory(device, buffer, memory, memoryOffset);
 
         validate_result(my_data->report_data, "vkBindBufferMemory", result);
     }
@@ -1941,7 +1941,7 @@
     skip |= parameter_validation_vkBindImageMemory(my_data->report_data, image, memory, memoryOffset);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, memory, memoryOffset);
+        result = my_data->dispatch_table.BindImageMemory(device, image, memory, memoryOffset);
 
         validate_result(my_data->report_data, "vkBindImageMemory", result);
     }
@@ -1958,7 +1958,7 @@
     skip |= parameter_validation_vkGetBufferMemoryRequirements(my_data->report_data, buffer, pMemoryRequirements);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
+        my_data->dispatch_table.GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
     }
 }
 
@@ -1970,7 +1970,7 @@
     skip |= parameter_validation_vkGetImageMemoryRequirements(my_data->report_data, image, pMemoryRequirements);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
+        my_data->dispatch_table.GetImageMemoryRequirements(device, image, pMemoryRequirements);
     }
 }
 
@@ -2002,8 +2002,7 @@
                                                                          pSparseMemoryRequirements);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)
-            ->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+        my_data->dispatch_table.GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 
         PostGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
     }
@@ -2058,7 +2057,7 @@
     skip |= parameter_validation_vkQueueBindSparse(my_data->report_data, bindInfoCount, pBindInfo, fence);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
+        result = my_data->dispatch_table.QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
 
         validate_result(my_data->report_data, "vkQueueBindSparse", result);
     }
@@ -2076,7 +2075,7 @@
     skip |= parameter_validation_vkCreateFence(my_data->report_data, pCreateInfo, pAllocator, pFence);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
+        result = my_data->dispatch_table.CreateFence(device, pCreateInfo, pAllocator, pFence);
 
         validate_result(my_data->report_data, "vkCreateFence", result);
     }
@@ -2092,7 +2091,7 @@
     skip |= parameter_validation_vkDestroyFence(my_data->report_data, fence, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence, pAllocator);
+        my_data->dispatch_table.DestroyFence(device, fence, pAllocator);
     }
 }
 
@@ -2105,7 +2104,7 @@
     skip |= parameter_validation_vkResetFences(my_data->report_data, fenceCount, pFences);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
+        result = my_data->dispatch_table.ResetFences(device, fenceCount, pFences);
 
         validate_result(my_data->report_data, "vkResetFences", result);
     }
@@ -2122,7 +2121,7 @@
     skip |= parameter_validation_vkGetFenceStatus(my_data->report_data, fence);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
+        result = my_data->dispatch_table.GetFenceStatus(device, fence);
 
         validate_result(my_data->report_data, "vkGetFenceStatus", result);
     }
@@ -2140,7 +2139,7 @@
     skip |= parameter_validation_vkWaitForFences(my_data->report_data, fenceCount, pFences, waitAll, timeout);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
+        result = my_data->dispatch_table.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
 
         validate_result(my_data->report_data, "vkWaitForFences", result);
     }
@@ -2158,7 +2157,7 @@
     skip |= parameter_validation_vkCreateSemaphore(my_data->report_data, pCreateInfo, pAllocator, pSemaphore);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
+        result = my_data->dispatch_table.CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
 
         validate_result(my_data->report_data, "vkCreateSemaphore", result);
     }
@@ -2174,7 +2173,7 @@
     skip |= parameter_validation_vkDestroySemaphore(my_data->report_data, semaphore, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore, pAllocator);
+        my_data->dispatch_table.DestroySemaphore(device, semaphore, pAllocator);
     }
 }
 
@@ -2188,7 +2187,7 @@
     skip |= parameter_validation_vkCreateEvent(my_data->report_data, pCreateInfo, pAllocator, pEvent);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
+        result = my_data->dispatch_table.CreateEvent(device, pCreateInfo, pAllocator, pEvent);
 
         validate_result(my_data->report_data, "vkCreateEvent", result);
     }
@@ -2204,7 +2203,7 @@
     skip |= parameter_validation_vkDestroyEvent(my_data->report_data, event, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event, pAllocator);
+        my_data->dispatch_table.DestroyEvent(device, event, pAllocator);
     }
 }
 
@@ -2217,7 +2216,7 @@
     skip |= parameter_validation_vkGetEventStatus(my_data->report_data, event);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
+        result = my_data->dispatch_table.GetEventStatus(device, event);
 
         validate_result(my_data->report_data, "vkGetEventStatus", result);
     }
@@ -2234,7 +2233,7 @@
     skip |= parameter_validation_vkSetEvent(my_data->report_data, event);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
+        result = my_data->dispatch_table.SetEvent(device, event);
 
         validate_result(my_data->report_data, "vkSetEvent", result);
     }
@@ -2251,7 +2250,7 @@
     skip |= parameter_validation_vkResetEvent(my_data->report_data, event);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
+        result = my_data->dispatch_table.ResetEvent(device, event);
 
         validate_result(my_data->report_data, "vkResetEvent", result);
     }
@@ -2284,7 +2283,7 @@
     }
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
+        result = device_data->dispatch_table.CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
 
         validate_result(report_data, "vkCreateQueryPool", result);
     }
@@ -2300,7 +2299,7 @@
     skip |= parameter_validation_vkDestroyQueryPool(my_data->report_data, queryPool, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool, pAllocator);
+        my_data->dispatch_table.DestroyQueryPool(device, queryPool, pAllocator);
     }
 }
 
@@ -2315,8 +2314,7 @@
                                                             pData, stride, flags);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
+        result = my_data->dispatch_table.GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
 
         validate_result(my_data->report_data, "vkGetQueryPoolResults", result);
     }
@@ -2375,7 +2373,7 @@
     }
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+        result = device_data->dispatch_table.CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
 
         validate_result(report_data, "vkCreateBuffer", result);
     }
@@ -2391,7 +2389,7 @@
     skip |= parameter_validation_vkDestroyBuffer(my_data->report_data, buffer, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer, pAllocator);
+        my_data->dispatch_table.DestroyBuffer(device, buffer, pAllocator);
     }
 }
 
@@ -2405,7 +2403,7 @@
     skip |= parameter_validation_vkCreateBufferView(my_data->report_data, pCreateInfo, pAllocator, pView);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
+        result = my_data->dispatch_table.CreateBufferView(device, pCreateInfo, pAllocator, pView);
 
         validate_result(my_data->report_data, "vkCreateBufferView", result);
     }
@@ -2421,7 +2419,7 @@
     skip |= parameter_validation_vkDestroyBufferView(my_data->report_data, bufferView, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView, pAllocator);
+        my_data->dispatch_table.DestroyBufferView(device, bufferView, pAllocator);
     }
 }
 
@@ -2518,7 +2516,7 @@
     }
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
+        result = device_data->dispatch_table.CreateImage(device, pCreateInfo, pAllocator, pImage);
 
         validate_result(report_data, "vkCreateImage", result);
     }
@@ -2534,7 +2532,7 @@
     skip |= parameter_validation_vkDestroyImage(my_data->report_data, image, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image, pAllocator);
+        my_data->dispatch_table.DestroyImage(device, image, pAllocator);
     }
 }
 
@@ -2564,7 +2562,7 @@
     if (!skip) {
         PreGetImageSubresourceLayout(device, pSubresource);
 
-        get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
+        my_data->dispatch_table.GetImageSubresourceLayout(device, image, pSubresource, pLayout);
     }
 }
 
@@ -2627,7 +2625,7 @@
     }
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
+        result = my_data->dispatch_table.CreateImageView(device, pCreateInfo, pAllocator, pView);
 
         validate_result(my_data->report_data, "vkCreateImageView", result);
     }
@@ -2643,7 +2641,7 @@
     skip |= parameter_validation_vkDestroyImageView(my_data->report_data, imageView, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView, pAllocator);
+        my_data->dispatch_table.DestroyImageView(device, imageView, pAllocator);
     }
 }
 
@@ -2658,7 +2656,7 @@
 
     if (!skip) {
         result =
-            get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
+            my_data->dispatch_table.CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
 
         validate_result(my_data->report_data, "vkCreateShaderModule", result);
     }
@@ -2675,7 +2673,7 @@
     skip |= parameter_validation_vkDestroyShaderModule(my_data->report_data, shaderModule, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule, pAllocator);
+        my_data->dispatch_table.DestroyShaderModule(device, shaderModule, pAllocator);
     }
 }
 
@@ -2690,7 +2688,7 @@
 
     if (!skip) {
         result =
-            get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+            my_data->dispatch_table.CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
 
         validate_result(my_data->report_data, "vkCreatePipelineCache", result);
     }
@@ -2707,7 +2705,7 @@
     skip |= parameter_validation_vkDestroyPipelineCache(my_data->report_data, pipelineCache, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache, pAllocator);
+        my_data->dispatch_table.DestroyPipelineCache(device, pipelineCache, pAllocator);
     }
 }
 
@@ -2721,7 +2719,7 @@
     skip |= parameter_validation_vkGetPipelineCacheData(my_data->report_data, pipelineCache, pDataSize, pData);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
+        result = my_data->dispatch_table.GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
 
         validate_result(my_data->report_data, "vkGetPipelineCacheData", result);
     }
@@ -2739,7 +2737,7 @@
     skip |= parameter_validation_vkMergePipelineCaches(my_data->report_data, dstCache, srcCacheCount, pSrcCaches);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
+        result = my_data->dispatch_table.MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
 
         validate_result(my_data->report_data, "vkMergePipelineCaches", result);
     }
@@ -3211,8 +3209,7 @@
     if (!skip) {
         PreCreateGraphicsPipelines(device, pCreateInfos);
 
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+        result = device_data->dispatch_table.CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
 
         validate_result(report_data, "vkCreateGraphicsPipelines", result);
     }
@@ -3247,8 +3244,7 @@
     if (!skip) {
         PreCreateComputePipelines(device, pCreateInfos);
 
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+        result = my_data->dispatch_table.CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
 
         validate_result(my_data->report_data, "vkCreateComputePipelines", result);
     }
@@ -3264,7 +3260,7 @@
     skip |= parameter_validation_vkDestroyPipeline(my_data->report_data, pipeline, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline, pAllocator);
+        my_data->dispatch_table.DestroyPipeline(device, pipeline, pAllocator);
     }
 }
 
@@ -3279,7 +3275,7 @@
 
     if (!skip) {
         result =
-            get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
+            my_data->dispatch_table.CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
 
         validate_result(my_data->report_data, "vkCreatePipelineLayout", result);
     }
@@ -3296,7 +3292,7 @@
     skip |= parameter_validation_vkDestroyPipelineLayout(my_data->report_data, pipelineLayout, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout, pAllocator);
+        my_data->dispatch_table.DestroyPipelineLayout(device, pipelineLayout, pAllocator);
     }
 }
 
@@ -3329,7 +3325,7 @@
     }
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
+        result = device_data->dispatch_table.CreateSampler(device, pCreateInfo, pAllocator, pSampler);
 
         validate_result(report_data, "vkCreateSampler", result);
     }
@@ -3345,7 +3341,7 @@
     skip |= parameter_validation_vkDestroySampler(my_data->report_data, sampler, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler, pAllocator);
+        my_data->dispatch_table.DestroySampler(device, sampler, pAllocator);
     }
 }
 
@@ -3398,8 +3394,7 @@
     }
 
     if (!skip) {
-        result =
-            get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+        result = device_data->dispatch_table.CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
 
         validate_result(report_data, "vkCreateDescriptorSetLayout", result);
     }
@@ -3416,7 +3411,7 @@
     skip |= parameter_validation_vkDestroyDescriptorSetLayout(my_data->report_data, descriptorSetLayout, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
+        my_data->dispatch_table.DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
     }
 }
 
@@ -3433,7 +3428,7 @@
 
     if (!skip) {
         result =
-            get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
+            my_data->dispatch_table.CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
 
         validate_result(my_data->report_data, "vkCreateDescriptorPool", result);
     }
@@ -3450,7 +3445,7 @@
     skip |= parameter_validation_vkDestroyDescriptorPool(my_data->report_data, descriptorPool, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool, pAllocator);
+        my_data->dispatch_table.DestroyDescriptorPool(device, descriptorPool, pAllocator);
     }
 }
 
@@ -3464,7 +3459,7 @@
     skip |= parameter_validation_vkResetDescriptorPool(my_data->report_data, descriptorPool, flags);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
+        result = my_data->dispatch_table.ResetDescriptorPool(device, descriptorPool, flags);
 
         validate_result(my_data->report_data, "vkResetDescriptorPool", result);
     }
@@ -3482,7 +3477,7 @@
     skip |= parameter_validation_vkAllocateDescriptorSets(my_data->report_data, pAllocateInfo, pDescriptorSets);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
+        result = my_data->dispatch_table.AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
 
         validate_result(my_data->report_data, "vkAllocateDescriptorSets", result);
     }
@@ -3507,8 +3502,7 @@
                                 pDescriptorSets, true, true);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
+        result = device_data->dispatch_table.FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
 
         validate_result(report_data, "vkFreeDescriptorSets", result);
     }
@@ -3651,8 +3645,7 @@
     }
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)
-            ->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+        device_data->dispatch_table.UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
     }
 }
 
@@ -3666,7 +3659,7 @@
     skip |= parameter_validation_vkCreateFramebuffer(my_data->report_data, pCreateInfo, pAllocator, pFramebuffer);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
+        result = my_data->dispatch_table.CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
 
         validate_result(my_data->report_data, "vkCreateFramebuffer", result);
     }
@@ -3682,7 +3675,7 @@
     skip |= parameter_validation_vkDestroyFramebuffer(my_data->report_data, framebuffer, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer, pAllocator);
+        my_data->dispatch_table.DestroyFramebuffer(device, framebuffer, pAllocator);
     }
 }
 
@@ -3711,7 +3704,7 @@
     skip |= PreCreateRenderPass(my_data, pCreateInfo);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
+        result = my_data->dispatch_table.CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
 
         validate_result(my_data->report_data, "vkCreateRenderPass", result);
     }
@@ -3727,7 +3720,7 @@
     skip |= parameter_validation_vkDestroyRenderPass(my_data->report_data, renderPass, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass, pAllocator);
+        my_data->dispatch_table.DestroyRenderPass(device, renderPass, pAllocator);
     }
 }
 
@@ -3739,7 +3732,7 @@
     skip |= parameter_validation_vkGetRenderAreaGranularity(my_data->report_data, renderPass, pGranularity);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
+        my_data->dispatch_table.GetRenderAreaGranularity(device, renderPass, pGranularity);
     }
 }
 
@@ -3756,7 +3749,7 @@
     skip |= parameter_validation_vkCreateCommandPool(my_data->report_data, pCreateInfo, pAllocator, pCommandPool);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
+        result = my_data->dispatch_table.CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
 
         validate_result(my_data->report_data, "vkCreateCommandPool", result);
     }
@@ -3772,7 +3765,7 @@
     skip |= parameter_validation_vkDestroyCommandPool(my_data->report_data, commandPool, pAllocator);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, commandPool, pAllocator);
+        my_data->dispatch_table.DestroyCommandPool(device, commandPool, pAllocator);
     }
 }
 
@@ -3785,7 +3778,7 @@
     skip |= parameter_validation_vkResetCommandPool(my_data->report_data, commandPool, flags);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
+        result = my_data->dispatch_table.ResetCommandPool(device, commandPool, flags);
 
         validate_result(my_data->report_data, "vkResetCommandPool", result);
     }
@@ -3803,7 +3796,7 @@
     skip |= parameter_validation_vkAllocateCommandBuffers(my_data->report_data, pAllocateInfo, pCommandBuffers);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
+        result = my_data->dispatch_table.AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
 
         validate_result(my_data->report_data, "vkAllocateCommandBuffers", result);
     }
@@ -3827,13 +3820,13 @@
                                 pCommandBuffers, true, true);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)
-            ->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
+        device_data->dispatch_table.FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
     }
 }
 
 bool PreBeginCommandBuffer(layer_data *dev_data, VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo) {
     bool skip = false;
+    // TODO: this makes no sense.
     layer_data *phy_dev_data = get_my_data_ptr(get_dispatch_key(dev_data->physical_device), layer_data_map);
     const VkCommandBufferInheritanceInfo *pInfo = pBeginInfo->pInheritanceInfo;
 
@@ -3894,7 +3887,7 @@
     skip |= PreBeginCommandBuffer(device_data, commandBuffer, pBeginInfo);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
+        result = device_data->dispatch_table.BeginCommandBuffer(commandBuffer, pBeginInfo);
 
         validate_result(report_data, "vkBeginCommandBuffer", result);
     }
@@ -3906,7 +3899,7 @@
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
     assert(my_data != NULL);
 
-    VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
+    VkResult result = my_data->dispatch_table.EndCommandBuffer(commandBuffer);
 
     validate_result(my_data->report_data, "vkEndCommandBuffer", result);
 
@@ -3921,7 +3914,7 @@
     bool skip = parameter_validation_vkResetCommandBuffer(my_data->report_data, flags);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
+        result = my_data->dispatch_table.ResetCommandBuffer(commandBuffer, flags);
 
         validate_result(my_data->report_data, "vkResetCommandBuffer", result);
     }
@@ -3938,7 +3931,7 @@
     skip |= parameter_validation_vkCmdBindPipeline(my_data->report_data, pipelineBindPoint, pipeline);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
+        my_data->dispatch_table.CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
     }
 }
 
@@ -4018,8 +4011,7 @@
     skip |= preCmdSetViewport(my_data, viewportCount, pViewports);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
+        my_data->dispatch_table.CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
     }
 }
 
@@ -4059,18 +4051,19 @@
     }
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
+        my_data->dispatch_table.CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
     }
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdSetLineWidth(commandBuffer, lineWidth);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp,
                                            float depthBiasSlopeFactor) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)
-        ->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
@@ -4081,12 +4074,13 @@
     skip |= parameter_validation_vkCmdSetBlendConstants(my_data->report_data, blendConstants);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
+        my_data->dispatch_table.CmdSetBlendConstants(commandBuffer, blendConstants);
     }
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
@@ -4098,7 +4092,7 @@
     skip |= parameter_validation_vkCmdSetStencilCompareMask(my_data->report_data, faceMask, compareMask);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
+        my_data->dispatch_table.CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
     }
 }
 
@@ -4110,7 +4104,7 @@
     skip |= parameter_validation_vkCmdSetStencilWriteMask(my_data->report_data, faceMask, writeMask);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
+        my_data->dispatch_table.CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
     }
 }
 
@@ -4122,7 +4116,7 @@
     skip |= parameter_validation_vkCmdSetStencilReference(my_data->report_data, faceMask, reference);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
+        my_data->dispatch_table.CmdSetStencilReference(commandBuffer, faceMask, reference);
     }
 }
 
@@ -4139,8 +4133,7 @@
                                                      pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets,
+        my_data->dispatch_table.CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets,
                                     dynamicOffsetCount, pDynamicOffsets);
     }
 }
@@ -4154,7 +4147,7 @@
     skip |= parameter_validation_vkCmdBindIndexBuffer(my_data->report_data, buffer, offset, indexType);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
+        my_data->dispatch_table.CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
     }
 }
 
@@ -4167,8 +4160,7 @@
     skip |= parameter_validation_vkCmdBindVertexBuffers(my_data->report_data, firstBinding, bindingCount, pBuffers, pOffsets);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
+        my_data->dispatch_table.CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
     }
 }
 
@@ -4196,16 +4188,16 @@
 
 VKAPI_ATTR void VKAPI_CALL CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
                                    uint32_t firstVertex, uint32_t firstInstance) {
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
     PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
 
-    get_dispatch_table(pc_device_table_map, commandBuffer)
-        ->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
+    my_data->dispatch_table.CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount,
                                           uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)
-        ->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count,
@@ -4217,7 +4209,7 @@
     skip |= parameter_validation_vkCmdDrawIndirect(my_data->report_data, buffer, offset, count, stride);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
+        my_data->dispatch_table.CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
     }
 }
 
@@ -4230,13 +4222,13 @@
     skip |= parameter_validation_vkCmdDrawIndexedIndirect(my_data->report_data, buffer, offset, count, stride);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
+        my_data->dispatch_table.CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
     }
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdDispatch(commandBuffer, x, y, z);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) {
@@ -4247,7 +4239,7 @@
     skip |= parameter_validation_vkCmdDispatchIndirect(my_data->report_data, buffer, offset);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
+        my_data->dispatch_table.CmdDispatchIndirect(commandBuffer, buffer, offset);
     }
 }
 
@@ -4260,8 +4252,7 @@
     skip |= parameter_validation_vkCmdCopyBuffer(my_data->report_data, srcBuffer, dstBuffer, regionCount, pRegions);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
+        my_data->dispatch_table.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
     }
 }
 
@@ -4300,8 +4291,7 @@
     if (!skip) {
         PreCmdCopyImage(commandBuffer, pRegions);
 
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+        my_data->dispatch_table.CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
     }
 }
 
@@ -4340,8 +4330,7 @@
     if (!skip) {
         PreCmdBlitImage(commandBuffer, pRegions);
 
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
+        my_data->dispatch_table.CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
     }
 }
 
@@ -4374,8 +4363,7 @@
     if (!skip) {
         PreCmdCopyBufferToImage(commandBuffer, pRegions);
 
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
+        my_data->dispatch_table.CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
     }
 }
 
@@ -4407,8 +4395,7 @@
     if (!skip) {
         PreCmdCopyImageToBuffer(commandBuffer, pRegions);
 
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
+        my_data->dispatch_table.CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
     }
 }
 
@@ -4438,8 +4425,7 @@
     }
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
+        my_data->dispatch_table.CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
     }
 }
 
@@ -4470,7 +4456,7 @@
     }
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
+        my_data->dispatch_table.CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
     }
 }
 
@@ -4484,8 +4470,7 @@
     skip |= parameter_validation_vkCmdClearColorImage(my_data->report_data, image, imageLayout, pColor, rangeCount, pRanges);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
+        my_data->dispatch_table.CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
     }
 }
 
@@ -4500,8 +4485,7 @@
                                                                   rangeCount, pRanges);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
+        my_data->dispatch_table.CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
     }
 }
 
@@ -4515,8 +4499,7 @@
     skip |= parameter_validation_vkCmdClearAttachments(my_data->report_data, attachmentCount, pAttachments, rectCount, pRects);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
+        my_data->dispatch_table.CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
     }
 }
 
@@ -4557,8 +4540,7 @@
     if (!skip) {
         PreCmdResolveImage(commandBuffer, pRegions);
 
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+        my_data->dispatch_table.CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
     }
 }
 
@@ -4570,7 +4552,7 @@
     skip |= parameter_validation_vkCmdSetEvent(my_data->report_data, event, stageMask);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
+        my_data->dispatch_table.CmdSetEvent(commandBuffer, event, stageMask);
     }
 }
 
@@ -4582,7 +4564,7 @@
     skip |= parameter_validation_vkCmdResetEvent(my_data->report_data, event, stageMask);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
+        my_data->dispatch_table.CmdResetEvent(commandBuffer, event, stageMask);
     }
 }
 
@@ -4600,8 +4582,7 @@
                                                       pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers,
+        my_data->dispatch_table.CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers,
                             bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
     }
 }
@@ -4620,8 +4601,7 @@
                                                            pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers,
+        my_data->dispatch_table.CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers,
                                  bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
     }
 }
@@ -4635,7 +4615,7 @@
     skip |= parameter_validation_vkCmdBeginQuery(my_data->report_data, queryPool, slot, flags);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
+        my_data->dispatch_table.CmdBeginQuery(commandBuffer, queryPool, slot, flags);
     }
 }
 
@@ -4647,7 +4627,7 @@
     skip |= parameter_validation_vkCmdEndQuery(my_data->report_data, queryPool, slot);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
+        my_data->dispatch_table.CmdEndQuery(commandBuffer, queryPool, slot);
     }
 }
 
@@ -4660,7 +4640,7 @@
     skip |= parameter_validation_vkCmdResetQueryPool(my_data->report_data, queryPool, firstQuery, queryCount);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
+        my_data->dispatch_table.CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
     }
 }
 
@@ -4681,7 +4661,7 @@
     skip |= parameter_validation_vkCmdWriteTimestamp(my_data->report_data, pipelineStage, queryPool, query);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
+        my_data->dispatch_table.CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
 
         PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
     }
@@ -4698,8 +4678,7 @@
                                                                 dstOffset, stride, flags);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
+        my_data->dispatch_table.CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
     }
 }
 
@@ -4712,8 +4691,7 @@
     skip |= parameter_validation_vkCmdPushConstants(my_data->report_data, layout, stageFlags, offset, size, pValues);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
+        my_data->dispatch_table.CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
     }
 }
 
@@ -4726,7 +4704,7 @@
     skip |= parameter_validation_vkCmdBeginRenderPass(my_data->report_data, pRenderPassBegin, contents);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+        my_data->dispatch_table.CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
     }
 }
 
@@ -4738,12 +4716,13 @@
     skip |= parameter_validation_vkCmdNextSubpass(my_data->report_data, contents);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
+        my_data->dispatch_table.CmdNextSubpass(commandBuffer, contents);
     }
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) {
-    get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
+    layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map);
+    my_data->dispatch_table.CmdEndRenderPass(commandBuffer);
 }
 
 VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount,
@@ -4755,8 +4734,7 @@
     skip |= parameter_validation_vkCmdExecuteCommands(my_data->report_data, commandBufferCount, pCommandBuffers);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)
-            ->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
+        my_data->dispatch_table.CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
     }
 }
 
@@ -4815,7 +4793,7 @@
     skip |= parameter_validation_vkCreateSwapchainKHR(my_data->report_data, pCreateInfo, pAllocator, pSwapchain);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
+        result = my_data->dispatch_table.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
 
         validate_result(my_data->report_data, "vkCreateSwapchainKHR", result);
     }
@@ -4836,8 +4814,7 @@
         parameter_validation_vkGetSwapchainImagesKHR(my_data->report_data, swapchain, pSwapchainImageCount, pSwapchainImages);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
+        result = my_data->dispatch_table.GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
 
         validate_result(my_data->report_data, "vkGetSwapchainImagesKHR", result);
     }
@@ -4858,8 +4835,7 @@
         parameter_validation_vkAcquireNextImageKHR(my_data->report_data, swapchain, timeout, semaphore, fence, pImageIndex);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
+        result = my_data->dispatch_table.AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
 
         validate_result(my_data->report_data, "vkAcquireNextImageKHR", result);
     }
@@ -4878,7 +4854,7 @@
     skip |= parameter_validation_vkQueuePresentKHR(my_data->report_data, pPresentInfo);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, queue)->QueuePresentKHR(queue, pPresentInfo);
+        result = my_data->dispatch_table.QueuePresentKHR(queue, pPresentInfo);
 
         validate_result(my_data->report_data, "vkQueuePresentKHR", result);
     }
@@ -4896,7 +4872,7 @@
     /* No generated validation function for this call */
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, device)->DestroySwapchainKHR(device, swapchain, pAllocator);
+        my_data->dispatch_table.DestroySwapchainKHR(device, swapchain, pAllocator);
     }
 }
 
@@ -5283,8 +5259,7 @@
                                                                   pSwapchains);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)
-                     ->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
+        result = my_data->dispatch_table.CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
 
         validate_result(my_data->report_data, "vkCreateSharedSwapchainsKHR", result);
     }
@@ -5450,7 +5425,7 @@
     skip |= parameter_validation_vkDebugMarkerSetObjectTagEXT(my_data->report_data, pTagInfo);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->DebugMarkerSetObjectTagEXT(device, pTagInfo);
+        result = my_data->dispatch_table.DebugMarkerSetObjectTagEXT(device, pTagInfo);
 
         validate_result(my_data->report_data, "vkDebugMarkerSetObjectTagEXT", result);
     }
@@ -5467,7 +5442,7 @@
     skip |= parameter_validation_vkDebugMarkerSetObjectNameEXT(my_data->report_data, pNameInfo);
 
     if (!skip) {
-        VkResult result = get_dispatch_table(pc_device_table_map, device)->DebugMarkerSetObjectNameEXT(device, pNameInfo);
+        VkResult result = my_data->dispatch_table.DebugMarkerSetObjectNameEXT(device, pNameInfo);
 
         validate_result(my_data->report_data, "vkDebugMarkerSetObjectNameEXT", result);
     }
@@ -5483,7 +5458,7 @@
     skip |= parameter_validation_vkCmdDebugMarkerBeginEXT(my_data->report_data, pMarkerInfo);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
+        my_data->dispatch_table.CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
     }
 }
 
@@ -5495,7 +5470,7 @@
     skip |= parameter_validation_vkCmdDebugMarkerInsertEXT(my_data->report_data, pMarkerInfo);
 
     if (!skip) {
-        get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
+        my_data->dispatch_table.CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
     }
 }
 
@@ -5536,7 +5511,7 @@
     skip |= parameter_validation_vkGetMemoryWin32HandleNV(my_data->report_data, memory, handleType, pHandle);
 
     if (!skip) {
-        result = get_dispatch_table(pc_device_table_map, device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
+        result = my_data->dispatch_table.GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
     }
 
     return result;
@@ -5570,9 +5545,9 @@
     if (proc)
         return proc;
 
-    if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
-        return NULL;
-    return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
+    if (!data->dispatch_table.GetDeviceProcAddr)
+        return nullptr;
+    return data->dispatch_table.GetDeviceProcAddr(device, funcName);
 }
 
 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) {
