// 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 VkEncoder
//
// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
//
// Please do not modify directly;
// re-run gfxstream-protocols/scripts/generate-vulkan-sources.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 "aemu/base/AndroidHealthMonitor.h"
#include "goldfish_vk_private_defs.h"
#include "vk_android_native_buffer_gfxstream.h"
#include "vulkan_gfxstream.h"

namespace gfxstream {
namespace guest {
class IOStream;
}  // namespace guest
}  // namespace gfxstream

namespace gfxstream {
namespace vk {

class VkEncoder {
   public:
    VkEncoder(gfxstream::guest::IOStream* stream,
              gfxstream::guest::HealthMonitor<>* healthMonitor = nullptr);
    ~VkEncoder();

#include "VkEncoder.h.inl"
#ifdef VK_VERSION_1_0
    VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
                              const VkAllocationCallbacks* pAllocator, VkInstance* pInstance,
                              uint32_t doLock);
    void vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator,
                           uint32_t doLock);
    VkResult vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount,
                                        VkPhysicalDevice* pPhysicalDevices, uint32_t doLock);
    void vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,
                                     VkPhysicalDeviceFeatures* pFeatures, uint32_t doLock);
    void vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format,
                                             VkFormatProperties* pFormatProperties,
                                             uint32_t doLock);
    VkResult vkGetPhysicalDeviceImageFormatProperties(
        VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling,
        VkImageUsageFlags usage, VkImageCreateFlags flags,
        VkImageFormatProperties* pImageFormatProperties, uint32_t doLock);
    void vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
                                       VkPhysicalDeviceProperties* pProperties, uint32_t doLock);
    void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,
                                                  uint32_t* pQueueFamilyPropertyCount,
                                                  VkQueueFamilyProperties* pQueueFamilyProperties,
                                                  uint32_t doLock);
    void vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,
                                             VkPhysicalDeviceMemoryProperties* pMemoryProperties,
                                             uint32_t doLock);
    PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* pName,
                                             uint32_t doLock);
    PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice device, const char* pName, uint32_t doLock);
    VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo,
                            const VkAllocationCallbacks* pAllocator, VkDevice* pDevice,
                            uint32_t doLock);
    void vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName,
                                                    uint32_t* pPropertyCount,
                                                    VkExtensionProperties* pProperties,
                                                    uint32_t doLock);
    VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
                                                  const char* pLayerName, uint32_t* pPropertyCount,
                                                  VkExtensionProperties* pProperties,
                                                  uint32_t doLock);
    VkResult vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount,
                                                VkLayerProperties* pProperties, uint32_t doLock);
    VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,
                                              uint32_t* pPropertyCount,
                                              VkLayerProperties* pProperties, uint32_t doLock);
    void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex,
                          VkQueue* pQueue, uint32_t doLock);
    VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits,
                           VkFence fence, uint32_t doLock);
    VkResult vkQueueWaitIdle(VkQueue queue, uint32_t doLock);
    VkResult vkDeviceWaitIdle(VkDevice device, uint32_t doLock);
    VkResult vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo,
                              const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory,
                              uint32_t doLock);
    void vkFreeMemory(VkDevice device, VkDeviceMemory memory,
                      const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset,
                         VkDeviceSize size, VkMemoryMapFlags flags, void** ppData, uint32_t doLock);
    void vkUnmapMemory(VkDevice device, VkDeviceMemory memory, uint32_t doLock);
    VkResult vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
                                       const VkMappedMemoryRange* pMemoryRanges, uint32_t doLock);
    VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
                                            const VkMappedMemoryRange* pMemoryRanges,
                                            uint32_t doLock);
    void vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory,
                                     VkDeviceSize* pCommittedMemoryInBytes, uint32_t doLock);
    VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory,
                                VkDeviceSize memoryOffset, uint32_t doLock);
    VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory,
                               VkDeviceSize memoryOffset, uint32_t doLock);
    void vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer,
                                       VkMemoryRequirements* pMemoryRequirements, uint32_t doLock);
    void vkGetImageMemoryRequirements(VkDevice device, VkImage image,
                                      VkMemoryRequirements* pMemoryRequirements, uint32_t doLock);
    void vkGetImageSparseMemoryRequirements(
        VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements* pSparseMemoryRequirements, uint32_t doLock);
    void vkGetPhysicalDeviceSparseImageFormatProperties(
        VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
        VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling,
        uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties, uint32_t doLock);
    VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount,
                               const VkBindSparseInfo* pBindInfo, VkFence fence, uint32_t doLock);
    VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkFence* pFence,
                           uint32_t doLock);
    void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator,
                        uint32_t doLock);
    VkResult vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences,
                           uint32_t doLock);
    VkResult vkGetFenceStatus(VkDevice device, VkFence fence, uint32_t doLock);
    VkResult vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences,
                             VkBool32 waitAll, uint64_t timeout, uint32_t doLock);
    VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo,
                               const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore,
                               uint32_t doLock);
    void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore,
                            const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkEvent* pEvent,
                           uint32_t doLock);
    void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator,
                        uint32_t doLock);
    VkResult vkGetEventStatus(VkDevice device, VkEvent event, uint32_t doLock);
    VkResult vkSetEvent(VkDevice device, VkEvent event, uint32_t doLock);
    VkResult vkResetEvent(VkDevice device, VkEvent event, uint32_t doLock);
    VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo,
                               const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool,
                               uint32_t doLock);
    void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool,
                            const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
                                   uint32_t queryCount, size_t dataSize, void* pData,
                                   VkDeviceSize stride, VkQueryResultFlags flags, uint32_t doLock);
    VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo,
                            const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer,
                            uint32_t doLock);
    void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator,
                         uint32_t doLock);
    VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo,
                                const VkAllocationCallbacks* pAllocator, VkBufferView* pView,
                                uint32_t doLock);
    void vkDestroyBufferView(VkDevice device, VkBufferView bufferView,
                             const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo,
                           const VkAllocationCallbacks* pAllocator, VkImage* pImage,
                           uint32_t doLock);
    void vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator,
                        uint32_t doLock);
    void vkGetImageSubresourceLayout(VkDevice device, VkImage image,
                                     const VkImageSubresource* pSubresource,
                                     VkSubresourceLayout* pLayout, uint32_t doLock);
    VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo,
                               const VkAllocationCallbacks* pAllocator, VkImageView* pView,
                               uint32_t doLock);
    void vkDestroyImageView(VkDevice device, VkImageView imageView,
                            const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo,
                                  const VkAllocationCallbacks* pAllocator,
                                  VkShaderModule* pShaderModule, uint32_t doLock);
    void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule,
                               const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo,
                                   const VkAllocationCallbacks* pAllocator,
                                   VkPipelineCache* pPipelineCache, uint32_t doLock);
    void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache,
                                const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache,
                                    size_t* pDataSize, void* pData, uint32_t doLock);
    VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache,
                                   uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches,
                                   uint32_t doLock);
    VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache,
                                       uint32_t createInfoCount,
                                       const VkGraphicsPipelineCreateInfo* pCreateInfos,
                                       const VkAllocationCallbacks* pAllocator,
                                       VkPipeline* pPipelines, uint32_t doLock);
    VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache,
                                      uint32_t createInfoCount,
                                      const VkComputePipelineCreateInfo* pCreateInfos,
                                      const VkAllocationCallbacks* pAllocator,
                                      VkPipeline* pPipelines, uint32_t doLock);
    void vkDestroyPipeline(VkDevice device, VkPipeline pipeline,
                           const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo,
                                    const VkAllocationCallbacks* pAllocator,
                                    VkPipelineLayout* pPipelineLayout, uint32_t doLock);
    void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout,
                                 const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo,
                             const VkAllocationCallbacks* pAllocator, VkSampler* pSampler,
                             uint32_t doLock);
    void vkDestroySampler(VkDevice device, VkSampler sampler,
                          const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateDescriptorSetLayout(VkDevice device,
                                         const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                         const VkAllocationCallbacks* pAllocator,
                                         VkDescriptorSetLayout* pSetLayout, uint32_t doLock);
    void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout,
                                      const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo,
                                    const VkAllocationCallbacks* pAllocator,
                                    VkDescriptorPool* pDescriptorPool, uint32_t doLock);
    void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
                                 const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
                                   VkDescriptorPoolResetFlags flags, uint32_t doLock);
    VkResult vkAllocateDescriptorSets(VkDevice device,
                                      const VkDescriptorSetAllocateInfo* pAllocateInfo,
                                      VkDescriptorSet* pDescriptorSets, uint32_t doLock);
    VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool,
                                  uint32_t descriptorSetCount,
                                  const VkDescriptorSet* pDescriptorSets, uint32_t doLock);
    void vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount,
                                const VkWriteDescriptorSet* pDescriptorWrites,
                                uint32_t descriptorCopyCount,
                                const VkCopyDescriptorSet* pDescriptorCopies, uint32_t doLock);
    VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo,
                                 const VkAllocationCallbacks* pAllocator,
                                 VkFramebuffer* pFramebuffer, uint32_t doLock);
    void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer,
                              const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo,
                                const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass,
                                uint32_t doLock);
    void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass,
                             const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass,
                                    VkExtent2D* pGranularity, uint32_t doLock);
    VkResult vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo,
                                 const VkAllocationCallbacks* pAllocator,
                                 VkCommandPool* pCommandPool, uint32_t doLock);
    void vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool,
                              const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkResetCommandPool(VkDevice device, VkCommandPool commandPool,
                                VkCommandPoolResetFlags flags, uint32_t doLock);
    VkResult vkAllocateCommandBuffers(VkDevice device,
                                      const VkCommandBufferAllocateInfo* pAllocateInfo,
                                      VkCommandBuffer* pCommandBuffers, uint32_t doLock);
    void vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool,
                              uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers,
                              uint32_t doLock);
    VkResult vkBeginCommandBuffer(VkCommandBuffer commandBuffer,
                                  const VkCommandBufferBeginInfo* pBeginInfo, uint32_t doLock);
    VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer, uint32_t doLock);
    VkResult vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags,
                                  uint32_t doLock);
    void vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
                           VkPipeline pipeline, uint32_t doLock);
    void vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport,
                          uint32_t viewportCount, const VkViewport* pViewports, uint32_t doLock);
    void vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor,
                         uint32_t scissorCount, const VkRect2D* pScissors, uint32_t doLock);
    void vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth, uint32_t doLock);
    void vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor,
                           float depthBiasClamp, float depthBiasSlopeFactor, uint32_t doLock);
    void vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4],
                                uint32_t doLock);
    void vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds,
                             float maxDepthBounds, uint32_t doLock);
    void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                    uint32_t compareMask, uint32_t doLock);
    void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                  uint32_t writeMask, uint32_t doLock);
    void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                                  uint32_t reference, uint32_t doLock);
    void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer,
                                 VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
                                 uint32_t firstSet, uint32_t descriptorSetCount,
                                 const VkDescriptorSet* pDescriptorSets,
                                 uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets,
                                 uint32_t doLock);
    void vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
                              VkIndexType indexType, uint32_t doLock);
    void vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                uint32_t bindingCount, const VkBuffer* pBuffers,
                                const VkDeviceSize* pOffsets, uint32_t doLock);
    void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
                   uint32_t firstVertex, uint32_t firstInstance, uint32_t doLock);
    void vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount,
                          uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset,
                          uint32_t firstInstance, uint32_t doLock);
    void vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
                           uint32_t drawCount, uint32_t stride, uint32_t doLock);
    void vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
                                  VkDeviceSize offset, uint32_t drawCount, uint32_t stride,
                                  uint32_t doLock);
    void vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY,
                       uint32_t groupCountZ, uint32_t doLock);
    void vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
                               uint32_t doLock);
    void vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer,
                         uint32_t regionCount, const VkBufferCopy* pRegions, uint32_t doLock);
    void vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage,
                        VkImageLayout srcImageLayout, VkImage dstImage,
                        VkImageLayout dstImageLayout, uint32_t regionCount,
                        const VkImageCopy* pRegions, uint32_t doLock);
    void vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage,
                        VkImageLayout srcImageLayout, VkImage dstImage,
                        VkImageLayout dstImageLayout, uint32_t regionCount,
                        const VkImageBlit* pRegions, VkFilter filter, uint32_t doLock);
    void vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage,
                                VkImageLayout dstImageLayout, uint32_t regionCount,
                                const VkBufferImageCopy* pRegions, uint32_t doLock);
    void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage,
                                VkImageLayout srcImageLayout, VkBuffer dstBuffer,
                                uint32_t regionCount, const VkBufferImageCopy* pRegions,
                                uint32_t doLock);
    void vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer,
                           VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData,
                           uint32_t doLock);
    void vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset,
                         VkDeviceSize size, uint32_t data, uint32_t doLock);
    void vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image,
                              VkImageLayout imageLayout, const VkClearColorValue* pColor,
                              uint32_t rangeCount, const VkImageSubresourceRange* pRanges,
                              uint32_t doLock);
    void vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image,
                                     VkImageLayout imageLayout,
                                     const VkClearDepthStencilValue* pDepthStencil,
                                     uint32_t rangeCount, const VkImageSubresourceRange* pRanges,
                                     uint32_t doLock);
    void vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
                               const VkClearAttachment* pAttachments, uint32_t rectCount,
                               const VkClearRect* pRects, uint32_t doLock);
    void vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage,
                           VkImageLayout srcImageLayout, VkImage dstImage,
                           VkImageLayout dstImageLayout, uint32_t regionCount,
                           const VkImageResolve* pRegions, uint32_t doLock);
    void vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask,
                       uint32_t doLock);
    void vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event,
                         VkPipelineStageFlags stageMask, uint32_t doLock);
    void vkCmdWaitEvents(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, uint32_t doLock);
    void vkCmdPipelineBarrier(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, uint32_t doLock);
    void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query,
                         VkQueryControlFlags flags, uint32_t doLock);
    void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query,
                       uint32_t doLock);
    void vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                             uint32_t firstQuery, uint32_t queryCount, uint32_t doLock);
    void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage,
                             VkQueryPool queryPool, uint32_t query, uint32_t doLock);
    void vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                   uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer,
                                   VkDeviceSize dstOffset, VkDeviceSize stride,
                                   VkQueryResultFlags flags, uint32_t doLock);
    void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout,
                            VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size,
                            const void* pValues, uint32_t doLock);
    void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,
                              const VkRenderPassBeginInfo* pRenderPassBegin,
                              VkSubpassContents contents, uint32_t doLock);
    void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents,
                          uint32_t doLock);
    void vkCmdEndRenderPass(VkCommandBuffer commandBuffer, uint32_t doLock);
    void vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount,
                              const VkCommandBuffer* pCommandBuffers, uint32_t doLock);
#endif
#ifdef VK_VERSION_1_1
    VkResult vkEnumerateInstanceVersion(uint32_t* pApiVersion, uint32_t doLock);
    VkResult vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
                                 const VkBindBufferMemoryInfo* pBindInfos, uint32_t doLock);
    VkResult vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount,
                                const VkBindImageMemoryInfo* pBindInfos, uint32_t doLock);
    void vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex,
                                            uint32_t localDeviceIndex, uint32_t remoteDeviceIndex,
                                            VkPeerMemoryFeatureFlags* pPeerMemoryFeatures,
                                            uint32_t doLock);
    void vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask, uint32_t doLock);
    void vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
                           uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
                           uint32_t groupCountZ, uint32_t doLock);
    VkResult vkEnumeratePhysicalDeviceGroups(
        VkInstance instance, uint32_t* pPhysicalDeviceGroupCount,
        VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties, uint32_t doLock);
    void vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo,
                                       VkMemoryRequirements2* pMemoryRequirements, uint32_t doLock);
    void vkGetBufferMemoryRequirements2(VkDevice device,
                                        const VkBufferMemoryRequirementsInfo2* pInfo,
                                        VkMemoryRequirements2* pMemoryRequirements,
                                        uint32_t doLock);
    void vkGetImageSparseMemoryRequirements2(
        VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo,
        uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock);
    void vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
                                      VkPhysicalDeviceFeatures2* pFeatures, uint32_t doLock);
    void vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
                                        VkPhysicalDeviceProperties2* pProperties, uint32_t doLock);
    void vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format,
                                              VkFormatProperties2* pFormatProperties,
                                              uint32_t doLock);
    VkResult vkGetPhysicalDeviceImageFormatProperties2(
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
        VkImageFormatProperties2* pImageFormatProperties, uint32_t doLock);
    void vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,
                                                   uint32_t* pQueueFamilyPropertyCount,
                                                   VkQueueFamilyProperties2* pQueueFamilyProperties,
                                                   uint32_t doLock);
    void vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,
                                              VkPhysicalDeviceMemoryProperties2* pMemoryProperties,
                                              uint32_t doLock);
    void vkGetPhysicalDeviceSparseImageFormatProperties2(
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
        uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties, uint32_t doLock);
    void vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags,
                           uint32_t doLock);
    void vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue,
                           uint32_t doLock);
    VkResult vkCreateSamplerYcbcrConversion(VkDevice device,
                                            const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
                                            const VkAllocationCallbacks* pAllocator,
                                            VkSamplerYcbcrConversion* pYcbcrConversion,
                                            uint32_t doLock);
    void vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion,
                                         const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkCreateDescriptorUpdateTemplate(
        VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
        const VkAllocationCallbacks* pAllocator,
        VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate, uint32_t doLock);
    void vkDestroyDescriptorUpdateTemplate(VkDevice device,
                                           VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                           const VkAllocationCallbacks* pAllocator,
                                           uint32_t doLock);
    void vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet,
                                           VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                           const void* pData, uint32_t doLock);
    void vkGetPhysicalDeviceExternalBufferProperties(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
        VkExternalBufferProperties* pExternalBufferProperties, uint32_t doLock);
    void vkGetPhysicalDeviceExternalFenceProperties(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
        VkExternalFenceProperties* pExternalFenceProperties, uint32_t doLock);
    void vkGetPhysicalDeviceExternalSemaphoreProperties(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
        VkExternalSemaphoreProperties* pExternalSemaphoreProperties, uint32_t doLock);
    void vkGetDescriptorSetLayoutSupport(VkDevice device,
                                         const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                         VkDescriptorSetLayoutSupport* pSupport, uint32_t doLock);
#endif
#ifdef VK_VERSION_1_2
    void vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
                                VkBuffer countBuffer, VkDeviceSize countBufferOffset,
                                uint32_t maxDrawCount, uint32_t stride, uint32_t doLock);
    void vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer,
                                       VkDeviceSize offset, VkBuffer countBuffer,
                                       VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
                                       uint32_t stride, uint32_t doLock);
    VkResult vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo,
                                 const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass,
                                 uint32_t doLock);
    void vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,
                               const VkRenderPassBeginInfo* pRenderPassBegin,
                               const VkSubpassBeginInfo* pSubpassBeginInfo, uint32_t doLock);
    void vkCmdNextSubpass2(VkCommandBuffer commandBuffer,
                           const VkSubpassBeginInfo* pSubpassBeginInfo,
                           const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock);
    void vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo,
                             uint32_t doLock);
    void vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
                          uint32_t queryCount, uint32_t doLock);
    VkResult vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t* pValue,
                                        uint32_t doLock);
    VkResult vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo,
                              uint64_t timeout, uint32_t doLock);
    VkResult vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo,
                               uint32_t doLock);
    VkDeviceAddress vkGetBufferDeviceAddress(VkDevice device,
                                             const VkBufferDeviceAddressInfo* pInfo,
                                             uint32_t doLock);
    uint64_t vkGetBufferOpaqueCaptureAddress(VkDevice device,
                                             const VkBufferDeviceAddressInfo* pInfo,
                                             uint32_t doLock);
    uint64_t vkGetDeviceMemoryOpaqueCaptureAddress(
        VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, uint32_t doLock);
#endif
#ifdef VK_VERSION_1_3
    VkResult vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice,
                                               uint32_t* pToolCount,
                                               VkPhysicalDeviceToolProperties* pToolProperties,
                                               uint32_t doLock);
    VkResult vkCreatePrivateDataSlot(VkDevice device,
                                     const VkPrivateDataSlotCreateInfo* pCreateInfo,
                                     const VkAllocationCallbacks* pAllocator,
                                     VkPrivateDataSlot* pPrivateDataSlot, uint32_t doLock);
    void vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot,
                                  const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
                              VkPrivateDataSlot privateDataSlot, uint64_t data, uint32_t doLock);
    void vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
                          VkPrivateDataSlot privateDataSlot, uint64_t* pData, uint32_t doLock);
    void vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
                        const VkDependencyInfo* pDependencyInfo, uint32_t doLock);
    void vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
                          VkPipelineStageFlags2 stageMask, uint32_t doLock);
    void vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount,
                          const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos,
                          uint32_t doLock);
    void vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,
                               const VkDependencyInfo* pDependencyInfo, uint32_t doLock);
    void vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
                              VkQueryPool queryPool, uint32_t query, uint32_t doLock);
    VkResult vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits,
                            VkFence fence, uint32_t doLock);
    void vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo,
                          uint32_t doLock);
    void vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo,
                         uint32_t doLock);
    void vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,
                                 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo,
                                 uint32_t doLock);
    void vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,
                                 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo,
                                 uint32_t doLock);
    void vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo,
                         uint32_t doLock);
    void vkCmdResolveImage2(VkCommandBuffer commandBuffer,
                            const VkResolveImageInfo2* pResolveImageInfo, uint32_t doLock);
    void vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo,
                             uint32_t doLock);
    void vkCmdEndRendering(VkCommandBuffer commandBuffer, uint32_t doLock);
    void vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode, uint32_t doLock);
    void vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace, uint32_t doLock);
    void vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,
                                   VkPrimitiveTopology primitiveTopology, uint32_t doLock);
    void vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount,
                                   const VkViewport* pViewports, uint32_t doLock);
    void vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount,
                                  const VkRect2D* pScissors, uint32_t doLock);
    void vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                 uint32_t bindingCount, const VkBuffer* pBuffers,
                                 const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
                                 const VkDeviceSize* pStrides, uint32_t doLock);
    void vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable,
                                 uint32_t doLock);
    void vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable,
                                  uint32_t doLock);
    void vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp,
                                uint32_t doLock);
    void vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,
                                       VkBool32 depthBoundsTestEnable, uint32_t doLock);
    void vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable,
                                   uint32_t doLock);
    void vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                           VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
                           VkCompareOp compareOp, uint32_t doLock);
    void vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,
                                         VkBool32 rasterizerDiscardEnable, uint32_t doLock);
    void vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable,
                                 uint32_t doLock);
    void vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,
                                        VkBool32 primitiveRestartEnable, uint32_t doLock);
    void vkGetDeviceBufferMemoryRequirements(VkDevice device,
                                             const VkDeviceBufferMemoryRequirements* pInfo,
                                             VkMemoryRequirements2* pMemoryRequirements,
                                             uint32_t doLock);
    void vkGetDeviceImageMemoryRequirements(VkDevice device,
                                            const VkDeviceImageMemoryRequirements* pInfo,
                                            VkMemoryRequirements2* pMemoryRequirements,
                                            uint32_t doLock);
    void vkGetDeviceImageSparseMemoryRequirements(
        VkDevice device, const VkDeviceImageMemoryRequirements* pInfo,
        uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock);
#endif
#ifdef VK_KHR_surface
#endif
#ifdef VK_KHR_swapchain
#endif
#ifdef VK_KHR_xcb_surface
#endif
#ifdef VK_KHR_android_surface
#endif
#ifdef VK_KHR_win32_surface
#endif
#ifdef VK_KHR_dynamic_rendering
    void vkCmdBeginRenderingKHR(VkCommandBuffer commandBuffer,
                                const VkRenderingInfo* pRenderingInfo, uint32_t doLock);
    void vkCmdEndRenderingKHR(VkCommandBuffer commandBuffer, uint32_t doLock);
#endif
#ifdef VK_KHR_get_physical_device_properties2
    void vkGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,
                                         VkPhysicalDeviceFeatures2* pFeatures, uint32_t doLock);
    void vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,
                                           VkPhysicalDeviceProperties2* pProperties,
                                           uint32_t doLock);
    void vkGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice, VkFormat format,
                                                 VkFormatProperties2* pFormatProperties,
                                                 uint32_t doLock);
    VkResult vkGetPhysicalDeviceImageFormatProperties2KHR(
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
        VkImageFormatProperties2* pImageFormatProperties, uint32_t doLock);
    void vkGetPhysicalDeviceQueueFamilyProperties2KHR(
        VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount,
        VkQueueFamilyProperties2* pQueueFamilyProperties, uint32_t doLock);
    void vkGetPhysicalDeviceMemoryProperties2KHR(
        VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties,
        uint32_t doLock);
    void vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
        VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
        uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties, uint32_t doLock);
#endif
#ifdef VK_KHR_maintenance1
    void vkTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool,
                              VkCommandPoolTrimFlags flags, uint32_t doLock);
#endif
#ifdef VK_KHR_external_memory_capabilities
    void vkGetPhysicalDeviceExternalBufferPropertiesKHR(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
        VkExternalBufferProperties* pExternalBufferProperties, uint32_t doLock);
#endif
#ifdef VK_KHR_external_memory
#endif
#ifdef VK_KHR_external_memory_win32
#endif
#ifdef VK_KHR_external_memory_fd
#endif
#ifdef VK_KHR_external_semaphore_capabilities
    void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
        VkExternalSemaphoreProperties* pExternalSemaphoreProperties, uint32_t doLock);
#endif
#ifdef VK_KHR_external_semaphore
#endif
#ifdef VK_KHR_external_semaphore_win32
#endif
#ifdef VK_KHR_external_semaphore_fd
    VkResult vkImportSemaphoreFdKHR(VkDevice device,
                                    const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo,
                                    uint32_t doLock);
    VkResult vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
                                 int* pFd, uint32_t doLock);
#endif
#ifdef VK_KHR_shader_float16_int8
#endif
#ifdef VK_KHR_incremental_present
#endif
#ifdef VK_KHR_descriptor_update_template
    VkResult vkCreateDescriptorUpdateTemplateKHR(
        VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
        const VkAllocationCallbacks* pAllocator,
        VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate, uint32_t doLock);
    void vkDestroyDescriptorUpdateTemplateKHR(VkDevice device,
                                              VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                              const VkAllocationCallbacks* pAllocator,
                                              uint32_t doLock);
    void vkUpdateDescriptorSetWithTemplateKHR(VkDevice device, VkDescriptorSet descriptorSet,
                                              VkDescriptorUpdateTemplate descriptorUpdateTemplate,
                                              const void* pData, uint32_t doLock);
#endif
#ifdef VK_KHR_imageless_framebuffer
#endif
#ifdef VK_KHR_create_renderpass2
    VkResult vkCreateRenderPass2KHR(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo,
                                    const VkAllocationCallbacks* pAllocator,
                                    VkRenderPass* pRenderPass, uint32_t doLock);
    void vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,
                                  const VkRenderPassBeginInfo* pRenderPassBegin,
                                  const VkSubpassBeginInfo* pSubpassBeginInfo, uint32_t doLock);
    void vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,
                              const VkSubpassBeginInfo* pSubpassBeginInfo,
                              const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock);
    void vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,
                                const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock);
#endif
#ifdef VK_KHR_external_fence_capabilities
    void vkGetPhysicalDeviceExternalFencePropertiesKHR(
        VkPhysicalDevice physicalDevice,
        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
        VkExternalFenceProperties* pExternalFenceProperties, uint32_t doLock);
#endif
#ifdef VK_KHR_external_fence
#endif
#ifdef VK_KHR_external_fence_fd
    VkResult vkImportFenceFdKHR(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo,
                                uint32_t doLock);
    VkResult vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd,
                             uint32_t doLock);
#endif
#ifdef VK_KHR_maintenance2
#endif
#ifdef VK_KHR_dedicated_allocation
#endif
#ifdef VK_KHR_storage_buffer_storage_class
#endif
#ifdef VK_KHR_get_memory_requirements2
    void vkGetImageMemoryRequirements2KHR(VkDevice device,
                                          const VkImageMemoryRequirementsInfo2* pInfo,
                                          VkMemoryRequirements2* pMemoryRequirements,
                                          uint32_t doLock);
    void vkGetBufferMemoryRequirements2KHR(VkDevice device,
                                           const VkBufferMemoryRequirementsInfo2* pInfo,
                                           VkMemoryRequirements2* pMemoryRequirements,
                                           uint32_t doLock);
    void vkGetImageSparseMemoryRequirements2KHR(
        VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo,
        uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock);
#endif
#ifdef VK_KHR_image_format_list
#endif
#ifdef VK_KHR_sampler_ycbcr_conversion
    VkResult vkCreateSamplerYcbcrConversionKHR(
        VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
        const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion,
        uint32_t doLock);
    void vkDestroySamplerYcbcrConversionKHR(VkDevice device,
                                            VkSamplerYcbcrConversion ycbcrConversion,
                                            const VkAllocationCallbacks* pAllocator,
                                            uint32_t doLock);
#endif
#ifdef VK_KHR_bind_memory2
    VkResult vkBindBufferMemory2KHR(VkDevice device, uint32_t bindInfoCount,
                                    const VkBindBufferMemoryInfo* pBindInfos, uint32_t doLock);
    VkResult vkBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount,
                                   const VkBindImageMemoryInfo* pBindInfos, uint32_t doLock);
#endif
#ifdef VK_KHR_maintenance3
    void vkGetDescriptorSetLayoutSupportKHR(VkDevice device,
                                            const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
                                            VkDescriptorSetLayoutSupport* pSupport,
                                            uint32_t doLock);
#endif
#ifdef VK_KHR_shader_subgroup_extended_types
#endif
#ifdef VK_KHR_vulkan_memory_model
#endif
#ifdef VK_KHR_shader_terminate_invocation
#endif
#ifdef VK_KHR_buffer_device_address
    VkDeviceAddress vkGetBufferDeviceAddressKHR(VkDevice device,
                                                const VkBufferDeviceAddressInfo* pInfo,
                                                uint32_t doLock);
    uint64_t vkGetBufferOpaqueCaptureAddressKHR(VkDevice device,
                                                const VkBufferDeviceAddressInfo* pInfo,
                                                uint32_t doLock);
    uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR(
        VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, uint32_t doLock);
#endif
#ifdef VK_KHR_pipeline_executable_properties
    VkResult vkGetPipelineExecutablePropertiesKHR(VkDevice device,
                                                  const VkPipelineInfoKHR* pPipelineInfo,
                                                  uint32_t* pExecutableCount,
                                                  VkPipelineExecutablePropertiesKHR* pProperties,
                                                  uint32_t doLock);
    VkResult vkGetPipelineExecutableStatisticsKHR(
        VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
        uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics, uint32_t doLock);
    VkResult vkGetPipelineExecutableInternalRepresentationsKHR(
        VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
        uint32_t* pInternalRepresentationCount,
        VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations, uint32_t doLock);
#endif
#ifdef VK_KHR_shader_integer_dot_product
#endif
#ifdef VK_KHR_shader_non_semantic_info
#endif
#ifdef VK_KHR_synchronization2
    void vkCmdSetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
                           const VkDependencyInfo* pDependencyInfo, uint32_t doLock);
    void vkCmdResetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
                             VkPipelineStageFlags2 stageMask, uint32_t doLock);
    void vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount,
                             const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos,
                             uint32_t doLock);
    void vkCmdPipelineBarrier2KHR(VkCommandBuffer commandBuffer,
                                  const VkDependencyInfo* pDependencyInfo, uint32_t doLock);
    void vkCmdWriteTimestamp2KHR(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
                                 VkQueryPool queryPool, uint32_t query, uint32_t doLock);
    VkResult vkQueueSubmit2KHR(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits,
                               VkFence fence, uint32_t doLock);
    void vkCmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
                                    VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker,
                                    uint32_t doLock);
    void vkGetQueueCheckpointData2NV(VkQueue queue, uint32_t* pCheckpointDataCount,
                                     VkCheckpointData2NV* pCheckpointData, uint32_t doLock);
#endif
#ifdef VK_KHR_zero_initialize_workgroup_memory
#endif
#ifdef VK_KHR_copy_commands2
    void vkCmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,
                             const VkCopyBufferInfo2* pCopyBufferInfo, uint32_t doLock);
    void vkCmdCopyImage2KHR(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo,
                            uint32_t doLock);
    void vkCmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,
                                    const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo,
                                    uint32_t doLock);
    void vkCmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,
                                    const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo,
                                    uint32_t doLock);
    void vkCmdBlitImage2KHR(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo,
                            uint32_t doLock);
    void vkCmdResolveImage2KHR(VkCommandBuffer commandBuffer,
                               const VkResolveImageInfo2* pResolveImageInfo, uint32_t doLock);
#endif
#ifdef VK_KHR_format_feature_flags2
#endif
#ifdef VK_KHR_maintenance4
    void vkGetDeviceBufferMemoryRequirementsKHR(VkDevice device,
                                                const VkDeviceBufferMemoryRequirements* pInfo,
                                                VkMemoryRequirements2* pMemoryRequirements,
                                                uint32_t doLock);
    void vkGetDeviceImageMemoryRequirementsKHR(VkDevice device,
                                               const VkDeviceImageMemoryRequirements* pInfo,
                                               VkMemoryRequirements2* pMemoryRequirements,
                                               uint32_t doLock);
    void vkGetDeviceImageSparseMemoryRequirementsKHR(
        VkDevice device, const VkDeviceImageMemoryRequirements* pInfo,
        uint32_t* pSparseMemoryRequirementCount,
        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock);
#endif
#ifdef VK_KHR_maintenance5
    void vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer, VkBuffer buffer,
                                  VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType,
                                  uint32_t doLock);
    void vkGetRenderingAreaGranularityKHR(VkDevice device,
                                          const VkRenderingAreaInfoKHR* pRenderingAreaInfo,
                                          VkExtent2D* pGranularity, uint32_t doLock);
    void vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,
                                              const VkDeviceImageSubresourceInfoKHR* pInfo,
                                              VkSubresourceLayout2KHR* pLayout, uint32_t doLock);
    void vkGetImageSubresourceLayout2KHR(VkDevice device, VkImage image,
                                         const VkImageSubresource2KHR* pSubresource,
                                         VkSubresourceLayout2KHR* pLayout, uint32_t doLock);
#endif
#ifdef VK_ANDROID_native_buffer
    VkResult vkGetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format,
                                               VkImageUsageFlags imageUsage, int* grallocUsage,
                                               uint32_t doLock);
    VkResult vkAcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd,
                                   VkSemaphore semaphore, VkFence fence, uint32_t doLock);
    VkResult vkQueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount,
                                              const VkSemaphore* pWaitSemaphores, VkImage image,
                                              int* pNativeFenceFd, uint32_t doLock);
    VkResult vkGetSwapchainGrallocUsage2ANDROID(
        VkDevice device, VkFormat format, VkImageUsageFlags imageUsage,
        VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage,
        uint64_t* grallocProducerUsage, uint32_t doLock);
#endif
#ifdef VK_EXT_transform_feedback
    void vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                              uint32_t bindingCount, const VkBuffer* pBuffers,
                                              const VkDeviceSize* pOffsets,
                                              const VkDeviceSize* pSizes, uint32_t doLock);
    void vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer,
                                        uint32_t counterBufferCount,
                                        const VkBuffer* pCounterBuffers,
                                        const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock);
    void vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer,
                                      uint32_t counterBufferCount, const VkBuffer* pCounterBuffers,
                                      const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock);
    void vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                   uint32_t query, VkQueryControlFlags flags, uint32_t index,
                                   uint32_t doLock);
    void vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
                                 uint32_t query, uint32_t index, uint32_t doLock);
    void vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
                                       uint32_t firstInstance, VkBuffer counterBuffer,
                                       VkDeviceSize counterBufferOffset, uint32_t counterOffset,
                                       uint32_t vertexStride, uint32_t doLock);
#endif
#ifdef VK_AMD_gpu_shader_half_float
#endif
#ifdef VK_EXT_texture_compression_astc_hdr
#endif
#ifdef VK_EXT_depth_clip_enable
#endif
#ifdef VK_EXT_swapchain_colorspace
#endif
#ifdef VK_EXT_queue_family_foreign
#endif
#ifdef VK_EXT_debug_utils
#endif
#ifdef VK_ANDROID_external_memory_android_hardware_buffer
#endif
#ifdef VK_EXT_inline_uniform_block
#endif
#ifdef VK_EXT_shader_stencil_export
#endif
#ifdef VK_EXT_vertex_attribute_divisor
#endif
#ifdef VK_EXT_pipeline_creation_feedback
#endif
#ifdef VK_NV_shader_subgroup_partitioned
#endif
#ifdef VK_EXT_metal_surface
#endif
#ifdef VK_EXT_fragment_density_map
#endif
#ifdef VK_EXT_scalar_block_layout
#endif
#ifdef VK_EXT_subgroup_size_control
#endif
#ifdef VK_EXT_tooling_info
    VkResult vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice,
                                                  uint32_t* pToolCount,
                                                  VkPhysicalDeviceToolProperties* pToolProperties,
                                                  uint32_t doLock);
#endif
#ifdef VK_EXT_validation_features
#endif
#ifdef VK_EXT_provoking_vertex
#endif
#ifdef VK_EXT_line_rasterization
    void vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
                                uint16_t lineStipplePattern, uint32_t doLock);
#endif
#ifdef VK_EXT_index_type_uint8
#endif
#ifdef VK_EXT_extended_dynamic_state
    void vkCmdSetCullModeEXT(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode,
                             uint32_t doLock);
    void vkCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer, VkFrontFace frontFace,
                              uint32_t doLock);
    void vkCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,
                                      VkPrimitiveTopology primitiveTopology, uint32_t doLock);
    void vkCmdSetViewportWithCountEXT(VkCommandBuffer commandBuffer, uint32_t viewportCount,
                                      const VkViewport* pViewports, uint32_t doLock);
    void vkCmdSetScissorWithCountEXT(VkCommandBuffer commandBuffer, uint32_t scissorCount,
                                     const VkRect2D* pScissors, uint32_t doLock);
    void vkCmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer, uint32_t firstBinding,
                                    uint32_t bindingCount, const VkBuffer* pBuffers,
                                    const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
                                    const VkDeviceSize* pStrides, uint32_t doLock);
    void vkCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable,
                                    uint32_t doLock);
    void vkCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable,
                                     uint32_t doLock);
    void vkCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp,
                                   uint32_t doLock);
    void vkCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,
                                          VkBool32 depthBoundsTestEnable, uint32_t doLock);
    void vkCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable,
                                      uint32_t doLock);
    void vkCmdSetStencilOpEXT(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
                              VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
                              VkCompareOp compareOp, uint32_t doLock);
#endif
#ifdef VK_EXT_host_image_copy
    VkResult vkCopyMemoryToImageEXT(VkDevice device,
                                    const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo,
                                    uint32_t doLock);
    VkResult vkCopyImageToMemoryEXT(VkDevice device,
                                    const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo,
                                    uint32_t doLock);
    VkResult vkCopyImageToImageEXT(VkDevice device,
                                   const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo,
                                   uint32_t doLock);
    VkResult vkTransitionImageLayoutEXT(VkDevice device, uint32_t transitionCount,
                                        const VkHostImageLayoutTransitionInfoEXT* pTransitions,
                                        uint32_t doLock);
    void vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image,
                                         const VkImageSubresource2KHR* pSubresource,
                                         VkSubresourceLayout2KHR* pLayout, uint32_t doLock);
#endif
#ifdef VK_EXT_swapchain_maintenance1
#endif
#ifdef VK_EXT_shader_demote_to_helper_invocation
#endif
#ifdef VK_EXT_texel_buffer_alignment
#endif
#ifdef VK_EXT_device_memory_report
#endif
#ifdef VK_EXT_custom_border_color
#endif
#ifdef VK_EXT_private_data
    VkResult vkCreatePrivateDataSlotEXT(VkDevice device,
                                        const VkPrivateDataSlotCreateInfo* pCreateInfo,
                                        const VkAllocationCallbacks* pAllocator,
                                        VkPrivateDataSlot* pPrivateDataSlot, uint32_t doLock);
    void vkDestroyPrivateDataSlotEXT(VkDevice device, VkPrivateDataSlot privateDataSlot,
                                     const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    VkResult vkSetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
                                 VkPrivateDataSlot privateDataSlot, uint64_t data, uint32_t doLock);
    void vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
                             VkPrivateDataSlot privateDataSlot, uint64_t* pData, uint32_t doLock);
#endif
#ifdef VK_EXT_pipeline_creation_cache_control
#endif
#ifdef VK_EXT_graphics_pipeline_library
#endif
#ifdef VK_EXT_ycbcr_2plane_444_formats
#endif
#ifdef VK_EXT_image_robustness
#endif
#ifdef VK_EXT_image_compression_control
#endif
#ifdef VK_EXT_4444_formats
#endif
#ifdef VK_EXT_primitive_topology_list_restart
#endif
#ifdef VK_EXT_extended_dynamic_state2
    void vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints,
                                       uint32_t doLock);
    void vkCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,
                                            VkBool32 rasterizerDiscardEnable, uint32_t doLock);
    void vkCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable,
                                    uint32_t doLock);
    void vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp, uint32_t doLock);
    void vkCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,
                                           VkBool32 primitiveRestartEnable, uint32_t doLock);
#endif
#ifdef VK_GOOGLE_gfxstream
    VkResult vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device, VkDeviceMemory memory,
                                               uint64_t* pAddress, uint32_t doLock);
    void vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
        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, uint32_t doLock);
    void vkBeginCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
                                         const VkCommandBufferBeginInfo* pBeginInfo,
                                         uint32_t doLock);
    void vkEndCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t doLock);
    void vkResetCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
                                         VkCommandBufferResetFlags flags, uint32_t doLock);
    void vkCommandBufferHostSyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t needHostSync,
                                       uint32_t sequenceNumber, uint32_t doLock);
    VkResult vkCreateImageWithRequirementsGOOGLE(VkDevice device,
                                                 const VkImageCreateInfo* pCreateInfo,
                                                 const VkAllocationCallbacks* pAllocator,
                                                 VkImage* pImage,
                                                 VkMemoryRequirements* pMemoryRequirements,
                                                 uint32_t doLock);
    VkResult vkCreateBufferWithRequirementsGOOGLE(VkDevice device,
                                                  const VkBufferCreateInfo* pCreateInfo,
                                                  const VkAllocationCallbacks* pAllocator,
                                                  VkBuffer* pBuffer,
                                                  VkMemoryRequirements* pMemoryRequirements,
                                                  uint32_t doLock);
    VkResult vkGetMemoryHostAddressInfoGOOGLE(VkDevice device, VkDeviceMemory memory,
                                              uint64_t* pAddress, uint64_t* pSize,
                                              uint64_t* pHostmemId, uint32_t doLock);
    VkResult vkFreeMemorySyncGOOGLE(VkDevice device, VkDeviceMemory memory,
                                    const VkAllocationCallbacks* pAllocator, uint32_t doLock);
    void vkQueueHostSyncGOOGLE(VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber,
                               uint32_t doLock);
    void vkQueueSubmitAsyncGOOGLE(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits,
                                  VkFence fence, uint32_t doLock);
    void vkQueueWaitIdleAsyncGOOGLE(VkQueue queue, uint32_t doLock);
    void vkQueueBindSparseAsyncGOOGLE(VkQueue queue, uint32_t bindInfoCount,
                                      const VkBindSparseInfo* pBindInfo, VkFence fence,
                                      uint32_t doLock);
    void vkGetLinearImageLayoutGOOGLE(VkDevice device, VkFormat format, VkDeviceSize* pOffset,
                                      VkDeviceSize* pRowPitchAlignment, uint32_t doLock);
    void vkGetLinearImageLayout2GOOGLE(VkDevice device, const VkImageCreateInfo* pCreateInfo,
                                       VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment,
                                       uint32_t doLock);
    void vkQueueFlushCommandsGOOGLE(VkQueue queue, VkCommandBuffer commandBuffer,
                                    VkDeviceSize dataSize, const void* pData, uint32_t doLock);
    void vkQueueCommitDescriptorSetUpdatesGOOGLE(
        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, uint32_t doLock);
    void vkCollectDescriptorPoolIdsGOOGLE(VkDevice device, VkDescriptorPool descriptorPool,
                                          uint32_t* pPoolIdCount, uint64_t* pPoolIds,
                                          uint32_t doLock);
    void vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(VkQueue queue, uint32_t waitSemaphoreCount,
                                                     const VkSemaphore* pWaitSemaphores,
                                                     VkImage image, uint32_t doLock);
    void vkQueueFlushCommandsFromAuxMemoryGOOGLE(VkQueue queue, VkCommandBuffer commandBuffer,
                                                 VkDeviceMemory deviceMemory,
                                                 VkDeviceSize dataOffset, VkDeviceSize dataSize,
                                                 uint32_t doLock);
    VkResult vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory, uint32_t doLock);
    void vkUpdateDescriptorSetWithTemplateSized2GOOGLE(
        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, uint32_t doLock);
    void vkQueueSubmitAsync2GOOGLE(VkQueue queue, uint32_t submitCount,
                                   const VkSubmitInfo2* pSubmits, VkFence fence, uint32_t doLock);
#endif
#ifdef VK_EXT_load_store_op_none
#endif
#ifdef VK_EXT_image_compression_control_swapchain
#endif
#ifdef VK_QNX_external_memory_screen_buffer
#endif

   private:
    class Impl;
    std::unique_ptr<Impl> mImpl;
    gfxstream::guest::HealthMonitor<>* mHealthMonitor;
};

}  // namespace vk
}  // namespace gfxstream
