blob: fb9abd77978caa2c14df6036b3c16a5177e5592a [file] [log] [blame]
Jon Ashburnd55a3942015-05-06 09:02:10 -06001/*
Jon Ashburnd55a3942015-05-06 09:02:10 -06002 *
Jon Ashburn23d36b12016-02-02 17:47:28 -07003 * Copyright (c) 2015 The Khronos Group Inc.
4 * Copyright (c) 2015 Valve Corporation
5 * Copyright (c) 2015 LunarG, Inc.
Jon Ashburnd55a3942015-05-06 09:02:10 -06006 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -06007 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
Jon Ashburnd55a3942015-05-06 09:02:10 -060010 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -060011 * http://www.apache.org/licenses/LICENSE-2.0
Jon Ashburnd55a3942015-05-06 09:02:10 -060012 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -060013 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
Jon Ashburn23d36b12016-02-02 17:47:28 -070018 *
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060019 * Author: Jon Ashburn <jon@lunarg.com>
Jon Ashburnd55a3942015-05-06 09:02:10 -060020 */
21
22#include <string.h>
Jon Ashburn8a39efc2015-11-06 11:02:40 -070023#include "debug_report.h"
Ian Elliott954fa342015-10-30 15:28:23 -060024#include "wsi.h"
Jon Ashburnd55a3942015-05-06 09:02:10 -060025
Jon Ashburn23d36b12016-02-02 17:47:28 -070026static inline void *trampolineGetProcAddr(struct loader_instance *inst,
27 const char *funcName) {
28 // Don't include or check global functions
Jon Ashburn8a39efc2015-11-06 11:02:40 -070029 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070030 return (PFN_vkVoidFunction)vkGetInstanceProcAddr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070031 if (!strcmp(funcName, "vkDestroyInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070032 return (PFN_vkVoidFunction)vkDestroyInstance;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070033 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070034 return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070035 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070036 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFeatures;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070037 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070038 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070039 if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070040 return (PFN_vkVoidFunction)vkGetPhysicalDeviceImageFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070041 if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070042 return (
43 PFN_vkVoidFunction)vkGetPhysicalDeviceSparseImageFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070044 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070045 return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070046 if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070047 return (PFN_vkVoidFunction)vkGetPhysicalDeviceQueueFamilyProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070048 if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070049 return (PFN_vkVoidFunction)vkGetPhysicalDeviceMemoryProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070050 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070051 return (PFN_vkVoidFunction)vkEnumerateDeviceLayerProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070052 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070053 return (PFN_vkVoidFunction)vkEnumerateDeviceExtensionProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070054 if (!strcmp(funcName, "vkCreateDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070055 return (PFN_vkVoidFunction)vkCreateDevice;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070056 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070057 return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070058 if (!strcmp(funcName, "vkDestroyDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070059 return (PFN_vkVoidFunction)vkDestroyDevice;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070060 if (!strcmp(funcName, "vkGetDeviceQueue"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070061 return (PFN_vkVoidFunction)vkGetDeviceQueue;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070062 if (!strcmp(funcName, "vkQueueSubmit"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070063 return (PFN_vkVoidFunction)vkQueueSubmit;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070064 if (!strcmp(funcName, "vkQueueWaitIdle"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070065 return (PFN_vkVoidFunction)vkQueueWaitIdle;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070066 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070067 return (PFN_vkVoidFunction)vkDeviceWaitIdle;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070068 if (!strcmp(funcName, "vkAllocateMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070069 return (PFN_vkVoidFunction)vkAllocateMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070070 if (!strcmp(funcName, "vkFreeMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070071 return (PFN_vkVoidFunction)vkFreeMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070072 if (!strcmp(funcName, "vkMapMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070073 return (PFN_vkVoidFunction)vkMapMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070074 if (!strcmp(funcName, "vkUnmapMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070075 return (PFN_vkVoidFunction)vkUnmapMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070076 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070077 return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070078 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070079 return (PFN_vkVoidFunction)vkInvalidateMappedMemoryRanges;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070080 if (!strcmp(funcName, "vkGetDeviceMemoryCommitment"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070081 return (PFN_vkVoidFunction)vkGetDeviceMemoryCommitment;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070082 if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070083 return (PFN_vkVoidFunction)vkGetImageSparseMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070084 if (!strcmp(funcName, "vkGetImageMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070085 return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070086 if (!strcmp(funcName, "vkGetBufferMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070087 return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070088 if (!strcmp(funcName, "vkBindImageMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070089 return (PFN_vkVoidFunction)vkBindImageMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070090 if (!strcmp(funcName, "vkBindBufferMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070091 return (PFN_vkVoidFunction)vkBindBufferMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070092 if (!strcmp(funcName, "vkQueueBindSparse"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070093 return (PFN_vkVoidFunction)vkQueueBindSparse;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070094 if (!strcmp(funcName, "vkCreateFence"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070095 return (PFN_vkVoidFunction)vkCreateFence;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070096 if (!strcmp(funcName, "vkDestroyFence"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070097 return (PFN_vkVoidFunction)vkDestroyFence;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070098 if (!strcmp(funcName, "vkGetFenceStatus"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070099 return (PFN_vkVoidFunction)vkGetFenceStatus;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700100 if (!strcmp(funcName, "vkResetFences"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700101 return (PFN_vkVoidFunction)vkResetFences;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700102 if (!strcmp(funcName, "vkWaitForFences"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700103 return (PFN_vkVoidFunction)vkWaitForFences;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700104 if (!strcmp(funcName, "vkCreateSemaphore"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700105 return (PFN_vkVoidFunction)vkCreateSemaphore;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700106 if (!strcmp(funcName, "vkDestroySemaphore"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700107 return (PFN_vkVoidFunction)vkDestroySemaphore;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700108 if (!strcmp(funcName, "vkCreateEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700109 return (PFN_vkVoidFunction)vkCreateEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700110 if (!strcmp(funcName, "vkDestroyEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700111 return (PFN_vkVoidFunction)vkDestroyEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700112 if (!strcmp(funcName, "vkGetEventStatus"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700113 return (PFN_vkVoidFunction)vkGetEventStatus;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700114 if (!strcmp(funcName, "vkSetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700115 return (PFN_vkVoidFunction)vkSetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700116 if (!strcmp(funcName, "vkResetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700117 return (PFN_vkVoidFunction)vkResetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700118 if (!strcmp(funcName, "vkCreateQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700119 return (PFN_vkVoidFunction)vkCreateQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700120 if (!strcmp(funcName, "vkDestroyQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700121 return (PFN_vkVoidFunction)vkDestroyQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700122 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700123 return (PFN_vkVoidFunction)vkGetQueryPoolResults;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700124 if (!strcmp(funcName, "vkCreateBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700125 return (PFN_vkVoidFunction)vkCreateBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700126 if (!strcmp(funcName, "vkDestroyBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700127 return (PFN_vkVoidFunction)vkDestroyBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700128 if (!strcmp(funcName, "vkCreateBufferView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700129 return (PFN_vkVoidFunction)vkCreateBufferView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700130 if (!strcmp(funcName, "vkDestroyBufferView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700131 return (PFN_vkVoidFunction)vkDestroyBufferView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700132 if (!strcmp(funcName, "vkCreateImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700133 return (PFN_vkVoidFunction)vkCreateImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700134 if (!strcmp(funcName, "vkDestroyImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700135 return (PFN_vkVoidFunction)vkDestroyImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700136 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700137 return (PFN_vkVoidFunction)vkGetImageSubresourceLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700138 if (!strcmp(funcName, "vkCreateImageView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700139 return (PFN_vkVoidFunction)vkCreateImageView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700140 if (!strcmp(funcName, "vkDestroyImageView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700141 return (PFN_vkVoidFunction)vkDestroyImageView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700142 if (!strcmp(funcName, "vkCreateShaderModule"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700143 return (PFN_vkVoidFunction)vkCreateShaderModule;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700144 if (!strcmp(funcName, "vkDestroyShaderModule"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700145 return (PFN_vkVoidFunction)vkDestroyShaderModule;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700146 if (!strcmp(funcName, "vkCreatePipelineCache"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700147 return (PFN_vkVoidFunction)vkCreatePipelineCache;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700148 if (!strcmp(funcName, "vkDestroyPipelineCache"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700149 return (PFN_vkVoidFunction)vkDestroyPipelineCache;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700150 if (!strcmp(funcName, "vkGetPipelineCacheData"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700151 return (PFN_vkVoidFunction)vkGetPipelineCacheData;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700152 if (!strcmp(funcName, "vkMergePipelineCaches"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700153 return (PFN_vkVoidFunction)vkMergePipelineCaches;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700154 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700155 return (PFN_vkVoidFunction)vkCreateGraphicsPipelines;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700156 if (!strcmp(funcName, "vkCreateComputePipelines"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700157 return (PFN_vkVoidFunction)vkCreateComputePipelines;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700158 if (!strcmp(funcName, "vkDestroyPipeline"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700159 return (PFN_vkVoidFunction)vkDestroyPipeline;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700160 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700161 return (PFN_vkVoidFunction)vkCreatePipelineLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700162 if (!strcmp(funcName, "vkDestroyPipelineLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700163 return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700164 if (!strcmp(funcName, "vkCreateSampler"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700165 return (PFN_vkVoidFunction)vkCreateSampler;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700166 if (!strcmp(funcName, "vkDestroySampler"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700167 return (PFN_vkVoidFunction)vkDestroySampler;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700168 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700169 return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700170 if (!strcmp(funcName, "vkDestroyDescriptorSetLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700171 return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700172 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700173 return (PFN_vkVoidFunction)vkCreateDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700174 if (!strcmp(funcName, "vkDestroyDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700175 return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700176 if (!strcmp(funcName, "vkResetDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700177 return (PFN_vkVoidFunction)vkResetDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700178 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700179 return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700180 if (!strcmp(funcName, "vkFreeDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700181 return (PFN_vkVoidFunction)vkFreeDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700182 if (!strcmp(funcName, "vkUpdateDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700183 return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700184 if (!strcmp(funcName, "vkCreateFramebuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700185 return (PFN_vkVoidFunction)vkCreateFramebuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700186 if (!strcmp(funcName, "vkDestroyFramebuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700187 return (PFN_vkVoidFunction)vkDestroyFramebuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700188 if (!strcmp(funcName, "vkCreateRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700189 return (PFN_vkVoidFunction)vkCreateRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700190 if (!strcmp(funcName, "vkDestroyRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700191 return (PFN_vkVoidFunction)vkDestroyRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700192 if (!strcmp(funcName, "vkGetRenderAreaGranularity"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700193 return (PFN_vkVoidFunction)vkGetRenderAreaGranularity;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700194 if (!strcmp(funcName, "vkCreateCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700195 return (PFN_vkVoidFunction)vkCreateCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700196 if (!strcmp(funcName, "vkDestroyCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700197 return (PFN_vkVoidFunction)vkDestroyCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700198 if (!strcmp(funcName, "vkResetCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700199 return (PFN_vkVoidFunction)vkResetCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700200 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700201 return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700202 if (!strcmp(funcName, "vkFreeCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700203 return (PFN_vkVoidFunction)vkFreeCommandBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700204 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700205 return (PFN_vkVoidFunction)vkBeginCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700206 if (!strcmp(funcName, "vkEndCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700207 return (PFN_vkVoidFunction)vkEndCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700208 if (!strcmp(funcName, "vkResetCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700209 return (PFN_vkVoidFunction)vkResetCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700210 if (!strcmp(funcName, "vkCmdBindPipeline"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700211 return (PFN_vkVoidFunction)vkCmdBindPipeline;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700212 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700213 return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700214 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700215 return (PFN_vkVoidFunction)vkCmdBindVertexBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700216 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700217 return (PFN_vkVoidFunction)vkCmdBindIndexBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700218 if (!strcmp(funcName, "vkCmdSetViewport"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700219 return (PFN_vkVoidFunction)vkCmdSetViewport;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700220 if (!strcmp(funcName, "vkCmdSetScissor"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700221 return (PFN_vkVoidFunction)vkCmdSetScissor;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700222 if (!strcmp(funcName, "vkCmdSetLineWidth"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700223 return (PFN_vkVoidFunction)vkCmdSetLineWidth;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700224 if (!strcmp(funcName, "vkCmdSetDepthBias"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700225 return (PFN_vkVoidFunction)vkCmdSetDepthBias;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700226 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700227 return (PFN_vkVoidFunction)vkCmdSetBlendConstants;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700228 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700229 return (PFN_vkVoidFunction)vkCmdSetDepthBounds;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700230 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700231 return (PFN_vkVoidFunction)vkCmdSetStencilCompareMask;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700232 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700233 return (PFN_vkVoidFunction)vkCmdSetStencilWriteMask;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700234 if (!strcmp(funcName, "vkCmdSetStencilReference"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700235 return (PFN_vkVoidFunction)vkCmdSetStencilReference;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700236 if (!strcmp(funcName, "vkCmdDraw"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700237 return (PFN_vkVoidFunction)vkCmdDraw;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700238 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700239 return (PFN_vkVoidFunction)vkCmdDrawIndexed;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700240 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700241 return (PFN_vkVoidFunction)vkCmdDrawIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700242 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700243 return (PFN_vkVoidFunction)vkCmdDrawIndexedIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700244 if (!strcmp(funcName, "vkCmdDispatch"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700245 return (PFN_vkVoidFunction)vkCmdDispatch;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700246 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700247 return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700248 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700249 return (PFN_vkVoidFunction)vkCmdCopyBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700250 if (!strcmp(funcName, "vkCmdCopyImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700251 return (PFN_vkVoidFunction)vkCmdCopyImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700252 if (!strcmp(funcName, "vkCmdBlitImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700253 return (PFN_vkVoidFunction)vkCmdBlitImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700254 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700255 return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700256 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700257 return (PFN_vkVoidFunction)vkCmdCopyImageToBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700258 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700259 return (PFN_vkVoidFunction)vkCmdUpdateBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700260 if (!strcmp(funcName, "vkCmdFillBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700261 return (PFN_vkVoidFunction)vkCmdFillBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700262 if (!strcmp(funcName, "vkCmdClearColorImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700263 return (PFN_vkVoidFunction)vkCmdClearColorImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700264 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700265 return (PFN_vkVoidFunction)vkCmdClearDepthStencilImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700266 if (!strcmp(funcName, "vkCmdClearAttachments"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700267 return (PFN_vkVoidFunction)vkCmdClearAttachments;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700268 if (!strcmp(funcName, "vkCmdResolveImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700269 return (PFN_vkVoidFunction)vkCmdResolveImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700270 if (!strcmp(funcName, "vkCmdSetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700271 return (PFN_vkVoidFunction)vkCmdSetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700272 if (!strcmp(funcName, "vkCmdResetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700273 return (PFN_vkVoidFunction)vkCmdResetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700274 if (!strcmp(funcName, "vkCmdWaitEvents"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700275 return (PFN_vkVoidFunction)vkCmdWaitEvents;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700276 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700277 return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700278 if (!strcmp(funcName, "vkCmdBeginQuery"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700279 return (PFN_vkVoidFunction)vkCmdBeginQuery;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700280 if (!strcmp(funcName, "vkCmdEndQuery"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700281 return (PFN_vkVoidFunction)vkCmdEndQuery;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700282 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700283 return (PFN_vkVoidFunction)vkCmdResetQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700284 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700285 return (PFN_vkVoidFunction)vkCmdWriteTimestamp;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700286 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700287 return (PFN_vkVoidFunction)vkCmdCopyQueryPoolResults;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700288 if (!strcmp(funcName, "vkCmdPushConstants"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700289 return (PFN_vkVoidFunction)vkCmdPushConstants;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700290 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700291 return (PFN_vkVoidFunction)vkCmdBeginRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700292 if (!strcmp(funcName, "vkCmdNextSubpass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700293 return (PFN_vkVoidFunction)vkCmdNextSubpass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700294 if (!strcmp(funcName, "vkCmdEndRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700295 return (PFN_vkVoidFunction)vkCmdEndRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700296 if (!strcmp(funcName, "vkCmdExecuteCommands"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700297 return (PFN_vkVoidFunction)vkCmdExecuteCommands;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700298
299 // Instance extensions
300 void *addr;
301 if (debug_report_instance_gpa(inst, funcName, &addr))
302 return addr;
303
304 if (wsi_swapchain_instance_gpa(inst, funcName, &addr))
305 return addr;
306
Jon Ashburnfc1031e2015-11-17 15:31:02 -0700307 addr = loader_dev_ext_gpa(inst, funcName);
308 return addr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700309}
310
Jon Ashburn23d36b12016-02-02 17:47:28 -0700311static inline void *globalGetProcAddr(const char *name) {
Jon Ashburnd55a3942015-05-06 09:02:10 -0600312 if (!name || name[0] != 'v' || name[1] != 'k')
313 return NULL;
314
315 name += 2;
316 if (!strcmp(name, "CreateInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700317 return (void *)vkCreateInstance;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600318 if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700319 return (void *)vkEnumerateInstanceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600320 if (!strcmp(name, "EnumerateInstanceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700321 return (void *)vkEnumerateInstanceLayerProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700322
Jon Ashburnd55a3942015-05-06 09:02:10 -0600323 return NULL;
324}
325
326/* These functions require special handling by the loader.
327* They are not just generic trampoline code entrypoints.
328* Thus GPA must return loader entrypoint for these instead of first function
329* in the chain. */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700330static inline void *loader_non_passthrough_gipa(const char *name) {
Jon Ashburnd55a3942015-05-06 09:02:10 -0600331 if (!name || name[0] != 'v' || name[1] != 'k')
332 return NULL;
333
334 name += 2;
335 if (!strcmp(name, "CreateInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700336 return (void *)vkCreateInstance;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600337 if (!strcmp(name, "DestroyInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700338 return (void *)vkDestroyInstance;
Jon Ashburn45d42ca2015-10-08 15:59:17 -0600339 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700340 return (void *)vkGetDeviceProcAddr;
341 // remove once no longer locks
Jon Ashburnd55a3942015-05-06 09:02:10 -0600342 if (!strcmp(name, "EnumeratePhysicalDevices"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700343 return (void *)vkEnumeratePhysicalDevices;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600344 if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700345 return (void *)vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600346 if (!strcmp(name, "EnumerateDeviceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700347 return (void *)vkEnumerateDeviceLayerProperties;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600348 if (!strcmp(name, "GetInstanceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700349 return (void *)vkGetInstanceProcAddr;
Jon Ashburnc15d0df2015-10-05 14:09:37 -0600350 if (!strcmp(name, "CreateDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700351 return (void *)vkCreateDevice;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600352
353 return NULL;
354}
355
Jon Ashburn23d36b12016-02-02 17:47:28 -0700356static inline void *loader_non_passthrough_gdpa(const char *name) {
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600357 if (!name || name[0] != 'v' || name[1] != 'k')
358 return NULL;
359
360 name += 2;
361
362 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700363 return (void *)vkGetDeviceProcAddr;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600364 if (!strcmp(name, "DestroyDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700365 return (void *)vkDestroyDevice;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600366 if (!strcmp(name, "GetDeviceQueue"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700367 return (void *)vkGetDeviceQueue;
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800368 if (!strcmp(name, "AllocateCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700369 return (void *)vkAllocateCommandBuffers;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600370
371 return NULL;
372}