blob: b7a51cb9fa5f7fe7b5d1fbf691c118af3eba761c [file] [log] [blame]
// Copyright 2018 The SwiftShader Authors. All Rights Reserved.
//
// 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.
#include "VkGetProcAddress.h"
#include <unordered_map>
#include <string>
namespace vk
{
#define MAKE_VULKAN_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
static const std::unordered_map <std::string, PFN_vkVoidFunction> func_ptrs =
{
MAKE_VULKAN_ENTRY(vkCreateInstance),
MAKE_VULKAN_ENTRY(vkDestroyInstance),
MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDevices),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties),
MAKE_VULKAN_ENTRY(vkGetInstanceProcAddr),
MAKE_VULKAN_ENTRY(vkGetDeviceProcAddr),
MAKE_VULKAN_ENTRY(vkCreateDevice),
MAKE_VULKAN_ENTRY(vkDestroyDevice),
MAKE_VULKAN_ENTRY(vkEnumerateInstanceExtensionProperties),
MAKE_VULKAN_ENTRY(vkEnumerateDeviceExtensionProperties),
MAKE_VULKAN_ENTRY(vkEnumerateInstanceLayerProperties),
MAKE_VULKAN_ENTRY(vkEnumerateDeviceLayerProperties),
MAKE_VULKAN_ENTRY(vkGetDeviceQueue),
MAKE_VULKAN_ENTRY(vkQueueSubmit),
MAKE_VULKAN_ENTRY(vkQueueWaitIdle),
MAKE_VULKAN_ENTRY(vkDeviceWaitIdle),
MAKE_VULKAN_ENTRY(vkAllocateMemory),
MAKE_VULKAN_ENTRY(vkFreeMemory),
MAKE_VULKAN_ENTRY(vkMapMemory),
MAKE_VULKAN_ENTRY(vkUnmapMemory),
MAKE_VULKAN_ENTRY(vkFlushMappedMemoryRanges),
MAKE_VULKAN_ENTRY(vkInvalidateMappedMemoryRanges),
MAKE_VULKAN_ENTRY(vkGetDeviceMemoryCommitment),
MAKE_VULKAN_ENTRY(vkBindBufferMemory),
MAKE_VULKAN_ENTRY(vkBindImageMemory),
MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements),
MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements),
MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties),
MAKE_VULKAN_ENTRY(vkQueueBindSparse),
MAKE_VULKAN_ENTRY(vkCreateFence),
MAKE_VULKAN_ENTRY(vkDestroyFence),
MAKE_VULKAN_ENTRY(vkResetFences),
MAKE_VULKAN_ENTRY(vkGetFenceStatus),
MAKE_VULKAN_ENTRY(vkWaitForFences),
MAKE_VULKAN_ENTRY(vkCreateSemaphore),
MAKE_VULKAN_ENTRY(vkDestroySemaphore),
MAKE_VULKAN_ENTRY(vkCreateEvent),
MAKE_VULKAN_ENTRY(vkDestroyEvent),
MAKE_VULKAN_ENTRY(vkGetEventStatus),
MAKE_VULKAN_ENTRY(vkSetEvent),
MAKE_VULKAN_ENTRY(vkResetEvent),
MAKE_VULKAN_ENTRY(vkCreateQueryPool),
MAKE_VULKAN_ENTRY(vkDestroyQueryPool),
MAKE_VULKAN_ENTRY(vkGetQueryPoolResults),
MAKE_VULKAN_ENTRY(vkCreateBuffer),
MAKE_VULKAN_ENTRY(vkDestroyBuffer),
MAKE_VULKAN_ENTRY(vkCreateBufferView),
MAKE_VULKAN_ENTRY(vkDestroyBufferView),
MAKE_VULKAN_ENTRY(vkCreateImage),
MAKE_VULKAN_ENTRY(vkDestroyImage),
MAKE_VULKAN_ENTRY(vkGetImageSubresourceLayout),
MAKE_VULKAN_ENTRY(vkCreateImageView),
MAKE_VULKAN_ENTRY(vkDestroyImageView),
MAKE_VULKAN_ENTRY(vkCreateShaderModule),
MAKE_VULKAN_ENTRY(vkDestroyShaderModule),
MAKE_VULKAN_ENTRY(vkCreatePipelineCache),
MAKE_VULKAN_ENTRY(vkDestroyPipelineCache),
MAKE_VULKAN_ENTRY(vkGetPipelineCacheData),
MAKE_VULKAN_ENTRY(vkMergePipelineCaches),
MAKE_VULKAN_ENTRY(vkCreateGraphicsPipelines),
MAKE_VULKAN_ENTRY(vkCreateComputePipelines),
MAKE_VULKAN_ENTRY(vkDestroyPipeline),
MAKE_VULKAN_ENTRY(vkCreatePipelineLayout),
MAKE_VULKAN_ENTRY(vkDestroyPipelineLayout),
MAKE_VULKAN_ENTRY(vkCreateSampler),
MAKE_VULKAN_ENTRY(vkDestroySampler),
MAKE_VULKAN_ENTRY(vkCreateDescriptorSetLayout),
MAKE_VULKAN_ENTRY(vkDestroyDescriptorSetLayout),
MAKE_VULKAN_ENTRY(vkCreateDescriptorPool),
MAKE_VULKAN_ENTRY(vkDestroyDescriptorPool),
MAKE_VULKAN_ENTRY(vkResetDescriptorPool),
MAKE_VULKAN_ENTRY(vkAllocateDescriptorSets),
MAKE_VULKAN_ENTRY(vkFreeDescriptorSets),
MAKE_VULKAN_ENTRY(vkUpdateDescriptorSets),
MAKE_VULKAN_ENTRY(vkCreateFramebuffer),
MAKE_VULKAN_ENTRY(vkDestroyFramebuffer),
MAKE_VULKAN_ENTRY(vkCreateRenderPass),
MAKE_VULKAN_ENTRY(vkDestroyRenderPass),
MAKE_VULKAN_ENTRY(vkGetRenderAreaGranularity),
MAKE_VULKAN_ENTRY(vkCreateCommandPool),
MAKE_VULKAN_ENTRY(vkDestroyCommandPool),
MAKE_VULKAN_ENTRY(vkResetCommandPool),
MAKE_VULKAN_ENTRY(vkAllocateCommandBuffers),
MAKE_VULKAN_ENTRY(vkFreeCommandBuffers),
MAKE_VULKAN_ENTRY(vkBeginCommandBuffer),
MAKE_VULKAN_ENTRY(vkEndCommandBuffer),
MAKE_VULKAN_ENTRY(vkResetCommandBuffer),
MAKE_VULKAN_ENTRY(vkCmdBindPipeline),
MAKE_VULKAN_ENTRY(vkCmdSetViewport),
MAKE_VULKAN_ENTRY(vkCmdSetScissor),
MAKE_VULKAN_ENTRY(vkCmdSetLineWidth),
MAKE_VULKAN_ENTRY(vkCmdSetDepthBias),
MAKE_VULKAN_ENTRY(vkCmdSetBlendConstants),
MAKE_VULKAN_ENTRY(vkCmdSetDepthBounds),
MAKE_VULKAN_ENTRY(vkCmdSetStencilCompareMask),
MAKE_VULKAN_ENTRY(vkCmdSetStencilWriteMask),
MAKE_VULKAN_ENTRY(vkCmdSetStencilReference),
MAKE_VULKAN_ENTRY(vkCmdBindDescriptorSets),
MAKE_VULKAN_ENTRY(vkCmdBindIndexBuffer),
MAKE_VULKAN_ENTRY(vkCmdBindVertexBuffers),
MAKE_VULKAN_ENTRY(vkCmdDraw),
MAKE_VULKAN_ENTRY(vkCmdDrawIndexed),
MAKE_VULKAN_ENTRY(vkCmdDrawIndirect),
MAKE_VULKAN_ENTRY(vkCmdDrawIndexedIndirect),
MAKE_VULKAN_ENTRY(vkCmdDispatch),
MAKE_VULKAN_ENTRY(vkCmdDispatchIndirect),
MAKE_VULKAN_ENTRY(vkCmdCopyBuffer),
MAKE_VULKAN_ENTRY(vkCmdCopyImage),
MAKE_VULKAN_ENTRY(vkCmdBlitImage),
MAKE_VULKAN_ENTRY(vkCmdCopyBufferToImage),
MAKE_VULKAN_ENTRY(vkCmdCopyImageToBuffer),
MAKE_VULKAN_ENTRY(vkCmdUpdateBuffer),
MAKE_VULKAN_ENTRY(vkCmdFillBuffer),
MAKE_VULKAN_ENTRY(vkCmdClearColorImage),
MAKE_VULKAN_ENTRY(vkCmdClearDepthStencilImage),
MAKE_VULKAN_ENTRY(vkCmdClearAttachments),
MAKE_VULKAN_ENTRY(vkCmdResolveImage),
MAKE_VULKAN_ENTRY(vkCmdSetEvent),
MAKE_VULKAN_ENTRY(vkCmdResetEvent),
MAKE_VULKAN_ENTRY(vkCmdWaitEvents),
MAKE_VULKAN_ENTRY(vkCmdPipelineBarrier),
MAKE_VULKAN_ENTRY(vkCmdBeginQuery),
MAKE_VULKAN_ENTRY(vkCmdEndQuery),
MAKE_VULKAN_ENTRY(vkCmdResetQueryPool),
MAKE_VULKAN_ENTRY(vkCmdWriteTimestamp),
MAKE_VULKAN_ENTRY(vkCmdCopyQueryPoolResults),
MAKE_VULKAN_ENTRY(vkCmdPushConstants),
MAKE_VULKAN_ENTRY(vkCmdBeginRenderPass),
MAKE_VULKAN_ENTRY(vkCmdNextSubpass),
MAKE_VULKAN_ENTRY(vkCmdEndRenderPass),
MAKE_VULKAN_ENTRY(vkCmdExecuteCommands),
MAKE_VULKAN_ENTRY(vkEnumerateInstanceVersion),
MAKE_VULKAN_ENTRY(vkBindBufferMemory2),
MAKE_VULKAN_ENTRY(vkBindImageMemory2),
MAKE_VULKAN_ENTRY(vkGetDeviceGroupPeerMemoryFeatures),
MAKE_VULKAN_ENTRY(vkCmdSetDeviceMask),
MAKE_VULKAN_ENTRY(vkCmdDispatchBase),
MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDeviceGroups),
MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements2),
MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements2),
MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties2),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2),
MAKE_VULKAN_ENTRY(vkTrimCommandPool),
MAKE_VULKAN_ENTRY(vkGetDeviceQueue2),
MAKE_VULKAN_ENTRY(vkCreateSamplerYcbcrConversion),
MAKE_VULKAN_ENTRY(vkDestroySamplerYcbcrConversion),
MAKE_VULKAN_ENTRY(vkCreateDescriptorUpdateTemplate),
MAKE_VULKAN_ENTRY(vkDestroyDescriptorUpdateTemplate),
MAKE_VULKAN_ENTRY(vkUpdateDescriptorSetWithTemplate),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalBufferProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalFenceProperties),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties),
MAKE_VULKAN_ENTRY(vkGetDescriptorSetLayoutSupport),
// VK_KHR_bind_memory2
MAKE_VULKAN_ENTRY(vkBindBufferMemory2KHR),
MAKE_VULKAN_ENTRY(vkBindImageMemory2KHR),
// VK_KHR_descriptor_update_template
MAKE_VULKAN_ENTRY(vkCreateDescriptorUpdateTemplateKHR),
MAKE_VULKAN_ENTRY(vkDestroyDescriptorUpdateTemplateKHR),
MAKE_VULKAN_ENTRY(vkUpdateDescriptorSetWithTemplateKHR),
// VK_KHR_device_group
MAKE_VULKAN_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR),
MAKE_VULKAN_ENTRY(vkCmdSetDeviceMaskKHR),
MAKE_VULKAN_ENTRY(vkCmdDispatchBaseKHR),
// VK_KHR_device_group_creation
MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDeviceGroupsKHR),
// VK_KHR_external_fence_capabilities
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalFencePropertiesKHR),
// VK_KHR_external_memory_capabilities
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR),
// VK_KHR_external_semaphore_capabilities
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR),
// VK_KHR_get_memory_requirements2
MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements2KHR),
MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements2KHR),
MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements2KHR),
// VK_KHR_get_physical_device_properties2
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties2KHR),
MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2KHR),
// VK_KHR_maintenance1
MAKE_VULKAN_ENTRY(vkTrimCommandPoolKHR),
// VK_KHR_maintenance3
MAKE_VULKAN_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
// VK_KHR_sampler_ycbcr_conversion
MAKE_VULKAN_ENTRY(vkCreateSamplerYcbcrConversionKHR),
MAKE_VULKAN_ENTRY(vkDestroySamplerYcbcrConversionKHR),
};
#undef MAKE_VULKAN_ENTRY
PFN_vkVoidFunction GetProcAddr(const char* pName)
{
auto pFunc = func_ptrs.find(std::string(pName));
return (pFunc == func_ptrs.end()) ? nullptr : pFunc->second;
}
}