// Copyright (C) 2018 The Android Open Source Project
// Copyright (C) 2018 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Autogenerated module VkDecoderSnapshot
//
// (header) generated by scripts/genvk.py -registry
// ../../../../../hardware/google/gfxstream/third_party/vulkan_docs/xml/vk.xml -registryGfxstream
// xml/vk_gfxstream.xml cereal -o ../../../../../hardware/google/gfxstream/host/vulkan/cereal
//
// Please do not modify directly;
// re-run mesa3d/src/gfxstream/codegen/generate-gfxstream-vulkan.sh,
// or directly from Python by defining:
// VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
// VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
// CEREAL_OUTPUT_DIR: Where to put the generated sources.
//
// python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o
// $CEREAL_OUTPUT_DIR
//
#pragma once
#include <vulkan/vulkan.h>

#include <memory>

#include "VkSnapshotHandles.h"
#include "gfxstream/HealthMonitor.h"
#include "gfxstream/host/GfxApiLogger.h"
#include "goldfish_vk_private_defs.h"
#include "vk_android_native_buffer_gfxstream.h"
#include "vulkan_gfxstream.h"

namespace gfxstream {
class Stream;
}  // namespace gfxstream

namespace gfxstream {
namespace base {
class BumpPool;
}  // namespace base
}  // namespace gfxstream

namespace gfxstream {
namespace vk {

class VkDecoderSnapshot {
   public:
    VkDecoderSnapshot();
    ~VkDecoderSnapshot();

    void clear();

    void saveReplayBuffers(gfxstream::Stream* stream);
    static void loadReplayBuffers(gfxstream::Stream* stream, std::vector<uint64_t>* outHandleBuffer,
                                  std::vector<uint8_t>* outDecoderBuffer);

    VkSnapshotApiCallHandle createApiCallInfo();
    void destroyApiCallInfoIfUnused(VkSnapshotApiCallHandle handle);

    // Performs bookkeeping to track that a given api call created the given VkObject handles.
    // This is a public function so that `VkDecoderGlobalState` can inform snapshot of any
    // additional handles created while emulating features.
    void addOrderedBoxedHandlesCreatedByCall(VkSnapshotApiCallHandle apiCallHandle,
                                             VkObjectHandle* boxedHandles,
                                             uint32_t boxedHandlesCount);
#ifdef VK_VERSION_1_0
    void vkCreateInstance(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, const VkInstanceCreateInfo* pCreateInfo,
                          const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
    void vkDestroyInstance(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkInstance instance, const VkAllocationCallbacks* pAllocator);
    void vkEnumeratePhysicalDevices(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkResult input_result, VkInstance instance,
                                    uint32_t* pPhysicalDeviceCount,
                                    VkPhysicalDevice* pPhysicalDevices);
    void vkGetPhysicalDeviceFeatures(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkPhysicalDevice physicalDevice,
                                     VkPhysicalDeviceFeatures* pFeatures);
    void vkGetPhysicalDeviceFormatProperties(gfxstream::base::BumpPool* pool,
                                             VkSnapshotApiCallHandle apiCallHandle,
                                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                             VkPhysicalDevice physicalDevice, VkFormat format,
                                             VkFormatProperties* pFormatProperties);
    void vkGetPhysicalDeviceImageFormatProperties(gfxstream::base::BumpPool* pool,
                                                  VkSnapshotApiCallHandle apiCallHandle,
                                                  const uint8_t* apiCallPacket,
                                                  size_t apiCallPacketSize, VkResult input_result,
                                                  VkPhysicalDevice physicalDevice, VkFormat format,
                                                  VkImageType type, VkImageTiling tiling,
                                                  VkImageUsageFlags usage, VkImageCreateFlags flags,
                                                  VkImageFormatProperties* pImageFormatProperties);
    void vkGetPhysicalDeviceProperties(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkPhysicalDevice physicalDevice,
                                       VkPhysicalDeviceProperties* pProperties);
    void vkGetPhysicalDeviceQueueFamilyProperties(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
    void vkGetPhysicalDeviceMemoryProperties(gfxstream::base::BumpPool* pool,
                                             VkSnapshotApiCallHandle apiCallHandle,
                                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                             VkPhysicalDevice physicalDevice,
                                             VkPhysicalDeviceMemoryProperties* pMemoryProperties);
    void vkGetInstanceProcAddr(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, PFN_vkVoidFunction input_result,
                               VkInstance instance, const char* pName);
    void vkGetDeviceProcAddr(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             PFN_vkVoidFunction input_result, VkDevice device, const char* pName);
    void vkCreateDevice(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkResult input_result, VkPhysicalDevice physicalDevice,
                        const VkDeviceCreateInfo* pCreateInfo,
                        const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
    void vkDestroyDevice(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                         const VkAllocationCallbacks* pAllocator);
    void vkEnumerateInstanceExtensionProperties(gfxstream::base::BumpPool* pool,
                                                VkSnapshotApiCallHandle apiCallHandle,
                                                const uint8_t* apiCallPacket,
                                                size_t apiCallPacketSize, VkResult input_result,
                                                const char* pLayerName, uint32_t* pPropertyCount,
                                                VkExtensionProperties* pProperties);
    void vkEnumerateDeviceExtensionProperties(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize, VkResult input_result,
                                              VkPhysicalDevice physicalDevice,
                                              const char* pLayerName, uint32_t* pPropertyCount,
                                              VkExtensionProperties* pProperties);
    void vkEnumerateInstanceLayerProperties(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkResult input_result, uint32_t* pPropertyCount,
                                            VkLayerProperties* pProperties);
    void vkEnumerateDeviceLayerProperties(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkResult input_result, VkPhysicalDevice physicalDevice,
                                          uint32_t* pPropertyCount, VkLayerProperties* pProperties);
    void vkGetDeviceQueue(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                          uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
    void vkQueueSubmit(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkResult input_result, VkQueue queue, uint32_t submitCount,
                       const VkSubmitInfo* pSubmits, VkFence fence);
    void vkQueueWaitIdle(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkResult input_result, VkQueue queue);
    void vkDeviceWaitIdle(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device);
    void vkAllocateMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device,
                          const VkMemoryAllocateInfo* pAllocateInfo,
                          const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
    void vkFreeMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                      const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                      VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
    void vkMapMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                     const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
                     VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size,
                     VkMemoryMapFlags flags, void** ppData);
    void vkUnmapMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                       VkDeviceMemory memory);
    void vkFlushMappedMemoryRanges(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkResult input_result, VkDevice device,
                                   uint32_t memoryRangeCount,
                                   const VkMappedMemoryRange* pMemoryRanges);
    void vkInvalidateMappedMemoryRanges(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkResult input_result, VkDevice device,
                                        uint32_t memoryRangeCount,
                                        const VkMappedMemoryRange* pMemoryRanges);
    void vkGetDeviceMemoryCommitment(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkDevice device, VkDeviceMemory memory,
                                     VkDeviceSize* pCommittedMemoryInBytes);
    void vkBindBufferMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device, VkBuffer buffer,
                            VkDeviceMemory memory, VkDeviceSize memoryOffset);
    void vkBindImageMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkDevice device, VkImage image,
                           VkDeviceMemory memory, VkDeviceSize memoryOffset);
    void vkGetBufferMemoryRequirements(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkDevice device, VkBuffer buffer,
                                       VkMemoryRequirements* pMemoryRequirements);
    void vkGetImageMemoryRequirements(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkDevice device, VkImage image,
                                      VkMemoryRequirements* pMemoryRequirements);
    void vkGetImageSparseMemoryRequirements(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device, VkImage image,
        uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
    void vkGetPhysicalDeviceSparseImageFormatProperties(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage,
        VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
    void vkQueueBindSparse(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkQueue queue, uint32_t bindInfoCount,
                           const VkBindSparseInfo* pBindInfo, VkFence fence);
    void vkCreateFence(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkResult input_result, VkDevice device, const VkFenceCreateInfo* pCreateInfo,
                       const VkAllocationCallbacks* pAllocator, VkFence* pFence);
    void vkDestroyFence(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                        VkFence fence, const VkAllocationCallbacks* pAllocator);
    void vkResetFences(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkResult input_result, VkDevice device, uint32_t fenceCount,
                       const VkFence* pFences);
    void vkGetFenceStatus(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device, VkFence fence);
    void vkWaitForFences(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkResult input_result, VkDevice device, uint32_t fenceCount,
                         const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
    void vkCreateSemaphore(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkDevice device,
                           const VkSemaphoreCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
    void vkDestroySemaphore(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                            VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
    void vkCreateEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkResult input_result, VkDevice device, const VkEventCreateInfo* pCreateInfo,
                       const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
    void vkDestroyEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                        VkEvent event, const VkAllocationCallbacks* pAllocator);
    void vkGetEventStatus(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device, VkEvent event);
    void vkSetEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                    const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
                    VkDevice device, VkEvent event);
    void vkResetEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                      const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
                      VkDevice device, VkEvent event);
    void vkCreateQueryPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkDevice device,
                           const VkQueryPoolCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
    void vkDestroyQueryPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                            VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
    void vkGetQueryPoolResults(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount,
                               size_t dataSize, void* pData, VkDeviceSize stride,
                               VkQueryResultFlags flags);
    void vkCreateBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkResult input_result, VkDevice device,
                        const VkBufferCreateInfo* pCreateInfo,
                        const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
    void vkDestroyBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                         VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
    void vkCreateBufferView(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device,
                            const VkBufferViewCreateInfo* pCreateInfo,
                            const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
    void vkDestroyBufferView(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkDevice device, VkBufferView bufferView,
                             const VkAllocationCallbacks* pAllocator);
    void vkCreateImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkResult input_result, VkDevice device, const VkImageCreateInfo* pCreateInfo,
                       const VkAllocationCallbacks* pAllocator, VkImage* pImage);
    void vkDestroyImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                        VkImage image, const VkAllocationCallbacks* pAllocator);
    void vkGetImageSubresourceLayout(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkDevice device, VkImage image,
                                     const VkImageSubresource* pSubresource,
                                     VkSubresourceLayout* pLayout);
    void vkCreateImageView(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkDevice device,
                           const VkImageViewCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkImageView* pView);
    void vkDestroyImageView(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                            VkImageView imageView, const VkAllocationCallbacks* pAllocator);
    void vkCreateShaderModule(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                              const VkShaderModuleCreateInfo* pCreateInfo,
                              const VkAllocationCallbacks* pAllocator,
                              VkShaderModule* pShaderModule);
    void vkDestroyShaderModule(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkDevice device,
                               VkShaderModule shaderModule,
                               const VkAllocationCallbacks* pAllocator);
    void vkCreatePipelineCache(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               const VkPipelineCacheCreateInfo* pCreateInfo,
                               const VkAllocationCallbacks* pAllocator,
                               VkPipelineCache* pPipelineCache);
    void vkDestroyPipelineCache(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkDevice device,
                                VkPipelineCache pipelineCache,
                                const VkAllocationCallbacks* pAllocator);
    void vkGetPipelineCacheData(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
    void vkMergePipelineCaches(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               VkPipelineCache dstCache, uint32_t srcCacheCount,
                               const VkPipelineCache* pSrcCaches);
    void vkCreateGraphicsPipelines(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkResult input_result, VkDevice device,
                                   VkPipelineCache pipelineCache, uint32_t createInfoCount,
                                   const VkGraphicsPipelineCreateInfo* pCreateInfos,
                                   const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
    void vkCreateComputePipelines(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkResult input_result, VkDevice device,
                                  VkPipelineCache pipelineCache, uint32_t createInfoCount,
                                  const VkComputePipelineCreateInfo* pCreateInfos,
                                  const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
    void vkDestroyPipeline(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                           VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
    void vkCreatePipelineLayout(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkPipelineLayoutCreateInfo* pCreateInfo,
                                const VkAllocationCallbacks* pAllocator,
                                VkPipelineLayout* pPipelineLayout);
    void vkDestroyPipelineLayout(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkDevice device, VkPipelineLayout pipelineLayout,
                                 const VkAllocationCallbacks* pAllocator);
    void vkCreateSampler(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkResult input_result, VkDevice device,
                         const VkSamplerCreateInfo* pCreateInfo,
                         const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
    void vkDestroySampler(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                          VkSampler sampler, const VkAllocationCallbacks* pAllocator);
    void vkCreateDescriptorSetLayout(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkResult input_result, VkDevice device,
                                     const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                     const VkAllocationCallbacks* pAllocator,
                                     VkDescriptorSetLayout* pSetLayout);
    void vkDestroyDescriptorSetLayout(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkDevice device, VkDescriptorSetLayout descriptorSetLayout,
                                      const VkAllocationCallbacks* pAllocator);
    void vkCreateDescriptorPool(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkDescriptorPoolCreateInfo* pCreateInfo,
                                const VkAllocationCallbacks* pAllocator,
                                VkDescriptorPool* pDescriptorPool);
    void vkDestroyDescriptorPool(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkDevice device, VkDescriptorPool descriptorPool,
                                 const VkAllocationCallbacks* pAllocator);
    void vkResetDescriptorPool(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
    void vkAllocateDescriptorSets(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkResult input_result, VkDevice device,
                                  const VkDescriptorSetAllocateInfo* pAllocateInfo,
                                  VkDescriptorSet* pDescriptorSets);
    void vkFreeDescriptorSets(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                              VkDescriptorPool descriptorPool, uint32_t descriptorSetCount,
                              const VkDescriptorSet* pDescriptorSets);
    void vkUpdateDescriptorSets(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkDevice device,
                                uint32_t descriptorWriteCount,
                                const VkWriteDescriptorSet* pDescriptorWrites,
                                uint32_t descriptorCopyCount,
                                const VkCopyDescriptorSet* pDescriptorCopies);
    void vkCreateFramebuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkFramebufferCreateInfo* pCreateInfo,
                             const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
    void vkDestroyFramebuffer(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkDevice device, VkFramebuffer framebuffer,
                              const VkAllocationCallbacks* pAllocator);
    void vkCreateRenderPass(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device,
                            const VkRenderPassCreateInfo* pCreateInfo,
                            const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
    void vkDestroyRenderPass(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkDevice device, VkRenderPass renderPass,
                             const VkAllocationCallbacks* pAllocator);
    void vkGetRenderAreaGranularity(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkDevice device, VkRenderPass renderPass,
                                    VkExtent2D* pGranularity);
    void vkCreateCommandPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkCommandPoolCreateInfo* pCreateInfo,
                             const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
    void vkDestroyCommandPool(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkDevice device, VkCommandPool commandPool,
                              const VkAllocationCallbacks* pAllocator);
    void vkResetCommandPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device, VkCommandPool commandPool,
                            VkCommandPoolResetFlags flags);
    void vkAllocateCommandBuffers(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkResult input_result, VkDevice device,
                                  const VkCommandBufferAllocateInfo* pAllocateInfo,
                                  VkCommandBuffer* pCommandBuffers);
    void vkFreeCommandBuffers(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkDevice device, VkCommandPool commandPool,
                              uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
    void vkBeginCommandBuffer(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result,
                              VkCommandBuffer commandBuffer,
                              const VkCommandBufferBeginInfo* pBeginInfo);
    void vkEndCommandBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkCommandBuffer commandBuffer);
    void vkResetCommandBuffer(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result,
                              VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
    void vkCmdBindPipeline(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
                           VkPipeline pipeline);
    void vkCmdSetViewport(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, uint32_t firstViewport,
                          uint32_t viewportCount, const VkViewport* pViewports);
    void vkCmdSetScissor(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, uint32_t firstScissor,
                         uint32_t scissorCount, const VkRect2D* pScissors);
    void vkCmdSetLineWidth(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, float lineWidth);
    void vkCmdSetDepthBias(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, float depthBiasConstantFactor,
                           float depthBiasClamp, float depthBiasSlopeFactor);
    void vkCmdSetBlendConstants(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                const float blendConstants[4]);
    void vkCmdSetDepthBounds(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, float minDepthBounds,
                             float maxDepthBounds);
    void vkCmdSetStencilCompareMask(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                    uint32_t compareMask);
    void vkCmdSetStencilWriteMask(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                  uint32_t writeMask);
    void vkCmdSetStencilReference(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                  uint32_t reference);
    void vkCmdBindDescriptorSets(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer,
                                 VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
                                 uint32_t firstSet, uint32_t descriptorSetCount,
                                 const VkDescriptorSet* pDescriptorSets,
                                 uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
    void vkCmdBindIndexBuffer(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
    void vkCmdBindVertexBuffers(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                uint32_t firstBinding, uint32_t bindingCount,
                                const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
    void vkCmdDraw(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                   VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
                   uint32_t firstVertex, uint32_t firstInstance);
    void vkCmdDrawIndexed(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, uint32_t indexCount,
                          uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset,
                          uint32_t firstInstance);
    void vkCmdDrawIndirect(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
                           uint32_t drawCount, uint32_t stride);
    void vkCmdDrawIndexedIndirect(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, VkBuffer buffer,
                                  VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
    void vkCmdDispatch(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY,
                       uint32_t groupCountZ);
    void vkCmdDispatchIndirect(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               VkBuffer buffer, VkDeviceSize offset);
    void vkCmdCopyBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer,
                         uint32_t regionCount, const VkBufferCopy* pRegions);
    void vkCmdCopyImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkCommandBuffer commandBuffer, VkImage srcImage,
                        VkImageLayout srcImageLayout, VkImage dstImage,
                        VkImageLayout dstImageLayout, uint32_t regionCount,
                        const VkImageCopy* pRegions);
    void vkCmdBlitImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkCommandBuffer commandBuffer, VkImage srcImage,
                        VkImageLayout srcImageLayout, VkImage dstImage,
                        VkImageLayout dstImageLayout, uint32_t regionCount,
                        const VkImageBlit* pRegions, VkFilter filter);
    void vkCmdCopyBufferToImage(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout,
                                uint32_t regionCount, const VkBufferImageCopy* pRegions);
    void vkCmdCopyImageToBuffer(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer,
                                uint32_t regionCount, const VkBufferImageCopy* pRegions);
    void vkCmdUpdateBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkBuffer dstBuffer,
                           VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
    void vkCmdFillBuffer(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset,
                         VkDeviceSize size, uint32_t data);
    void vkCmdClearColorImage(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              VkImage image, VkImageLayout imageLayout,
                              const VkClearColorValue* pColor, uint32_t rangeCount,
                              const VkImageSubresourceRange* pRanges);
    void vkCmdClearDepthStencilImage(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkCommandBuffer commandBuffer, VkImage image,
                                     VkImageLayout imageLayout,
                                     const VkClearDepthStencilValue* pDepthStencil,
                                     uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
    void vkCmdClearAttachments(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               uint32_t attachmentCount, const VkClearAttachment* pAttachments,
                               uint32_t rectCount, const VkClearRect* pRects);
    void vkCmdResolveImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkImage srcImage,
                           VkImageLayout srcImageLayout, VkImage dstImage,
                           VkImageLayout dstImageLayout, uint32_t regionCount,
                           const VkImageResolve* pRegions);
    void vkCmdSetEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkCommandBuffer commandBuffer, VkEvent event,
                       VkPipelineStageFlags stageMask);
    void vkCmdResetEvent(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, VkEvent event,
                         VkPipelineStageFlags stageMask);
    void vkCmdWaitEvents(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents,
                         VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
                         uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
                         uint32_t bufferMemoryBarrierCount,
                         const VkBufferMemoryBarrier* pBufferMemoryBarriers,
                         uint32_t imageMemoryBarrierCount,
                         const VkImageMemoryBarrier* pImageMemoryBarriers);
    void vkCmdPipelineBarrier(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, 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 vkCmdBeginQuery(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query,
                         VkQueryControlFlags flags);
    void vkCmdEndQuery(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                       VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
    void vkCmdResetQueryPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                             uint32_t firstQuery, uint32_t queryCount);
    void vkCmdWriteTimestamp(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage,
                             VkQueryPool queryPool, uint32_t query);
    void vkCmdCopyQueryPoolResults(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                   uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer,
                                   VkDeviceSize dstOffset, VkDeviceSize stride,
                                   VkQueryResultFlags flags);
    void vkCmdPushConstants(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer, VkPipelineLayout layout,
                            VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size,
                            const void* pValues);
    void vkCmdBeginRenderPass(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              const VkRenderPassBeginInfo* pRenderPassBegin,
                              VkSubpassContents contents);
    void vkCmdNextSubpass(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, VkSubpassContents contents);
    void vkCmdEndRenderPass(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer);
    void vkCmdExecuteCommands(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
#endif
#ifdef VK_VERSION_1_1
    void vkEnumerateInstanceVersion(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkResult input_result, uint32_t* pApiVersion);
    void vkBindBufferMemory2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device, uint32_t bindInfoCount,
                             const VkBindBufferMemoryInfo* pBindInfos);
    void vkBindImageMemory2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device, uint32_t bindInfoCount,
                            const VkBindImageMemoryInfo* pBindInfos);
    void vkGetDeviceGroupPeerMemoryFeatures(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkDevice device, uint32_t heapIndex,
                                            uint32_t localDeviceIndex, uint32_t remoteDeviceIndex,
                                            VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
    void vkCmdSetDeviceMask(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer, uint32_t deviceMask);
    void vkCmdDispatchBase(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
                           uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
                           uint32_t groupCountZ);
    void vkEnumeratePhysicalDeviceGroups(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkInstance instance, uint32_t* pPhysicalDeviceGroupCount,
        VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
    void vkGetImageMemoryRequirements2(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo,
                                       VkMemoryRequirements2* pMemoryRequirements);
    void vkGetBufferMemoryRequirements2(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkDevice device,
                                        const VkBufferMemoryRequirementsInfo2* pInfo,
                                        VkMemoryRequirements2* pMemoryRequirements);
    void vkGetImageSparseMemoryRequirements2(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
    void vkGetPhysicalDeviceFeatures2(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkPhysicalDevice physicalDevice,
                                      VkPhysicalDeviceFeatures2* pFeatures);
    void vkGetPhysicalDeviceProperties2(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkPhysicalDevice physicalDevice,
                                        VkPhysicalDeviceProperties2* pProperties);
    void vkGetPhysicalDeviceFormatProperties2(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize,
                                              VkPhysicalDevice physicalDevice, VkFormat format,
                                              VkFormatProperties2* pFormatProperties);
    void vkGetPhysicalDeviceImageFormatProperties2(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
        VkImageFormatProperties2* pImageFormatProperties);
    void vkGetPhysicalDeviceQueueFamilyProperties2(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
    void vkGetPhysicalDeviceMemoryProperties2(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize,
                                              VkPhysicalDevice physicalDevice,
                                              VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
    void vkGetPhysicalDeviceSparseImageFormatProperties2(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount,
        VkSparseImageFormatProperties2* pProperties);
    void vkTrimCommandPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                           VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
    void vkGetDeviceQueue2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                           const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
    void vkCreateSamplerYcbcrConversion(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkResult input_result, VkDevice device,
                                        const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
                                        const VkAllocationCallbacks* pAllocator,
                                        VkSamplerYcbcrConversion* pYcbcrConversion);
    void vkDestroySamplerYcbcrConversion(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkDevice device, VkSamplerYcbcrConversion ycbcrConversion,
                                         const VkAllocationCallbacks* pAllocator);
    void vkCreateDescriptorUpdateTemplate(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkResult input_result, VkDevice device,
                                          const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
                                          const VkAllocationCallbacks* pAllocator,
                                          VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
    void vkDestroyDescriptorUpdateTemplate(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkDevice device,
                                           VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                           const VkAllocationCallbacks* pAllocator);
    void vkUpdateDescriptorSetWithTemplate(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkDevice device, VkDescriptorSet descriptorSet,
                                           VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                           const void* pData);
    void vkGetPhysicalDeviceExternalBufferProperties(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
        VkExternalBufferProperties* pExternalBufferProperties);
    void vkGetPhysicalDeviceExternalFenceProperties(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
        VkExternalFenceProperties* pExternalFenceProperties);
    void vkGetPhysicalDeviceExternalSemaphoreProperties(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
        VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
    void vkGetDescriptorSetLayoutSupport(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkDevice device,
                                         const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                         VkDescriptorSetLayoutSupport* pSupport);
#endif
#ifdef VK_VERSION_1_2
    void vkCmdDrawIndirectCount(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer,
                                VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
                                uint32_t stride);
    void vkCmdDrawIndexedIndirectCount(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer, VkBuffer buffer,
                                       VkDeviceSize offset, VkBuffer countBuffer,
                                       VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
                                       uint32_t stride);
    void vkCreateRenderPass2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkRenderPassCreateInfo2* pCreateInfo,
                             const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
    void vkCmdBeginRenderPass2(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               const VkRenderPassBeginInfo* pRenderPassBegin,
                               const VkSubpassBeginInfo* pSubpassBeginInfo);
    void vkCmdNextSubpass2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer,
                           const VkSubpassBeginInfo* pSubpassBeginInfo,
                           const VkSubpassEndInfo* pSubpassEndInfo);
    void vkCmdEndRenderPass2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer,
                             const VkSubpassEndInfo* pSubpassEndInfo);
    void vkResetQueryPool(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                          VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
    void vkGetSemaphoreCounterValue(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkResult input_result, VkDevice device, VkSemaphore semaphore,
                                    uint64_t* pValue);
    void vkWaitSemaphores(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device,
                          const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout);
    void vkSignalSemaphore(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkDevice device,
                           const VkSemaphoreSignalInfo* pSignalInfo);
    void vkGetBufferDeviceAddress(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkDeviceAddress input_result, VkDevice device,
                                  const VkBufferDeviceAddressInfo* pInfo);
    void vkGetBufferOpaqueCaptureAddress(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         uint64_t input_result, VkDevice device,
                                         const VkBufferDeviceAddressInfo* pInfo);
    void vkGetDeviceMemoryOpaqueCaptureAddress(gfxstream::base::BumpPool* pool,
                                               VkSnapshotApiCallHandle apiCallHandle,
                                               const uint8_t* apiCallPacket,
                                               size_t apiCallPacketSize, uint64_t input_result,
                                               VkDevice device,
                                               const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
#endif
#ifdef VK_VERSION_1_3
    void vkGetPhysicalDeviceToolProperties(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkResult input_result, VkPhysicalDevice physicalDevice,
                                           uint32_t* pToolCount,
                                           VkPhysicalDeviceToolProperties* pToolProperties);
    void vkCreatePrivateDataSlot(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkResult input_result, VkDevice device,
                                 const VkPrivateDataSlotCreateInfo* pCreateInfo,
                                 const VkAllocationCallbacks* pAllocator,
                                 VkPrivateDataSlot* pPrivateDataSlot);
    void vkDestroyPrivateDataSlot(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkDevice device, VkPrivateDataSlot privateDataSlot,
                                  const VkAllocationCallbacks* pAllocator);
    void vkSetPrivateData(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkResult input_result, VkDevice device, VkObjectType objectType,
                          uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data);
    void vkGetPrivateData(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
                          VkObjectType objectType, uint64_t objectHandle,
                          VkPrivateDataSlot privateDataSlot, uint64_t* pData);
    void vkCmdSetEvent2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkCommandBuffer commandBuffer, VkEvent event,
                        const VkDependencyInfo* pDependencyInfo);
    void vkCmdResetEvent2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, VkEvent event,
                          VkPipelineStageFlags2 stageMask);
    void vkCmdWaitEvents2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, uint32_t eventCount,
                          const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos);
    void vkCmdPipelineBarrier2(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               const VkDependencyInfo* pDependencyInfo);
    void vkCmdWriteTimestamp2(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query);
    void vkQueueSubmit2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkResult input_result, VkQueue queue, uint32_t submitCount,
                        const VkSubmitInfo2* pSubmits, VkFence fence);
    void vkCmdCopyBuffer2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo);
    void vkCmdCopyImage2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo);
    void vkCmdCopyBufferToImage2(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer,
                                 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
    void vkCmdCopyImageToBuffer2(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer,
                                 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
    void vkCmdBlitImage2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo);
    void vkCmdResolveImage2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer,
                            const VkResolveImageInfo2* pResolveImageInfo);
    void vkCmdBeginRendering(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo);
    void vkCmdEndRendering(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer);
    void vkCmdSetCullMode(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                          VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
    void vkCmdSetFrontFace(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkFrontFace frontFace);
    void vkCmdSetPrimitiveTopology(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer,
                                   VkPrimitiveTopology primitiveTopology);
    void vkCmdSetViewportWithCount(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer, uint32_t viewportCount,
                                   const VkViewport* pViewports);
    void vkCmdSetScissorWithCount(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, uint32_t scissorCount,
                                  const VkRect2D* pScissors);
    void vkCmdBindVertexBuffers2(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                 uint32_t bindingCount, const VkBuffer* pBuffers,
                                 const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
                                 const VkDeviceSize* pStrides);
    void vkCmdSetDepthTestEnable(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
    void vkCmdSetDepthWriteEnable(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
    void vkCmdSetDepthCompareOp(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                VkCompareOp depthCompareOp);
    void vkCmdSetDepthBoundsTestEnable(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer,
                                       VkBool32 depthBoundsTestEnable);
    void vkCmdSetStencilTestEnable(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
    void vkCmdSetStencilOp(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                           VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
                           VkCompareOp compareOp);
    void vkCmdSetRasterizerDiscardEnable(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkCommandBuffer commandBuffer,
                                         VkBool32 rasterizerDiscardEnable);
    void vkCmdSetDepthBiasEnable(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
    void vkCmdSetPrimitiveRestartEnable(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkCommandBuffer commandBuffer,
                                        VkBool32 primitiveRestartEnable);
    void vkGetDeviceBufferMemoryRequirements(gfxstream::base::BumpPool* pool,
                                             VkSnapshotApiCallHandle apiCallHandle,
                                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                             VkDevice device,
                                             const VkDeviceBufferMemoryRequirements* pInfo,
                                             VkMemoryRequirements2* pMemoryRequirements);
    void vkGetDeviceImageMemoryRequirements(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkDevice device,
                                            const VkDeviceImageMemoryRequirements* pInfo,
                                            VkMemoryRequirements2* pMemoryRequirements);
    void vkGetDeviceImageSparseMemoryRequirements(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
#endif
#ifdef VK_VERSION_1_4
    void vkCmdSetLineStipple(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
                             uint16_t lineStipplePattern);
    void vkMapMemory2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                      const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
                      VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData);
    void vkUnmapMemory2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                        VkResult input_result, VkDevice device,
                        const VkMemoryUnmapInfo* pMemoryUnmapInfo);
    void vkCmdBindIndexBuffer2(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
                               VkIndexType indexType);
    void vkGetRenderingAreaGranularity(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkDevice device,
                                       const VkRenderingAreaInfo* pRenderingAreaInfo,
                                       VkExtent2D* pGranularity);
    void vkGetDeviceImageSubresourceLayout(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkDevice device,
                                           const VkDeviceImageSubresourceInfo* pInfo,
                                           VkSubresourceLayout2* pLayout);
    void vkGetImageSubresourceLayout2(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkDevice device, VkImage image,
                                      const VkImageSubresource2* pSubresource,
                                      VkSubresourceLayout2* pLayout);
    void vkCmdPushDescriptorSet(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
                                uint32_t set, uint32_t descriptorWriteCount,
                                const VkWriteDescriptorSet* pDescriptorWrites);
    void vkCmdPushDescriptorSetWithTemplate(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkCommandBuffer commandBuffer,
                                            VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                            VkPipelineLayout layout, uint32_t set,
                                            const void* pData);
    void vkCmdSetRenderingAttachmentLocations(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
        const VkRenderingAttachmentLocationInfo* pLocationInfo);
    void vkCmdSetRenderingInputAttachmentIndices(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
        const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo);
    void vkCmdBindDescriptorSets2(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer,
                                  const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo);
    void vkCmdPushConstants2(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer,
                             const VkPushConstantsInfo* pPushConstantsInfo);
    void vkCmdPushDescriptorSet2(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer,
                                 const VkPushDescriptorSetInfo* pPushDescriptorSetInfo);
    void vkCmdPushDescriptorSetWithTemplate2(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
        const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo);
    void vkCopyMemoryToImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo);
    void vkCopyImageToMemory(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo);
    void vkCopyImageToImage(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device,
                            const VkCopyImageToImageInfo* pCopyImageToImageInfo);
    void vkTransitionImageLayout(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkResult input_result, VkDevice device, uint32_t transitionCount,
                                 const VkHostImageLayoutTransitionInfo* pTransitions);
#endif
#ifdef VK_KHR_swapchain
    void vkCreateSwapchainKHR(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                              const VkSwapchainCreateInfoKHR* pCreateInfo,
                              const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
    void vkDestroySwapchainKHR(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkDevice device, VkSwapchainKHR swapchain,
                               const VkAllocationCallbacks* pAllocator);
    void vkGetSwapchainImagesKHR(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkResult input_result, VkDevice device, VkSwapchainKHR swapchain,
                                 uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
    void vkAcquireNextImageKHR(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore,
                               VkFence fence, uint32_t* pImageIndex);
    void vkQueuePresentKHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkQueue queue,
                           const VkPresentInfoKHR* pPresentInfo);
    void vkGetDeviceGroupPresentCapabilitiesKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
    void vkGetDeviceGroupSurfacePresentModesKHR(gfxstream::base::BumpPool* pool,
                                                VkSnapshotApiCallHandle apiCallHandle,
                                                const uint8_t* apiCallPacket,
                                                size_t apiCallPacketSize, VkResult input_result,
                                                VkDevice device, VkSurfaceKHR surface,
                                                VkDeviceGroupPresentModeFlagsKHR* pModes);
    void vkGetPhysicalDevicePresentRectanglesKHR(gfxstream::base::BumpPool* pool,
                                                 VkSnapshotApiCallHandle apiCallHandle,
                                                 const uint8_t* apiCallPacket,
                                                 size_t apiCallPacketSize, VkResult input_result,
                                                 VkPhysicalDevice physicalDevice,
                                                 VkSurfaceKHR surface, uint32_t* pRectCount,
                                                 VkRect2D* pRects);
    void vkAcquireNextImage2KHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkAcquireNextImageInfoKHR* pAcquireInfo,
                                uint32_t* pImageIndex);
#endif
#ifdef VK_KHR_dynamic_rendering
    void vkCmdBeginRenderingKHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                const VkRenderingInfo* pRenderingInfo);
    void vkCmdEndRenderingKHR(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer);
#endif
#ifdef VK_KHR_get_physical_device_properties2
    void vkGetPhysicalDeviceFeatures2KHR(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkPhysicalDevice physicalDevice,
                                         VkPhysicalDeviceFeatures2* pFeatures);
    void vkGetPhysicalDeviceProperties2KHR(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkPhysicalDevice physicalDevice,
                                           VkPhysicalDeviceProperties2* pProperties);
    void vkGetPhysicalDeviceFormatProperties2KHR(gfxstream::base::BumpPool* pool,
                                                 VkSnapshotApiCallHandle apiCallHandle,
                                                 const uint8_t* apiCallPacket,
                                                 size_t apiCallPacketSize,
                                                 VkPhysicalDevice physicalDevice, VkFormat format,
                                                 VkFormatProperties2* pFormatProperties);
    void vkGetPhysicalDeviceImageFormatProperties2KHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
        VkImageFormatProperties2* pImageFormatProperties);
    void vkGetPhysicalDeviceQueueFamilyProperties2KHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
    void vkGetPhysicalDeviceMemoryProperties2KHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
    void vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount,
        VkSparseImageFormatProperties2* pProperties);
#endif
#ifdef VK_KHR_maintenance1
    void vkTrimCommandPoolKHR(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkDevice device, VkCommandPool commandPool,
                              VkCommandPoolTrimFlags flags);
#endif
#ifdef VK_KHR_external_memory_capabilities
    void vkGetPhysicalDeviceExternalBufferPropertiesKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
        VkExternalBufferProperties* pExternalBufferProperties);
#endif
#ifdef VK_KHR_external_semaphore_capabilities
    void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
        VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
#endif
#ifdef VK_KHR_external_semaphore_fd
    void vkImportSemaphoreFdKHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
    void vkGetSemaphoreFdKHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device,
                             const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
#endif
#ifdef VK_KHR_descriptor_update_template
    void vkCreateDescriptorUpdateTemplateKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
        const VkAllocationCallbacks* pAllocator,
        VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
    void vkDestroyDescriptorUpdateTemplateKHR(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize, VkDevice device,
                                              VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                              const VkAllocationCallbacks* pAllocator);
    void vkUpdateDescriptorSetWithTemplateKHR(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize, VkDevice device,
                                              VkDescriptorSet descriptorSet,
                                              VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                              const void* pData);
#endif
#ifdef VK_KHR_create_renderpass2
    void vkCreateRenderPass2KHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkRenderPassCreateInfo2* pCreateInfo,
                                const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
    void vkCmdBeginRenderPass2KHR(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer,
                                  const VkRenderPassBeginInfo* pRenderPassBegin,
                                  const VkSubpassBeginInfo* pSubpassBeginInfo);
    void vkCmdNextSubpass2KHR(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              const VkSubpassBeginInfo* pSubpassBeginInfo,
                              const VkSubpassEndInfo* pSubpassEndInfo);
    void vkCmdEndRenderPass2KHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                const VkSubpassEndInfo* pSubpassEndInfo);
#endif
#ifdef VK_KHR_external_fence_capabilities
    void vkGetPhysicalDeviceExternalFencePropertiesKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
        VkExternalFenceProperties* pExternalFenceProperties);
#endif
#ifdef VK_KHR_external_fence_fd
    void vkImportFenceFdKHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkResult input_result, VkDevice device,
                            const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
    void vkGetFenceFdKHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkResult input_result, VkDevice device,
                         const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
#endif
#ifdef VK_KHR_get_memory_requirements2
    void vkGetImageMemoryRequirements2KHR(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkDevice device,
                                          const VkImageMemoryRequirementsInfo2* pInfo,
                                          VkMemoryRequirements2* pMemoryRequirements);
    void vkGetBufferMemoryRequirements2KHR(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkDevice device,
                                           const VkBufferMemoryRequirementsInfo2* pInfo,
                                           VkMemoryRequirements2* pMemoryRequirements);
    void vkGetImageSparseMemoryRequirements2KHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
#endif
#ifdef VK_KHR_sampler_ycbcr_conversion
    void vkCreateSamplerYcbcrConversionKHR(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkResult input_result, VkDevice device,
                                           const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
                                           const VkAllocationCallbacks* pAllocator,
                                           VkSamplerYcbcrConversion* pYcbcrConversion);
    void vkDestroySamplerYcbcrConversionKHR(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkDevice device,
                                            VkSamplerYcbcrConversion ycbcrConversion,
                                            const VkAllocationCallbacks* pAllocator);
#endif
#ifdef VK_KHR_bind_memory2
    void vkBindBufferMemory2KHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
    void vkBindImageMemory2KHR(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
#endif
#ifdef VK_KHR_maintenance3
    void vkGetDescriptorSetLayoutSupportKHR(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkDevice device,
                                            const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                            VkDescriptorSetLayoutSupport* pSupport);
#endif
#ifdef VK_KHR_buffer_device_address
    void vkGetBufferDeviceAddressKHR(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkDeviceAddress input_result, VkDevice device,
                                     const VkBufferDeviceAddressInfo* pInfo);
    void vkGetBufferOpaqueCaptureAddressKHR(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            uint64_t input_result, VkDevice device,
                                            const VkBufferDeviceAddressInfo* pInfo);
    void vkGetDeviceMemoryOpaqueCaptureAddressKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, uint64_t input_result,
        VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
#endif
#ifdef VK_KHR_pipeline_executable_properties
    void vkGetPipelineExecutablePropertiesKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount,
        VkPipelineExecutablePropertiesKHR* pProperties);
    void vkGetPipelineExecutableStatisticsKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
        uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
    void vkGetPipelineExecutableInternalRepresentationsKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
        uint32_t* pInternalRepresentationCount,
        VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
#endif
#ifdef VK_KHR_synchronization2
    void vkCmdSetEvent2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkCommandBuffer commandBuffer, VkEvent event,
                           const VkDependencyInfo* pDependencyInfo);
    void vkCmdResetEvent2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, VkEvent event,
                             VkPipelineStageFlags2 stageMask);
    void vkCmdWaitEvents2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, uint32_t eventCount,
                             const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos);
    void vkCmdPipelineBarrier2KHR(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer,
                                  const VkDependencyInfo* pDependencyInfo);
    void vkCmdWriteTimestamp2KHR(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
                                 VkQueryPool queryPool, uint32_t query);
    void vkQueueSubmit2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                           VkResult input_result, VkQueue queue, uint32_t submitCount,
                           const VkSubmitInfo2* pSubmits, VkFence fence);
#endif
#ifdef VK_KHR_copy_commands2
    void vkCmdCopyBuffer2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer,
                             const VkCopyBufferInfo2* pCopyBufferInfo);
    void vkCmdCopyImage2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo);
    void vkCmdCopyBufferToImage2KHR(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer,
                                    const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
    void vkCmdCopyImageToBuffer2KHR(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer,
                                    const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
    void vkCmdBlitImage2KHR(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo);
    void vkCmdResolveImage2KHR(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                               const VkResolveImageInfo2* pResolveImageInfo);
#endif
#ifdef VK_KHR_maintenance4
    void vkGetDeviceBufferMemoryRequirementsKHR(gfxstream::base::BumpPool* pool,
                                                VkSnapshotApiCallHandle apiCallHandle,
                                                const uint8_t* apiCallPacket,
                                                size_t apiCallPacketSize, VkDevice device,
                                                const VkDeviceBufferMemoryRequirements* pInfo,
                                                VkMemoryRequirements2* pMemoryRequirements);
    void vkGetDeviceImageMemoryRequirementsKHR(gfxstream::base::BumpPool* pool,
                                               VkSnapshotApiCallHandle apiCallHandle,
                                               const uint8_t* apiCallPacket,
                                               size_t apiCallPacketSize, VkDevice device,
                                               const VkDeviceImageMemoryRequirements* pInfo,
                                               VkMemoryRequirements2* pMemoryRequirements);
    void vkGetDeviceImageSparseMemoryRequirementsKHR(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
#endif
#ifdef VK_KHR_maintenance5
    void vkCmdBindIndexBuffer2KHR(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkCommandBuffer commandBuffer, VkBuffer buffer,
                                  VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType);
    void vkGetRenderingAreaGranularityKHR(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkDevice device,
                                          const VkRenderingAreaInfo* pRenderingAreaInfo,
                                          VkExtent2D* pGranularity);
    void vkGetDeviceImageSubresourceLayoutKHR(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize, VkDevice device,
                                              const VkDeviceImageSubresourceInfo* pInfo,
                                              VkSubresourceLayout2* pLayout);
    void vkGetImageSubresourceLayout2KHR(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkDevice device, VkImage image,
                                         const VkImageSubresource2* pSubresource,
                                         VkSubresourceLayout2* pLayout);
#endif
#ifdef VK_KHR_line_rasterization
    void vkCmdSetLineStippleKHR(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                uint32_t lineStippleFactor, uint16_t lineStipplePattern);
#endif
#ifdef VK_ANDROID_native_buffer
    void vkGetSwapchainGrallocUsageANDROID(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkResult input_result, VkDevice device, VkFormat format,
                                           VkImageUsageFlags imageUsage, int* grallocUsage);
    void vkAcquireImageANDROID(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               VkImage image, int nativeFenceFd, VkSemaphore semaphore,
                               VkFence fence);
    void vkQueueSignalReleaseImageANDROID(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkResult input_result, VkQueue queue,
                                          uint32_t waitSemaphoreCount,
                                          const VkSemaphore* pWaitSemaphores, VkImage image,
                                          int* pNativeFenceFd);
    void vkGetSwapchainGrallocUsage2ANDROID(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkResult input_result, VkDevice device, VkFormat format,
                                            VkImageUsageFlags imageUsage,
                                            VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,
                                            uint64_t* grallocConsumerUsage,
                                            uint64_t* grallocProducerUsage);
#endif
#ifdef VK_EXT_debug_report
    void vkCreateDebugReportCallbackEXT(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkResult input_result, VkInstance instance,
                                        const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
                                        const VkAllocationCallbacks* pAllocator,
                                        VkDebugReportCallbackEXT* pCallback);
    void vkDestroyDebugReportCallbackEXT(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkInstance instance, VkDebugReportCallbackEXT callback,
                                         const VkAllocationCallbacks* pAllocator);
    void vkDebugReportMessageEXT(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkInstance instance, VkDebugReportFlagsEXT flags,
                                 VkDebugReportObjectTypeEXT objectType, uint64_t object,
                                 size_t location, int32_t messageCode, const char* pLayerPrefix,
                                 const char* pMessage);
#endif
#ifdef VK_EXT_transform_feedback
    void vkCmdBindTransformFeedbackBuffersEXT(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
        uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers,
        const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes);
    void vkCmdBeginTransformFeedbackEXT(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer,
                                        uint32_t counterBufferCount,
                                        const VkBuffer* pCounterBuffers,
                                        const VkDeviceSize* pCounterBufferOffsets);
    void vkCmdEndTransformFeedbackEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer,
                                      uint32_t counterBufferCount, const VkBuffer* pCounterBuffers,
                                      const VkDeviceSize* pCounterBufferOffsets);
    void vkCmdBeginQueryIndexedEXT(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                   uint32_t query, VkQueryControlFlags flags, uint32_t index);
    void vkCmdEndQueryIndexedEXT(gfxstream::base::BumpPool* pool,
                                 VkSnapshotApiCallHandle apiCallHandle,
                                 const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                 VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                 uint32_t query, uint32_t index);
    void vkCmdDrawIndirectByteCountEXT(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer, uint32_t instanceCount,
                                       uint32_t firstInstance, VkBuffer counterBuffer,
                                       VkDeviceSize counterBufferOffset, uint32_t counterOffset,
                                       uint32_t vertexStride);
#endif
#ifdef VK_EXT_debug_utils
    void vkSetDebugUtilsObjectNameEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkResult input_result, VkDevice device,
                                      const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
    void vkSetDebugUtilsObjectTagEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkResult input_result, VkDevice device,
                                     const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
    void vkQueueBeginDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
    void vkQueueEndDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkQueue queue);
    void vkQueueInsertDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo);
    void vkCmdBeginDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkCommandBuffer commandBuffer,
                                      const VkDebugUtilsLabelEXT* pLabelInfo);
    void vkCmdEndDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer);
    void vkCmdInsertDebugUtilsLabelEXT(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer,
                                       const VkDebugUtilsLabelEXT* pLabelInfo);
    void vkCreateDebugUtilsMessengerEXT(gfxstream::base::BumpPool* pool,
                                        VkSnapshotApiCallHandle apiCallHandle,
                                        const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                        VkResult input_result, VkInstance instance,
                                        const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
                                        const VkAllocationCallbacks* pAllocator,
                                        VkDebugUtilsMessengerEXT* pMessenger);
    void vkDestroyDebugUtilsMessengerEXT(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkInstance instance, VkDebugUtilsMessengerEXT messenger,
                                         const VkAllocationCallbacks* pAllocator);
    void vkSubmitDebugUtilsMessageEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkInstance instance,
                                      VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
                                      VkDebugUtilsMessageTypeFlagsEXT messageTypes,
                                      const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
#endif
#ifdef VK_EXT_image_drm_format_modifier
    void vkGetImageDrmFormatModifierPropertiesEXT(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
#endif
#ifdef VK_EXT_external_memory_host
    void vkGetMemoryHostPointerPropertiesEXT(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer,
        VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
#endif
#ifdef VK_EXT_tooling_info
    void vkGetPhysicalDeviceToolPropertiesEXT(gfxstream::base::BumpPool* pool,
                                              VkSnapshotApiCallHandle apiCallHandle,
                                              const uint8_t* apiCallPacket,
                                              size_t apiCallPacketSize, VkResult input_result,
                                              VkPhysicalDevice physicalDevice, uint32_t* pToolCount,
                                              VkPhysicalDeviceToolProperties* pToolProperties);
#endif
#ifdef VK_EXT_line_rasterization
    void vkCmdSetLineStippleEXT(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                                uint32_t lineStippleFactor, uint16_t lineStipplePattern);
#endif
#ifdef VK_EXT_extended_dynamic_state
    void vkCmdSetCullModeEXT(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
    void vkCmdSetFrontFaceEXT(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              VkFrontFace frontFace);
    void vkCmdSetPrimitiveTopologyEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkCommandBuffer commandBuffer,
                                      VkPrimitiveTopology primitiveTopology);
    void vkCmdSetViewportWithCountEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkCommandBuffer commandBuffer, uint32_t viewportCount,
                                      const VkViewport* pViewports);
    void vkCmdSetScissorWithCountEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkCommandBuffer commandBuffer, uint32_t scissorCount,
                                     const VkRect2D* pScissors);
    void vkCmdBindVertexBuffers2EXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                    uint32_t bindingCount, const VkBuffer* pBuffers,
                                    const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
                                    const VkDeviceSize* pStrides);
    void vkCmdSetDepthTestEnableEXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
    void vkCmdSetDepthWriteEnableEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
    void vkCmdSetDepthCompareOpEXT(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
    void vkCmdSetDepthBoundsTestEnableEXT(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkCommandBuffer commandBuffer,
                                          VkBool32 depthBoundsTestEnable);
    void vkCmdSetStencilTestEnableEXT(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
    void vkCmdSetStencilOpEXT(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkCommandBuffer commandBuffer,
                              VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp,
                              VkStencilOp depthFailOp, VkCompareOp compareOp);
#endif
#ifdef VK_EXT_host_image_copy
    void vkCopyMemoryToImageEXT(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo);
    void vkCopyImageToMemoryEXT(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo);
    void vkCopyImageToImageEXT(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                               const VkCopyImageToImageInfo* pCopyImageToImageInfo);
    void vkTransitionImageLayoutEXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkResult input_result, VkDevice device,
                                    uint32_t transitionCount,
                                    const VkHostImageLayoutTransitionInfo* pTransitions);
    void vkGetImageSubresourceLayout2EXT(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkDevice device, VkImage image,
                                         const VkImageSubresource2* pSubresource,
                                         VkSubresourceLayout2* pLayout);
#endif
#ifdef VK_EXT_swapchain_maintenance1
    void vkReleaseSwapchainImagesEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkResult input_result, VkDevice device,
                                     const VkReleaseSwapchainImagesInfoEXT* pReleaseInfo);
#endif
#ifdef VK_EXT_private_data
    void vkCreatePrivateDataSlotEXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkResult input_result, VkDevice device,
                                    const VkPrivateDataSlotCreateInfo* pCreateInfo,
                                    const VkAllocationCallbacks* pAllocator,
                                    VkPrivateDataSlot* pPrivateDataSlot);
    void vkDestroyPrivateDataSlotEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkDevice device, VkPrivateDataSlot privateDataSlot,
                                     const VkAllocationCallbacks* pAllocator);
    void vkSetPrivateDataEXT(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkResult input_result, VkDevice device, VkObjectType objectType,
                             uint64_t objectHandle, VkPrivateDataSlot privateDataSlot,
                             uint64_t data);
    void vkGetPrivateDataEXT(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                             VkDevice device, VkObjectType objectType, uint64_t objectHandle,
                             VkPrivateDataSlot privateDataSlot, uint64_t* pData);
#endif
#ifdef VK_EXT_extended_dynamic_state2
    void vkCmdSetPatchControlPointsEXT(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer, uint32_t patchControlPoints);
    void vkCmdSetRasterizerDiscardEnableEXT(gfxstream::base::BumpPool* pool,
                                            VkSnapshotApiCallHandle apiCallHandle,
                                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                            VkCommandBuffer commandBuffer,
                                            VkBool32 rasterizerDiscardEnable);
    void vkCmdSetDepthBiasEnableEXT(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
    void vkCmdSetLogicOpEXT(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                            VkCommandBuffer commandBuffer, VkLogicOp logicOp);
    void vkCmdSetPrimitiveRestartEnableEXT(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkCommandBuffer commandBuffer,
                                           VkBool32 primitiveRestartEnable);
#endif
#ifdef VK_EXT_color_write_enable
    void vkCmdSetColorWriteEnableEXT(gfxstream::base::BumpPool* pool,
                                     VkSnapshotApiCallHandle apiCallHandle,
                                     const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                     VkCommandBuffer commandBuffer, uint32_t attachmentCount,
                                     const VkBool32* pColorWriteEnables);
#endif
#ifdef VK_GOOGLE_gfxstream
    void vkMapMemoryIntoAddressSpaceGOOGLE(gfxstream::base::BumpPool* pool,
                                           VkSnapshotApiCallHandle apiCallHandle,
                                           const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                           VkResult input_result, VkDevice device,
                                           VkDeviceMemory memory, uint64_t* pAddress);
    void vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
        uint32_t imageInfoCount, uint32_t bufferInfoCount, uint32_t bufferViewCount,
        const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices,
        const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos,
        const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews);
    void vkBeginCommandBufferAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkCommandBuffer commandBuffer,
                                         const VkCommandBufferBeginInfo* pBeginInfo);
    void vkEndCommandBufferAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer);
    void vkResetCommandBufferAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                         VkSnapshotApiCallHandle apiCallHandle,
                                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                         VkCommandBuffer commandBuffer,
                                         VkCommandBufferResetFlags flags);
    void vkCommandBufferHostSyncGOOGLE(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkCommandBuffer commandBuffer, uint32_t needHostSync,
                                       uint32_t sequenceNumber);
    void vkCreateImageWithRequirementsGOOGLE(gfxstream::base::BumpPool* pool,
                                             VkSnapshotApiCallHandle apiCallHandle,
                                             const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                             VkResult input_result, VkDevice device,
                                             const VkImageCreateInfo* pCreateInfo,
                                             const VkAllocationCallbacks* pAllocator,
                                             VkImage* pImage,
                                             VkMemoryRequirements* pMemoryRequirements);
    void vkCreateBufferWithRequirementsGOOGLE(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkResult input_result,
        VkDevice device, const VkBufferCreateInfo* pCreateInfo,
        const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer,
        VkMemoryRequirements* pMemoryRequirements);
    void vkGetMemoryHostAddressInfoGOOGLE(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkResult input_result, VkDevice device,
                                          VkDeviceMemory memory, uint64_t* pAddress,
                                          uint64_t* pSize, uint64_t* pHostmemId);
    void vkFreeMemorySyncGOOGLE(gfxstream::base::BumpPool* pool,
                                VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                                size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                                VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
    void vkQueueHostSyncGOOGLE(gfxstream::base::BumpPool* pool,
                               VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                               size_t apiCallPacketSize, VkQueue queue, uint32_t needHostSync,
                               uint32_t sequenceNumber);
    void vkQueueSubmitAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                  VkSnapshotApiCallHandle apiCallHandle,
                                  const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                  VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits,
                                  VkFence fence);
    void vkQueueWaitIdleAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkQueue queue);
    void vkQueueBindSparseAsyncGOOGLE(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkQueue queue, uint32_t bindInfoCount,
                                      const VkBindSparseInfo* pBindInfo, VkFence fence);
    void vkGetLinearImageLayoutGOOGLE(gfxstream::base::BumpPool* pool,
                                      VkSnapshotApiCallHandle apiCallHandle,
                                      const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                      VkDevice device, VkFormat format, VkDeviceSize* pOffset,
                                      VkDeviceSize* pRowPitchAlignment);
    void vkGetLinearImageLayout2GOOGLE(gfxstream::base::BumpPool* pool,
                                       VkSnapshotApiCallHandle apiCallHandle,
                                       const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                       VkDevice device, const VkImageCreateInfo* pCreateInfo,
                                       VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment);
    void vkQueueFlushCommandsGOOGLE(gfxstream::base::BumpPool* pool,
                                    VkSnapshotApiCallHandle apiCallHandle,
                                    const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                    VkQueue queue, VkCommandBuffer commandBuffer,
                                    VkDeviceSize dataSize, const void* pData);
    void vkQueueCommitDescriptorSetUpdatesGOOGLE(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkQueue queue,
        uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools,
        uint32_t descriptorSetCount, const VkDescriptorSetLayout* pSetLayouts,
        const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool,
        const uint32_t* pDescriptorSetPendingAllocation,
        const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount,
        const VkWriteDescriptorSet* pPendingDescriptorWrites);
    void vkCollectDescriptorPoolIdsGOOGLE(gfxstream::base::BumpPool* pool,
                                          VkSnapshotApiCallHandle apiCallHandle,
                                          const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                          VkDevice device, VkDescriptorPool descriptorPool,
                                          uint32_t* pPoolIdCount, uint64_t* pPoolIds);
    void vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkQueue queue,
        uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image);
    void vkQueueFlushCommandsFromAuxMemoryGOOGLE(gfxstream::base::BumpPool* pool,
                                                 VkSnapshotApiCallHandle apiCallHandle,
                                                 const uint8_t* apiCallPacket,
                                                 size_t apiCallPacketSize, VkQueue queue,
                                                 VkCommandBuffer commandBuffer,
                                                 VkDeviceMemory deviceMemory,
                                                 VkDeviceSize dataOffset, VkDeviceSize dataSize);
    void vkGetBlobGOOGLE(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                         const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                         VkResult input_result, VkDevice device, VkDeviceMemory memory);
    void vkUpdateDescriptorSetWithTemplateSized2GOOGLE(
        gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
        const uint8_t* apiCallPacket, size_t apiCallPacketSize, VkDevice device,
        VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
        uint32_t imageInfoCount, uint32_t bufferInfoCount, uint32_t bufferViewCount,
        uint32_t inlineUniformBlockCount, const uint32_t* pImageInfoEntryIndices,
        const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices,
        const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos,
        const VkBufferView* pBufferViews, const uint8_t* pInlineUniformBlockData);
    void vkQueueSubmitAsync2GOOGLE(gfxstream::base::BumpPool* pool,
                                   VkSnapshotApiCallHandle apiCallHandle,
                                   const uint8_t* apiCallPacket, size_t apiCallPacketSize,
                                   VkQueue queue, uint32_t submitCount,
                                   const VkSubmitInfo2* pSubmits, VkFence fence);
    void vkGetSemaphoreGOOGLE(gfxstream::base::BumpPool* pool,
                              VkSnapshotApiCallHandle apiCallHandle, const uint8_t* apiCallPacket,
                              size_t apiCallPacketSize, VkResult input_result, VkDevice device,
                              VkSemaphore semaphore, uint64_t syncId);
    void vkTraceAsyncGOOGLE(gfxstream::base::BumpPool* pool, VkSnapshotApiCallHandle apiCallHandle,
                            const uint8_t* apiCallPacket, size_t apiCallPacketSize, uint64_t id);
#endif
   private:
    class Impl;
    std::unique_ptr<Impl> mImpl;
};

}  // namespace vk
}  // namespace gfxstream
