gfxstream: nuke ResourceTracker::Impl

The big giant Vulkan singleton might have an underlying
implementation.  However, it's unlikely we'll have more than
impl since it it's pretty giant.  Nuke ResourceTracker::Impl
to reduce the number of layers one must traverse to modify
things.

Since this was mega-change, clang-format was also applied.

BUG=296903491
TEST=compile + guest ANGLE

Change-Id: Ia9609b64f200f99bc7fd03f0da9b881a31e7d635
diff --git a/guest/vulkan_enc/ResourceTracker.h b/guest/vulkan_enc/ResourceTracker.h
index dc1c9da..1659123 100644
--- a/guest/vulkan_enc/ResourceTracker.h
+++ b/guest/vulkan_enc/ResourceTracker.h
@@ -16,15 +16,78 @@
 
 #include <vulkan/vulkan.h>
 
+#include <atomic>
 #include <functional>
 #include <memory>
+#include <optional>
+#include <unordered_map>
 
 #include "CommandBufferStagingStream.h"
+#include "HostVisibleMemoryVirtualization.h"
+#include "VirtGpu.h"
 #include "VulkanHandleMapping.h"
 #include "VulkanHandles.h"
+#include "aemu/base/Optional.h"
 #include "aemu/base/Tracing.h"
+#include "aemu/base/synchronization/AndroidLock.h"
+#include "aemu/base/threads/AndroidWorkPool.h"
 #include "goldfish_vk_transform_guest.h"
 
+using gfxstream::guest::AutoLock;
+using gfxstream::guest::Lock;
+using gfxstream::guest::Optional;
+using gfxstream::guest::RecursiveLock;
+using gfxstream::guest::WorkPool;
+
+/// Use installed headers or locally defined Fuchsia-specific bits
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
+#include <cutils/native_handle.h>
+#include <fidl/fuchsia.hardware.goldfish/cpp/wire.h>
+#include <fidl/fuchsia.sysmem/cpp/wire.h>
+#include <lib/zx/channel.h>
+#include <lib/zx/vmo.h>
+#include <zircon/errors.h>
+#include <zircon/process.h>
+#include <zircon/rights.h>
+#include <zircon/syscalls.h>
+#include <zircon/syscalls/object.h>
+
+#include <optional>
+
+#include "services/service_connector.h"
+
+#ifndef FUCHSIA_NO_TRACE
+#include <lib/trace/event.h>
+#endif
+
+#define GET_STATUS_SAFE(result, member) ((result).ok() ? ((result)->member) : ZX_OK)
+
+#else
+
+typedef uint32_t zx_handle_t;
+typedef uint64_t zx_koid_t;
+#define ZX_HANDLE_INVALID ((zx_handle_t)0)
+#define ZX_KOID_INVALID ((zx_koid_t)0)
+#endif  // VK_USE_PLATFORM_FUCHSIA
+
+/// Use installed headers or locally defined Android-specific bits
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+
+/// Goldfish sync only used for AEMU -- should replace in virtio-gpu when possibe
+#include "../egl/goldfish_sync.h"
+#include "AndroidHardwareBuffer.h"
+
+#else
+
+#if defined(__linux__)
+#include "../egl/goldfish_sync.h"
+#endif
+
+#include <android/hardware_buffer.h>
+
+#endif  // VK_USE_PLATFORM_ANDROID_KHR
+
 struct EmulatorFeatureInfo;
 
 class HostConnection;
@@ -35,9 +98,9 @@
 class VkEncoder;
 
 class ResourceTracker {
-public:
+   public:
     ResourceTracker();
-    virtual ~ResourceTracker();
+    ~ResourceTracker();
     static ResourceTracker* get();
 
     VulkanHandleMapping* createMapping();
@@ -56,569 +119,373 @@
     static ThreadingCallbacks threadingCallbacks;
 
 #define HANDLE_REGISTER_DECL(type) \
-    void register_##type(type); \
-    void unregister_##type(type); \
+    void register_##type(type);    \
+    void unregister_##type(type);
 
     GOLDFISH_VK_LIST_HANDLE_TYPES(HANDLE_REGISTER_DECL)
 
-    VkResult on_vkEnumerateInstanceExtensionProperties(
-        void* context,
-        VkResult input_result,
-        const char* pLayerName,
-        uint32_t* pPropertyCount,
-        VkExtensionProperties* pProperties);
+    VkResult on_vkEnumerateInstanceExtensionProperties(void* context, VkResult input_result,
+                                                       const char* pLayerName,
+                                                       uint32_t* pPropertyCount,
+                                                       VkExtensionProperties* pProperties);
 
-    VkResult on_vkEnumerateDeviceExtensionProperties(
-        void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const char* pLayerName,
-        uint32_t* pPropertyCount,
-        VkExtensionProperties* pProperties);
+    VkResult on_vkEnumerateDeviceExtensionProperties(void* context, VkResult input_result,
+                                                     VkPhysicalDevice physicalDevice,
+                                                     const char* pLayerName,
+                                                     uint32_t* pPropertyCount,
+                                                     VkExtensionProperties* pProperties);
 
-    VkResult on_vkEnumeratePhysicalDevices(
-        void* context, VkResult input_result,
-        VkInstance instance, uint32_t* pPhysicalDeviceCount,
-        VkPhysicalDevice* pPhysicalDevices);
+    VkResult on_vkEnumeratePhysicalDevices(void* context, VkResult input_result,
+                                           VkInstance instance, uint32_t* pPhysicalDeviceCount,
+                                           VkPhysicalDevice* pPhysicalDevices);
 
-    void on_vkGetPhysicalDeviceFeatures2(
-        void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceFeatures2* pFeatures);
-    void on_vkGetPhysicalDeviceFeatures2KHR(
-        void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceFeatures2* pFeatures);
-    void on_vkGetPhysicalDeviceProperties(
-        void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties* pProperties);
-    void on_vkGetPhysicalDeviceProperties2(
-        void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties2* pProperties);
-    void on_vkGetPhysicalDeviceProperties2KHR(
-        void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties2* pProperties);
+    void on_vkGetPhysicalDeviceFeatures2(void* context, VkPhysicalDevice physicalDevice,
+                                         VkPhysicalDeviceFeatures2* pFeatures);
+    void on_vkGetPhysicalDeviceFeatures2KHR(void* context, VkPhysicalDevice physicalDevice,
+                                            VkPhysicalDeviceFeatures2* pFeatures);
+    void on_vkGetPhysicalDeviceProperties(void* context, VkPhysicalDevice physicalDevice,
+                                          VkPhysicalDeviceProperties* pProperties);
+    void on_vkGetPhysicalDeviceProperties2(void* context, VkPhysicalDevice physicalDevice,
+                                           VkPhysicalDeviceProperties2* pProperties);
+    void on_vkGetPhysicalDeviceProperties2KHR(void* context, VkPhysicalDevice physicalDevice,
+                                              VkPhysicalDeviceProperties2* pProperties);
 
     void on_vkGetPhysicalDeviceMemoryProperties(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         VkPhysicalDeviceMemoryProperties* pMemoryProperties);
     void on_vkGetPhysicalDeviceMemoryProperties2(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
     void on_vkGetPhysicalDeviceMemoryProperties2KHR(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
-    void on_vkGetDeviceQueue(void* context,
-                             VkDevice device,
-                             uint32_t queueFamilyIndex,
-                             uint32_t queueIndex,
-                             VkQueue* pQueue);
-    void on_vkGetDeviceQueue2(void* context,
-                              VkDevice device,
-                              const VkDeviceQueueInfo2* pQueueInfo,
+    void on_vkGetDeviceQueue(void* context, VkDevice device, uint32_t queueFamilyIndex,
+                             uint32_t queueIndex, VkQueue* pQueue);
+    void on_vkGetDeviceQueue2(void* context, VkDevice device, const VkDeviceQueueInfo2* pQueueInfo,
                               VkQueue* pQueue);
 
-    VkResult on_vkCreateInstance(
-        void* context,
-        VkResult input_result,
-        const VkInstanceCreateInfo* createInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkInstance* pInstance);
-    VkResult on_vkCreateDevice(
-        void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkDeviceCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDevice* pDevice);
-    void on_vkDestroyDevice_pre(
-        void* context,
-        VkDevice device,
-        const VkAllocationCallbacks* pAllocator);
+    VkResult on_vkCreateInstance(void* context, VkResult input_result,
+                                 const VkInstanceCreateInfo* createInfo,
+                                 const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+    VkResult on_vkCreateDevice(void* context, VkResult input_result,
+                               VkPhysicalDevice physicalDevice,
+                               const VkDeviceCreateInfo* pCreateInfo,
+                               const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+    void on_vkDestroyDevice_pre(void* context, VkDevice device,
+                                const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkAllocateMemory(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkMemoryAllocateInfo* pAllocateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDeviceMemory* pMemory);
-    void on_vkFreeMemory(
-        void* context,
-        VkDevice device,
-        VkDeviceMemory memory,
-        const VkAllocationCallbacks* pAllocator);
+    VkResult on_vkAllocateMemory(void* context, VkResult input_result, VkDevice device,
+                                 const VkMemoryAllocateInfo* pAllocateInfo,
+                                 const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+    void on_vkFreeMemory(void* context, VkDevice device, VkDeviceMemory memory,
+                         const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkMapMemory(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        VkDeviceSize offset,
-        VkDeviceSize size,
-        VkMemoryMapFlags,
-        void** ppData);
+    VkResult on_vkMapMemory(void* context, VkResult input_result, VkDevice device,
+                            VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size,
+                            VkMemoryMapFlags, void** ppData);
 
-    void on_vkUnmapMemory(
-        void* context,
-        VkDevice device,
-        VkDeviceMemory memory);
+    void on_vkUnmapMemory(void* context, VkDevice device, VkDeviceMemory memory);
 
-    VkResult on_vkCreateImage(
-        void* context, VkResult input_result,
-        VkDevice device, const VkImageCreateInfo *pCreateInfo,
-        const VkAllocationCallbacks *pAllocator,
-        VkImage *pImage);
-    void on_vkDestroyImage(
-        void* context,
-        VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator);
+    VkResult on_vkCreateImage(void* context, VkResult input_result, VkDevice device,
+                              const VkImageCreateInfo* pCreateInfo,
+                              const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+    void on_vkDestroyImage(void* context, VkDevice device, VkImage image,
+                           const VkAllocationCallbacks* pAllocator);
 
-    void on_vkGetImageMemoryRequirements(
-        void *context, VkDevice device, VkImage image,
-        VkMemoryRequirements *pMemoryRequirements);
-    void on_vkGetImageMemoryRequirements2(
-        void *context, VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo,
-        VkMemoryRequirements2 *pMemoryRequirements);
-    void on_vkGetImageMemoryRequirements2KHR(
-        void *context, VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo,
-        VkMemoryRequirements2 *pMemoryRequirements);
+    void on_vkGetImageMemoryRequirements(void* context, VkDevice device, VkImage image,
+                                         VkMemoryRequirements* pMemoryRequirements);
+    void on_vkGetImageMemoryRequirements2(void* context, VkDevice device,
+                                          const VkImageMemoryRequirementsInfo2* pInfo,
+                                          VkMemoryRequirements2* pMemoryRequirements);
+    void on_vkGetImageMemoryRequirements2KHR(void* context, VkDevice device,
+                                             const VkImageMemoryRequirementsInfo2* pInfo,
+                                             VkMemoryRequirements2* pMemoryRequirements);
 
-    VkResult on_vkBindImageMemory(
-        void* context, VkResult input_result,
-        VkDevice device, VkImage image, VkDeviceMemory memory,
-        VkDeviceSize memoryOffset);
-    VkResult on_vkBindImageMemory2(
-        void* context, VkResult input_result,
-        VkDevice device, uint32_t bindingCount, const VkBindImageMemoryInfo* pBindInfos);
-    VkResult on_vkBindImageMemory2KHR(
-        void* context, VkResult input_result,
-        VkDevice device, uint32_t bindingCount, const VkBindImageMemoryInfo* pBindInfos);
+    VkResult on_vkBindImageMemory(void* context, VkResult input_result, VkDevice device,
+                                  VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+    VkResult on_vkBindImageMemory2(void* context, VkResult input_result, VkDevice device,
+                                   uint32_t bindingCount, const VkBindImageMemoryInfo* pBindInfos);
+    VkResult on_vkBindImageMemory2KHR(void* context, VkResult input_result, VkDevice device,
+                                      uint32_t bindingCount,
+                                      const VkBindImageMemoryInfo* pBindInfos);
 
-    VkResult on_vkCreateBuffer(
-        void* context, VkResult input_result,
-        VkDevice device, const VkBufferCreateInfo *pCreateInfo,
-        const VkAllocationCallbacks *pAllocator,
-        VkBuffer *pBuffer);
-    void on_vkDestroyBuffer(
-        void* context,
-        VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator);
+    VkResult on_vkCreateBuffer(void* context, VkResult input_result, VkDevice device,
+                               const VkBufferCreateInfo* pCreateInfo,
+                               const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+    void on_vkDestroyBuffer(void* context, VkDevice device, VkBuffer buffer,
+                            const VkAllocationCallbacks* pAllocator);
 
-    void on_vkGetBufferMemoryRequirements(
-        void* context, VkDevice device, VkBuffer buffer, VkMemoryRequirements *pMemoryRequirements);
-    void on_vkGetBufferMemoryRequirements2(
-        void* context, VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
-    void on_vkGetBufferMemoryRequirements2KHR(
-        void* context, VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
+    void on_vkGetBufferMemoryRequirements(void* context, VkDevice device, VkBuffer buffer,
+                                          VkMemoryRequirements* pMemoryRequirements);
+    void on_vkGetBufferMemoryRequirements2(void* context, VkDevice device,
+                                           const VkBufferMemoryRequirementsInfo2* pInfo,
+                                           VkMemoryRequirements2* pMemoryRequirements);
+    void on_vkGetBufferMemoryRequirements2KHR(void* context, VkDevice device,
+                                              const VkBufferMemoryRequirementsInfo2* pInfo,
+                                              VkMemoryRequirements2* pMemoryRequirements);
 
-    VkResult on_vkBindBufferMemory(
-        void* context, VkResult input_result,
-        VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
-    VkResult on_vkBindBufferMemory2(
-        void* context, VkResult input_result,
-        VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos);
-    VkResult on_vkBindBufferMemory2KHR(
-        void* context, VkResult input_result,
-        VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos);
+    VkResult on_vkBindBufferMemory(void* context, VkResult input_result, VkDevice device,
+                                   VkBuffer buffer, VkDeviceMemory memory,
+                                   VkDeviceSize memoryOffset);
+    VkResult on_vkBindBufferMemory2(void* context, VkResult input_result, VkDevice device,
+                                    uint32_t bindInfoCount,
+                                    const VkBindBufferMemoryInfo* pBindInfos);
+    VkResult on_vkBindBufferMemory2KHR(void* context, VkResult input_result, VkDevice device,
+                                       uint32_t bindInfoCount,
+                                       const VkBindBufferMemoryInfo* pBindInfos);
 
-    VkResult on_vkCreateSemaphore(
-        void* context, VkResult,
-        VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSemaphore* pSemaphore);
-    void on_vkDestroySemaphore(
-        void* context,
-        VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator);
-    VkResult on_vkGetSemaphoreFdKHR(
-        void* context, VkResult,
-        VkDevice device,
-        const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
-        int* pFd);
-    VkResult on_vkImportSemaphoreFdKHR(
-        void* context, VkResult,
-        VkDevice device,
-        const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+    VkResult on_vkCreateSemaphore(void* context, VkResult, VkDevice device,
+                                  const VkSemaphoreCreateInfo* pCreateInfo,
+                                  const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+    void on_vkDestroySemaphore(void* context, VkDevice device, VkSemaphore semaphore,
+                               const VkAllocationCallbacks* pAllocator);
+    VkResult on_vkGetSemaphoreFdKHR(void* context, VkResult, VkDevice device,
+                                    const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
+    VkResult on_vkImportSemaphoreFdKHR(void* context, VkResult, VkDevice device,
+                                       const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
 
-    VkResult on_vkQueueSubmit(
-        void* context, VkResult input_result,
-        VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+    VkResult on_vkQueueSubmit(void* context, VkResult input_result, VkQueue queue,
+                              uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
 
     VkResult on_vkQueueSubmit2(void* context, VkResult input_result, VkQueue queue,
                                uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence);
 
-    VkResult on_vkQueueWaitIdle(
-        void* context, VkResult input_result,
-        VkQueue queue);
+    VkResult on_vkQueueWaitIdle(void* context, VkResult input_result, VkQueue queue);
 
-    void unwrap_vkCreateImage_pCreateInfo(
-        const VkImageCreateInfo* pCreateInfo,
-        VkImageCreateInfo* local_pCreateInfo);
+    void unwrap_vkCreateImage_pCreateInfo(const VkImageCreateInfo* pCreateInfo,
+                                          VkImageCreateInfo* local_pCreateInfo);
 
     void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int* fd_out);
 
-    void unwrap_VkBindImageMemory2_pBindInfos(
-        uint32_t bindInfoCount,
-        const VkBindImageMemoryInfo* inputBindInfos,
-        VkBindImageMemoryInfo* outputBindInfos);
+    void unwrap_VkBindImageMemory2_pBindInfos(uint32_t bindInfoCount,
+                                              const VkBindImageMemoryInfo* inputBindInfos,
+                                              VkBindImageMemoryInfo* outputBindInfos);
 
 #ifdef VK_USE_PLATFORM_FUCHSIA
-    VkResult on_vkGetMemoryZirconHandleFUCHSIA(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
-        uint32_t* pHandle);
+    VkResult on_vkGetMemoryZirconHandleFUCHSIA(void* context, VkResult input_result,
+                                               VkDevice device,
+                                               const VkMemoryGetZirconHandleInfoFUCHSIA* pInfo,
+                                               uint32_t* pHandle);
     VkResult on_vkGetMemoryZirconHandlePropertiesFUCHSIA(
-        void* context, VkResult input_result,
-        VkDevice device,
-        VkExternalMemoryHandleTypeFlagBits handleType,
-        uint32_t handle,
+        void* context, VkResult input_result, VkDevice device,
+        VkExternalMemoryHandleTypeFlagBits handleType, uint32_t handle,
         VkMemoryZirconHandlePropertiesFUCHSIA* pProperties);
     VkResult on_vkGetSemaphoreZirconHandleFUCHSIA(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo,
-        uint32_t* pHandle);
+        void* context, VkResult input_result, VkDevice device,
+        const VkSemaphoreGetZirconHandleInfoFUCHSIA* pInfo, uint32_t* pHandle);
     VkResult on_vkImportSemaphoreZirconHandleFUCHSIA(
-        void* context, VkResult input_result,
-        VkDevice device,
+        void* context, VkResult input_result, VkDevice device,
         const VkImportSemaphoreZirconHandleInfoFUCHSIA* pInfo);
-    VkResult on_vkCreateBufferCollectionFUCHSIA(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkBufferCollectionCreateInfoFUCHSIA* pInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkBufferCollectionFUCHSIA* pCollection);
-    void on_vkDestroyBufferCollectionFUCHSIA(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkBufferCollectionFUCHSIA collection,
-        const VkAllocationCallbacks* pAllocator);
+    VkResult on_vkCreateBufferCollectionFUCHSIA(void* context, VkResult input_result,
+                                                VkDevice device,
+                                                const VkBufferCollectionCreateInfoFUCHSIA* pInfo,
+                                                const VkAllocationCallbacks* pAllocator,
+                                                VkBufferCollectionFUCHSIA* pCollection);
+    void on_vkDestroyBufferCollectionFUCHSIA(void* context, VkResult input_result, VkDevice device,
+                                             VkBufferCollectionFUCHSIA collection,
+                                             const VkAllocationCallbacks* pAllocator);
     VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIA(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkBufferCollectionFUCHSIA collection,
+        void* context, VkResult input_result, VkDevice device, VkBufferCollectionFUCHSIA collection,
         const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
     VkResult on_vkSetBufferCollectionImageConstraintsFUCHSIA(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkBufferCollectionFUCHSIA collection,
+        void* context, VkResult input_result, VkDevice device, VkBufferCollectionFUCHSIA collection,
         const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
     VkResult on_vkGetBufferCollectionPropertiesFUCHSIA(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkBufferCollectionFUCHSIA collection,
+        void* context, VkResult input_result, VkDevice device, VkBufferCollectionFUCHSIA collection,
         VkBufferCollectionPropertiesFUCHSIA* pProperties);
 #endif
 
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const AHardwareBuffer* buffer,
+        void* context, VkResult input_result, VkDevice device, const AHardwareBuffer* buffer,
         VkAndroidHardwareBufferPropertiesANDROID* pProperties);
     VkResult on_vkGetMemoryAndroidHardwareBufferANDROID(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo,
-        struct AHardwareBuffer** pBuffer);
+        void* context, VkResult input_result, VkDevice device,
+        const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
 #endif
 
     VkResult on_vkCreateSamplerYcbcrConversion(
-        void* context, VkResult input_result,
-        VkDevice device,
+        void* context, VkResult input_result, VkDevice device,
         const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSamplerYcbcrConversion* pYcbcrConversion);
-    void on_vkDestroySamplerYcbcrConversion(
-        void* context,
-        VkDevice device,
-        VkSamplerYcbcrConversion ycbcrConversion,
-        const VkAllocationCallbacks* pAllocator);
+        const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+    void on_vkDestroySamplerYcbcrConversion(void* context, VkDevice device,
+                                            VkSamplerYcbcrConversion ycbcrConversion,
+                                            const VkAllocationCallbacks* pAllocator);
     VkResult on_vkCreateSamplerYcbcrConversionKHR(
-        void* context, VkResult input_result,
-        VkDevice device,
+        void* context, VkResult input_result, VkDevice device,
         const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSamplerYcbcrConversion* pYcbcrConversion);
-    void on_vkDestroySamplerYcbcrConversionKHR(
-        void* context,
-        VkDevice device,
-        VkSamplerYcbcrConversion ycbcrConversion,
-        const VkAllocationCallbacks* pAllocator);
+        const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+    void on_vkDestroySamplerYcbcrConversionKHR(void* context, VkDevice device,
+                                               VkSamplerYcbcrConversion ycbcrConversion,
+                                               const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkCreateSampler(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const VkSamplerCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSampler* pSampler);
+    VkResult on_vkCreateSampler(void* context, VkResult input_result, VkDevice device,
+                                const VkSamplerCreateInfo* pCreateInfo,
+                                const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
 
     void on_vkGetPhysicalDeviceExternalFenceProperties(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
         VkExternalFenceProperties* pExternalFenceProperties);
 
     void on_vkGetPhysicalDeviceExternalFencePropertiesKHR(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
         VkExternalFenceProperties* pExternalFenceProperties);
 
-    VkResult on_vkCreateFence(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFenceCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+    VkResult on_vkCreateFence(void* context, VkResult input_result, VkDevice device,
+                              const VkFenceCreateInfo* pCreateInfo,
+                              const VkAllocationCallbacks* pAllocator, VkFence* pFence);
 
-    void on_vkDestroyFence(
-        void* context,
-        VkDevice device,
-        VkFence fence,
-        const VkAllocationCallbacks* pAllocator);
+    void on_vkDestroyFence(void* context, VkDevice device, VkFence fence,
+                           const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkResetFences(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t fenceCount,
-        const VkFence* pFences);
+    VkResult on_vkResetFences(void* context, VkResult input_result, VkDevice device,
+                              uint32_t fenceCount, const VkFence* pFences);
 
-    VkResult on_vkImportFenceFdKHR(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+    VkResult on_vkImportFenceFdKHR(void* context, VkResult input_result, VkDevice device,
+                                   const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
 
-    VkResult on_vkGetFenceFdKHR(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFenceGetFdInfoKHR* pGetFdInfo,
-        int* pFd);
+    VkResult on_vkGetFenceFdKHR(void* context, VkResult input_result, VkDevice device,
+                                const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
 
-    VkResult on_vkWaitForFences(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t fenceCount,
-        const VkFence* pFences,
-        VkBool32 waitAll,
-        uint64_t timeout);
+    VkResult on_vkWaitForFences(void* context, VkResult input_result, VkDevice device,
+                                uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll,
+                                uint64_t timeout);
 
-    VkResult on_vkCreateDescriptorPool(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorPoolCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorPool* pDescriptorPool);
+    VkResult on_vkCreateDescriptorPool(void* context, VkResult input_result, VkDevice device,
+                                       const VkDescriptorPoolCreateInfo* pCreateInfo,
+                                       const VkAllocationCallbacks* pAllocator,
+                                       VkDescriptorPool* pDescriptorPool);
 
-    void on_vkDestroyDescriptorPool(
-        void* context,
-        VkDevice device,
-        VkDescriptorPool descriptorPool,
-        const VkAllocationCallbacks* pAllocator);
+    void on_vkDestroyDescriptorPool(void* context, VkDevice device, VkDescriptorPool descriptorPool,
+                                    const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkResetDescriptorPool(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDescriptorPool descriptorPool,
-        VkDescriptorPoolResetFlags flags);
+    VkResult on_vkResetDescriptorPool(void* context, VkResult input_result, VkDevice device,
+                                      VkDescriptorPool descriptorPool,
+                                      VkDescriptorPoolResetFlags flags);
 
-    VkResult on_vkAllocateDescriptorSets(
-        void* context,
-        VkResult input_result,
-        VkDevice                                    device,
-        const VkDescriptorSetAllocateInfo*          pAllocateInfo,
-        VkDescriptorSet*                            pDescriptorSets);
+    VkResult on_vkAllocateDescriptorSets(void* context, VkResult input_result, VkDevice device,
+                                         const VkDescriptorSetAllocateInfo* pAllocateInfo,
+                                         VkDescriptorSet* pDescriptorSets);
 
-    VkResult on_vkFreeDescriptorSets(
-        void* context,
-        VkResult input_result,
-        VkDevice                                    device,
-        VkDescriptorPool                            descriptorPool,
-        uint32_t                                    descriptorSetCount,
-        const VkDescriptorSet*                      pDescriptorSets);
+    VkResult on_vkFreeDescriptorSets(void* context, VkResult input_result, VkDevice device,
+                                     VkDescriptorPool descriptorPool, uint32_t descriptorSetCount,
+                                     const VkDescriptorSet* pDescriptorSets);
 
-    VkResult on_vkCreateDescriptorSetLayout(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorSetLayout* pSetLayout);
+    VkResult on_vkCreateDescriptorSetLayout(void* context, VkResult input_result, VkDevice device,
+                                            const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
+                                            const VkAllocationCallbacks* pAllocator,
+                                            VkDescriptorSetLayout* pSetLayout);
 
-    void on_vkUpdateDescriptorSets(
-        void* context,
-        VkDevice device,
-        uint32_t descriptorWriteCount,
-        const VkWriteDescriptorSet* pDescriptorWrites,
-        uint32_t descriptorCopyCount,
-        const VkCopyDescriptorSet* pDescriptorCopies);
+    void on_vkUpdateDescriptorSets(void* context, VkDevice device, uint32_t descriptorWriteCount,
+                                   const VkWriteDescriptorSet* pDescriptorWrites,
+                                   uint32_t descriptorCopyCount,
+                                   const VkCopyDescriptorSet* pDescriptorCopies);
 
-    VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        uint64_t* pAddress);
-    VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        uint64_t* pAddress);
+    VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(void* context, VkResult input_result,
+                                                      VkDevice device, VkDeviceMemory memory,
+                                                      uint64_t* pAddress);
+    VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE(void* context, VkResult input_result,
+                                                  VkDevice device, VkDeviceMemory memory,
+                                                  uint64_t* pAddress);
 
     VkResult on_vkCreateDescriptorUpdateTemplate(
-        void* context, VkResult input_result,
-        VkDevice device,
+        void* context, VkResult input_result, VkDevice device,
         const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
         const VkAllocationCallbacks* pAllocator,
         VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
 
     VkResult on_vkCreateDescriptorUpdateTemplateKHR(
-        void* context, VkResult input_result,
-        VkDevice device,
+        void* context, VkResult input_result, VkDevice device,
         const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
         const VkAllocationCallbacks* pAllocator,
         VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
 
-    void on_vkUpdateDescriptorSetWithTemplate(
-        void* context,
-        VkDevice device,
-        VkDescriptorSet descriptorSet,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        const void* pData);
+    void on_vkUpdateDescriptorSetWithTemplate(void* context, VkDevice device,
+                                              VkDescriptorSet descriptorSet,
+                                              VkDescriptorUpdateTemplate descriptorUpdateTemplate,
+                                              const void* pData);
 
     VkResult on_vkGetPhysicalDeviceImageFormatProperties2(
-        void* context, VkResult input_result,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkResult input_result, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
         VkImageFormatProperties2* pImageFormatProperties);
 
     VkResult on_vkGetPhysicalDeviceImageFormatProperties2KHR(
-        void* context, VkResult input_result,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkResult input_result, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
         VkImageFormatProperties2* pImageFormatProperties);
 
     void on_vkGetPhysicalDeviceExternalSemaphoreProperties(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
         VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
 
     void on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
-        void* context,
-        VkPhysicalDevice physicalDevice,
+        void* context, VkPhysicalDevice physicalDevice,
         const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
         VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
 
-    void registerEncoderCleanupCallback(const VkEncoder* encoder, void* handle, CleanupCallback callback);
+    void registerEncoderCleanupCallback(const VkEncoder* encoder, void* handle,
+                                        CleanupCallback callback);
     void unregisterEncoderCleanupCallback(const VkEncoder* encoder, void* handle);
     void onEncoderDeleted(const VkEncoder* encoder);
 
     uint32_t syncEncodersForCommandBuffer(VkCommandBuffer commandBuffer, VkEncoder* current);
-    uint32_t syncEncodersForQueue(VkQueue queue, VkEncoder* current);
+    uint32_t syncEncodersForQueue(VkQueue queue, VkEncoder* currentEncoder);
 
     CommandBufferStagingStream::Alloc getAlloc();
     CommandBufferStagingStream::Free getFree();
 
-    VkResult on_vkBeginCommandBuffer(
-        void* context, VkResult input_result,
-        VkCommandBuffer commandBuffer,
-        const VkCommandBufferBeginInfo* pBeginInfo);
-    VkResult on_vkEndCommandBuffer(
-        void* context, VkResult input_result,
-        VkCommandBuffer commandBuffer);
-    VkResult on_vkResetCommandBuffer(
-        void* context, VkResult input_result,
-        VkCommandBuffer commandBuffer,
-        VkCommandBufferResetFlags flags);
+    VkResult on_vkBeginCommandBuffer(void* context, VkResult input_result,
+                                     VkCommandBuffer commandBuffer,
+                                     const VkCommandBufferBeginInfo* pBeginInfo);
+    VkResult on_vkEndCommandBuffer(void* context, VkResult input_result,
+                                   VkCommandBuffer commandBuffer);
+    VkResult on_vkResetCommandBuffer(void* context, VkResult input_result,
+                                     VkCommandBuffer commandBuffer,
+                                     VkCommandBufferResetFlags flags);
 
-    VkResult on_vkCreateImageView(
-        void* context, VkResult input_result,
-        VkDevice device,
-        const VkImageViewCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkImageView* pView);
+    VkResult on_vkCreateImageView(void* context, VkResult input_result, VkDevice device,
+                                  const VkImageViewCreateInfo* pCreateInfo,
+                                  const VkAllocationCallbacks* pAllocator, VkImageView* pView);
 
-    void on_vkCmdExecuteCommands(
-        void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t commandBufferCount,
-        const VkCommandBuffer* pCommandBuffers);
+    void on_vkCmdExecuteCommands(void* context, VkCommandBuffer commandBuffer,
+                                 uint32_t commandBufferCount,
+                                 const VkCommandBuffer* pCommandBuffers);
 
-    void on_vkCmdBindDescriptorSets(
-        void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineBindPoint pipelineBindPoint,
-        VkPipelineLayout layout,
-        uint32_t firstSet,
-        uint32_t descriptorSetCount,
-        const VkDescriptorSet* pDescriptorSets,
-        uint32_t dynamicOffsetCount,
-        const uint32_t* pDynamicOffsets);
+    void on_vkCmdBindDescriptorSets(void* context, VkCommandBuffer commandBuffer,
+                                    VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
+                                    uint32_t firstSet, uint32_t descriptorSetCount,
+                                    const VkDescriptorSet* pDescriptorSets,
+                                    uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
 
     void on_vkCmdPipelineBarrier(
-        void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineStageFlags srcStageMask,
-        VkPipelineStageFlags dstStageMask,
-        VkDependencyFlags dependencyFlags,
-        uint32_t memoryBarrierCount,
-        const VkMemoryBarrier* pMemoryBarriers,
-        uint32_t bufferMemoryBarrierCount,
-        const VkBufferMemoryBarrier* pBufferMemoryBarriers,
-        uint32_t imageMemoryBarrierCount,
-        const VkImageMemoryBarrier* pImageMemoryBarriers);
+        void* context, VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask,
+        VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags,
+        uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
+        uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
+        uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
 
-    void on_vkDestroyDescriptorSetLayout(
-        void* context,
-        VkDevice device,
-        VkDescriptorSetLayout descriptorSetLayout,
-        const VkAllocationCallbacks* pAllocator);
+    void on_vkDestroyDescriptorSetLayout(void* context, VkDevice device,
+                                         VkDescriptorSetLayout descriptorSetLayout,
+                                         const VkAllocationCallbacks* pAllocator);
 
-    VkResult on_vkAllocateCommandBuffers(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkCommandBufferAllocateInfo* pAllocateInfo,
-        VkCommandBuffer* pCommandBuffers);
+    VkResult on_vkAllocateCommandBuffers(void* context, VkResult input_result, VkDevice device,
+                                         const VkCommandBufferAllocateInfo* pAllocateInfo,
+                                         VkCommandBuffer* pCommandBuffers);
 
-    VkResult on_vkQueueSignalReleaseImageANDROID(
-        void* context,
-        VkResult input_result,
-        VkQueue queue,
-        uint32_t waitSemaphoreCount,
-        const VkSemaphore* pWaitSemaphores,
-        VkImage image,
-        int* pNativeFenceFd);
+    VkResult on_vkQueueSignalReleaseImageANDROID(void* context, VkResult input_result,
+                                                 VkQueue queue, uint32_t waitSemaphoreCount,
+                                                 const VkSemaphore* pWaitSemaphores, VkImage image,
+                                                 int* pNativeFenceFd);
 
-    VkResult on_vkCreateGraphicsPipelines(
-        void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipelineCache pipelineCache,
-        uint32_t createInfoCount,
-        const VkGraphicsPipelineCreateInfo* pCreateInfos,
-        const VkAllocationCallbacks* pAllocator,
-        VkPipeline* pPipelines);
+    VkResult on_vkCreateGraphicsPipelines(void* context, VkResult input_result, VkDevice device,
+                                          VkPipelineCache pipelineCache, uint32_t createInfoCount,
+                                          const VkGraphicsPipelineCreateInfo* pCreateInfos,
+                                          const VkAllocationCallbacks* pAllocator,
+                                          VkPipeline* pPipelines);
 
     uint8_t* getMappedPointer(VkDeviceMemory memory);
     VkDeviceSize getMappedSize(VkDeviceMemory memory);
@@ -637,15 +504,14 @@
     bool hasInstanceExtension(VkInstance instance, const std::string& name) const;
     bool hasDeviceExtension(VkDevice instance, const std::string& name) const;
     VkDevice getDevice(VkCommandBuffer commandBuffer) const;
-    void addToCommandPool(VkCommandPool commandPool,
-                          uint32_t commandBufferCount,
+    void addToCommandPool(VkCommandPool commandPool, uint32_t commandBufferCount,
                           VkCommandBuffer* pCommandBuffers);
     void resetCommandPoolStagingInfo(VkCommandPool commandPool);
 
 #ifdef __GNUC__
-    #define ALWAYS_INLINE
+#define ALWAYS_INLINE
 #elif
-    #define ALWAYS_INLINE __attribute__((always_inline))
+#define ALWAYS_INLINE __attribute__((always_inline))
 #endif
 
     static VkEncoder* getCommandBufferEncoder(VkCommandBuffer commandBuffer);
@@ -657,25 +523,21 @@
     static ALWAYS_INLINE uint32_t getSeqno();
 
     // Transforms
-    void deviceMemoryTransform_tohost(
-        VkDeviceMemory* memory, uint32_t memoryCount,
-        VkDeviceSize* offset, uint32_t offsetCount,
-        VkDeviceSize* size, uint32_t sizeCount,
-        uint32_t* typeIndex, uint32_t typeIndexCount,
-        uint32_t* typeBits, uint32_t typeBitsCount);
-    void deviceMemoryTransform_fromhost(
-        VkDeviceMemory* memory, uint32_t memoryCount,
-        VkDeviceSize* offset, uint32_t offsetCount,
-        VkDeviceSize* size, uint32_t sizeCount,
-        uint32_t* typeIndex, uint32_t typeIndexCount,
-        uint32_t* typeBits, uint32_t typeBitsCount);
+    void deviceMemoryTransform_tohost(VkDeviceMemory* memory, uint32_t memoryCount,
+                                      VkDeviceSize* offset, uint32_t offsetCount,
+                                      VkDeviceSize* size, uint32_t sizeCount, uint32_t* typeIndex,
+                                      uint32_t typeIndexCount, uint32_t* typeBits,
+                                      uint32_t typeBitsCount);
+    void deviceMemoryTransform_fromhost(VkDeviceMemory* memory, uint32_t memoryCount,
+                                        VkDeviceSize* offset, uint32_t offsetCount,
+                                        VkDeviceSize* size, uint32_t sizeCount, uint32_t* typeIndex,
+                                        uint32_t typeIndexCount, uint32_t* typeBits,
+                                        uint32_t typeBitsCount);
 
-    void transformImpl_VkExternalMemoryProperties_fromhost(
-        VkExternalMemoryProperties* pProperties,
-        uint32_t);
-    void transformImpl_VkExternalMemoryProperties_tohost(
-        VkExternalMemoryProperties* pProperties,
-        uint32_t);
+    void transformImpl_VkExternalMemoryProperties_fromhost(VkExternalMemoryProperties* pProperties,
+                                                           uint32_t);
+    void transformImpl_VkExternalMemoryProperties_tohost(VkExternalMemoryProperties* pProperties,
+                                                         uint32_t);
     void transformImpl_VkImageCreateInfo_fromhost(const VkImageCreateInfo*, uint32_t);
     void transformImpl_VkImageCreateInfo_tohost(const VkImageCreateInfo*, uint32_t);
 
@@ -685,9 +547,143 @@
 
     LIST_TRIVIAL_TRANSFORMED_TYPES(DEFINE_TRANSFORMED_TYPE_PROTOTYPE)
 
-private:
-    class Impl;
-    std::unique_ptr<Impl> mImpl;
+   private:
+    VulkanHandleMapping* mCreateMapping = nullptr;
+    VulkanHandleMapping* mDestroyMapping = nullptr;
+
+    uint32_t getColorBufferMemoryIndex(void* context, VkDevice device);
+    const VkPhysicalDeviceMemoryProperties& getPhysicalDeviceMemoryProperties(
+        void* context, VkDevice device, VkPhysicalDevice physicalDevice);
+
+    VkResult on_vkGetPhysicalDeviceImageFormatProperties2_common(
+        bool isKhr, void* context, VkResult input_result, VkPhysicalDevice physicalDevice,
+        const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
+        VkImageFormatProperties2* pImageFormatProperties);
+
+    template <typename VkSubmitInfoType>
+    VkResult on_vkQueueSubmitTemplate(void* context, VkResult input_result, VkQueue queue,
+                                      uint32_t submitCount, const VkSubmitInfoType* pSubmits,
+                                      VkFence fence);
+
+    void freeDescriptorSetsIfHostAllocated(VkEncoder* enc, VkDevice device,
+                                           uint32_t descriptorSetCount,
+                                           const VkDescriptorSet* sets);
+    void clearDescriptorPoolAndUnregisterDescriptorSets(void* context, VkDevice device,
+                                                        VkDescriptorPool pool);
+
+    void setDeviceInfo(VkDevice device, VkPhysicalDevice physdev, VkPhysicalDeviceProperties props,
+                       VkPhysicalDeviceMemoryProperties memProps, uint32_t enabledExtensionCount,
+                       const char* const* ppEnabledExtensionNames, const void* pNext);
+
+    void setDeviceMemoryInfo(VkDevice device, VkDeviceMemory memory, VkDeviceSize allocationSize,
+                             uint8_t* ptr, uint32_t memoryTypeIndex, AHardwareBuffer* ahw,
+                             bool imported, zx_handle_t vmoHandle);
+
+    void setImageInfo(VkImage image, VkDevice device, const VkImageCreateInfo* pCreateInfo);
+
+    bool supportsDeferredCommands() const;
+    bool supportsAsyncQueueSubmit() const;
+    bool supportsCreateResourcesWithRequirements() const;
+
+    int getHostInstanceExtensionIndex(const std::string& extName) const;
+    int getHostDeviceExtensionIndex(const std::string& extName) const;
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    SetBufferCollectionImageConstraintsResult setBufferCollectionImageConstraintsImpl(
+        VkEncoder* enc, VkDevice device,
+        fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>* pCollection,
+        const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
+
+    VkResult setBufferCollectionBufferConstraintsFUCHSIA(
+        fidl::WireSyncClient<fuchsia_sysmem::BufferCollection>* pCollection,
+        const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
+
+#endif
+
+    CoherentMemoryPtr createCoherentMemory(VkDevice device, VkDeviceMemory mem,
+                                           const VkMemoryAllocateInfo& hostAllocationInfo,
+                                           VkEncoder* enc, VkResult& res);
+    VkResult allocateCoherentMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo,
+                                    VkEncoder* enc, VkDeviceMemory* pMemory);
+
+    VkResult getCoherentMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkEncoder* enc,
+                               VkDevice device, VkDeviceMemory* pMemory);
+
+    void transformImageMemoryRequirements2ForGuest(VkImage image, VkMemoryRequirements2* reqs2);
+
+    void transformBufferMemoryRequirements2ForGuest(VkBuffer buffer, VkMemoryRequirements2* reqs2);
+
+    void flushCommandBufferPendingCommandsBottomUp(void* context, VkQueue queue,
+                                                   const std::vector<VkCommandBuffer>& workingSet);
+
+    template <class VkSubmitInfoType>
+    void flushStagingStreams(void* context, VkQueue queue, uint32_t submitCount,
+                             const VkSubmitInfoType* pSubmits);
+
+    VkResult vkQueueSubmitEnc(VkEncoder* enc, VkQueue queue, uint32_t submitCount,
+                              const VkSubmitInfo* pSubmits, VkFence fence);
+
+    VkResult vkQueueSubmitEnc(VkEncoder* enc, VkQueue queue, uint32_t submitCount,
+                              const VkSubmitInfo2* pSubmits, VkFence fence);
+
+    VkResult initDescriptorUpdateTemplateBuffers(
+        const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
+        VkDescriptorUpdateTemplate descriptorUpdateTemplate);
+
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+    VkResult exportSyncFdForQSRILocked(VkImage image, int* fd);
+#endif
+
+    void setInstanceInfo(VkInstance instance, uint32_t enabledExtensionCount,
+                         const char* const* ppEnabledExtensionNames, uint32_t apiVersion);
+
+    void resetCommandBufferStagingInfo(VkCommandBuffer commandBuffer, bool alsoResetPrimaries,
+                                       bool alsoClearPendingDescriptorSets);
+
+    void resetCommandBufferPendingTopology(VkCommandBuffer commandBuffer);
+
+    void clearCommandPool(VkCommandPool commandPool);
+
+    void ensureSyncDeviceFd(void);
+
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+    void unwrap_VkNativeBufferANDROID(const VkNativeBufferANDROID* inputNativeInfo,
+                                      VkNativeBufferANDROID* outputNativeInfo);
+
+    void unwrap_VkBindImageMemorySwapchainInfoKHR(
+        const VkBindImageMemorySwapchainInfoKHR* inputBimsi,
+        VkBindImageMemorySwapchainInfoKHR* outputBimsi);
+#endif
+
+    mutable RecursiveLock mLock;
+
+    std::optional<const VkPhysicalDeviceMemoryProperties> mCachedPhysicalDeviceMemoryProps;
+    std::unique_ptr<EmulatorFeatureInfo> mFeatureInfo;
+#if defined(__ANDROID__)
+    std::unique_ptr<GoldfishAddressSpaceBlockProvider> mGoldfishAddressSpaceBlockProvider;
+#endif  // defined(__ANDROID__)
+
+    struct VirtGpuCaps mCaps;
+    std::vector<VkExtensionProperties> mHostInstanceExtensions;
+    std::vector<VkExtensionProperties> mHostDeviceExtensions;
+
+    // 32 bits only for now, upper bits may be used later.
+    std::atomic<uint32_t> mBlobId = 0;
+#if defined(VK_USE_PLATFORM_ANDROID_KHR) || defined(__linux__)
+    int mSyncDeviceFd = -1;
+#endif
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    fidl::WireSyncClient<fuchsia_hardware_goldfish::ControlDevice> mControlDevice;
+    fidl::WireSyncClient<fuchsia_sysmem::Allocator> mSysmemAllocator;
+#endif
+
+    WorkPool mWorkPool{4};
+    std::unordered_map<VkQueue, std::vector<WorkPool::WaitGroupHandle>>
+        mQueueSensitiveWorkPoolItems;
+
+    std::unordered_map<const VkEncoder*, std::unordered_map<void*, CleanupCallback>>
+        mEncoderCleanupCallbacks;
 };
 
 }  // namespace vk