[base] Tracing library for Vulkan (guest, atrace)

bug: 125506300

- Vulkan function entry points are all traced
- VulkanStream read/write traced
- Rename guest VulkanStream to VulkanStreamGuest

Change-Id: I21e882f7ba3a9ce0c8f4d2d575b19078405f0862
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index 2e89514..ff12cfe 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -47,6 +47,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkInstance* pInstance)
 {
+    AEMU_SCOPED_TRACE("vkCreateInstance");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateInstance_VkResult_return = (VkResult)0;
     vkCreateInstance_VkResult_return = vkEnc->vkCreateInstance(pCreateInfo, pAllocator, pInstance);
@@ -56,6 +57,7 @@
     VkInstance instance,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyInstance");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyInstance(instance, pAllocator);
 }
@@ -64,6 +66,7 @@
     uint32_t* pPhysicalDeviceCount,
     VkPhysicalDevice* pPhysicalDevices)
 {
+    AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -74,6 +77,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures* pFeatures)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
 }
@@ -82,6 +86,7 @@
     VkFormat format,
     VkFormatProperties* pFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
 }
@@ -94,6 +99,7 @@
     VkImageCreateFlags flags,
     VkImageFormatProperties* pImageFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceImageFormatProperties_VkResult_return = vkEnc->vkGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
@@ -103,6 +109,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceProperties(physicalDevice, pProperties);
 }
@@ -111,6 +118,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties* pQueueFamilyProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
 }
@@ -118,6 +126,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties* pMemoryProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
 }
@@ -125,6 +134,7 @@
     VkInstance instance,
     const char* pName)
 {
+    AEMU_SCOPED_TRACE("vkGetInstanceProcAddr");
     auto vkEnc = HostConnection::get()->vkEncoder();
     PFN_vkVoidFunction vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
     vkGetInstanceProcAddr_PFN_vkVoidFunction_return = vkEnc->vkGetInstanceProcAddr(instance, pName);
@@ -134,6 +144,7 @@
     VkDevice device,
     const char* pName)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceProcAddr");
     auto vkEnc = HostConnection::get()->vkEncoder();
     PFN_vkVoidFunction vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
     vkGetDeviceProcAddr_PFN_vkVoidFunction_return = vkEnc->vkGetDeviceProcAddr(device, pName);
@@ -145,6 +156,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDevice* pDevice)
 {
+    AEMU_SCOPED_TRACE("vkCreateDevice");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDevice_VkResult_return = (VkResult)0;
     vkCreateDevice_VkResult_return = vkEnc->vkCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
@@ -154,6 +166,7 @@
     VkDevice device,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDevice");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDevice(device, pAllocator);
 }
@@ -162,6 +175,7 @@
     uint32_t* pPropertyCount,
     VkExtensionProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -174,6 +188,7 @@
     uint32_t* pPropertyCount,
     VkExtensionProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -184,6 +199,7 @@
     uint32_t* pPropertyCount,
     VkLayerProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
     vkEnumerateInstanceLayerProperties_VkResult_return = vkEnc->vkEnumerateInstanceLayerProperties(pPropertyCount, pProperties);
@@ -194,6 +210,7 @@
     uint32_t* pPropertyCount,
     VkLayerProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
     vkEnumerateDeviceLayerProperties_VkResult_return = vkEnc->vkEnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
@@ -205,6 +222,7 @@
     uint32_t queueIndex,
     VkQueue* pQueue)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceQueue");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
 }
@@ -214,6 +232,7 @@
     const VkSubmitInfo* pSubmits,
     VkFence fence)
 {
+    AEMU_SCOPED_TRACE("vkQueueSubmit");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
     vkQueueSubmit_VkResult_return = vkEnc->vkQueueSubmit(queue, submitCount, pSubmits, fence);
@@ -222,6 +241,7 @@
 static VkResult entry_vkQueueWaitIdle(
     VkQueue queue)
 {
+    AEMU_SCOPED_TRACE("vkQueueWaitIdle");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkQueueWaitIdle_VkResult_return = (VkResult)0;
     vkQueueWaitIdle_VkResult_return = vkEnc->vkQueueWaitIdle(queue);
@@ -230,6 +250,7 @@
 static VkResult entry_vkDeviceWaitIdle(
     VkDevice device)
 {
+    AEMU_SCOPED_TRACE("vkDeviceWaitIdle");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkDeviceWaitIdle_VkResult_return = (VkResult)0;
     vkDeviceWaitIdle_VkResult_return = vkEnc->vkDeviceWaitIdle(device);
@@ -241,6 +262,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDeviceMemory* pMemory)
 {
+    AEMU_SCOPED_TRACE("vkAllocateMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAllocateMemory_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -252,6 +274,7 @@
     VkDeviceMemory memory,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkFreeMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkFreeMemory(vkEnc, device, memory, pAllocator);
@@ -264,6 +287,7 @@
     VkMemoryMapFlags flags,
     void** ppData)
 {
+    AEMU_SCOPED_TRACE("vkMapMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkMapMemory_VkResult_return = (VkResult)0;
     vkMapMemory_VkResult_return = vkEnc->vkMapMemory(device, memory, offset, size, flags, ppData);
@@ -273,6 +297,7 @@
     VkDevice device,
     VkDeviceMemory memory)
 {
+    AEMU_SCOPED_TRACE("vkUnmapMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkUnmapMemory(device, memory);
 }
@@ -281,6 +306,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
+    AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
     vkFlushMappedMemoryRanges_VkResult_return = vkEnc->vkFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
@@ -291,6 +317,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
+    AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
     vkInvalidateMappedMemoryRanges_VkResult_return = vkEnc->vkInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
@@ -301,6 +328,7 @@
     VkDeviceMemory memory,
     VkDeviceSize* pCommittedMemoryInBytes)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
 }
@@ -310,6 +338,7 @@
     VkDeviceMemory memory,
     VkDeviceSize memoryOffset)
 {
+    AEMU_SCOPED_TRACE("vkBindBufferMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindBufferMemory_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -322,6 +351,7 @@
     VkDeviceMemory memory,
     VkDeviceSize memoryOffset)
 {
+    AEMU_SCOPED_TRACE("vkBindImageMemory");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindImageMemory_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -333,6 +363,7 @@
     VkBuffer buffer,
     VkMemoryRequirements* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetBufferMemoryRequirements(vkEnc, device, buffer, pMemoryRequirements);
@@ -342,6 +373,7 @@
     VkImage image,
     VkMemoryRequirements* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetImageMemoryRequirements(vkEnc, device, image, pMemoryRequirements);
@@ -352,6 +384,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 }
@@ -365,6 +398,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
 }
@@ -374,6 +408,7 @@
     const VkBindSparseInfo* pBindInfo,
     VkFence fence)
 {
+    AEMU_SCOPED_TRACE("vkQueueBindSparse");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkQueueBindSparse_VkResult_return = (VkResult)0;
     vkQueueBindSparse_VkResult_return = vkEnc->vkQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
@@ -385,6 +420,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    AEMU_SCOPED_TRACE("vkCreateFence");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateFence_VkResult_return = (VkResult)0;
     vkCreateFence_VkResult_return = vkEnc->vkCreateFence(device, pCreateInfo, pAllocator, pFence);
@@ -395,6 +431,7 @@
     VkFence fence,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyFence");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyFence(device, fence, pAllocator);
 }
@@ -403,6 +440,7 @@
     uint32_t fenceCount,
     const VkFence* pFences)
 {
+    AEMU_SCOPED_TRACE("vkResetFences");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkResetFences_VkResult_return = (VkResult)0;
     vkResetFences_VkResult_return = vkEnc->vkResetFences(device, fenceCount, pFences);
@@ -412,6 +450,7 @@
     VkDevice device,
     VkFence fence)
 {
+    AEMU_SCOPED_TRACE("vkGetFenceStatus");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetFenceStatus_VkResult_return = (VkResult)0;
     vkGetFenceStatus_VkResult_return = vkEnc->vkGetFenceStatus(device, fence);
@@ -424,6 +463,7 @@
     VkBool32 waitAll,
     uint64_t timeout)
 {
+    AEMU_SCOPED_TRACE("vkWaitForFences");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkWaitForFences_VkResult_return = (VkResult)0;
     vkWaitForFences_VkResult_return = vkEnc->vkWaitForFences(device, fenceCount, pFences, waitAll, timeout);
@@ -435,6 +475,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSemaphore* pSemaphore)
 {
+    AEMU_SCOPED_TRACE("vkCreateSemaphore");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSemaphore_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -446,6 +487,7 @@
     VkSemaphore semaphore,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySemaphore");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkDestroySemaphore(vkEnc, device, semaphore, pAllocator);
@@ -456,6 +498,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkEvent* pEvent)
 {
+    AEMU_SCOPED_TRACE("vkCreateEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateEvent_VkResult_return = (VkResult)0;
     vkCreateEvent_VkResult_return = vkEnc->vkCreateEvent(device, pCreateInfo, pAllocator, pEvent);
@@ -466,6 +509,7 @@
     VkEvent event,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyEvent(device, event, pAllocator);
 }
@@ -473,6 +517,7 @@
     VkDevice device,
     VkEvent event)
 {
+    AEMU_SCOPED_TRACE("vkGetEventStatus");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetEventStatus_VkResult_return = (VkResult)0;
     vkGetEventStatus_VkResult_return = vkEnc->vkGetEventStatus(device, event);
@@ -482,6 +527,7 @@
     VkDevice device,
     VkEvent event)
 {
+    AEMU_SCOPED_TRACE("vkSetEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkSetEvent_VkResult_return = (VkResult)0;
     vkSetEvent_VkResult_return = vkEnc->vkSetEvent(device, event);
@@ -491,6 +537,7 @@
     VkDevice device,
     VkEvent event)
 {
+    AEMU_SCOPED_TRACE("vkResetEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkResetEvent_VkResult_return = (VkResult)0;
     vkResetEvent_VkResult_return = vkEnc->vkResetEvent(device, event);
@@ -502,6 +549,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkQueryPool* pQueryPool)
 {
+    AEMU_SCOPED_TRACE("vkCreateQueryPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateQueryPool_VkResult_return = (VkResult)0;
     vkCreateQueryPool_VkResult_return = vkEnc->vkCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
@@ -512,6 +560,7 @@
     VkQueryPool queryPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyQueryPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyQueryPool(device, queryPool, pAllocator);
 }
@@ -525,6 +574,7 @@
     VkDeviceSize stride,
     VkQueryResultFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkGetQueryPoolResults");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetQueryPoolResults_VkResult_return = (VkResult)0;
     vkGetQueryPoolResults_VkResult_return = vkEnc->vkGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
@@ -536,6 +586,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkBuffer* pBuffer)
 {
+    AEMU_SCOPED_TRACE("vkCreateBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateBuffer_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -547,6 +598,7 @@
     VkBuffer buffer,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkDestroyBuffer(vkEnc, device, buffer, pAllocator);
@@ -557,6 +609,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkBufferView* pView)
 {
+    AEMU_SCOPED_TRACE("vkCreateBufferView");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateBufferView_VkResult_return = (VkResult)0;
     vkCreateBufferView_VkResult_return = vkEnc->vkCreateBufferView(device, pCreateInfo, pAllocator, pView);
@@ -567,6 +620,7 @@
     VkBufferView bufferView,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyBufferView");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyBufferView(device, bufferView, pAllocator);
 }
@@ -576,6 +630,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkImage* pImage)
 {
+    AEMU_SCOPED_TRACE("vkCreateImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateImage_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -587,6 +642,7 @@
     VkImage image,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkDestroyImage(vkEnc, device, image, pAllocator);
@@ -597,6 +653,7 @@
     const VkImageSubresource* pSubresource,
     VkSubresourceLayout* pLayout)
 {
+    AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetImageSubresourceLayout(device, image, pSubresource, pLayout);
 }
@@ -606,6 +663,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkImageView* pView)
 {
+    AEMU_SCOPED_TRACE("vkCreateImageView");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateImageView_VkResult_return = (VkResult)0;
     vkCreateImageView_VkResult_return = vkEnc->vkCreateImageView(device, pCreateInfo, pAllocator, pView);
@@ -616,6 +674,7 @@
     VkImageView imageView,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyImageView");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyImageView(device, imageView, pAllocator);
 }
@@ -625,6 +684,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkShaderModule* pShaderModule)
 {
+    AEMU_SCOPED_TRACE("vkCreateShaderModule");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateShaderModule_VkResult_return = (VkResult)0;
     vkCreateShaderModule_VkResult_return = vkEnc->vkCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
@@ -635,6 +695,7 @@
     VkShaderModule shaderModule,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyShaderModule");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyShaderModule(device, shaderModule, pAllocator);
 }
@@ -644,6 +705,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipelineCache* pPipelineCache)
 {
+    AEMU_SCOPED_TRACE("vkCreatePipelineCache");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreatePipelineCache_VkResult_return = (VkResult)0;
     vkCreatePipelineCache_VkResult_return = vkEnc->vkCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
@@ -654,6 +716,7 @@
     VkPipelineCache pipelineCache,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyPipelineCache");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyPipelineCache(device, pipelineCache, pAllocator);
 }
@@ -663,6 +726,7 @@
     size_t* pDataSize,
     void* pData)
 {
+    AEMU_SCOPED_TRACE("vkGetPipelineCacheData");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPipelineCacheData_VkResult_return = (VkResult)0;
     vkGetPipelineCacheData_VkResult_return = vkEnc->vkGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
@@ -674,6 +738,7 @@
     uint32_t srcCacheCount,
     const VkPipelineCache* pSrcCaches)
 {
+    AEMU_SCOPED_TRACE("vkMergePipelineCaches");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkMergePipelineCaches_VkResult_return = (VkResult)0;
     vkMergePipelineCaches_VkResult_return = vkEnc->vkMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
@@ -687,6 +752,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipeline* pPipelines)
 {
+    AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
     vkCreateGraphicsPipelines_VkResult_return = vkEnc->vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
@@ -700,6 +766,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipeline* pPipelines)
 {
+    AEMU_SCOPED_TRACE("vkCreateComputePipelines");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateComputePipelines_VkResult_return = (VkResult)0;
     vkCreateComputePipelines_VkResult_return = vkEnc->vkCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
@@ -710,6 +777,7 @@
     VkPipeline pipeline,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyPipeline");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyPipeline(device, pipeline, pAllocator);
 }
@@ -719,6 +787,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkPipelineLayout* pPipelineLayout)
 {
+    AEMU_SCOPED_TRACE("vkCreatePipelineLayout");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreatePipelineLayout_VkResult_return = (VkResult)0;
     vkCreatePipelineLayout_VkResult_return = vkEnc->vkCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
@@ -729,6 +798,7 @@
     VkPipelineLayout pipelineLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyPipelineLayout");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyPipelineLayout(device, pipelineLayout, pAllocator);
 }
@@ -738,6 +808,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSampler* pSampler)
 {
+    AEMU_SCOPED_TRACE("vkCreateSampler");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSampler_VkResult_return = (VkResult)0;
     vkCreateSampler_VkResult_return = vkEnc->vkCreateSampler(device, pCreateInfo, pAllocator, pSampler);
@@ -748,6 +819,7 @@
     VkSampler sampler,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySampler");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroySampler(device, sampler, pAllocator);
 }
@@ -757,6 +829,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorSetLayout* pSetLayout)
 {
+    AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
     vkCreateDescriptorSetLayout_VkResult_return = vkEnc->vkCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
@@ -767,6 +840,7 @@
     VkDescriptorSetLayout descriptorSetLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
 }
@@ -776,6 +850,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorPool* pDescriptorPool)
 {
+    AEMU_SCOPED_TRACE("vkCreateDescriptorPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDescriptorPool_VkResult_return = (VkResult)0;
     vkCreateDescriptorPool_VkResult_return = vkEnc->vkCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
@@ -786,6 +861,7 @@
     VkDescriptorPool descriptorPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDescriptorPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDescriptorPool(device, descriptorPool, pAllocator);
 }
@@ -794,6 +870,7 @@
     VkDescriptorPool descriptorPool,
     VkDescriptorPoolResetFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkResetDescriptorPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkResetDescriptorPool_VkResult_return = (VkResult)0;
     vkResetDescriptorPool_VkResult_return = vkEnc->vkResetDescriptorPool(device, descriptorPool, flags);
@@ -804,6 +881,7 @@
     const VkDescriptorSetAllocateInfo* pAllocateInfo,
     VkDescriptorSet* pDescriptorSets)
 {
+    AEMU_SCOPED_TRACE("vkAllocateDescriptorSets");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
     vkAllocateDescriptorSets_VkResult_return = vkEnc->vkAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
@@ -815,6 +893,7 @@
     uint32_t descriptorSetCount,
     const VkDescriptorSet* pDescriptorSets)
 {
+    AEMU_SCOPED_TRACE("vkFreeDescriptorSets");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkFreeDescriptorSets_VkResult_return = (VkResult)0;
     vkFreeDescriptorSets_VkResult_return = vkEnc->vkFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
@@ -827,6 +906,7 @@
     uint32_t descriptorCopyCount,
     const VkCopyDescriptorSet* pDescriptorCopies)
 {
+    AEMU_SCOPED_TRACE("vkUpdateDescriptorSets");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
 }
@@ -836,6 +916,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFramebuffer* pFramebuffer)
 {
+    AEMU_SCOPED_TRACE("vkCreateFramebuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateFramebuffer_VkResult_return = (VkResult)0;
     vkCreateFramebuffer_VkResult_return = vkEnc->vkCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
@@ -846,6 +927,7 @@
     VkFramebuffer framebuffer,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyFramebuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyFramebuffer(device, framebuffer, pAllocator);
 }
@@ -855,6 +937,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkRenderPass* pRenderPass)
 {
+    AEMU_SCOPED_TRACE("vkCreateRenderPass");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateRenderPass_VkResult_return = (VkResult)0;
     vkCreateRenderPass_VkResult_return = vkEnc->vkCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
@@ -865,6 +948,7 @@
     VkRenderPass renderPass,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyRenderPass");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyRenderPass(device, renderPass, pAllocator);
 }
@@ -873,6 +957,7 @@
     VkRenderPass renderPass,
     VkExtent2D* pGranularity)
 {
+    AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetRenderAreaGranularity(device, renderPass, pGranularity);
 }
@@ -882,6 +967,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkCommandPool* pCommandPool)
 {
+    AEMU_SCOPED_TRACE("vkCreateCommandPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateCommandPool_VkResult_return = (VkResult)0;
     vkCreateCommandPool_VkResult_return = vkEnc->vkCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
@@ -892,6 +978,7 @@
     VkCommandPool commandPool,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyCommandPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyCommandPool(device, commandPool, pAllocator);
 }
@@ -900,6 +987,7 @@
     VkCommandPool commandPool,
     VkCommandPoolResetFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkResetCommandPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkResetCommandPool_VkResult_return = (VkResult)0;
     vkResetCommandPool_VkResult_return = vkEnc->vkResetCommandPool(device, commandPool, flags);
@@ -910,6 +998,7 @@
     const VkCommandBufferAllocateInfo* pAllocateInfo,
     VkCommandBuffer* pCommandBuffers)
 {
+    AEMU_SCOPED_TRACE("vkAllocateCommandBuffers");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
     vkAllocateCommandBuffers_VkResult_return = vkEnc->vkAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
@@ -921,6 +1010,7 @@
     uint32_t commandBufferCount,
     const VkCommandBuffer* pCommandBuffers)
 {
+    AEMU_SCOPED_TRACE("vkFreeCommandBuffers");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
 }
@@ -928,6 +1018,7 @@
     VkCommandBuffer commandBuffer,
     const VkCommandBufferBeginInfo* pBeginInfo)
 {
+    AEMU_SCOPED_TRACE("vkBeginCommandBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
     vkBeginCommandBuffer_VkResult_return = vkEnc->vkBeginCommandBuffer(commandBuffer, pBeginInfo);
@@ -936,6 +1027,7 @@
 static VkResult entry_vkEndCommandBuffer(
     VkCommandBuffer commandBuffer)
 {
+    AEMU_SCOPED_TRACE("vkEndCommandBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
     vkEndCommandBuffer_VkResult_return = vkEnc->vkEndCommandBuffer(commandBuffer);
@@ -945,6 +1037,7 @@
     VkCommandBuffer commandBuffer,
     VkCommandBufferResetFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkResetCommandBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
     vkResetCommandBuffer_VkResult_return = vkEnc->vkResetCommandBuffer(commandBuffer, flags);
@@ -955,6 +1048,7 @@
     VkPipelineBindPoint pipelineBindPoint,
     VkPipeline pipeline)
 {
+    AEMU_SCOPED_TRACE("vkCmdBindPipeline");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
 }
@@ -964,6 +1058,7 @@
     uint32_t viewportCount,
     const VkViewport* pViewports)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetViewport");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
 }
@@ -973,6 +1068,7 @@
     uint32_t scissorCount,
     const VkRect2D* pScissors)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetScissor");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
 }
@@ -980,6 +1076,7 @@
     VkCommandBuffer commandBuffer,
     float lineWidth)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetLineWidth");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetLineWidth(commandBuffer, lineWidth);
 }
@@ -989,6 +1086,7 @@
     float depthBiasClamp,
     float depthBiasSlopeFactor)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetDepthBias");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
 }
@@ -996,6 +1094,7 @@
     VkCommandBuffer commandBuffer,
     const float blendConstants)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetBlendConstants");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetBlendConstants(commandBuffer, blendConstants);
 }
@@ -1004,6 +1103,7 @@
     float minDepthBounds,
     float maxDepthBounds)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetDepthBounds");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
 }
@@ -1012,6 +1112,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t compareMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
 }
@@ -1020,6 +1121,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t writeMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
 }
@@ -1028,6 +1130,7 @@
     VkStencilFaceFlags faceMask,
     uint32_t reference)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetStencilReference");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetStencilReference(commandBuffer, faceMask, reference);
 }
@@ -1041,6 +1144,7 @@
     uint32_t dynamicOffsetCount,
     const uint32_t* pDynamicOffsets)
 {
+    AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
 }
@@ -1050,6 +1154,7 @@
     VkDeviceSize offset,
     VkIndexType indexType)
 {
+    AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
 }
@@ -1060,6 +1165,7 @@
     const VkBuffer* pBuffers,
     const VkDeviceSize* pOffsets)
 {
+    AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
 }
@@ -1070,6 +1176,7 @@
     uint32_t firstVertex,
     uint32_t firstInstance)
 {
+    AEMU_SCOPED_TRACE("vkCmdDraw");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
 }
@@ -1081,6 +1188,7 @@
     int32_t vertexOffset,
     uint32_t firstInstance)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndexed");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
 }
@@ -1091,6 +1199,7 @@
     uint32_t drawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndirect");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
 }
@@ -1101,6 +1210,7 @@
     uint32_t drawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
 }
@@ -1110,6 +1220,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    AEMU_SCOPED_TRACE("vkCmdDispatch");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
 }
@@ -1118,6 +1229,7 @@
     VkBuffer buffer,
     VkDeviceSize offset)
 {
+    AEMU_SCOPED_TRACE("vkCmdDispatchIndirect");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDispatchIndirect(commandBuffer, buffer, offset);
 }
@@ -1128,6 +1240,7 @@
     uint32_t regionCount,
     const VkBufferCopy* pRegions)
 {
+    AEMU_SCOPED_TRACE("vkCmdCopyBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
 }
@@ -1140,6 +1253,7 @@
     uint32_t regionCount,
     const VkImageCopy* pRegions)
 {
+    AEMU_SCOPED_TRACE("vkCmdCopyImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
 }
@@ -1153,6 +1267,7 @@
     const VkImageBlit* pRegions,
     VkFilter filter)
 {
+    AEMU_SCOPED_TRACE("vkCmdBlitImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
 }
@@ -1164,6 +1279,7 @@
     uint32_t regionCount,
     const VkBufferImageCopy* pRegions)
 {
+    AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
 }
@@ -1175,6 +1291,7 @@
     uint32_t regionCount,
     const VkBufferImageCopy* pRegions)
 {
+    AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
 }
@@ -1185,6 +1302,7 @@
     VkDeviceSize dataSize,
     const void* pData)
 {
+    AEMU_SCOPED_TRACE("vkCmdUpdateBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
 }
@@ -1195,6 +1313,7 @@
     VkDeviceSize size,
     uint32_t data)
 {
+    AEMU_SCOPED_TRACE("vkCmdFillBuffer");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
 }
@@ -1206,6 +1325,7 @@
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
+    AEMU_SCOPED_TRACE("vkCmdClearColorImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
 }
@@ -1217,6 +1337,7 @@
     uint32_t rangeCount,
     const VkImageSubresourceRange* pRanges)
 {
+    AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
 }
@@ -1227,6 +1348,7 @@
     uint32_t rectCount,
     const VkClearRect* pRects)
 {
+    AEMU_SCOPED_TRACE("vkCmdClearAttachments");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
 }
@@ -1239,6 +1361,7 @@
     uint32_t regionCount,
     const VkImageResolve* pRegions)
 {
+    AEMU_SCOPED_TRACE("vkCmdResolveImage");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
 }
@@ -1247,6 +1370,7 @@
     VkEvent event,
     VkPipelineStageFlags stageMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetEvent(commandBuffer, event, stageMask);
 }
@@ -1255,6 +1379,7 @@
     VkEvent event,
     VkPipelineStageFlags stageMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdResetEvent");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdResetEvent(commandBuffer, event, stageMask);
 }
@@ -1271,6 +1396,7 @@
     uint32_t imageMemoryBarrierCount,
     const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
+    AEMU_SCOPED_TRACE("vkCmdWaitEvents");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 }
@@ -1286,6 +1412,7 @@
     uint32_t imageMemoryBarrierCount,
     const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
+    AEMU_SCOPED_TRACE("vkCmdPipelineBarrier");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
 }
@@ -1295,6 +1422,7 @@
     uint32_t query,
     VkQueryControlFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkCmdBeginQuery");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBeginQuery(commandBuffer, queryPool, query, flags);
 }
@@ -1303,6 +1431,7 @@
     VkQueryPool queryPool,
     uint32_t query)
 {
+    AEMU_SCOPED_TRACE("vkCmdEndQuery");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdEndQuery(commandBuffer, queryPool, query);
 }
@@ -1312,6 +1441,7 @@
     uint32_t firstQuery,
     uint32_t queryCount)
 {
+    AEMU_SCOPED_TRACE("vkCmdResetQueryPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
 }
@@ -1321,6 +1451,7 @@
     VkQueryPool queryPool,
     uint32_t query)
 {
+    AEMU_SCOPED_TRACE("vkCmdWriteTimestamp");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
 }
@@ -1334,6 +1465,7 @@
     VkDeviceSize stride,
     VkQueryResultFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
 }
@@ -1345,6 +1477,7 @@
     uint32_t size,
     const void* pValues)
 {
+    AEMU_SCOPED_TRACE("vkCmdPushConstants");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
 }
@@ -1353,6 +1486,7 @@
     const VkRenderPassBeginInfo* pRenderPassBegin,
     VkSubpassContents contents)
 {
+    AEMU_SCOPED_TRACE("vkCmdBeginRenderPass");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
 }
@@ -1360,12 +1494,14 @@
     VkCommandBuffer commandBuffer,
     VkSubpassContents contents)
 {
+    AEMU_SCOPED_TRACE("vkCmdNextSubpass");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdNextSubpass(commandBuffer, contents);
 }
 static void entry_vkCmdEndRenderPass(
     VkCommandBuffer commandBuffer)
 {
+    AEMU_SCOPED_TRACE("vkCmdEndRenderPass");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdEndRenderPass(commandBuffer);
 }
@@ -1374,6 +1510,7 @@
     uint32_t commandBufferCount,
     const VkCommandBuffer* pCommandBuffers)
 {
+    AEMU_SCOPED_TRACE("vkCmdExecuteCommands");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
 }
@@ -1382,6 +1519,7 @@
 static VkResult entry_vkEnumerateInstanceVersion(
     uint32_t* pApiVersion)
 {
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
     vkEnumerateInstanceVersion_VkResult_return = vkEnc->vkEnumerateInstanceVersion(pApiVersion);
@@ -1392,6 +1530,7 @@
     uint32_t bindInfoCount,
     const VkBindBufferMemoryInfo* pBindInfos)
 {
+    AEMU_SCOPED_TRACE("vkBindBufferMemory2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -1403,6 +1542,7 @@
     uint32_t bindInfoCount,
     const VkBindImageMemoryInfo* pBindInfos)
 {
+    AEMU_SCOPED_TRACE("vkBindImageMemory2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -1416,6 +1556,7 @@
     uint32_t remoteDeviceIndex,
     VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
 }
@@ -1423,6 +1564,7 @@
     VkCommandBuffer commandBuffer,
     uint32_t deviceMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetDeviceMask");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetDeviceMask(commandBuffer, deviceMask);
 }
@@ -1435,6 +1577,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    AEMU_SCOPED_TRACE("vkCmdDispatchBase");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
 }
@@ -1443,6 +1586,7 @@
     uint32_t* pPhysicalDeviceGroupCount,
     VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
     vkEnumeratePhysicalDeviceGroups_VkResult_return = vkEnc->vkEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
@@ -1453,6 +1597,7 @@
     const VkImageMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetImageMemoryRequirements2(vkEnc, device, pInfo, pMemoryRequirements);
@@ -1462,6 +1607,7 @@
     const VkBufferMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetBufferMemoryRequirements2(vkEnc, device, pInfo, pMemoryRequirements);
@@ -1472,6 +1618,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 }
@@ -1479,6 +1626,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures2* pFeatures)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
 }
@@ -1486,6 +1634,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceProperties2* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceProperties2(physicalDevice, pProperties);
 }
@@ -1494,6 +1643,7 @@
     VkFormat format,
     VkFormatProperties2* pFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
 }
@@ -1502,6 +1652,7 @@
     const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
     VkImageFormatProperties2* pImageFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = vkEnc->vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
@@ -1512,6 +1663,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties2* pQueueFamilyProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
 }
@@ -1519,6 +1671,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
 }
@@ -1528,6 +1681,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties2* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
 }
@@ -1536,6 +1690,7 @@
     VkCommandPool commandPool,
     VkCommandPoolTrimFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkTrimCommandPool");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkTrimCommandPool(device, commandPool, flags);
 }
@@ -1544,6 +1699,7 @@
     const VkDeviceQueueInfo2* pQueueInfo,
     VkQueue* pQueue)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceQueue2");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDeviceQueue2(device, pQueueInfo, pQueue);
 }
@@ -1553,6 +1709,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSamplerYcbcrConversion* pYcbcrConversion)
 {
+    AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
     vkCreateSamplerYcbcrConversion_VkResult_return = vkEnc->vkCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
@@ -1563,6 +1720,7 @@
     VkSamplerYcbcrConversion ycbcrConversion,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
 }
@@ -1572,6 +1730,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
 {
+    AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
     vkCreateDescriptorUpdateTemplate_VkResult_return = vkEnc->vkCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
@@ -1582,6 +1741,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
 }
@@ -1591,6 +1751,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const void* pData)
 {
+    AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
 }
@@ -1599,6 +1760,7 @@
     const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
     VkExternalBufferProperties* pExternalBufferProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
 }
@@ -1607,6 +1769,7 @@
     const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
     VkExternalFenceProperties* pExternalFenceProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
 }
@@ -1615,6 +1778,7 @@
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
 }
@@ -1623,6 +1787,7 @@
     const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
     VkDescriptorSetLayoutSupport* pSupport)
 {
+    AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
 }
@@ -1633,6 +1798,7 @@
     VkSurfaceKHR surface,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroySurfaceKHR(instance, surface, pAllocator);
 }
@@ -1642,6 +1808,7 @@
     VkSurfaceKHR surface,
     VkBool32* pSupported)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
@@ -1652,6 +1819,7 @@
     VkSurfaceKHR surface,
     VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
@@ -1663,6 +1831,7 @@
     uint32_t* pSurfaceFormatCount,
     VkSurfaceFormatKHR* pSurfaceFormats)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
@@ -1674,6 +1843,7 @@
     uint32_t* pPresentModeCount,
     VkPresentModeKHR* pPresentModes)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
@@ -1687,6 +1857,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSwapchainKHR* pSwapchain)
 {
+    AEMU_SCOPED_TRACE("vkCreateSwapchainKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
     vkCreateSwapchainKHR_VkResult_return = vkEnc->vkCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
@@ -1697,6 +1868,7 @@
     VkSwapchainKHR swapchain,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySwapchainKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroySwapchainKHR(device, swapchain, pAllocator);
 }
@@ -1706,6 +1878,7 @@
     uint32_t* pSwapchainImageCount,
     VkImage* pSwapchainImages)
 {
+    AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
     vkGetSwapchainImagesKHR_VkResult_return = vkEnc->vkGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
@@ -1719,6 +1892,7 @@
     VkFence fence,
     uint32_t* pImageIndex)
 {
+    AEMU_SCOPED_TRACE("vkAcquireNextImageKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
     vkAcquireNextImageKHR_VkResult_return = vkEnc->vkAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
@@ -1728,6 +1902,7 @@
     VkQueue queue,
     const VkPresentInfoKHR* pPresentInfo)
 {
+    AEMU_SCOPED_TRACE("vkQueuePresentKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkQueuePresentKHR_VkResult_return = (VkResult)0;
     vkQueuePresentKHR_VkResult_return = vkEnc->vkQueuePresentKHR(queue, pPresentInfo);
@@ -1737,6 +1912,7 @@
     VkDevice device,
     VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
     vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = vkEnc->vkGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
@@ -1747,6 +1923,7 @@
     VkSurfaceKHR surface,
     VkDeviceGroupPresentModeFlagsKHR* pModes)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
     vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = vkEnc->vkGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
@@ -1758,6 +1935,7 @@
     uint32_t* pRectCount,
     VkRect2D* pRects)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = vkEnc->vkGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
@@ -1768,6 +1946,7 @@
     const VkAcquireNextImageInfoKHR* pAcquireInfo,
     uint32_t* pImageIndex)
 {
+    AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
     vkAcquireNextImage2KHR_VkResult_return = vkEnc->vkAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
@@ -1780,6 +1959,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPropertiesKHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
@@ -1790,6 +1970,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPlanePropertiesKHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = vkEnc->vkGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
@@ -1801,6 +1982,7 @@
     uint32_t* pDisplayCount,
     VkDisplayKHR* pDisplays)
 {
+    AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
     vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = vkEnc->vkGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
@@ -1812,6 +1994,7 @@
     uint32_t* pPropertyCount,
     VkDisplayModePropertiesKHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
     vkGetDisplayModePropertiesKHR_VkResult_return = vkEnc->vkGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
@@ -1824,6 +2007,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDisplayModeKHR* pMode)
 {
+    AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
     vkCreateDisplayModeKHR_VkResult_return = vkEnc->vkCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
@@ -1835,6 +2019,7 @@
     uint32_t planeIndex,
     VkDisplayPlaneCapabilitiesKHR* pCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
     vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = vkEnc->vkGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
@@ -1846,6 +2031,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateDisplayPlaneSurfaceKHR_VkResult_return = vkEnc->vkCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1860,6 +2046,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSwapchainKHR* pSwapchains)
 {
+    AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
     vkCreateSharedSwapchainsKHR_VkResult_return = vkEnc->vkCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
@@ -1873,6 +2060,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateXlibSurfaceKHR_VkResult_return = vkEnc->vkCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1884,6 +2072,7 @@
     Display* dpy,
     VisualID visualID)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = (VkBool32)0;
     vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = vkEnc->vkGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
@@ -1897,6 +2086,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateXcbSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateXcbSurfaceKHR_VkResult_return = vkEnc->vkCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1908,6 +2098,7 @@
     xcb_connection_t* connection,
     xcb_visualid_t visual_id)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = (VkBool32)0;
     vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = vkEnc->vkGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
@@ -1921,6 +2112,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateWaylandSurfaceKHR_VkResult_return = vkEnc->vkCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1931,6 +2123,7 @@
     uint32_t queueFamilyIndex,
     wl_display* display)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = (VkBool32)0;
     vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = vkEnc->vkGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
@@ -1944,6 +2137,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateMirSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateMirSurfaceKHR_VkResult_return = vkEnc->vkCreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1954,6 +2148,7 @@
     uint32_t queueFamilyIndex,
     MirConnection* connection)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = (VkBool32)0;
     vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = vkEnc->vkGetPhysicalDeviceMirPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection);
@@ -1967,6 +2162,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateAndroidSurfaceKHR_VkResult_return = vkEnc->vkCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1980,6 +2176,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
     vkCreateWin32SurfaceKHR_VkResult_return = vkEnc->vkCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
@@ -1989,6 +2186,7 @@
     VkPhysicalDevice physicalDevice,
     uint32_t queueFamilyIndex)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = (VkBool32)0;
     vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = vkEnc->vkGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
@@ -2004,6 +2202,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceFeatures2* pFeatures)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
 }
@@ -2011,6 +2210,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceProperties2* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
 }
@@ -2019,6 +2219,7 @@
     VkFormat format,
     VkFormatProperties2* pFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
 }
@@ -2027,6 +2228,7 @@
     const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
     VkImageFormatProperties2* pImageFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = vkEnc->vkGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
@@ -2037,6 +2239,7 @@
     uint32_t* pQueueFamilyPropertyCount,
     VkQueueFamilyProperties2* pQueueFamilyProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
 }
@@ -2044,6 +2247,7 @@
     VkPhysicalDevice physicalDevice,
     VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
 }
@@ -2053,6 +2257,7 @@
     uint32_t* pPropertyCount,
     VkSparseImageFormatProperties2* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
 }
@@ -2065,6 +2270,7 @@
     uint32_t remoteDeviceIndex,
     VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
 {
+    AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
 }
@@ -2072,6 +2278,7 @@
     VkCommandBuffer commandBuffer,
     uint32_t deviceMask)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
 }
@@ -2084,6 +2291,7 @@
     uint32_t groupCountY,
     uint32_t groupCountZ)
 {
+    AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
 }
@@ -2096,6 +2304,7 @@
     VkCommandPool commandPool,
     VkCommandPoolTrimFlags flags)
 {
+    AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkTrimCommandPoolKHR(device, commandPool, flags);
 }
@@ -2106,6 +2315,7 @@
     uint32_t* pPhysicalDeviceGroupCount,
     VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
 {
+    AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
     vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = vkEnc->vkEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
@@ -2118,6 +2328,7 @@
     const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
     VkExternalBufferProperties* pExternalBufferProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
 }
@@ -2130,6 +2341,7 @@
     const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
     vkGetMemoryWin32HandleKHR_VkResult_return = vkEnc->vkGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
@@ -2141,6 +2353,7 @@
     HANDLE handle,
     VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
     vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = vkEnc->vkGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
@@ -2153,6 +2366,7 @@
     const VkMemoryGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryFdKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
     vkGetMemoryFdKHR_VkResult_return = vkEnc->vkGetMemoryFdKHR(device, pGetFdInfo, pFd);
@@ -2164,6 +2378,7 @@
     int fd,
     VkMemoryFdPropertiesKHR* pMemoryFdProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
     vkGetMemoryFdPropertiesKHR_VkResult_return = vkEnc->vkGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
@@ -2178,6 +2393,7 @@
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
 }
@@ -2189,6 +2405,7 @@
     VkDevice device,
     const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
 {
+    AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
     vkImportSemaphoreWin32HandleKHR_VkResult_return = vkEnc->vkImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
@@ -2199,6 +2416,7 @@
     const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
     vkGetSemaphoreWin32HandleKHR_VkResult_return = vkEnc->vkGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
@@ -2210,6 +2428,7 @@
     VkDevice device,
     const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
 {
+    AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
     vkImportSemaphoreFdKHR_VkResult_return = vkEnc->vkImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
@@ -2220,6 +2439,7 @@
     const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
     vkGetSemaphoreFdKHR_VkResult_return = vkEnc->vkGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
@@ -2235,6 +2455,7 @@
     uint32_t descriptorWriteCount,
     const VkWriteDescriptorSet* pDescriptorWrites)
 {
+    AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
 }
@@ -2245,6 +2466,7 @@
     uint32_t set,
     const void* pData)
 {
+    AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
 }
@@ -2260,6 +2482,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
 {
+    AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
     vkCreateDescriptorUpdateTemplateKHR_VkResult_return = vkEnc->vkCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
@@ -2270,6 +2493,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
 }
@@ -2279,6 +2503,7 @@
     VkDescriptorUpdateTemplate descriptorUpdateTemplate,
     const void* pData)
 {
+    AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
 }
@@ -2290,6 +2515,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkRenderPass* pRenderPass)
 {
+    AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
     vkCreateRenderPass2KHR_VkResult_return = vkEnc->vkCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
@@ -2300,6 +2526,7 @@
     const VkRenderPassBeginInfo* pRenderPassBegin,
     const VkSubpassBeginInfoKHR* pSubpassBeginInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
 }
@@ -2308,6 +2535,7 @@
     const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
     const VkSubpassEndInfoKHR* pSubpassEndInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
 }
@@ -2315,6 +2543,7 @@
     VkCommandBuffer commandBuffer,
     const VkSubpassEndInfoKHR* pSubpassEndInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
 }
@@ -2324,6 +2553,7 @@
     VkDevice device,
     VkSwapchainKHR swapchain)
 {
+    AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
     vkGetSwapchainStatusKHR_VkResult_return = vkEnc->vkGetSwapchainStatusKHR(device, swapchain);
@@ -2336,6 +2566,7 @@
     const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
     VkExternalFenceProperties* pExternalFenceProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
 }
@@ -2347,6 +2578,7 @@
     VkDevice device,
     const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
 {
+    AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
     vkImportFenceWin32HandleKHR_VkResult_return = vkEnc->vkImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
@@ -2357,6 +2589,7 @@
     const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
     HANDLE* pHandle)
 {
+    AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
     vkGetFenceWin32HandleKHR_VkResult_return = vkEnc->vkGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
@@ -2368,6 +2601,7 @@
     VkDevice device,
     const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
 {
+    AEMU_SCOPED_TRACE("vkImportFenceFdKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
     vkImportFenceFdKHR_VkResult_return = vkEnc->vkImportFenceFdKHR(device, pImportFenceFdInfo);
@@ -2378,6 +2612,7 @@
     const VkFenceGetFdInfoKHR* pGetFdInfo,
     int* pFd)
 {
+    AEMU_SCOPED_TRACE("vkGetFenceFdKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
     vkGetFenceFdKHR_VkResult_return = vkEnc->vkGetFenceFdKHR(device, pGetFdInfo, pFd);
@@ -2392,6 +2627,7 @@
     const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
     VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
@@ -2403,6 +2639,7 @@
     uint32_t* pSurfaceFormatCount,
     VkSurfaceFormat2KHR* pSurfaceFormats)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
@@ -2417,6 +2654,7 @@
     uint32_t* pPropertyCount,
     VkDisplayProperties2KHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = vkEnc->vkGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
@@ -2427,6 +2665,7 @@
     uint32_t* pPropertyCount,
     VkDisplayPlaneProperties2KHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = vkEnc->vkGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
@@ -2438,6 +2677,7 @@
     uint32_t* pPropertyCount,
     VkDisplayModeProperties2KHR* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
     vkGetDisplayModeProperties2KHR_VkResult_return = vkEnc->vkGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
@@ -2448,6 +2688,7 @@
     const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
     VkDisplayPlaneCapabilities2KHR* pCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
     vkGetDisplayPlaneCapabilities2KHR_VkResult_return = vkEnc->vkGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
@@ -2466,6 +2707,7 @@
     const VkImageMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetImageMemoryRequirements2KHR(vkEnc, device, pInfo, pMemoryRequirements);
@@ -2475,6 +2717,7 @@
     const VkBufferMemoryRequirementsInfo2* pInfo,
     VkMemoryRequirements2* pMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     auto resources = ResourceTracker::get();
     resources->on_vkGetBufferMemoryRequirements2KHR(vkEnc, device, pInfo, pMemoryRequirements);
@@ -2485,6 +2728,7 @@
     uint32_t* pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
 {
+    AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 }
@@ -2498,6 +2742,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSamplerYcbcrConversion* pYcbcrConversion)
 {
+    AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
     vkCreateSamplerYcbcrConversionKHR_VkResult_return = vkEnc->vkCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
@@ -2508,6 +2753,7 @@
     VkSamplerYcbcrConversion ycbcrConversion,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
 }
@@ -2518,6 +2764,7 @@
     uint32_t bindInfoCount,
     const VkBindBufferMemoryInfo* pBindInfos)
 {
+    AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -2529,6 +2776,7 @@
     uint32_t bindInfoCount,
     const VkBindImageMemoryInfo* pBindInfos)
 {
+    AEMU_SCOPED_TRACE("vkBindImageMemory2KHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
     auto resources = ResourceTracker::get();
@@ -2542,6 +2790,7 @@
     const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
     VkDescriptorSetLayoutSupport* pSupport)
 {
+    AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
 }
@@ -2556,6 +2805,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
 }
@@ -2568,6 +2818,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
 }
@@ -2581,6 +2832,7 @@
     VkImageUsageFlags imageUsage,
     int* grallocUsage)
 {
+    AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
     vkGetSwapchainGrallocUsageANDROID_VkResult_return = vkEnc->vkGetSwapchainGrallocUsageANDROID(device, format, imageUsage, grallocUsage);
@@ -2593,6 +2845,7 @@
     VkSemaphore semaphore,
     VkFence fence)
 {
+    AEMU_SCOPED_TRACE("vkAcquireImageANDROID");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
     vkAcquireImageANDROID_VkResult_return = vkEnc->vkAcquireImageANDROID(device, image, nativeFenceFd, semaphore, fence);
@@ -2605,6 +2858,7 @@
     VkImage image,
     int* pNativeFenceFd)
 {
+    AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
     vkQueueSignalReleaseImageANDROID_VkResult_return = vkEnc->vkQueueSignalReleaseImageANDROID(queue, waitSemaphoreCount, pWaitSemaphores, image, pNativeFenceFd);
@@ -2618,6 +2872,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDebugReportCallbackEXT* pCallback)
 {
+    AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
     vkCreateDebugReportCallbackEXT_VkResult_return = vkEnc->vkCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
@@ -2628,6 +2883,7 @@
     VkDebugReportCallbackEXT callback,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
 }
@@ -2641,6 +2897,7 @@
     const char* pLayerPrefix,
     const char* pMessage)
 {
+    AEMU_SCOPED_TRACE("vkDebugReportMessageEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
 }
@@ -2662,6 +2919,7 @@
     VkDevice device,
     const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
 {
+    AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
     vkDebugMarkerSetObjectTagEXT_VkResult_return = vkEnc->vkDebugMarkerSetObjectTagEXT(device, pTagInfo);
@@ -2671,6 +2929,7 @@
     VkDevice device,
     const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
 {
+    AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
     vkDebugMarkerSetObjectNameEXT_VkResult_return = vkEnc->vkDebugMarkerSetObjectNameEXT(device, pNameInfo);
@@ -2680,12 +2939,14 @@
     VkCommandBuffer commandBuffer,
     const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
 }
 static void entry_vkCmdDebugMarkerEndEXT(
     VkCommandBuffer commandBuffer)
 {
+    AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDebugMarkerEndEXT(commandBuffer);
 }
@@ -2693,6 +2954,7 @@
     VkCommandBuffer commandBuffer,
     const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
 }
@@ -2711,6 +2973,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
 }
@@ -2723,6 +2986,7 @@
     uint32_t maxDrawCount,
     uint32_t stride)
 {
+    AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
 }
@@ -2744,6 +3008,7 @@
     size_t* pInfoSize,
     void* pInfo)
 {
+    AEMU_SCOPED_TRACE("vkGetShaderInfoAMD");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
     vkGetShaderInfoAMD_VkResult_return = vkEnc->vkGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
@@ -2765,6 +3030,7 @@
     VkExternalMemoryHandleTypeFlagsNV externalHandleType,
     VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = vkEnc->vkGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
@@ -2780,6 +3046,7 @@
     VkExternalMemoryHandleTypeFlagsNV handleType,
     HANDLE* pHandle)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
     vkGetMemoryWin32HandleNV_VkResult_return = vkEnc->vkGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
@@ -2797,6 +3064,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateViSurfaceNN");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
     vkCreateViSurfaceNN_VkResult_return = vkEnc->vkCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
@@ -2812,12 +3080,14 @@
     VkCommandBuffer commandBuffer,
     const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
 {
+    AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
 }
 static void entry_vkCmdEndConditionalRenderingEXT(
     VkCommandBuffer commandBuffer)
 {
+    AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdEndConditionalRenderingEXT(commandBuffer);
 }
@@ -2827,6 +3097,7 @@
     VkCommandBuffer commandBuffer,
     const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
 }
@@ -2834,6 +3105,7 @@
     VkCommandBuffer commandBuffer,
     const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
 }
@@ -2843,6 +3115,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout)
 {
+    AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateIndirectCommandsLayoutNVX_VkResult_return = (VkResult)0;
     vkCreateIndirectCommandsLayoutNVX_VkResult_return = vkEnc->vkCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
@@ -2853,6 +3126,7 @@
     VkIndirectCommandsLayoutNVX indirectCommandsLayout,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
 }
@@ -2862,6 +3136,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkObjectTableNVX* pObjectTable)
 {
+    AEMU_SCOPED_TRACE("vkCreateObjectTableNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateObjectTableNVX_VkResult_return = (VkResult)0;
     vkCreateObjectTableNVX_VkResult_return = vkEnc->vkCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
@@ -2872,6 +3147,7 @@
     VkObjectTableNVX objectTable,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyObjectTableNVX(device, objectTable, pAllocator);
 }
@@ -2882,6 +3158,7 @@
     const VkObjectTableEntryNVX* const* ppObjectTableEntries,
     const uint32_t* pObjectIndices)
 {
+    AEMU_SCOPED_TRACE("vkRegisterObjectsNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkRegisterObjectsNVX_VkResult_return = (VkResult)0;
     vkRegisterObjectsNVX_VkResult_return = vkEnc->vkRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
@@ -2894,6 +3171,7 @@
     const VkObjectEntryTypeNVX* pObjectEntryTypes,
     const uint32_t* pObjectIndices)
 {
+    AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkUnregisterObjectsNVX_VkResult_return = (VkResult)0;
     vkUnregisterObjectsNVX_VkResult_return = vkEnc->vkUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
@@ -2904,6 +3182,7 @@
     VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
     VkDeviceGeneratedCommandsLimitsNVX* pLimits)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
 }
@@ -2915,6 +3194,7 @@
     uint32_t viewportCount,
     const VkViewportWScalingNV* pViewportWScalings)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
 }
@@ -2924,6 +3204,7 @@
     VkPhysicalDevice physicalDevice,
     VkDisplayKHR display)
 {
+    AEMU_SCOPED_TRACE("vkReleaseDisplayEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
     vkReleaseDisplayEXT_VkResult_return = vkEnc->vkReleaseDisplayEXT(physicalDevice, display);
@@ -2936,6 +3217,7 @@
     Display* dpy,
     VkDisplayKHR display)
 {
+    AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
     vkAcquireXlibDisplayEXT_VkResult_return = vkEnc->vkAcquireXlibDisplayEXT(physicalDevice, dpy, display);
@@ -2947,6 +3229,7 @@
     RROutput rrOutput,
     VkDisplayKHR* pDisplay)
 {
+    AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
     vkGetRandROutputDisplayEXT_VkResult_return = vkEnc->vkGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
@@ -2959,6 +3242,7 @@
     VkSurfaceKHR surface,
     VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
     vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = vkEnc->vkGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
@@ -2971,6 +3255,7 @@
     VkDisplayKHR display,
     const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
 {
+    AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
     vkDisplayPowerControlEXT_VkResult_return = vkEnc->vkDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
@@ -2982,6 +3267,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
     vkRegisterDeviceEventEXT_VkResult_return = vkEnc->vkRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
@@ -2994,6 +3280,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkFence* pFence)
 {
+    AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
     vkRegisterDisplayEventEXT_VkResult_return = vkEnc->vkRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
@@ -3005,6 +3292,7 @@
     VkSurfaceCounterFlagBitsEXT counter,
     uint64_t* pCounterValue)
 {
+    AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
     vkGetSwapchainCounterEXT_VkResult_return = vkEnc->vkGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
@@ -3017,6 +3305,7 @@
     VkSwapchainKHR swapchain,
     VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
     vkGetRefreshCycleDurationGOOGLE_VkResult_return = vkEnc->vkGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
@@ -3028,6 +3317,7 @@
     uint32_t* pPresentationTimingCount,
     VkPastPresentationTimingGOOGLE* pPresentationTimings)
 {
+    AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
     vkGetPastPresentationTimingGOOGLE_VkResult_return = vkEnc->vkGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
@@ -3051,6 +3341,7 @@
     uint32_t discardRectangleCount,
     const VkRect2D* pDiscardRectangles)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
 }
@@ -3066,6 +3357,7 @@
     const VkSwapchainKHR* pSwapchains,
     const VkHdrMetadataEXT* pMetadata)
 {
+    AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
 }
@@ -3077,6 +3369,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
     vkCreateIOSSurfaceMVK_VkResult_return = vkEnc->vkCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
@@ -3090,6 +3383,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkSurfaceKHR* pSurface)
 {
+    AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
     vkCreateMacOSSurfaceMVK_VkResult_return = vkEnc->vkCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
@@ -3105,6 +3399,7 @@
     VkDevice device,
     const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
 {
+    AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
     vkSetDebugUtilsObjectNameEXT_VkResult_return = vkEnc->vkSetDebugUtilsObjectNameEXT(device, pNameInfo);
@@ -3114,6 +3409,7 @@
     VkDevice device,
     const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
 {
+    AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
     vkSetDebugUtilsObjectTagEXT_VkResult_return = vkEnc->vkSetDebugUtilsObjectTagEXT(device, pTagInfo);
@@ -3123,12 +3419,14 @@
     VkQueue queue,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
 }
 static void entry_vkQueueEndDebugUtilsLabelEXT(
     VkQueue queue)
 {
+    AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkQueueEndDebugUtilsLabelEXT(queue);
 }
@@ -3136,6 +3434,7 @@
     VkQueue queue,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
 }
@@ -3143,12 +3442,14 @@
     VkCommandBuffer commandBuffer,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
 }
 static void entry_vkCmdEndDebugUtilsLabelEXT(
     VkCommandBuffer commandBuffer)
 {
+    AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdEndDebugUtilsLabelEXT(commandBuffer);
 }
@@ -3156,6 +3457,7 @@
     VkCommandBuffer commandBuffer,
     const VkDebugUtilsLabelEXT* pLabelInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
 }
@@ -3165,6 +3467,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkDebugUtilsMessengerEXT* pMessenger)
 {
+    AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
     vkCreateDebugUtilsMessengerEXT_VkResult_return = vkEnc->vkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
@@ -3175,6 +3478,7 @@
     VkDebugUtilsMessengerEXT messenger,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
 }
@@ -3184,6 +3488,7 @@
     VkDebugUtilsMessageTypeFlagsEXT messageTypes,
     const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
 {
+    AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
 }
@@ -3194,6 +3499,7 @@
     const AHardwareBuffer* buffer,
     VkAndroidHardwareBufferPropertiesANDROID* pProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
     vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = vkEnc->vkGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
@@ -3204,6 +3510,7 @@
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
     AHardwareBuffer** pBuffer)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
     vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = vkEnc->vkGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
@@ -3225,6 +3532,7 @@
     VkCommandBuffer commandBuffer,
     const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
 }
@@ -3233,6 +3541,7 @@
     VkSampleCountFlagBits samples,
     VkMultisamplePropertiesEXT* pMultisampleProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
 }
@@ -3254,6 +3563,7 @@
     const VkAllocationCallbacks* pAllocator,
     VkValidationCacheEXT* pValidationCache)
 {
+    AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
     vkCreateValidationCacheEXT_VkResult_return = vkEnc->vkCreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache);
@@ -3264,6 +3574,7 @@
     VkValidationCacheEXT validationCache,
     const VkAllocationCallbacks* pAllocator)
 {
+    AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkDestroyValidationCacheEXT(device, validationCache, pAllocator);
 }
@@ -3273,6 +3584,7 @@
     uint32_t srcCacheCount,
     const VkValidationCacheEXT* pSrcCaches)
 {
+    AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
     vkMergeValidationCachesEXT_VkResult_return = vkEnc->vkMergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches);
@@ -3284,6 +3596,7 @@
     size_t* pDataSize,
     void* pData)
 {
+    AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
     vkGetValidationCacheDataEXT_VkResult_return = vkEnc->vkGetValidationCacheDataEXT(device, validationCache, pDataSize, pData);
@@ -3303,6 +3616,7 @@
     const void* pHostPointer,
     VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
 {
+    AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
     vkGetMemoryHostPointerPropertiesEXT_VkResult_return = vkEnc->vkGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
@@ -3317,6 +3631,7 @@
     VkDeviceSize dstOffset,
     uint32_t marker)
 {
+    AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
 }
@@ -3332,6 +3647,7 @@
     VkCommandBuffer commandBuffer,
     const void* pCheckpointMarker)
 {
+    AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
 }
@@ -3340,6 +3656,7 @@
     uint32_t* pCheckpointDataCount,
     VkCheckpointDataNV* pCheckpointData)
 {
+    AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV");
     auto vkEnc = HostConnection::get()->vkEncoder();
     vkEnc->vkGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
 }
@@ -3350,6 +3667,7 @@
     VkDeviceMemory memory,
     uint64_t* pAddress)
 {
+    AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
     vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = vkEnc->vkMapMemoryIntoAddressSpaceGOOGLE(device, memory, pAddress);
@@ -3362,6 +3680,7 @@
     VkImage image,
     uint32_t colorBuffer)
 {
+    AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
     vkRegisterImageColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterImageColorBufferGOOGLE(device, image, colorBuffer);
@@ -3372,6 +3691,7 @@
     VkBuffer buffer,
     uint32_t colorBuffer)
 {
+    AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE");
     auto vkEnc = HostConnection::get()->vkEncoder();
     VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
     vkRegisterBufferColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterBufferColorBufferGOOGLE(device, buffer, colorBuffer);