// 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 VkEventHandler
// (impl) generated by android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/genvk.py -registry android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/vk.xml cereal -o android/android-emugl/host/libs/libOpenglRender/vulkan/cereal
// Please do not modify directly;
// re-run android/scripts/generate-vulkan-sources.sh,
// or directly from Python by defining:
// VULKAN_REGISTRY_XML_DIR : Directory containing genvk.py and vk.xml
// CEREAL_OUTPUT_DIR: Where to put the generated sources.
// python3 $VULKAN_REGISTRY_XML_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR

#include "VkEventHandler.h"


#include "VkEncoder.h"


namespace goldfish_vk {


VkEventHandler::VkEventHandler() { }
VkEventHandler::~VkEventHandler() { }
#ifdef VK_VERSION_1_0
VkResult VkEventHandler::on_vkCreateInstance(
    void*,
    VkResult,
    const VkInstanceCreateInfo*,
    const VkAllocationCallbacks*,
    VkInstance*)
{
    VkResult on_vkCreateInstance_VkResult_return = (VkResult)0;
    return on_vkCreateInstance_VkResult_return;
}
void VkEventHandler::on_vkDestroyInstance(
    void*,
    VkInstance,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkEnumeratePhysicalDevices(
    void*,
    VkResult,
    VkInstance,
    uint32_t*,
    VkPhysicalDevice*)
{
    VkResult on_vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
    return on_vkEnumeratePhysicalDevices_VkResult_return;
}
void VkEventHandler::on_vkGetPhysicalDeviceFeatures(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceFeatures*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties(
    void*,
    VkPhysicalDevice,
    VkFormat,
    VkFormatProperties*)
{
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkFormat,
    VkImageType,
    VkImageTiling,
    VkImageUsageFlags,
    VkImageCreateFlags,
    VkImageFormatProperties*)
{
    VkResult on_vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceImageFormatProperties_VkResult_return;
}
void VkEventHandler::on_vkGetPhysicalDeviceProperties(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceProperties*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties(
    void*,
    VkPhysicalDevice,
    uint32_t*,
    VkQueueFamilyProperties*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceMemoryProperties*)
{
}
PFN_vkVoidFunction VkEventHandler::on_vkGetInstanceProcAddr(
    void*,
    PFN_vkVoidFunction,
    VkInstance,
    const char*)
{
    PFN_vkVoidFunction on_vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
    return on_vkGetInstanceProcAddr_PFN_vkVoidFunction_return;
}
PFN_vkVoidFunction VkEventHandler::on_vkGetDeviceProcAddr(
    void*,
    PFN_vkVoidFunction,
    VkDevice,
    const char*)
{
    PFN_vkVoidFunction on_vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
    return on_vkGetDeviceProcAddr_PFN_vkVoidFunction_return;
}
VkResult VkEventHandler::on_vkCreateDevice(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkDeviceCreateInfo*,
    const VkAllocationCallbacks*,
    VkDevice*)
{
    VkResult on_vkCreateDevice_VkResult_return = (VkResult)0;
    return on_vkCreateDevice_VkResult_return;
}
void VkEventHandler::on_vkDestroyDevice(
    void*,
    VkDevice,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkEnumerateInstanceExtensionProperties(
    void*,
    VkResult,
    const char*,
    uint32_t*,
    VkExtensionProperties*)
{
    VkResult on_vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
    return on_vkEnumerateInstanceExtensionProperties_VkResult_return;
}
VkResult VkEventHandler::on_vkEnumerateDeviceExtensionProperties(
    void*,
    VkResult,
    VkPhysicalDevice,
    const char*,
    uint32_t*,
    VkExtensionProperties*)
{
    VkResult on_vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
    return on_vkEnumerateDeviceExtensionProperties_VkResult_return;
}
VkResult VkEventHandler::on_vkEnumerateInstanceLayerProperties(
    void*,
    VkResult,
    uint32_t*,
    VkLayerProperties*)
{
    VkResult on_vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
    return on_vkEnumerateInstanceLayerProperties_VkResult_return;
}
VkResult VkEventHandler::on_vkEnumerateDeviceLayerProperties(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t*,
    VkLayerProperties*)
{
    VkResult on_vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
    return on_vkEnumerateDeviceLayerProperties_VkResult_return;
}
void VkEventHandler::on_vkGetDeviceQueue(
    void*,
    VkDevice,
    uint32_t,
    uint32_t,
    VkQueue*)
{
}
VkResult VkEventHandler::on_vkQueueSubmit(
    void*,
    VkResult,
    VkQueue,
    uint32_t,
    const VkSubmitInfo*,
    VkFence)
{
    VkResult on_vkQueueSubmit_VkResult_return = (VkResult)0;
    return on_vkQueueSubmit_VkResult_return;
}
VkResult VkEventHandler::on_vkQueueWaitIdle(
    void*,
    VkResult,
    VkQueue)
{
    VkResult on_vkQueueWaitIdle_VkResult_return = (VkResult)0;
    return on_vkQueueWaitIdle_VkResult_return;
}
VkResult VkEventHandler::on_vkDeviceWaitIdle(
    void*,
    VkResult,
    VkDevice)
{
    VkResult on_vkDeviceWaitIdle_VkResult_return = (VkResult)0;
    return on_vkDeviceWaitIdle_VkResult_return;
}
VkResult VkEventHandler::on_vkAllocateMemory(
    void*,
    VkResult,
    VkDevice,
    const VkMemoryAllocateInfo*,
    const VkAllocationCallbacks*,
    VkDeviceMemory*)
{
    VkResult on_vkAllocateMemory_VkResult_return = (VkResult)0;
    return on_vkAllocateMemory_VkResult_return;
}
void VkEventHandler::on_vkFreeMemory(
    void*,
    VkDevice,
    VkDeviceMemory,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkMapMemory(
    void*,
    VkResult,
    VkDevice,
    VkDeviceMemory,
    VkDeviceSize,
    VkDeviceSize,
    VkMemoryMapFlags,
    void**)
{
    VkResult on_vkMapMemory_VkResult_return = (VkResult)0;
    return on_vkMapMemory_VkResult_return;
}
void VkEventHandler::on_vkUnmapMemory(
    void*,
    VkDevice,
    VkDeviceMemory)
{
}
VkResult VkEventHandler::on_vkFlushMappedMemoryRanges(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkMappedMemoryRange*)
{
    VkResult on_vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
    return on_vkFlushMappedMemoryRanges_VkResult_return;
}
VkResult VkEventHandler::on_vkInvalidateMappedMemoryRanges(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkMappedMemoryRange*)
{
    VkResult on_vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
    return on_vkInvalidateMappedMemoryRanges_VkResult_return;
}
void VkEventHandler::on_vkGetDeviceMemoryCommitment(
    void*,
    VkDevice,
    VkDeviceMemory,
    VkDeviceSize*)
{
}
VkResult VkEventHandler::on_vkBindBufferMemory(
    void*,
    VkResult,
    VkDevice,
    VkBuffer,
    VkDeviceMemory,
    VkDeviceSize)
{
    VkResult on_vkBindBufferMemory_VkResult_return = (VkResult)0;
    return on_vkBindBufferMemory_VkResult_return;
}
VkResult VkEventHandler::on_vkBindImageMemory(
    void*,
    VkResult,
    VkDevice,
    VkImage,
    VkDeviceMemory,
    VkDeviceSize)
{
    VkResult on_vkBindImageMemory_VkResult_return = (VkResult)0;
    return on_vkBindImageMemory_VkResult_return;
}
void VkEventHandler::on_vkGetBufferMemoryRequirements(
    void*,
    VkDevice,
    VkBuffer,
    VkMemoryRequirements*)
{
}
void VkEventHandler::on_vkGetImageMemoryRequirements(
    void*,
    VkDevice,
    VkImage,
    VkMemoryRequirements*)
{
}
void VkEventHandler::on_vkGetImageSparseMemoryRequirements(
    void*,
    VkDevice,
    VkImage,
    uint32_t*,
    VkSparseImageMemoryRequirements*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties(
    void*,
    VkPhysicalDevice,
    VkFormat,
    VkImageType,
    VkSampleCountFlagBits,
    VkImageUsageFlags,
    VkImageTiling,
    uint32_t*,
    VkSparseImageFormatProperties*)
{
}
VkResult VkEventHandler::on_vkQueueBindSparse(
    void*,
    VkResult,
    VkQueue,
    uint32_t,
    const VkBindSparseInfo*,
    VkFence)
{
    VkResult on_vkQueueBindSparse_VkResult_return = (VkResult)0;
    return on_vkQueueBindSparse_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateFence(
    void*,
    VkResult,
    VkDevice,
    const VkFenceCreateInfo*,
    const VkAllocationCallbacks*,
    VkFence*)
{
    VkResult on_vkCreateFence_VkResult_return = (VkResult)0;
    return on_vkCreateFence_VkResult_return;
}
void VkEventHandler::on_vkDestroyFence(
    void*,
    VkDevice,
    VkFence,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkResetFences(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkFence*)
{
    VkResult on_vkResetFences_VkResult_return = (VkResult)0;
    return on_vkResetFences_VkResult_return;
}
VkResult VkEventHandler::on_vkGetFenceStatus(
    void*,
    VkResult,
    VkDevice,
    VkFence)
{
    VkResult on_vkGetFenceStatus_VkResult_return = (VkResult)0;
    return on_vkGetFenceStatus_VkResult_return;
}
VkResult VkEventHandler::on_vkWaitForFences(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkFence*,
    VkBool32,
    uint64_t)
{
    VkResult on_vkWaitForFences_VkResult_return = (VkResult)0;
    return on_vkWaitForFences_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateSemaphore(
    void*,
    VkResult,
    VkDevice,
    const VkSemaphoreCreateInfo*,
    const VkAllocationCallbacks*,
    VkSemaphore*)
{
    VkResult on_vkCreateSemaphore_VkResult_return = (VkResult)0;
    return on_vkCreateSemaphore_VkResult_return;
}
void VkEventHandler::on_vkDestroySemaphore(
    void*,
    VkDevice,
    VkSemaphore,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateEvent(
    void*,
    VkResult,
    VkDevice,
    const VkEventCreateInfo*,
    const VkAllocationCallbacks*,
    VkEvent*)
{
    VkResult on_vkCreateEvent_VkResult_return = (VkResult)0;
    return on_vkCreateEvent_VkResult_return;
}
void VkEventHandler::on_vkDestroyEvent(
    void*,
    VkDevice,
    VkEvent,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkGetEventStatus(
    void*,
    VkResult,
    VkDevice,
    VkEvent)
{
    VkResult on_vkGetEventStatus_VkResult_return = (VkResult)0;
    return on_vkGetEventStatus_VkResult_return;
}
VkResult VkEventHandler::on_vkSetEvent(
    void*,
    VkResult,
    VkDevice,
    VkEvent)
{
    VkResult on_vkSetEvent_VkResult_return = (VkResult)0;
    return on_vkSetEvent_VkResult_return;
}
VkResult VkEventHandler::on_vkResetEvent(
    void*,
    VkResult,
    VkDevice,
    VkEvent)
{
    VkResult on_vkResetEvent_VkResult_return = (VkResult)0;
    return on_vkResetEvent_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateQueryPool(
    void*,
    VkResult,
    VkDevice,
    const VkQueryPoolCreateInfo*,
    const VkAllocationCallbacks*,
    VkQueryPool*)
{
    VkResult on_vkCreateQueryPool_VkResult_return = (VkResult)0;
    return on_vkCreateQueryPool_VkResult_return;
}
void VkEventHandler::on_vkDestroyQueryPool(
    void*,
    VkDevice,
    VkQueryPool,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkGetQueryPoolResults(
    void*,
    VkResult,
    VkDevice,
    VkQueryPool,
    uint32_t,
    uint32_t,
    size_t,
    void*,
    VkDeviceSize,
    VkQueryResultFlags)
{
    VkResult on_vkGetQueryPoolResults_VkResult_return = (VkResult)0;
    return on_vkGetQueryPoolResults_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateBuffer(
    void*,
    VkResult,
    VkDevice,
    const VkBufferCreateInfo*,
    const VkAllocationCallbacks*,
    VkBuffer*)
{
    VkResult on_vkCreateBuffer_VkResult_return = (VkResult)0;
    return on_vkCreateBuffer_VkResult_return;
}
void VkEventHandler::on_vkDestroyBuffer(
    void*,
    VkDevice,
    VkBuffer,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateBufferView(
    void*,
    VkResult,
    VkDevice,
    const VkBufferViewCreateInfo*,
    const VkAllocationCallbacks*,
    VkBufferView*)
{
    VkResult on_vkCreateBufferView_VkResult_return = (VkResult)0;
    return on_vkCreateBufferView_VkResult_return;
}
void VkEventHandler::on_vkDestroyBufferView(
    void*,
    VkDevice,
    VkBufferView,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateImage(
    void*,
    VkResult,
    VkDevice,
    const VkImageCreateInfo*,
    const VkAllocationCallbacks*,
    VkImage*)
{
    VkResult on_vkCreateImage_VkResult_return = (VkResult)0;
    return on_vkCreateImage_VkResult_return;
}
void VkEventHandler::on_vkDestroyImage(
    void*,
    VkDevice,
    VkImage,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkGetImageSubresourceLayout(
    void*,
    VkDevice,
    VkImage,
    const VkImageSubresource*,
    VkSubresourceLayout*)
{
}
VkResult VkEventHandler::on_vkCreateImageView(
    void*,
    VkResult,
    VkDevice,
    const VkImageViewCreateInfo*,
    const VkAllocationCallbacks*,
    VkImageView*)
{
    VkResult on_vkCreateImageView_VkResult_return = (VkResult)0;
    return on_vkCreateImageView_VkResult_return;
}
void VkEventHandler::on_vkDestroyImageView(
    void*,
    VkDevice,
    VkImageView,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateShaderModule(
    void*,
    VkResult,
    VkDevice,
    const VkShaderModuleCreateInfo*,
    const VkAllocationCallbacks*,
    VkShaderModule*)
{
    VkResult on_vkCreateShaderModule_VkResult_return = (VkResult)0;
    return on_vkCreateShaderModule_VkResult_return;
}
void VkEventHandler::on_vkDestroyShaderModule(
    void*,
    VkDevice,
    VkShaderModule,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreatePipelineCache(
    void*,
    VkResult,
    VkDevice,
    const VkPipelineCacheCreateInfo*,
    const VkAllocationCallbacks*,
    VkPipelineCache*)
{
    VkResult on_vkCreatePipelineCache_VkResult_return = (VkResult)0;
    return on_vkCreatePipelineCache_VkResult_return;
}
void VkEventHandler::on_vkDestroyPipelineCache(
    void*,
    VkDevice,
    VkPipelineCache,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkGetPipelineCacheData(
    void*,
    VkResult,
    VkDevice,
    VkPipelineCache,
    size_t*,
    void*)
{
    VkResult on_vkGetPipelineCacheData_VkResult_return = (VkResult)0;
    return on_vkGetPipelineCacheData_VkResult_return;
}
VkResult VkEventHandler::on_vkMergePipelineCaches(
    void*,
    VkResult,
    VkDevice,
    VkPipelineCache,
    uint32_t,
    const VkPipelineCache*)
{
    VkResult on_vkMergePipelineCaches_VkResult_return = (VkResult)0;
    return on_vkMergePipelineCaches_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateGraphicsPipelines(
    void*,
    VkResult,
    VkDevice,
    VkPipelineCache,
    uint32_t,
    const VkGraphicsPipelineCreateInfo*,
    const VkAllocationCallbacks*,
    VkPipeline*)
{
    VkResult on_vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
    return on_vkCreateGraphicsPipelines_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateComputePipelines(
    void*,
    VkResult,
    VkDevice,
    VkPipelineCache,
    uint32_t,
    const VkComputePipelineCreateInfo*,
    const VkAllocationCallbacks*,
    VkPipeline*)
{
    VkResult on_vkCreateComputePipelines_VkResult_return = (VkResult)0;
    return on_vkCreateComputePipelines_VkResult_return;
}
void VkEventHandler::on_vkDestroyPipeline(
    void*,
    VkDevice,
    VkPipeline,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreatePipelineLayout(
    void*,
    VkResult,
    VkDevice,
    const VkPipelineLayoutCreateInfo*,
    const VkAllocationCallbacks*,
    VkPipelineLayout*)
{
    VkResult on_vkCreatePipelineLayout_VkResult_return = (VkResult)0;
    return on_vkCreatePipelineLayout_VkResult_return;
}
void VkEventHandler::on_vkDestroyPipelineLayout(
    void*,
    VkDevice,
    VkPipelineLayout,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateSampler(
    void*,
    VkResult,
    VkDevice,
    const VkSamplerCreateInfo*,
    const VkAllocationCallbacks*,
    VkSampler*)
{
    VkResult on_vkCreateSampler_VkResult_return = (VkResult)0;
    return on_vkCreateSampler_VkResult_return;
}
void VkEventHandler::on_vkDestroySampler(
    void*,
    VkDevice,
    VkSampler,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateDescriptorSetLayout(
    void*,
    VkResult,
    VkDevice,
    const VkDescriptorSetLayoutCreateInfo*,
    const VkAllocationCallbacks*,
    VkDescriptorSetLayout*)
{
    VkResult on_vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
    return on_vkCreateDescriptorSetLayout_VkResult_return;
}
void VkEventHandler::on_vkDestroyDescriptorSetLayout(
    void*,
    VkDevice,
    VkDescriptorSetLayout,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateDescriptorPool(
    void*,
    VkResult,
    VkDevice,
    const VkDescriptorPoolCreateInfo*,
    const VkAllocationCallbacks*,
    VkDescriptorPool*)
{
    VkResult on_vkCreateDescriptorPool_VkResult_return = (VkResult)0;
    return on_vkCreateDescriptorPool_VkResult_return;
}
void VkEventHandler::on_vkDestroyDescriptorPool(
    void*,
    VkDevice,
    VkDescriptorPool,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkResetDescriptorPool(
    void*,
    VkResult,
    VkDevice,
    VkDescriptorPool,
    VkDescriptorPoolResetFlags)
{
    VkResult on_vkResetDescriptorPool_VkResult_return = (VkResult)0;
    return on_vkResetDescriptorPool_VkResult_return;
}
VkResult VkEventHandler::on_vkAllocateDescriptorSets(
    void*,
    VkResult,
    VkDevice,
    const VkDescriptorSetAllocateInfo*,
    VkDescriptorSet*)
{
    VkResult on_vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
    return on_vkAllocateDescriptorSets_VkResult_return;
}
VkResult VkEventHandler::on_vkFreeDescriptorSets(
    void*,
    VkResult,
    VkDevice,
    VkDescriptorPool,
    uint32_t,
    const VkDescriptorSet*)
{
    VkResult on_vkFreeDescriptorSets_VkResult_return = (VkResult)0;
    return on_vkFreeDescriptorSets_VkResult_return;
}
void VkEventHandler::on_vkUpdateDescriptorSets(
    void*,
    VkDevice,
    uint32_t,
    const VkWriteDescriptorSet*,
    uint32_t,
    const VkCopyDescriptorSet*)
{
}
VkResult VkEventHandler::on_vkCreateFramebuffer(
    void*,
    VkResult,
    VkDevice,
    const VkFramebufferCreateInfo*,
    const VkAllocationCallbacks*,
    VkFramebuffer*)
{
    VkResult on_vkCreateFramebuffer_VkResult_return = (VkResult)0;
    return on_vkCreateFramebuffer_VkResult_return;
}
void VkEventHandler::on_vkDestroyFramebuffer(
    void*,
    VkDevice,
    VkFramebuffer,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateRenderPass(
    void*,
    VkResult,
    VkDevice,
    const VkRenderPassCreateInfo*,
    const VkAllocationCallbacks*,
    VkRenderPass*)
{
    VkResult on_vkCreateRenderPass_VkResult_return = (VkResult)0;
    return on_vkCreateRenderPass_VkResult_return;
}
void VkEventHandler::on_vkDestroyRenderPass(
    void*,
    VkDevice,
    VkRenderPass,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkGetRenderAreaGranularity(
    void*,
    VkDevice,
    VkRenderPass,
    VkExtent2D*)
{
}
VkResult VkEventHandler::on_vkCreateCommandPool(
    void*,
    VkResult,
    VkDevice,
    const VkCommandPoolCreateInfo*,
    const VkAllocationCallbacks*,
    VkCommandPool*)
{
    VkResult on_vkCreateCommandPool_VkResult_return = (VkResult)0;
    return on_vkCreateCommandPool_VkResult_return;
}
void VkEventHandler::on_vkDestroyCommandPool(
    void*,
    VkDevice,
    VkCommandPool,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkResetCommandPool(
    void*,
    VkResult,
    VkDevice,
    VkCommandPool,
    VkCommandPoolResetFlags)
{
    VkResult on_vkResetCommandPool_VkResult_return = (VkResult)0;
    return on_vkResetCommandPool_VkResult_return;
}
VkResult VkEventHandler::on_vkAllocateCommandBuffers(
    void*,
    VkResult,
    VkDevice,
    const VkCommandBufferAllocateInfo*,
    VkCommandBuffer*)
{
    VkResult on_vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
    return on_vkAllocateCommandBuffers_VkResult_return;
}
void VkEventHandler::on_vkFreeCommandBuffers(
    void*,
    VkDevice,
    VkCommandPool,
    uint32_t,
    const VkCommandBuffer*)
{
}
VkResult VkEventHandler::on_vkBeginCommandBuffer(
    void*,
    VkResult,
    VkCommandBuffer,
    const VkCommandBufferBeginInfo*)
{
    VkResult on_vkBeginCommandBuffer_VkResult_return = (VkResult)0;
    return on_vkBeginCommandBuffer_VkResult_return;
}
VkResult VkEventHandler::on_vkEndCommandBuffer(
    void*,
    VkResult,
    VkCommandBuffer)
{
    VkResult on_vkEndCommandBuffer_VkResult_return = (VkResult)0;
    return on_vkEndCommandBuffer_VkResult_return;
}
VkResult VkEventHandler::on_vkResetCommandBuffer(
    void*,
    VkResult,
    VkCommandBuffer,
    VkCommandBufferResetFlags)
{
    VkResult on_vkResetCommandBuffer_VkResult_return = (VkResult)0;
    return on_vkResetCommandBuffer_VkResult_return;
}
void VkEventHandler::on_vkCmdBindPipeline(
    void*,
    VkCommandBuffer,
    VkPipelineBindPoint,
    VkPipeline)
{
}
void VkEventHandler::on_vkCmdSetViewport(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    const VkViewport*)
{
}
void VkEventHandler::on_vkCmdSetScissor(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    const VkRect2D*)
{
}
void VkEventHandler::on_vkCmdSetLineWidth(
    void*,
    VkCommandBuffer,
    float)
{
}
void VkEventHandler::on_vkCmdSetDepthBias(
    void*,
    VkCommandBuffer,
    float,
    float,
    float)
{
}
void VkEventHandler::on_vkCmdSetBlendConstants(
    void*,
    VkCommandBuffer,
    const float)
{
}
void VkEventHandler::on_vkCmdSetDepthBounds(
    void*,
    VkCommandBuffer,
    float,
    float)
{
}
void VkEventHandler::on_vkCmdSetStencilCompareMask(
    void*,
    VkCommandBuffer,
    VkStencilFaceFlags,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdSetStencilWriteMask(
    void*,
    VkCommandBuffer,
    VkStencilFaceFlags,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdSetStencilReference(
    void*,
    VkCommandBuffer,
    VkStencilFaceFlags,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdBindDescriptorSets(
    void*,
    VkCommandBuffer,
    VkPipelineBindPoint,
    VkPipelineLayout,
    uint32_t,
    uint32_t,
    const VkDescriptorSet*,
    uint32_t,
    const uint32_t*)
{
}
void VkEventHandler::on_vkCmdBindIndexBuffer(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkIndexType)
{
}
void VkEventHandler::on_vkCmdBindVertexBuffers(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    const VkBuffer*,
    const VkDeviceSize*)
{
}
void VkEventHandler::on_vkCmdDraw(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDrawIndexed(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    uint32_t,
    int32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDrawIndirect(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDrawIndexedIndirect(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDispatch(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDispatchIndirect(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize)
{
}
void VkEventHandler::on_vkCmdCopyBuffer(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkBuffer,
    uint32_t,
    const VkBufferCopy*)
{
}
void VkEventHandler::on_vkCmdCopyImage(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    VkImage,
    VkImageLayout,
    uint32_t,
    const VkImageCopy*)
{
}
void VkEventHandler::on_vkCmdBlitImage(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    VkImage,
    VkImageLayout,
    uint32_t,
    const VkImageBlit*,
    VkFilter)
{
}
void VkEventHandler::on_vkCmdCopyBufferToImage(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkImage,
    VkImageLayout,
    uint32_t,
    const VkBufferImageCopy*)
{
}
void VkEventHandler::on_vkCmdCopyImageToBuffer(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    VkBuffer,
    uint32_t,
    const VkBufferImageCopy*)
{
}
void VkEventHandler::on_vkCmdUpdateBuffer(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkDeviceSize,
    const void*)
{
}
void VkEventHandler::on_vkCmdFillBuffer(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkDeviceSize,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdClearColorImage(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    const VkClearColorValue*,
    uint32_t,
    const VkImageSubresourceRange*)
{
}
void VkEventHandler::on_vkCmdClearDepthStencilImage(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    const VkClearDepthStencilValue*,
    uint32_t,
    const VkImageSubresourceRange*)
{
}
void VkEventHandler::on_vkCmdClearAttachments(
    void*,
    VkCommandBuffer,
    uint32_t,
    const VkClearAttachment*,
    uint32_t,
    const VkClearRect*)
{
}
void VkEventHandler::on_vkCmdResolveImage(
    void*,
    VkCommandBuffer,
    VkImage,
    VkImageLayout,
    VkImage,
    VkImageLayout,
    uint32_t,
    const VkImageResolve*)
{
}
void VkEventHandler::on_vkCmdSetEvent(
    void*,
    VkCommandBuffer,
    VkEvent,
    VkPipelineStageFlags)
{
}
void VkEventHandler::on_vkCmdResetEvent(
    void*,
    VkCommandBuffer,
    VkEvent,
    VkPipelineStageFlags)
{
}
void VkEventHandler::on_vkCmdWaitEvents(
    void*,
    VkCommandBuffer,
    uint32_t,
    const VkEvent*,
    VkPipelineStageFlags,
    VkPipelineStageFlags,
    uint32_t,
    const VkMemoryBarrier*,
    uint32_t,
    const VkBufferMemoryBarrier*,
    uint32_t,
    const VkImageMemoryBarrier*)
{
}
void VkEventHandler::on_vkCmdPipelineBarrier(
    void*,
    VkCommandBuffer,
    VkPipelineStageFlags,
    VkPipelineStageFlags,
    VkDependencyFlags,
    uint32_t,
    const VkMemoryBarrier*,
    uint32_t,
    const VkBufferMemoryBarrier*,
    uint32_t,
    const VkImageMemoryBarrier*)
{
}
void VkEventHandler::on_vkCmdBeginQuery(
    void*,
    VkCommandBuffer,
    VkQueryPool,
    uint32_t,
    VkQueryControlFlags)
{
}
void VkEventHandler::on_vkCmdEndQuery(
    void*,
    VkCommandBuffer,
    VkQueryPool,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdResetQueryPool(
    void*,
    VkCommandBuffer,
    VkQueryPool,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdWriteTimestamp(
    void*,
    VkCommandBuffer,
    VkPipelineStageFlagBits,
    VkQueryPool,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdCopyQueryPoolResults(
    void*,
    VkCommandBuffer,
    VkQueryPool,
    uint32_t,
    uint32_t,
    VkBuffer,
    VkDeviceSize,
    VkDeviceSize,
    VkQueryResultFlags)
{
}
void VkEventHandler::on_vkCmdPushConstants(
    void*,
    VkCommandBuffer,
    VkPipelineLayout,
    VkShaderStageFlags,
    uint32_t,
    uint32_t,
    const void*)
{
}
void VkEventHandler::on_vkCmdBeginRenderPass(
    void*,
    VkCommandBuffer,
    const VkRenderPassBeginInfo*,
    VkSubpassContents)
{
}
void VkEventHandler::on_vkCmdNextSubpass(
    void*,
    VkCommandBuffer,
    VkSubpassContents)
{
}
void VkEventHandler::on_vkCmdEndRenderPass(
    void*,
    VkCommandBuffer)
{
}
void VkEventHandler::on_vkCmdExecuteCommands(
    void*,
    VkCommandBuffer,
    uint32_t,
    const VkCommandBuffer*)
{
}
#endif
#ifdef VK_VERSION_1_1
VkResult VkEventHandler::on_vkEnumerateInstanceVersion(
    void*,
    VkResult,
    uint32_t*)
{
    VkResult on_vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
    return on_vkEnumerateInstanceVersion_VkResult_return;
}
VkResult VkEventHandler::on_vkBindBufferMemory2(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkBindBufferMemoryInfo*)
{
    VkResult on_vkBindBufferMemory2_VkResult_return = (VkResult)0;
    return on_vkBindBufferMemory2_VkResult_return;
}
VkResult VkEventHandler::on_vkBindImageMemory2(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkBindImageMemoryInfo*)
{
    VkResult on_vkBindImageMemory2_VkResult_return = (VkResult)0;
    return on_vkBindImageMemory2_VkResult_return;
}
void VkEventHandler::on_vkGetDeviceGroupPeerMemoryFeatures(
    void*,
    VkDevice,
    uint32_t,
    uint32_t,
    uint32_t,
    VkPeerMemoryFeatureFlags*)
{
}
void VkEventHandler::on_vkCmdSetDeviceMask(
    void*,
    VkCommandBuffer,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDispatchBase(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t)
{
}
VkResult VkEventHandler::on_vkEnumeratePhysicalDeviceGroups(
    void*,
    VkResult,
    VkInstance,
    uint32_t*,
    VkPhysicalDeviceGroupProperties*)
{
    VkResult on_vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
    return on_vkEnumeratePhysicalDeviceGroups_VkResult_return;
}
void VkEventHandler::on_vkGetImageMemoryRequirements2(
    void*,
    VkDevice,
    const VkImageMemoryRequirementsInfo2*,
    VkMemoryRequirements2*)
{
}
void VkEventHandler::on_vkGetBufferMemoryRequirements2(
    void*,
    VkDevice,
    const VkBufferMemoryRequirementsInfo2*,
    VkMemoryRequirements2*)
{
}
void VkEventHandler::on_vkGetImageSparseMemoryRequirements2(
    void*,
    VkDevice,
    const VkImageSparseMemoryRequirementsInfo2*,
    uint32_t*,
    VkSparseImageMemoryRequirements2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceFeatures2(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceFeatures2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceProperties2(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties2(
    void*,
    VkPhysicalDevice,
    VkFormat,
    VkFormatProperties2*)
{
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties2(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkPhysicalDeviceImageFormatInfo2*,
    VkImageFormatProperties2*)
{
    VkResult on_vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceImageFormatProperties2_VkResult_return;
}
void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties2(
    void*,
    VkPhysicalDevice,
    uint32_t*,
    VkQueueFamilyProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties2(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceMemoryProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties2(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceSparseImageFormatInfo2*,
    uint32_t*,
    VkSparseImageFormatProperties2*)
{
}
void VkEventHandler::on_vkTrimCommandPool(
    void*,
    VkDevice,
    VkCommandPool,
    VkCommandPoolTrimFlags)
{
}
void VkEventHandler::on_vkGetDeviceQueue2(
    void*,
    VkDevice,
    const VkDeviceQueueInfo2*,
    VkQueue*)
{
}
VkResult VkEventHandler::on_vkCreateSamplerYcbcrConversion(
    void*,
    VkResult,
    VkDevice,
    const VkSamplerYcbcrConversionCreateInfo*,
    const VkAllocationCallbacks*,
    VkSamplerYcbcrConversion*)
{
    VkResult on_vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
    return on_vkCreateSamplerYcbcrConversion_VkResult_return;
}
void VkEventHandler::on_vkDestroySamplerYcbcrConversion(
    void*,
    VkDevice,
    VkSamplerYcbcrConversion,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateDescriptorUpdateTemplate(
    void*,
    VkResult,
    VkDevice,
    const VkDescriptorUpdateTemplateCreateInfo*,
    const VkAllocationCallbacks*,
    VkDescriptorUpdateTemplate*)
{
    VkResult on_vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
    return on_vkCreateDescriptorUpdateTemplate_VkResult_return;
}
void VkEventHandler::on_vkDestroyDescriptorUpdateTemplate(
    void*,
    VkDevice,
    VkDescriptorUpdateTemplate,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkUpdateDescriptorSetWithTemplate(
    void*,
    VkDevice,
    VkDescriptorSet,
    VkDescriptorUpdateTemplate,
    const void*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceExternalBufferProperties(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalBufferInfo*,
    VkExternalBufferProperties*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceExternalFenceProperties(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalFenceInfo*,
    VkExternalFenceProperties*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceExternalSemaphoreProperties(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalSemaphoreInfo*,
    VkExternalSemaphoreProperties*)
{
}
void VkEventHandler::on_vkGetDescriptorSetLayoutSupport(
    void*,
    VkDevice,
    const VkDescriptorSetLayoutCreateInfo*,
    VkDescriptorSetLayoutSupport*)
{
}
#endif
#ifdef VK_KHR_surface
void VkEventHandler::on_vkDestroySurfaceKHR(
    void*,
    VkInstance,
    VkSurfaceKHR,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceSupportKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t,
    VkSurfaceKHR,
    VkBool32*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkSurfaceKHR,
    VkSurfaceCapabilitiesKHR*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceFormatsKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkSurfaceKHR,
    uint32_t*,
    VkSurfaceFormatKHR*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfacePresentModesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkSurfaceKHR,
    uint32_t*,
    VkPresentModeKHR*)
{
    VkResult on_vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_swapchain
VkResult VkEventHandler::on_vkCreateSwapchainKHR(
    void*,
    VkResult,
    VkDevice,
    const VkSwapchainCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSwapchainKHR*)
{
    VkResult on_vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
    return on_vkCreateSwapchainKHR_VkResult_return;
}
void VkEventHandler::on_vkDestroySwapchainKHR(
    void*,
    VkDevice,
    VkSwapchainKHR,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkGetSwapchainImagesKHR(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR,
    uint32_t*,
    VkImage*)
{
    VkResult on_vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
    return on_vkGetSwapchainImagesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkAcquireNextImageKHR(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR,
    uint64_t,
    VkSemaphore,
    VkFence,
    uint32_t*)
{
    VkResult on_vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
    return on_vkAcquireNextImageKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkQueuePresentKHR(
    void*,
    VkResult,
    VkQueue,
    const VkPresentInfoKHR*)
{
    VkResult on_vkQueuePresentKHR_VkResult_return = (VkResult)0;
    return on_vkQueuePresentKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDeviceGroupPresentCapabilitiesKHR(
    void*,
    VkResult,
    VkDevice,
    VkDeviceGroupPresentCapabilitiesKHR*)
{
    VkResult on_vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDeviceGroupSurfacePresentModesKHR(
    void*,
    VkResult,
    VkDevice,
    VkSurfaceKHR,
    VkDeviceGroupPresentModeFlagsKHR*)
{
    VkResult on_vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
    return on_vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDevicePresentRectanglesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkSurfaceKHR,
    uint32_t*,
    VkRect2D*)
{
    VkResult on_vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkAcquireNextImage2KHR(
    void*,
    VkResult,
    VkDevice,
    const VkAcquireNextImageInfoKHR*,
    uint32_t*)
{
    VkResult on_vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
    return on_vkAcquireNextImage2KHR_VkResult_return;
}
#endif
#ifdef VK_KHR_display
VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPropertiesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t*,
    VkDisplayPropertiesKHR*)
{
    VkResult on_vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t*,
    VkDisplayPlanePropertiesKHR*)
{
    VkResult on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDisplayPlaneSupportedDisplaysKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t,
    uint32_t*,
    VkDisplayKHR*)
{
    VkResult on_vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
    return on_vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDisplayModePropertiesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkDisplayKHR,
    uint32_t*,
    VkDisplayModePropertiesKHR*)
{
    VkResult on_vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetDisplayModePropertiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateDisplayModeKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkDisplayKHR,
    const VkDisplayModeCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkDisplayModeKHR*)
{
    VkResult on_vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
    return on_vkCreateDisplayModeKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDisplayPlaneCapabilitiesKHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkDisplayModeKHR,
    uint32_t,
    VkDisplayPlaneCapabilitiesKHR*)
{
    VkResult on_vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetDisplayPlaneCapabilitiesKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkCreateDisplayPlaneSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkDisplaySurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateDisplayPlaneSurfaceKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_display_swapchain
VkResult VkEventHandler::on_vkCreateSharedSwapchainsKHR(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkSwapchainCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSwapchainKHR*)
{
    VkResult on_vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
    return on_vkCreateSharedSwapchainsKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_xlib_surface
VkResult VkEventHandler::on_vkCreateXlibSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkXlibSurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateXlibSurfaceKHR_VkResult_return;
}
VkBool32 VkEventHandler::on_vkGetPhysicalDeviceXlibPresentationSupportKHR(
    void*,
    VkBool32,
    VkPhysicalDevice,
    uint32_t,
    Display*,
    VisualID)
{
    VkBool32 on_vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = (VkBool32)0;
    return on_vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return;
}
#endif
#ifdef VK_KHR_xcb_surface
VkResult VkEventHandler::on_vkCreateXcbSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkXcbSurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateXcbSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateXcbSurfaceKHR_VkResult_return;
}
VkBool32 VkEventHandler::on_vkGetPhysicalDeviceXcbPresentationSupportKHR(
    void*,
    VkBool32,
    VkPhysicalDevice,
    uint32_t,
    xcb_connection_t*,
    xcb_visualid_t)
{
    VkBool32 on_vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = (VkBool32)0;
    return on_vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return;
}
#endif
#ifdef VK_KHR_wayland_surface
VkResult VkEventHandler::on_vkCreateWaylandSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkWaylandSurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateWaylandSurfaceKHR_VkResult_return;
}
VkBool32 VkEventHandler::on_vkGetPhysicalDeviceWaylandPresentationSupportKHR(
    void*,
    VkBool32,
    VkPhysicalDevice,
    uint32_t,
    wl_display*)
{
    VkBool32 on_vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = (VkBool32)0;
    return on_vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return;
}
#endif
#ifdef VK_KHR_mir_surface
VkResult VkEventHandler::on_vkCreateMirSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkMirSurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateMirSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateMirSurfaceKHR_VkResult_return;
}
VkBool32 VkEventHandler::on_vkGetPhysicalDeviceMirPresentationSupportKHR(
    void*,
    VkBool32,
    VkPhysicalDevice,
    uint32_t,
    MirConnection*)
{
    VkBool32 on_vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = (VkBool32)0;
    return on_vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return;
}
#endif
#ifdef VK_KHR_android_surface
VkResult VkEventHandler::on_vkCreateAndroidSurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkAndroidSurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateAndroidSurfaceKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_win32_surface
VkResult VkEventHandler::on_vkCreateWin32SurfaceKHR(
    void*,
    VkResult,
    VkInstance,
    const VkWin32SurfaceCreateInfoKHR*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
    return on_vkCreateWin32SurfaceKHR_VkResult_return;
}
VkBool32 VkEventHandler::on_vkGetPhysicalDeviceWin32PresentationSupportKHR(
    void*,
    VkBool32,
    VkPhysicalDevice,
    uint32_t)
{
    VkBool32 on_vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = (VkBool32)0;
    return on_vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return;
}
#endif
#ifdef VK_KHR_sampler_mirror_clamp_to_edge
#endif
#ifdef VK_KHR_multiview
#endif
#ifdef VK_KHR_get_physical_device_properties2
void VkEventHandler::on_vkGetPhysicalDeviceFeatures2KHR(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceFeatures2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceProperties2KHR(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties2KHR(
    void*,
    VkPhysicalDevice,
    VkFormat,
    VkFormatProperties2*)
{
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkPhysicalDeviceImageFormatInfo2*,
    VkImageFormatProperties2*)
{
    VkResult on_vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
}
void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties2KHR(
    void*,
    VkPhysicalDevice,
    uint32_t*,
    VkQueueFamilyProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties2KHR(
    void*,
    VkPhysicalDevice,
    VkPhysicalDeviceMemoryProperties2*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceSparseImageFormatInfo2*,
    uint32_t*,
    VkSparseImageFormatProperties2*)
{
}
#endif
#ifdef VK_KHR_device_group
void VkEventHandler::on_vkGetDeviceGroupPeerMemoryFeaturesKHR(
    void*,
    VkDevice,
    uint32_t,
    uint32_t,
    uint32_t,
    VkPeerMemoryFeatureFlags*)
{
}
void VkEventHandler::on_vkCmdSetDeviceMaskKHR(
    void*,
    VkCommandBuffer,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDispatchBaseKHR(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t,
    uint32_t)
{
}
#endif
#ifdef VK_KHR_shader_draw_parameters
#endif
#ifdef VK_KHR_maintenance1
void VkEventHandler::on_vkTrimCommandPoolKHR(
    void*,
    VkDevice,
    VkCommandPool,
    VkCommandPoolTrimFlags)
{
}
#endif
#ifdef VK_KHR_device_group_creation
VkResult VkEventHandler::on_vkEnumeratePhysicalDeviceGroupsKHR(
    void*,
    VkResult,
    VkInstance,
    uint32_t*,
    VkPhysicalDeviceGroupProperties*)
{
    VkResult on_vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
    return on_vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_external_memory_capabilities
void VkEventHandler::on_vkGetPhysicalDeviceExternalBufferPropertiesKHR(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalBufferInfo*,
    VkExternalBufferProperties*)
{
}
#endif
#ifdef VK_KHR_external_memory
#endif
#ifdef VK_KHR_external_memory_win32
VkResult VkEventHandler::on_vkGetMemoryWin32HandleKHR(
    void*,
    VkResult,
    VkDevice,
    const VkMemoryGetWin32HandleInfoKHR*,
    HANDLE*)
{
    VkResult on_vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
    return on_vkGetMemoryWin32HandleKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetMemoryWin32HandlePropertiesKHR(
    void*,
    VkResult,
    VkDevice,
    VkExternalMemoryHandleTypeFlagBits,
    HANDLE,
    VkMemoryWin32HandlePropertiesKHR*)
{
    VkResult on_vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetMemoryWin32HandlePropertiesKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_external_memory_fd
VkResult VkEventHandler::on_vkGetMemoryFdKHR(
    void*,
    VkResult,
    VkDevice,
    const VkMemoryGetFdInfoKHR*,
    int*)
{
    VkResult on_vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
    return on_vkGetMemoryFdKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetMemoryFdPropertiesKHR(
    void*,
    VkResult,
    VkDevice,
    VkExternalMemoryHandleTypeFlagBits,
    int,
    VkMemoryFdPropertiesKHR*)
{
    VkResult on_vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
    return on_vkGetMemoryFdPropertiesKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_win32_keyed_mutex
#endif
#ifdef VK_KHR_external_semaphore_capabilities
void VkEventHandler::on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalSemaphoreInfo*,
    VkExternalSemaphoreProperties*)
{
}
#endif
#ifdef VK_KHR_external_semaphore
#endif
#ifdef VK_KHR_external_semaphore_win32
VkResult VkEventHandler::on_vkImportSemaphoreWin32HandleKHR(
    void*,
    VkResult,
    VkDevice,
    const VkImportSemaphoreWin32HandleInfoKHR*)
{
    VkResult on_vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
    return on_vkImportSemaphoreWin32HandleKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetSemaphoreWin32HandleKHR(
    void*,
    VkResult,
    VkDevice,
    const VkSemaphoreGetWin32HandleInfoKHR*,
    HANDLE*)
{
    VkResult on_vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
    return on_vkGetSemaphoreWin32HandleKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_external_semaphore_fd
VkResult VkEventHandler::on_vkImportSemaphoreFdKHR(
    void*,
    VkResult,
    VkDevice,
    const VkImportSemaphoreFdInfoKHR*)
{
    VkResult on_vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
    return on_vkImportSemaphoreFdKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetSemaphoreFdKHR(
    void*,
    VkResult,
    VkDevice,
    const VkSemaphoreGetFdInfoKHR*,
    int*)
{
    VkResult on_vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
    return on_vkGetSemaphoreFdKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_push_descriptor
void VkEventHandler::on_vkCmdPushDescriptorSetKHR(
    void*,
    VkCommandBuffer,
    VkPipelineBindPoint,
    VkPipelineLayout,
    uint32_t,
    uint32_t,
    const VkWriteDescriptorSet*)
{
}
void VkEventHandler::on_vkCmdPushDescriptorSetWithTemplateKHR(
    void*,
    VkCommandBuffer,
    VkDescriptorUpdateTemplate,
    VkPipelineLayout,
    uint32_t,
    const void*)
{
}
#endif
#ifdef VK_KHR_16bit_storage
#endif
#ifdef VK_KHR_incremental_present
#endif
#ifdef VK_KHR_descriptor_update_template
VkResult VkEventHandler::on_vkCreateDescriptorUpdateTemplateKHR(
    void*,
    VkResult,
    VkDevice,
    const VkDescriptorUpdateTemplateCreateInfo*,
    const VkAllocationCallbacks*,
    VkDescriptorUpdateTemplate*)
{
    VkResult on_vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
    return on_vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
}
void VkEventHandler::on_vkDestroyDescriptorUpdateTemplateKHR(
    void*,
    VkDevice,
    VkDescriptorUpdateTemplate,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkUpdateDescriptorSetWithTemplateKHR(
    void*,
    VkDevice,
    VkDescriptorSet,
    VkDescriptorUpdateTemplate,
    const void*)
{
}
#endif
#ifdef VK_KHR_create_renderpass2
VkResult VkEventHandler::on_vkCreateRenderPass2KHR(
    void*,
    VkResult,
    VkDevice,
    const VkRenderPassCreateInfo2KHR*,
    const VkAllocationCallbacks*,
    VkRenderPass*)
{
    VkResult on_vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
    return on_vkCreateRenderPass2KHR_VkResult_return;
}
void VkEventHandler::on_vkCmdBeginRenderPass2KHR(
    void*,
    VkCommandBuffer,
    const VkRenderPassBeginInfo*,
    const VkSubpassBeginInfoKHR*)
{
}
void VkEventHandler::on_vkCmdNextSubpass2KHR(
    void*,
    VkCommandBuffer,
    const VkSubpassBeginInfoKHR*,
    const VkSubpassEndInfoKHR*)
{
}
void VkEventHandler::on_vkCmdEndRenderPass2KHR(
    void*,
    VkCommandBuffer,
    const VkSubpassEndInfoKHR*)
{
}
#endif
#ifdef VK_KHR_shared_presentable_image
VkResult VkEventHandler::on_vkGetSwapchainStatusKHR(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR)
{
    VkResult on_vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
    return on_vkGetSwapchainStatusKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_external_fence_capabilities
void VkEventHandler::on_vkGetPhysicalDeviceExternalFencePropertiesKHR(
    void*,
    VkPhysicalDevice,
    const VkPhysicalDeviceExternalFenceInfo*,
    VkExternalFenceProperties*)
{
}
#endif
#ifdef VK_KHR_external_fence
#endif
#ifdef VK_KHR_external_fence_win32
VkResult VkEventHandler::on_vkImportFenceWin32HandleKHR(
    void*,
    VkResult,
    VkDevice,
    const VkImportFenceWin32HandleInfoKHR*)
{
    VkResult on_vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
    return on_vkImportFenceWin32HandleKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetFenceWin32HandleKHR(
    void*,
    VkResult,
    VkDevice,
    const VkFenceGetWin32HandleInfoKHR*,
    HANDLE*)
{
    VkResult on_vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
    return on_vkGetFenceWin32HandleKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_external_fence_fd
VkResult VkEventHandler::on_vkImportFenceFdKHR(
    void*,
    VkResult,
    VkDevice,
    const VkImportFenceFdInfoKHR*)
{
    VkResult on_vkImportFenceFdKHR_VkResult_return = (VkResult)0;
    return on_vkImportFenceFdKHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetFenceFdKHR(
    void*,
    VkResult,
    VkDevice,
    const VkFenceGetFdInfoKHR*,
    int*)
{
    VkResult on_vkGetFenceFdKHR_VkResult_return = (VkResult)0;
    return on_vkGetFenceFdKHR_VkResult_return;
}
#endif
#ifdef VK_KHR_maintenance2
#endif
#ifdef VK_KHR_get_surface_capabilities2
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilities2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkPhysicalDeviceSurfaceInfo2KHR*,
    VkSurfaceCapabilities2KHR*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceFormats2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkPhysicalDeviceSurfaceInfo2KHR*,
    uint32_t*,
    VkSurfaceFormat2KHR*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return;
}
#endif
#ifdef VK_KHR_variable_pointers
#endif
#ifdef VK_KHR_get_display_properties2
VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayProperties2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t*,
    VkDisplayProperties2KHR*)
{
    VkResult on_vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    uint32_t*,
    VkDisplayPlaneProperties2KHR*)
{
    VkResult on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDisplayModeProperties2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkDisplayKHR,
    uint32_t*,
    VkDisplayModeProperties2KHR*)
{
    VkResult on_vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
    return on_vkGetDisplayModeProperties2KHR_VkResult_return;
}
VkResult VkEventHandler::on_vkGetDisplayPlaneCapabilities2KHR(
    void*,
    VkResult,
    VkPhysicalDevice,
    const VkDisplayPlaneInfo2KHR*,
    VkDisplayPlaneCapabilities2KHR*)
{
    VkResult on_vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
    return on_vkGetDisplayPlaneCapabilities2KHR_VkResult_return;
}
#endif
#ifdef VK_KHR_dedicated_allocation
#endif
#ifdef VK_KHR_storage_buffer_storage_class
#endif
#ifdef VK_KHR_relaxed_block_layout
#endif
#ifdef VK_KHR_get_memory_requirements2
void VkEventHandler::on_vkGetImageMemoryRequirements2KHR(
    void*,
    VkDevice,
    const VkImageMemoryRequirementsInfo2*,
    VkMemoryRequirements2*)
{
}
void VkEventHandler::on_vkGetBufferMemoryRequirements2KHR(
    void*,
    VkDevice,
    const VkBufferMemoryRequirementsInfo2*,
    VkMemoryRequirements2*)
{
}
void VkEventHandler::on_vkGetImageSparseMemoryRequirements2KHR(
    void*,
    VkDevice,
    const VkImageSparseMemoryRequirementsInfo2*,
    uint32_t*,
    VkSparseImageMemoryRequirements2*)
{
}
#endif
#ifdef VK_KHR_image_format_list
#endif
#ifdef VK_KHR_sampler_ycbcr_conversion
VkResult VkEventHandler::on_vkCreateSamplerYcbcrConversionKHR(
    void*,
    VkResult,
    VkDevice,
    const VkSamplerYcbcrConversionCreateInfo*,
    const VkAllocationCallbacks*,
    VkSamplerYcbcrConversion*)
{
    VkResult on_vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
    return on_vkCreateSamplerYcbcrConversionKHR_VkResult_return;
}
void VkEventHandler::on_vkDestroySamplerYcbcrConversionKHR(
    void*,
    VkDevice,
    VkSamplerYcbcrConversion,
    const VkAllocationCallbacks*)
{
}
#endif
#ifdef VK_KHR_bind_memory2
VkResult VkEventHandler::on_vkBindBufferMemory2KHR(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkBindBufferMemoryInfo*)
{
    VkResult on_vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
    return on_vkBindBufferMemory2KHR_VkResult_return;
}
VkResult VkEventHandler::on_vkBindImageMemory2KHR(
    void*,
    VkResult,
    VkDevice,
    uint32_t,
    const VkBindImageMemoryInfo*)
{
    VkResult on_vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
    return on_vkBindImageMemory2KHR_VkResult_return;
}
#endif
#ifdef VK_KHR_maintenance3
void VkEventHandler::on_vkGetDescriptorSetLayoutSupportKHR(
    void*,
    VkDevice,
    const VkDescriptorSetLayoutCreateInfo*,
    VkDescriptorSetLayoutSupport*)
{
}
#endif
#ifdef VK_KHR_draw_indirect_count
void VkEventHandler::on_vkCmdDrawIndirectCountKHR(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDrawIndexedIndirectCountKHR(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
#endif
#ifdef VK_KHR_8bit_storage
#endif
#ifdef VK_ANDROID_native_buffer
VkResult VkEventHandler::on_vkGetSwapchainGrallocUsageANDROID(
    void*,
    VkResult,
    VkDevice,
    VkFormat,
    VkImageUsageFlags,
    int*)
{
    VkResult on_vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
    return on_vkGetSwapchainGrallocUsageANDROID_VkResult_return;
}
VkResult VkEventHandler::on_vkAcquireImageANDROID(
    void*,
    VkResult,
    VkDevice,
    VkImage,
    int,
    VkSemaphore,
    VkFence)
{
    VkResult on_vkAcquireImageANDROID_VkResult_return = (VkResult)0;
    return on_vkAcquireImageANDROID_VkResult_return;
}
VkResult VkEventHandler::on_vkQueueSignalReleaseImageANDROID(
    void*,
    VkResult,
    VkQueue,
    uint32_t,
    const VkSemaphore*,
    VkImage,
    int*)
{
    VkResult on_vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
    return on_vkQueueSignalReleaseImageANDROID_VkResult_return;
}
#endif
#ifdef VK_EXT_debug_report
VkResult VkEventHandler::on_vkCreateDebugReportCallbackEXT(
    void*,
    VkResult,
    VkInstance,
    const VkDebugReportCallbackCreateInfoEXT*,
    const VkAllocationCallbacks*,
    VkDebugReportCallbackEXT*)
{
    VkResult on_vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
    return on_vkCreateDebugReportCallbackEXT_VkResult_return;
}
void VkEventHandler::on_vkDestroyDebugReportCallbackEXT(
    void*,
    VkInstance,
    VkDebugReportCallbackEXT,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkDebugReportMessageEXT(
    void*,
    VkInstance,
    VkDebugReportFlagsEXT,
    VkDebugReportObjectTypeEXT,
    uint64_t,
    size_t,
    int32_t,
    const char*,
    const char*)
{
}
#endif
#ifdef VK_NV_glsl_shader
#endif
#ifdef VK_EXT_depth_range_unrestricted
#endif
#ifdef VK_IMG_filter_cubic
#endif
#ifdef VK_AMD_rasterization_order
#endif
#ifdef VK_AMD_shader_trinary_minmax
#endif
#ifdef VK_AMD_shader_explicit_vertex_parameter
#endif
#ifdef VK_EXT_debug_marker
VkResult VkEventHandler::on_vkDebugMarkerSetObjectTagEXT(
    void*,
    VkResult,
    VkDevice,
    const VkDebugMarkerObjectTagInfoEXT*)
{
    VkResult on_vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
    return on_vkDebugMarkerSetObjectTagEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkDebugMarkerSetObjectNameEXT(
    void*,
    VkResult,
    VkDevice,
    const VkDebugMarkerObjectNameInfoEXT*)
{
    VkResult on_vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
    return on_vkDebugMarkerSetObjectNameEXT_VkResult_return;
}
void VkEventHandler::on_vkCmdDebugMarkerBeginEXT(
    void*,
    VkCommandBuffer,
    const VkDebugMarkerMarkerInfoEXT*)
{
}
void VkEventHandler::on_vkCmdDebugMarkerEndEXT(
    void*,
    VkCommandBuffer)
{
}
void VkEventHandler::on_vkCmdDebugMarkerInsertEXT(
    void*,
    VkCommandBuffer,
    const VkDebugMarkerMarkerInfoEXT*)
{
}
#endif
#ifdef VK_AMD_gcn_shader
#endif
#ifdef VK_NV_dedicated_allocation
#endif
#ifdef VK_AMD_draw_indirect_count
void VkEventHandler::on_vkCmdDrawIndirectCountAMD(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
void VkEventHandler::on_vkCmdDrawIndexedIndirectCountAMD(
    void*,
    VkCommandBuffer,
    VkBuffer,
    VkDeviceSize,
    VkBuffer,
    VkDeviceSize,
    uint32_t,
    uint32_t)
{
}
#endif
#ifdef VK_AMD_negative_viewport_height
#endif
#ifdef VK_AMD_gpu_shader_half_float
#endif
#ifdef VK_AMD_shader_ballot
#endif
#ifdef VK_AMD_texture_gather_bias_lod
#endif
#ifdef VK_AMD_shader_info
VkResult VkEventHandler::on_vkGetShaderInfoAMD(
    void*,
    VkResult,
    VkDevice,
    VkPipeline,
    VkShaderStageFlagBits,
    VkShaderInfoTypeAMD,
    size_t*,
    void*)
{
    VkResult on_vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
    return on_vkGetShaderInfoAMD_VkResult_return;
}
#endif
#ifdef VK_AMD_shader_image_load_store_lod
#endif
#ifdef VK_IMG_format_pvrtc
#endif
#ifdef VK_NV_external_memory_capabilities
VkResult VkEventHandler::on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkFormat,
    VkImageType,
    VkImageTiling,
    VkImageUsageFlags,
    VkImageCreateFlags,
    VkExternalMemoryHandleTypeFlagsNV,
    VkExternalImageFormatPropertiesNV*)
{
    VkResult on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return;
}
#endif
#ifdef VK_NV_external_memory
#endif
#ifdef VK_NV_external_memory_win32
VkResult VkEventHandler::on_vkGetMemoryWin32HandleNV(
    void*,
    VkResult,
    VkDevice,
    VkDeviceMemory,
    VkExternalMemoryHandleTypeFlagsNV,
    HANDLE*)
{
    VkResult on_vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
    return on_vkGetMemoryWin32HandleNV_VkResult_return;
}
#endif
#ifdef VK_NV_win32_keyed_mutex
#endif
#ifdef VK_EXT_validation_flags
#endif
#ifdef VK_NN_vi_surface
VkResult VkEventHandler::on_vkCreateViSurfaceNN(
    void*,
    VkResult,
    VkInstance,
    const VkViSurfaceCreateInfoNN*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
    return on_vkCreateViSurfaceNN_VkResult_return;
}
#endif
#ifdef VK_EXT_shader_subgroup_ballot
#endif
#ifdef VK_EXT_shader_subgroup_vote
#endif
#ifdef VK_EXT_conditional_rendering
void VkEventHandler::on_vkCmdBeginConditionalRenderingEXT(
    void*,
    VkCommandBuffer,
    const VkConditionalRenderingBeginInfoEXT*)
{
}
void VkEventHandler::on_vkCmdEndConditionalRenderingEXT(
    void*,
    VkCommandBuffer)
{
}
#endif
#ifdef VK_NVX_device_generated_commands
void VkEventHandler::on_vkCmdProcessCommandsNVX(
    void*,
    VkCommandBuffer,
    const VkCmdProcessCommandsInfoNVX*)
{
}
void VkEventHandler::on_vkCmdReserveSpaceForCommandsNVX(
    void*,
    VkCommandBuffer,
    const VkCmdReserveSpaceForCommandsInfoNVX*)
{
}
VkResult VkEventHandler::on_vkCreateIndirectCommandsLayoutNVX(
    void*,
    VkResult,
    VkDevice,
    const VkIndirectCommandsLayoutCreateInfoNVX*,
    const VkAllocationCallbacks*,
    VkIndirectCommandsLayoutNVX*)
{
    VkResult on_vkCreateIndirectCommandsLayoutNVX_VkResult_return = (VkResult)0;
    return on_vkCreateIndirectCommandsLayoutNVX_VkResult_return;
}
void VkEventHandler::on_vkDestroyIndirectCommandsLayoutNVX(
    void*,
    VkDevice,
    VkIndirectCommandsLayoutNVX,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkCreateObjectTableNVX(
    void*,
    VkResult,
    VkDevice,
    const VkObjectTableCreateInfoNVX*,
    const VkAllocationCallbacks*,
    VkObjectTableNVX*)
{
    VkResult on_vkCreateObjectTableNVX_VkResult_return = (VkResult)0;
    return on_vkCreateObjectTableNVX_VkResult_return;
}
void VkEventHandler::on_vkDestroyObjectTableNVX(
    void*,
    VkDevice,
    VkObjectTableNVX,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkRegisterObjectsNVX(
    void*,
    VkResult,
    VkDevice,
    VkObjectTableNVX,
    uint32_t,
    const VkObjectTableEntryNVX* const*,
    const uint32_t*)
{
    VkResult on_vkRegisterObjectsNVX_VkResult_return = (VkResult)0;
    return on_vkRegisterObjectsNVX_VkResult_return;
}
VkResult VkEventHandler::on_vkUnregisterObjectsNVX(
    void*,
    VkResult,
    VkDevice,
    VkObjectTableNVX,
    uint32_t,
    const VkObjectEntryTypeNVX*,
    const uint32_t*)
{
    VkResult on_vkUnregisterObjectsNVX_VkResult_return = (VkResult)0;
    return on_vkUnregisterObjectsNVX_VkResult_return;
}
void VkEventHandler::on_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
    void*,
    VkPhysicalDevice,
    VkDeviceGeneratedCommandsFeaturesNVX*,
    VkDeviceGeneratedCommandsLimitsNVX*)
{
}
#endif
#ifdef VK_NV_clip_space_w_scaling
void VkEventHandler::on_vkCmdSetViewportWScalingNV(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    const VkViewportWScalingNV*)
{
}
#endif
#ifdef VK_EXT_direct_mode_display
VkResult VkEventHandler::on_vkReleaseDisplayEXT(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkDisplayKHR)
{
    VkResult on_vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
    return on_vkReleaseDisplayEXT_VkResult_return;
}
#endif
#ifdef VK_EXT_acquire_xlib_display
VkResult VkEventHandler::on_vkAcquireXlibDisplayEXT(
    void*,
    VkResult,
    VkPhysicalDevice,
    Display*,
    VkDisplayKHR)
{
    VkResult on_vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
    return on_vkAcquireXlibDisplayEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkGetRandROutputDisplayEXT(
    void*,
    VkResult,
    VkPhysicalDevice,
    Display*,
    RROutput,
    VkDisplayKHR*)
{
    VkResult on_vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
    return on_vkGetRandROutputDisplayEXT_VkResult_return;
}
#endif
#ifdef VK_EXT_display_surface_counter
VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilities2EXT(
    void*,
    VkResult,
    VkPhysicalDevice,
    VkSurfaceKHR,
    VkSurfaceCapabilities2EXT*)
{
    VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
    return on_vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return;
}
#endif
#ifdef VK_EXT_display_control
VkResult VkEventHandler::on_vkDisplayPowerControlEXT(
    void*,
    VkResult,
    VkDevice,
    VkDisplayKHR,
    const VkDisplayPowerInfoEXT*)
{
    VkResult on_vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
    return on_vkDisplayPowerControlEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkRegisterDeviceEventEXT(
    void*,
    VkResult,
    VkDevice,
    const VkDeviceEventInfoEXT*,
    const VkAllocationCallbacks*,
    VkFence*)
{
    VkResult on_vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
    return on_vkRegisterDeviceEventEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkRegisterDisplayEventEXT(
    void*,
    VkResult,
    VkDevice,
    VkDisplayKHR,
    const VkDisplayEventInfoEXT*,
    const VkAllocationCallbacks*,
    VkFence*)
{
    VkResult on_vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
    return on_vkRegisterDisplayEventEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkGetSwapchainCounterEXT(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR,
    VkSurfaceCounterFlagBitsEXT,
    uint64_t*)
{
    VkResult on_vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
    return on_vkGetSwapchainCounterEXT_VkResult_return;
}
#endif
#ifdef VK_GOOGLE_display_timing
VkResult VkEventHandler::on_vkGetRefreshCycleDurationGOOGLE(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR,
    VkRefreshCycleDurationGOOGLE*)
{
    VkResult on_vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
    return on_vkGetRefreshCycleDurationGOOGLE_VkResult_return;
}
VkResult VkEventHandler::on_vkGetPastPresentationTimingGOOGLE(
    void*,
    VkResult,
    VkDevice,
    VkSwapchainKHR,
    uint32_t*,
    VkPastPresentationTimingGOOGLE*)
{
    VkResult on_vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
    return on_vkGetPastPresentationTimingGOOGLE_VkResult_return;
}
#endif
#ifdef VK_NV_sample_mask_override_coverage
#endif
#ifdef VK_NV_geometry_shader_passthrough
#endif
#ifdef VK_NV_viewport_array2
#endif
#ifdef VK_NVX_multiview_per_view_attributes
#endif
#ifdef VK_NV_viewport_swizzle
#endif
#ifdef VK_EXT_discard_rectangles
void VkEventHandler::on_vkCmdSetDiscardRectangleEXT(
    void*,
    VkCommandBuffer,
    uint32_t,
    uint32_t,
    const VkRect2D*)
{
}
#endif
#ifdef VK_EXT_conservative_rasterization
#endif
#ifdef VK_EXT_swapchain_colorspace
#endif
#ifdef VK_EXT_hdr_metadata
void VkEventHandler::on_vkSetHdrMetadataEXT(
    void*,
    VkDevice,
    uint32_t,
    const VkSwapchainKHR*,
    const VkHdrMetadataEXT*)
{
}
#endif
#ifdef VK_MVK_ios_surface
VkResult VkEventHandler::on_vkCreateIOSSurfaceMVK(
    void*,
    VkResult,
    VkInstance,
    const VkIOSSurfaceCreateInfoMVK*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
    return on_vkCreateIOSSurfaceMVK_VkResult_return;
}
#endif
#ifdef VK_MVK_macos_surface
VkResult VkEventHandler::on_vkCreateMacOSSurfaceMVK(
    void*,
    VkResult,
    VkInstance,
    const VkMacOSSurfaceCreateInfoMVK*,
    const VkAllocationCallbacks*,
    VkSurfaceKHR*)
{
    VkResult on_vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
    return on_vkCreateMacOSSurfaceMVK_VkResult_return;
}
#endif
#ifdef VK_EXT_external_memory_dma_buf
#endif
#ifdef VK_EXT_queue_family_foreign
#endif
#ifdef VK_EXT_debug_utils
VkResult VkEventHandler::on_vkSetDebugUtilsObjectNameEXT(
    void*,
    VkResult,
    VkDevice,
    const VkDebugUtilsObjectNameInfoEXT*)
{
    VkResult on_vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
    return on_vkSetDebugUtilsObjectNameEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkSetDebugUtilsObjectTagEXT(
    void*,
    VkResult,
    VkDevice,
    const VkDebugUtilsObjectTagInfoEXT*)
{
    VkResult on_vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
    return on_vkSetDebugUtilsObjectTagEXT_VkResult_return;
}
void VkEventHandler::on_vkQueueBeginDebugUtilsLabelEXT(
    void*,
    VkQueue,
    const VkDebugUtilsLabelEXT*)
{
}
void VkEventHandler::on_vkQueueEndDebugUtilsLabelEXT(
    void*,
    VkQueue)
{
}
void VkEventHandler::on_vkQueueInsertDebugUtilsLabelEXT(
    void*,
    VkQueue,
    const VkDebugUtilsLabelEXT*)
{
}
void VkEventHandler::on_vkCmdBeginDebugUtilsLabelEXT(
    void*,
    VkCommandBuffer,
    const VkDebugUtilsLabelEXT*)
{
}
void VkEventHandler::on_vkCmdEndDebugUtilsLabelEXT(
    void*,
    VkCommandBuffer)
{
}
void VkEventHandler::on_vkCmdInsertDebugUtilsLabelEXT(
    void*,
    VkCommandBuffer,
    const VkDebugUtilsLabelEXT*)
{
}
VkResult VkEventHandler::on_vkCreateDebugUtilsMessengerEXT(
    void*,
    VkResult,
    VkInstance,
    const VkDebugUtilsMessengerCreateInfoEXT*,
    const VkAllocationCallbacks*,
    VkDebugUtilsMessengerEXT*)
{
    VkResult on_vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
    return on_vkCreateDebugUtilsMessengerEXT_VkResult_return;
}
void VkEventHandler::on_vkDestroyDebugUtilsMessengerEXT(
    void*,
    VkInstance,
    VkDebugUtilsMessengerEXT,
    const VkAllocationCallbacks*)
{
}
void VkEventHandler::on_vkSubmitDebugUtilsMessageEXT(
    void*,
    VkInstance,
    VkDebugUtilsMessageSeverityFlagBitsEXT,
    VkDebugUtilsMessageTypeFlagsEXT,
    const VkDebugUtilsMessengerCallbackDataEXT*)
{
}
#endif
#ifdef VK_ANDROID_external_memory_android_hardware_buffer
VkResult VkEventHandler::on_vkGetAndroidHardwareBufferPropertiesANDROID(
    void*,
    VkResult,
    VkDevice,
    const AHardwareBuffer*,
    VkAndroidHardwareBufferPropertiesANDROID*)
{
    VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
    return on_vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return;
}
VkResult VkEventHandler::on_vkGetMemoryAndroidHardwareBufferANDROID(
    void*,
    VkResult,
    VkDevice,
    const VkMemoryGetAndroidHardwareBufferInfoANDROID*,
    AHardwareBuffer**)
{
    VkResult on_vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
    return on_vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return;
}
#endif
#ifdef VK_EXT_sampler_filter_minmax
#endif
#ifdef VK_AMD_gpu_shader_int16
#endif
#ifdef VK_AMD_mixed_attachment_samples
#endif
#ifdef VK_AMD_shader_fragment_mask
#endif
#ifdef VK_EXT_shader_stencil_export
#endif
#ifdef VK_EXT_sample_locations
void VkEventHandler::on_vkCmdSetSampleLocationsEXT(
    void*,
    VkCommandBuffer,
    const VkSampleLocationsInfoEXT*)
{
}
void VkEventHandler::on_vkGetPhysicalDeviceMultisamplePropertiesEXT(
    void*,
    VkPhysicalDevice,
    VkSampleCountFlagBits,
    VkMultisamplePropertiesEXT*)
{
}
#endif
#ifdef VK_EXT_blend_operation_advanced
#endif
#ifdef VK_NV_fragment_coverage_to_color
#endif
#ifdef VK_NV_framebuffer_mixed_samples
#endif
#ifdef VK_NV_fill_rectangle
#endif
#ifdef VK_EXT_post_depth_coverage
#endif
#ifdef VK_EXT_validation_cache
VkResult VkEventHandler::on_vkCreateValidationCacheEXT(
    void*,
    VkResult,
    VkDevice,
    const VkValidationCacheCreateInfoEXT*,
    const VkAllocationCallbacks*,
    VkValidationCacheEXT*)
{
    VkResult on_vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
    return on_vkCreateValidationCacheEXT_VkResult_return;
}
void VkEventHandler::on_vkDestroyValidationCacheEXT(
    void*,
    VkDevice,
    VkValidationCacheEXT,
    const VkAllocationCallbacks*)
{
}
VkResult VkEventHandler::on_vkMergeValidationCachesEXT(
    void*,
    VkResult,
    VkDevice,
    VkValidationCacheEXT,
    uint32_t,
    const VkValidationCacheEXT*)
{
    VkResult on_vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
    return on_vkMergeValidationCachesEXT_VkResult_return;
}
VkResult VkEventHandler::on_vkGetValidationCacheDataEXT(
    void*,
    VkResult,
    VkDevice,
    VkValidationCacheEXT,
    size_t*,
    void*)
{
    VkResult on_vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
    return on_vkGetValidationCacheDataEXT_VkResult_return;
}
#endif
#ifdef VK_EXT_descriptor_indexing
#endif
#ifdef VK_EXT_shader_viewport_index_layer
#endif
#ifdef VK_EXT_global_priority
#endif
#ifdef VK_EXT_external_memory_host
VkResult VkEventHandler::on_vkGetMemoryHostPointerPropertiesEXT(
    void*,
    VkResult,
    VkDevice,
    VkExternalMemoryHandleTypeFlagBits,
    const void*,
    VkMemoryHostPointerPropertiesEXT*)
{
    VkResult on_vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
    return on_vkGetMemoryHostPointerPropertiesEXT_VkResult_return;
}
#endif
#ifdef VK_AMD_buffer_marker
void VkEventHandler::on_vkCmdWriteBufferMarkerAMD(
    void*,
    VkCommandBuffer,
    VkPipelineStageFlagBits,
    VkBuffer,
    VkDeviceSize,
    uint32_t)
{
}
#endif
#ifdef VK_AMD_shader_core_properties
#endif
#ifdef VK_EXT_vertex_attribute_divisor
#endif
#ifdef VK_NV_shader_subgroup_partitioned
#endif
#ifdef VK_NV_device_diagnostic_checkpoints
void VkEventHandler::on_vkCmdSetCheckpointNV(
    void*,
    VkCommandBuffer,
    const void*)
{
}
void VkEventHandler::on_vkGetQueueCheckpointDataNV(
    void*,
    VkQueue,
    uint32_t*,
    VkCheckpointDataNV*)
{
}
#endif

} // namespace goldfish_vk
