/*
 * Copyright 2015, The Android Open Source Project
 *
 * 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.
 *
 * THIS FILE WAS GENERATED BY apic. DO NOT EDIT.
 */


#ifndef GAPII_VULKAN_IMPORTS_H
#define GAPII_VULKAN_IMPORTS_H

#include "vulkan_types.h"
#include "gapic/vulkan_ptr_types.h"

namespace gapii {

    struct VulkanImports {
        VulkanImports();
        void resolve();
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEANDROIDSURFACEKHR)(VkInstance instance, VkAndroidSurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETSWAPCHAINGRALLOCUSAGEANDROID)(VkDevice device, uint32_t format, VkImageUsageFlags imageUsage, int* grallocUsage);
        typedef uint32_t (VULKAN_API_PTR *PFNVKACQUIREIMAGEANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence);
        typedef uint32_t (VULKAN_API_PTR *PFNVKQUEUESIGNALRELEASEIMAGEANDROID)(VkQueue queue, uint32_t waitSemaphoreCount, VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEXLIBSURFACEKHR)(VkInstance instance, VkXlibSurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef VkBool32 (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEXLIBPRESENTATIONSUPPORTKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEXCBSURFACEKHR)(VkInstance instance, VkXcbSurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef VkBool32 (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEXCBPRESENTATIONSUPPORTKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEWAYLANDSURFACEKHR)(VkInstance instance, VkWaylandSurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef VkBool32 (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEWAYLANDPRESENTATIONSUPPORTKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, wl_display* display);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEMIRSURFACEKHR)(VkInstance instance, VkMirSurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef VkBool32 (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEMIRPRESENTATIONSUPPORTKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
        typedef uint32_t (VULKAN_API_PTR *PFNREPLAYALLOCATEIMAGEMEMORY)(VkDevice device, VkPhysicalDeviceMemoryProperties* pPhysicalDeviceMemoryProperties, VkImage image, VkDeviceMemory* pMemory);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEINSTANCE)(VkInstanceCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYINSTANCE)(VkInstance instance, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENUMERATEPHYSICALDEVICES)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEFEATURES)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEFORMATPROPERTIES)(VkPhysicalDevice physicalDevice, uint32_t format, VkFormatProperties* pFormatProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEIMAGEFORMATPROPERTIES)(VkPhysicalDevice physicalDevice, uint32_t format, uint32_t type, uint32_t tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEPROPERTIES)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEQUEUEFAMILYPROPERTIES)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEMEMORYPROPERTIES)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
        typedef PFN_vkVoidFunction (VULKAN_API_PTR *PFNVKGETINSTANCEPROCADDR)(VkInstance instance, const char* pName);
        typedef PFN_vkVoidFunction (VULKAN_API_PTR *PFNVKGETDEVICEPROCADDR)(VkDevice device, const char* pName);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDEVICE)(VkPhysicalDevice physicalDevice, VkDeviceCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYDEVICE)(VkDevice device, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENUMERATEINSTANCEEXTENSIONPROPERTIES)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENUMERATEDEVICEEXTENSIONPROPERTIES)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENUMERATEINSTANCELAYERPROPERTIES)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENUMERATEDEVICELAYERPROPERTIES)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
        typedef void (VULKAN_API_PTR *PFNVKGETDEVICEQUEUE)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
        typedef uint32_t (VULKAN_API_PTR *PFNVKQUEUESUBMIT)(VkQueue queue, uint32_t submitCount, VkSubmitInfo* pSubmits, VkFence fence);
        typedef uint32_t (VULKAN_API_PTR *PFNVKQUEUEWAITIDLE)(VkQueue queue);
        typedef uint32_t (VULKAN_API_PTR *PFNVKDEVICEWAITIDLE)(VkDevice device);
        typedef uint32_t (VULKAN_API_PTR *PFNVKALLOCATEMEMORY)(VkDevice device, VkMemoryAllocateInfo* pAllocateInfo, VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
        typedef void (VULKAN_API_PTR *PFNVKFREEMEMORY)(VkDevice device, VkDeviceMemory memory, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKMAPMEMORY)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
        typedef void (VULKAN_API_PTR *PFNVKUNMAPMEMORY)(VkDevice device, VkDeviceMemory memory);
        typedef uint32_t (VULKAN_API_PTR *PFNVKFLUSHMAPPEDMEMORYRANGES)(VkDevice device, uint32_t memoryRangeCount, VkMappedMemoryRange* pMemoryRanges);
        typedef uint32_t (VULKAN_API_PTR *PFNVKINVALIDATEMAPPEDMEMORYRANGES)(VkDevice device, uint32_t memoryRangeCount, VkMappedMemoryRange* pMemoryRanges);
        typedef void (VULKAN_API_PTR *PFNVKGETDEVICEMEMORYCOMMITMENT)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
        typedef uint32_t (VULKAN_API_PTR *PFNVKBINDBUFFERMEMORY)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
        typedef uint32_t (VULKAN_API_PTR *PFNVKBINDIMAGEMEMORY)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
        typedef void (VULKAN_API_PTR *PFNVKGETBUFFERMEMORYREQUIREMENTS)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
        typedef void (VULKAN_API_PTR *PFNVKGETIMAGEMEMORYREQUIREMENTS)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
        typedef void (VULKAN_API_PTR *PFNVKGETIMAGESPARSEMEMORYREQUIREMENTS)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
        typedef void (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICESPARSEIMAGEFORMATPROPERTIES)(VkPhysicalDevice physicalDevice, uint32_t format, uint32_t type, uint32_t samples, VkImageUsageFlags usage, uint32_t tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKQUEUEBINDSPARSE)(VkQueue queue, uint32_t bindInfoCount, VkBindSparseInfo* pBindInfo, VkFence fence);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEFENCE)(VkDevice device, VkFenceCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkFence* pFence);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYFENCE)(VkDevice device, VkFence fence, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKRESETFENCES)(VkDevice device, uint32_t fenceCount, VkFence* pFences);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETFENCESTATUS)(VkDevice device, VkFence fence);
        typedef uint32_t (VULKAN_API_PTR *PFNVKWAITFORFENCES)(VkDevice device, uint32_t fenceCount, VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATESEMAPHORE)(VkDevice device, VkSemaphoreCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYSEMAPHORE)(VkDevice device, VkSemaphore semaphore, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEEVENT)(VkDevice device, VkEventCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYEVENT)(VkDevice device, VkEvent event, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETEVENTSTATUS)(VkDevice device, VkEvent event);
        typedef uint32_t (VULKAN_API_PTR *PFNVKSETEVENT)(VkDevice device, VkEvent event);
        typedef uint32_t (VULKAN_API_PTR *PFNVKRESETEVENT)(VkDevice device, VkEvent event);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEQUERYPOOL)(VkDevice device, VkQueryPoolCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYQUERYPOOL)(VkDevice device, VkQueryPool queryPool, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETQUERYPOOLRESULTS)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_val dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEBUFFER)(VkDevice device, VkBufferCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYBUFFER)(VkDevice device, VkBuffer buffer, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEBUFFERVIEW)(VkDevice device, VkBufferViewCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkBufferView* pView);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYBUFFERVIEW)(VkDevice device, VkBufferView bufferView, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEIMAGE)(VkDevice device, VkImageCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkImage* pImage);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYIMAGE)(VkDevice device, VkImage image, VkAllocationCallbacks* pAllocator);
        typedef void (VULKAN_API_PTR *PFNVKGETIMAGESUBRESOURCELAYOUT)(VkDevice device, VkImage image, VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEIMAGEVIEW)(VkDevice device, VkImageViewCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkImageView* pView);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYIMAGEVIEW)(VkDevice device, VkImageView imageView, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATESHADERMODULE)(VkDevice device, VkShaderModuleCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYSHADERMODULE)(VkDevice device, VkShaderModule shaderModule, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEPIPELINECACHE)(VkDevice device, VkPipelineCacheCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYPIPELINECACHE)(VkDevice device, VkPipelineCache pipelineCache, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPIPELINECACHEDATA)(VkDevice device, VkPipelineCache pipelineCache, size_val* pDataSize, void* pData);
        typedef uint32_t (VULKAN_API_PTR *PFNVKMERGEPIPELINECACHES)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, VkPipelineCache* pSrcCaches);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEGRAPHICSPIPELINES)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, VkGraphicsPipelineCreateInfo* pCreateInfos, VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATECOMPUTEPIPELINES)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, VkComputePipelineCreateInfo* pCreateInfos, VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYPIPELINE)(VkDevice device, VkPipeline pipeline, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEPIPELINELAYOUT)(VkDevice device, VkPipelineLayoutCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYPIPELINELAYOUT)(VkDevice device, VkPipelineLayout pipelineLayout, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATESAMPLER)(VkDevice device, VkSamplerCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYSAMPLER)(VkDevice device, VkSampler sampler, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDESCRIPTORSETLAYOUT)(VkDevice device, VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYDESCRIPTORSETLAYOUT)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDESCRIPTORPOOL)(VkDevice device, VkDescriptorPoolCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYDESCRIPTORPOOL)(VkDevice device, VkDescriptorPool descriptorPool, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKRESETDESCRIPTORPOOL)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
        typedef uint32_t (VULKAN_API_PTR *PFNVKALLOCATEDESCRIPTORSETS)(VkDevice device, VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
        typedef uint32_t (VULKAN_API_PTR *PFNVKFREEDESCRIPTORSETS)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, VkDescriptorSet* pDescriptorSets);
        typedef void (VULKAN_API_PTR *PFNVKUPDATEDESCRIPTORSETS)(VkDevice device, uint32_t descriptorWriteCount, VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, VkCopyDescriptorSet* pDescriptorCopies);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEFRAMEBUFFER)(VkDevice device, VkFramebufferCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYFRAMEBUFFER)(VkDevice device, VkFramebuffer framebuffer, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATERENDERPASS)(VkDevice device, VkRenderPassCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYRENDERPASS)(VkDevice device, VkRenderPass renderPass, VkAllocationCallbacks* pAllocator);
        typedef void (VULKAN_API_PTR *PFNVKGETRENDERAREAGRANULARITY)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATECOMMANDPOOL)(VkDevice device, VkCommandPoolCreateInfo* pCreateInfo, VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYCOMMANDPOOL)(VkDevice device, VkCommandPool commandPool, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKRESETCOMMANDPOOL)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
        typedef uint32_t (VULKAN_API_PTR *PFNVKALLOCATECOMMANDBUFFERS)(VkDevice device, VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
        typedef void (VULKAN_API_PTR *PFNVKFREECOMMANDBUFFERS)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, VkCommandBuffer* pCommandBuffers);
        typedef uint32_t (VULKAN_API_PTR *PFNVKBEGINCOMMANDBUFFER)(VkCommandBuffer commandBuffer, VkCommandBufferBeginInfo* pBeginInfo);
        typedef uint32_t (VULKAN_API_PTR *PFNVKENDCOMMANDBUFFER)(VkCommandBuffer commandBuffer);
        typedef uint32_t (VULKAN_API_PTR *PFNVKRESETCOMMANDBUFFER)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
        typedef void (VULKAN_API_PTR *PFNVKCMDBINDPIPELINE)(VkCommandBuffer commandBuffer, uint32_t pipelineBindPoint, VkPipeline pipeline);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETVIEWPORT)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, VkViewport* pViewports);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETSCISSOR)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, VkRect2D* pScissors);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETLINEWIDTH)(VkCommandBuffer commandBuffer, float lineWidth);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETDEPTHBIAS)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETBLENDCONSTANTS)(VkCommandBuffer commandBuffer, float blendConstants[4]);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETDEPTHBOUNDS)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETSTENCILCOMPAREMASK)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETSTENCILWRITEMASK)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETSTENCILREFERENCE)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
        typedef void (VULKAN_API_PTR *PFNVKCMDBINDDESCRIPTORSETS)(VkCommandBuffer commandBuffer, uint32_t pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, uint32_t* pDynamicOffsets);
        typedef void (VULKAN_API_PTR *PFNVKCMDBINDINDEXBUFFER)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t indexType);
        typedef void (VULKAN_API_PTR *PFNVKCMDBINDVERTEXBUFFERS)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, VkBuffer* pBuffers, VkDeviceSize* pOffsets);
        typedef void (VULKAN_API_PTR *PFNVKCMDDRAW)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
        typedef void (VULKAN_API_PTR *PFNVKCMDDRAWINDEXED)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
        typedef void (VULKAN_API_PTR *PFNVKCMDDRAWINDIRECT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
        typedef void (VULKAN_API_PTR *PFNVKCMDDRAWINDEXEDINDIRECT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
        typedef void (VULKAN_API_PTR *PFNVKCMDDISPATCH)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
        typedef void (VULKAN_API_PTR *PFNVKCMDDISPATCHINDIRECT)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
        typedef void (VULKAN_API_PTR *PFNVKCMDCOPYBUFFER)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, VkBufferCopy* pRegions);
        typedef void (VULKAN_API_PTR *PFNVKCMDCOPYIMAGE)(VkCommandBuffer commandBuffer, VkImage srcImage, uint32_t srcImageLayout, VkImage dstImage, uint32_t dstImageLayout, uint32_t regionCount, VkImageCopy* pRegions);
        typedef void (VULKAN_API_PTR *PFNVKCMDBLITIMAGE)(VkCommandBuffer commandBuffer, VkImage srcImage, uint32_t srcImageLayout, VkImage dstImage, uint32_t dstImageLayout, uint32_t regionCount, VkImageBlit* pRegions, uint32_t filter);
        typedef void (VULKAN_API_PTR *PFNVKCMDCOPYBUFFERTOIMAGE)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, uint32_t dstImageLayout, uint32_t regionCount, VkBufferImageCopy* pRegions);
        typedef void (VULKAN_API_PTR *PFNVKCMDCOPYIMAGETOBUFFER)(VkCommandBuffer commandBuffer, VkImage srcImage, uint32_t srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, VkBufferImageCopy* pRegions);
        typedef void (VULKAN_API_PTR *PFNVKCMDUPDATEBUFFER)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, void* pData);
        typedef void (VULKAN_API_PTR *PFNVKCMDFILLBUFFER)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
        typedef void (VULKAN_API_PTR *PFNVKCMDCLEARCOLORIMAGE)(VkCommandBuffer commandBuffer, VkImage image, uint32_t imageLayout, VkClearColorValue* pColor, uint32_t rangeCount, VkImageSubresourceRange* pRanges);
        typedef void (VULKAN_API_PTR *PFNVKCMDCLEARDEPTHSTENCILIMAGE)(VkCommandBuffer commandBuffer, VkImage image, uint32_t imageLayout, VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, VkImageSubresourceRange* pRanges);
        typedef void (VULKAN_API_PTR *PFNVKCMDCLEARATTACHMENTS)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, VkClearAttachment* pAttachments, uint32_t rectCount, VkClearRect* pRects);
        typedef void (VULKAN_API_PTR *PFNVKCMDRESOLVEIMAGE)(VkCommandBuffer commandBuffer, VkImage srcImage, uint32_t srcImageLayout, VkImage dstImage, uint32_t dstImageLayout, uint32_t regionCount, VkImageResolve* pRegions);
        typedef void (VULKAN_API_PTR *PFNVKCMDSETEVENT)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
        typedef void (VULKAN_API_PTR *PFNVKCMDRESETEVENT)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
        typedef void (VULKAN_API_PTR *PFNVKCMDWAITEVENTS)(VkCommandBuffer commandBuffer, uint32_t eventCount, VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, VkImageMemoryBarrier* pImageMemoryBarriers);
        typedef void (VULKAN_API_PTR *PFNVKCMDPIPELINEBARRIER)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, VkImageMemoryBarrier* pImageMemoryBarriers);
        typedef void (VULKAN_API_PTR *PFNVKCMDBEGINQUERY)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
        typedef void (VULKAN_API_PTR *PFNVKCMDENDQUERY)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
        typedef void (VULKAN_API_PTR *PFNVKCMDRESETQUERYPOOL)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
        typedef void (VULKAN_API_PTR *PFNVKCMDWRITETIMESTAMP)(VkCommandBuffer commandBuffer, uint32_t pipelineStage, VkQueryPool queryPool, uint32_t query);
        typedef void (VULKAN_API_PTR *PFNVKCMDCOPYQUERYPOOLRESULTS)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
        typedef void (VULKAN_API_PTR *PFNVKCMDPUSHCONSTANTS)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, void* pValues);
        typedef void (VULKAN_API_PTR *PFNVKCMDBEGINRENDERPASS)(VkCommandBuffer commandBuffer, VkRenderPassBeginInfo* pRenderPassBegin, uint32_t contents);
        typedef void (VULKAN_API_PTR *PFNVKCMDNEXTSUBPASS)(VkCommandBuffer commandBuffer, uint32_t contents);
        typedef void (VULKAN_API_PTR *PFNVKCMDENDRENDERPASS)(VkCommandBuffer commandBuffer);
        typedef void (VULKAN_API_PTR *PFNVKCMDEXECUTECOMMANDS)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, VkCommandBuffer* pCommandBuffers);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYSURFACEKHR)(VkInstance instance, VkSurfaceKHR surface, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICESURFACESUPPORTKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICESURFACECAPABILITIESKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICESURFACEFORMATSKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICESURFACEPRESENTMODESKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, uint32_t* pPresentModes);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATESWAPCHAINKHR)(VkDevice device, VkSwapchainCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYSWAPCHAINKHR)(VkDevice device, VkSwapchainKHR swapchain, VkAllocationCallbacks* pAllocator);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETSWAPCHAINIMAGESKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
        typedef uint32_t (VULKAN_API_PTR *PFNVKACQUIRENEXTIMAGEKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
        typedef uint32_t (VULKAN_API_PTR *PFNVKQUEUEPRESENTKHR)(VkQueue queue, VkPresentInfoKHR* pPresentInfo);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEDISPLAYPROPERTIESKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETPHYSICALDEVICEDISPLAYPLANEPROPERTIESKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETDISPLAYPLANESUPPORTEDDISPLAYSKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETDISPLAYMODEPROPERTIESKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDISPLAYMODEKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, VkDisplayModeCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
        typedef uint32_t (VULKAN_API_PTR *PFNVKGETDISPLAYPLANECAPABILITIESKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDISPLAYPLANESURFACEKHR)(VkInstance instance, VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATESHAREDSWAPCHAINSKHR)(VkDevice device, uint32_t swapchainCount, VkSwapchainCreateInfoKHR* pCreateInfos, VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
        typedef uint32_t (VULKAN_API_PTR *PFNVKCREATEDEBUGREPORTCALLBACKEXT)(VkInstance instance, VkDebugReportCallbackCreateInfoEXT* pCreateInfo, VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
        typedef void (VULKAN_API_PTR *PFNVKDESTROYDEBUGREPORTCALLBACKEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, VkAllocationCallbacks* pAllocator);
        typedef void (VULKAN_API_PTR *PFNVKDEBUGREPORTMESSAGEEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, uint32_t objectType, uint64_t object, size_val location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);

        struct VkInstanceFunctions { 
            PFNVKCREATEANDROIDSURFACEKHR vkCreateAndroidSurfaceKHR;
            PFNVKCREATEXLIBSURFACEKHR vkCreateXlibSurfaceKHR;
            PFNVKGETPHYSICALDEVICEXLIBPRESENTATIONSUPPORTKHR vkGetPhysicalDeviceXlibPresentationSupportKHR;
            PFNVKCREATEXCBSURFACEKHR vkCreateXcbSurfaceKHR;
            PFNVKGETPHYSICALDEVICEXCBPRESENTATIONSUPPORTKHR vkGetPhysicalDeviceXcbPresentationSupportKHR;
            PFNVKCREATEWAYLANDSURFACEKHR vkCreateWaylandSurfaceKHR;
            PFNVKGETPHYSICALDEVICEWAYLANDPRESENTATIONSUPPORTKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR;
            PFNVKCREATEMIRSURFACEKHR vkCreateMirSurfaceKHR;
            PFNVKGETPHYSICALDEVICEMIRPRESENTATIONSUPPORTKHR vkGetPhysicalDeviceMirPresentationSupportKHR;
            PFNVKDESTROYINSTANCE vkDestroyInstance;
            PFNVKDESTROYINSTANCE pfn_vkDestroyInstance;
            PFNVKENUMERATEPHYSICALDEVICES vkEnumeratePhysicalDevices;
            PFNVKGETPHYSICALDEVICEFEATURES vkGetPhysicalDeviceFeatures;
            PFNVKGETPHYSICALDEVICEFORMATPROPERTIES vkGetPhysicalDeviceFormatProperties;
            PFNVKGETPHYSICALDEVICEIMAGEFORMATPROPERTIES vkGetPhysicalDeviceImageFormatProperties;
            PFNVKGETPHYSICALDEVICEPROPERTIES vkGetPhysicalDeviceProperties;
            PFNVKGETPHYSICALDEVICEQUEUEFAMILYPROPERTIES vkGetPhysicalDeviceQueueFamilyProperties;
            PFNVKGETPHYSICALDEVICEMEMORYPROPERTIES vkGetPhysicalDeviceMemoryProperties;
            PFNVKGETINSTANCEPROCADDR vkGetInstanceProcAddr;
            PFNVKGETINSTANCEPROCADDR pfn_vkGetInstanceProcAddr;
            PFNVKCREATEDEVICE vkCreateDevice;
            PFNVKCREATEDEVICE pfn_vkCreateDevice;
            PFNVKENUMERATEDEVICEEXTENSIONPROPERTIES vkEnumerateDeviceExtensionProperties;
            PFNVKENUMERATEDEVICELAYERPROPERTIES vkEnumerateDeviceLayerProperties;
            PFNVKENUMERATEDEVICELAYERPROPERTIES pfn_vkEnumerateDeviceLayerProperties;
            PFNVKGETPHYSICALDEVICESPARSEIMAGEFORMATPROPERTIES vkGetPhysicalDeviceSparseImageFormatProperties;
            PFNVKDESTROYSURFACEKHR vkDestroySurfaceKHR;
            PFNVKGETPHYSICALDEVICESURFACESUPPORTKHR vkGetPhysicalDeviceSurfaceSupportKHR;
            PFNVKGETPHYSICALDEVICESURFACECAPABILITIESKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
            PFNVKGETPHYSICALDEVICESURFACEFORMATSKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
            PFNVKGETPHYSICALDEVICESURFACEPRESENTMODESKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
            PFNVKGETPHYSICALDEVICEDISPLAYPROPERTIESKHR vkGetPhysicalDeviceDisplayPropertiesKHR;
            PFNVKGETPHYSICALDEVICEDISPLAYPLANEPROPERTIESKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
            PFNVKGETDISPLAYPLANESUPPORTEDDISPLAYSKHR vkGetDisplayPlaneSupportedDisplaysKHR;
            PFNVKGETDISPLAYMODEPROPERTIESKHR vkGetDisplayModePropertiesKHR;
            PFNVKCREATEDISPLAYMODEKHR vkCreateDisplayModeKHR;
            PFNVKGETDISPLAYPLANECAPABILITIESKHR vkGetDisplayPlaneCapabilitiesKHR;
            PFNVKCREATEDISPLAYPLANESURFACEKHR vkCreateDisplayPlaneSurfaceKHR;
            PFNVKCREATEDEBUGREPORTCALLBACKEXT vkCreateDebugReportCallbackEXT;
            PFNVKDESTROYDEBUGREPORTCALLBACKEXT vkDestroyDebugReportCallbackEXT;
            PFNVKDEBUGREPORTMESSAGEEXT vkDebugReportMessageEXT;
        };
        std::unordered_map<VkInstance, VkInstanceFunctions> mVkInstanceFunctions;

        struct VkDeviceFunctions { 
            PFNVKGETSWAPCHAINGRALLOCUSAGEANDROID vkGetSwapchainGrallocUsageANDROID;
            PFNVKACQUIREIMAGEANDROID vkAcquireImageANDROID;
            PFNVKQUEUESIGNALRELEASEIMAGEANDROID vkQueueSignalReleaseImageANDROID;
            PFNVKGETDEVICEPROCADDR vkGetDeviceProcAddr;
            PFNVKGETDEVICEPROCADDR pfn_vkGetDeviceProcAddr;
            PFNVKDESTROYDEVICE vkDestroyDevice;
            PFNVKDESTROYDEVICE pfn_vkDestroyDevice;
            PFNVKGETDEVICEQUEUE vkGetDeviceQueue;
            PFNVKQUEUESUBMIT vkQueueSubmit;
            PFNVKQUEUEWAITIDLE vkQueueWaitIdle;
            PFNVKDEVICEWAITIDLE vkDeviceWaitIdle;
            PFNVKALLOCATEMEMORY vkAllocateMemory;
            PFNVKFREEMEMORY vkFreeMemory;
            PFNVKMAPMEMORY vkMapMemory;
            PFNVKUNMAPMEMORY vkUnmapMemory;
            PFNVKFLUSHMAPPEDMEMORYRANGES vkFlushMappedMemoryRanges;
            PFNVKINVALIDATEMAPPEDMEMORYRANGES vkInvalidateMappedMemoryRanges;
            PFNVKGETDEVICEMEMORYCOMMITMENT vkGetDeviceMemoryCommitment;
            PFNVKBINDBUFFERMEMORY vkBindBufferMemory;
            PFNVKBINDIMAGEMEMORY vkBindImageMemory;
            PFNVKGETBUFFERMEMORYREQUIREMENTS vkGetBufferMemoryRequirements;
            PFNVKGETIMAGEMEMORYREQUIREMENTS vkGetImageMemoryRequirements;
            PFNVKGETIMAGESPARSEMEMORYREQUIREMENTS vkGetImageSparseMemoryRequirements;
            PFNVKQUEUEBINDSPARSE vkQueueBindSparse;
            PFNVKCREATEFENCE vkCreateFence;
            PFNVKDESTROYFENCE vkDestroyFence;
            PFNVKRESETFENCES vkResetFences;
            PFNVKGETFENCESTATUS vkGetFenceStatus;
            PFNVKWAITFORFENCES vkWaitForFences;
            PFNVKCREATESEMAPHORE vkCreateSemaphore;
            PFNVKDESTROYSEMAPHORE vkDestroySemaphore;
            PFNVKCREATEEVENT vkCreateEvent;
            PFNVKDESTROYEVENT vkDestroyEvent;
            PFNVKGETEVENTSTATUS vkGetEventStatus;
            PFNVKSETEVENT vkSetEvent;
            PFNVKRESETEVENT vkResetEvent;
            PFNVKCREATEQUERYPOOL vkCreateQueryPool;
            PFNVKDESTROYQUERYPOOL vkDestroyQueryPool;
            PFNVKGETQUERYPOOLRESULTS vkGetQueryPoolResults;
            PFNVKCREATEBUFFER vkCreateBuffer;
            PFNVKDESTROYBUFFER vkDestroyBuffer;
            PFNVKCREATEBUFFERVIEW vkCreateBufferView;
            PFNVKDESTROYBUFFERVIEW vkDestroyBufferView;
            PFNVKCREATEIMAGE vkCreateImage;
            PFNVKDESTROYIMAGE vkDestroyImage;
            PFNVKGETIMAGESUBRESOURCELAYOUT vkGetImageSubresourceLayout;
            PFNVKCREATEIMAGEVIEW vkCreateImageView;
            PFNVKDESTROYIMAGEVIEW vkDestroyImageView;
            PFNVKCREATESHADERMODULE vkCreateShaderModule;
            PFNVKDESTROYSHADERMODULE vkDestroyShaderModule;
            PFNVKCREATEPIPELINECACHE vkCreatePipelineCache;
            PFNVKDESTROYPIPELINECACHE vkDestroyPipelineCache;
            PFNVKGETPIPELINECACHEDATA vkGetPipelineCacheData;
            PFNVKMERGEPIPELINECACHES vkMergePipelineCaches;
            PFNVKCREATEGRAPHICSPIPELINES vkCreateGraphicsPipelines;
            PFNVKCREATECOMPUTEPIPELINES vkCreateComputePipelines;
            PFNVKDESTROYPIPELINE vkDestroyPipeline;
            PFNVKCREATEPIPELINELAYOUT vkCreatePipelineLayout;
            PFNVKDESTROYPIPELINELAYOUT vkDestroyPipelineLayout;
            PFNVKCREATESAMPLER vkCreateSampler;
            PFNVKDESTROYSAMPLER vkDestroySampler;
            PFNVKCREATEDESCRIPTORSETLAYOUT vkCreateDescriptorSetLayout;
            PFNVKDESTROYDESCRIPTORSETLAYOUT vkDestroyDescriptorSetLayout;
            PFNVKCREATEDESCRIPTORPOOL vkCreateDescriptorPool;
            PFNVKDESTROYDESCRIPTORPOOL vkDestroyDescriptorPool;
            PFNVKRESETDESCRIPTORPOOL vkResetDescriptorPool;
            PFNVKALLOCATEDESCRIPTORSETS vkAllocateDescriptorSets;
            PFNVKFREEDESCRIPTORSETS vkFreeDescriptorSets;
            PFNVKUPDATEDESCRIPTORSETS vkUpdateDescriptorSets;
            PFNVKCREATEFRAMEBUFFER vkCreateFramebuffer;
            PFNVKDESTROYFRAMEBUFFER vkDestroyFramebuffer;
            PFNVKCREATERENDERPASS vkCreateRenderPass;
            PFNVKDESTROYRENDERPASS vkDestroyRenderPass;
            PFNVKGETRENDERAREAGRANULARITY vkGetRenderAreaGranularity;
            PFNVKCREATECOMMANDPOOL vkCreateCommandPool;
            PFNVKDESTROYCOMMANDPOOL vkDestroyCommandPool;
            PFNVKRESETCOMMANDPOOL vkResetCommandPool;
            PFNVKALLOCATECOMMANDBUFFERS vkAllocateCommandBuffers;
            PFNVKFREECOMMANDBUFFERS vkFreeCommandBuffers;
            PFNVKBEGINCOMMANDBUFFER vkBeginCommandBuffer;
            PFNVKENDCOMMANDBUFFER vkEndCommandBuffer;
            PFNVKRESETCOMMANDBUFFER vkResetCommandBuffer;
            PFNVKCMDBINDPIPELINE vkCmdBindPipeline;
            PFNVKCMDSETVIEWPORT vkCmdSetViewport;
            PFNVKCMDSETSCISSOR vkCmdSetScissor;
            PFNVKCMDSETLINEWIDTH vkCmdSetLineWidth;
            PFNVKCMDSETDEPTHBIAS vkCmdSetDepthBias;
            PFNVKCMDSETBLENDCONSTANTS vkCmdSetBlendConstants;
            PFNVKCMDSETDEPTHBOUNDS vkCmdSetDepthBounds;
            PFNVKCMDSETSTENCILCOMPAREMASK vkCmdSetStencilCompareMask;
            PFNVKCMDSETSTENCILWRITEMASK vkCmdSetStencilWriteMask;
            PFNVKCMDSETSTENCILREFERENCE vkCmdSetStencilReference;
            PFNVKCMDBINDDESCRIPTORSETS vkCmdBindDescriptorSets;
            PFNVKCMDBINDINDEXBUFFER vkCmdBindIndexBuffer;
            PFNVKCMDBINDVERTEXBUFFERS vkCmdBindVertexBuffers;
            PFNVKCMDDRAW vkCmdDraw;
            PFNVKCMDDRAWINDEXED vkCmdDrawIndexed;
            PFNVKCMDDRAWINDIRECT vkCmdDrawIndirect;
            PFNVKCMDDRAWINDEXEDINDIRECT vkCmdDrawIndexedIndirect;
            PFNVKCMDDISPATCH vkCmdDispatch;
            PFNVKCMDDISPATCHINDIRECT vkCmdDispatchIndirect;
            PFNVKCMDCOPYBUFFER vkCmdCopyBuffer;
            PFNVKCMDCOPYIMAGE vkCmdCopyImage;
            PFNVKCMDBLITIMAGE vkCmdBlitImage;
            PFNVKCMDCOPYBUFFERTOIMAGE vkCmdCopyBufferToImage;
            PFNVKCMDCOPYIMAGETOBUFFER vkCmdCopyImageToBuffer;
            PFNVKCMDUPDATEBUFFER vkCmdUpdateBuffer;
            PFNVKCMDFILLBUFFER vkCmdFillBuffer;
            PFNVKCMDCLEARCOLORIMAGE vkCmdClearColorImage;
            PFNVKCMDCLEARDEPTHSTENCILIMAGE vkCmdClearDepthStencilImage;
            PFNVKCMDCLEARATTACHMENTS vkCmdClearAttachments;
            PFNVKCMDRESOLVEIMAGE vkCmdResolveImage;
            PFNVKCMDSETEVENT vkCmdSetEvent;
            PFNVKCMDRESETEVENT vkCmdResetEvent;
            PFNVKCMDWAITEVENTS vkCmdWaitEvents;
            PFNVKCMDPIPELINEBARRIER vkCmdPipelineBarrier;
            PFNVKCMDBEGINQUERY vkCmdBeginQuery;
            PFNVKCMDENDQUERY vkCmdEndQuery;
            PFNVKCMDRESETQUERYPOOL vkCmdResetQueryPool;
            PFNVKCMDWRITETIMESTAMP vkCmdWriteTimestamp;
            PFNVKCMDCOPYQUERYPOOLRESULTS vkCmdCopyQueryPoolResults;
            PFNVKCMDPUSHCONSTANTS vkCmdPushConstants;
            PFNVKCMDBEGINRENDERPASS vkCmdBeginRenderPass;
            PFNVKCMDNEXTSUBPASS vkCmdNextSubpass;
            PFNVKCMDENDRENDERPASS vkCmdEndRenderPass;
            PFNVKCMDEXECUTECOMMANDS vkCmdExecuteCommands;
            PFNVKCREATESWAPCHAINKHR vkCreateSwapchainKHR;
            PFNVKDESTROYSWAPCHAINKHR vkDestroySwapchainKHR;
            PFNVKGETSWAPCHAINIMAGESKHR vkGetSwapchainImagesKHR;
            PFNVKACQUIRENEXTIMAGEKHR vkAcquireNextImageKHR;
            PFNVKQUEUEPRESENTKHR vkQueuePresentKHR;
            PFNVKCREATESHAREDSWAPCHAINSKHR vkCreateSharedSwapchainsKHR;
        };
        std::unordered_map<VkDevice, VkDeviceFunctions> mVkDeviceFunctions;

        PFNVKCREATEINSTANCE vkCreateInstance;
        PFNVKCREATEINSTANCE pfn_vkCreateInstance;
        PFNVKENUMERATEINSTANCEEXTENSIONPROPERTIES vkEnumerateInstanceExtensionProperties;
        PFNVKENUMERATEINSTANCEEXTENSIONPROPERTIES pfn_vkEnumerateInstanceExtensionProperties;
        PFNVKENUMERATEINSTANCELAYERPROPERTIES vkEnumerateInstanceLayerProperties;
        PFNVKENUMERATEINSTANCELAYERPROPERTIES pfn_vkEnumerateInstanceLayerProperties;

    };
} // namespace gapii

#endif // GAPII_VULKAN_IMPORTS_H
