blob: 5089b5922a13221f86ef3630ad778e731417ad67 [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"
Mark Lobodzinski317574e2016-08-29 14:21:14 -060025#include "extensions.h"
Jon Ashburnd55a3942015-05-06 09:02:10 -060026
Jon Ashburn23d36b12016-02-02 17:47:28 -070027static inline void *trampolineGetProcAddr(struct loader_instance *inst,
28 const char *funcName) {
29 // Don't include or check global functions
Jon Ashburn8a39efc2015-11-06 11:02:40 -070030 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070031 return (PFN_vkVoidFunction)vkGetInstanceProcAddr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070032 if (!strcmp(funcName, "vkDestroyInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070033 return (PFN_vkVoidFunction)vkDestroyInstance;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070034 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070035 return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070036 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070037 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFeatures;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070038 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070039 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070040 if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070041 return (PFN_vkVoidFunction)vkGetPhysicalDeviceImageFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070042 if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070043 return (
44 PFN_vkVoidFunction)vkGetPhysicalDeviceSparseImageFormatProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070045 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070046 return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070047 if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070048 return (PFN_vkVoidFunction)vkGetPhysicalDeviceQueueFamilyProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070049 if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070050 return (PFN_vkVoidFunction)vkGetPhysicalDeviceMemoryProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070051 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070052 return (PFN_vkVoidFunction)vkEnumerateDeviceLayerProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070053 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070054 return (PFN_vkVoidFunction)vkEnumerateDeviceExtensionProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070055 if (!strcmp(funcName, "vkCreateDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070056 return (PFN_vkVoidFunction)vkCreateDevice;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070057 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070058 return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070059 if (!strcmp(funcName, "vkDestroyDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070060 return (PFN_vkVoidFunction)vkDestroyDevice;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070061 if (!strcmp(funcName, "vkGetDeviceQueue"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070062 return (PFN_vkVoidFunction)vkGetDeviceQueue;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070063 if (!strcmp(funcName, "vkQueueSubmit"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070064 return (PFN_vkVoidFunction)vkQueueSubmit;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070065 if (!strcmp(funcName, "vkQueueWaitIdle"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070066 return (PFN_vkVoidFunction)vkQueueWaitIdle;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070067 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070068 return (PFN_vkVoidFunction)vkDeviceWaitIdle;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070069 if (!strcmp(funcName, "vkAllocateMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070070 return (PFN_vkVoidFunction)vkAllocateMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070071 if (!strcmp(funcName, "vkFreeMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070072 return (PFN_vkVoidFunction)vkFreeMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070073 if (!strcmp(funcName, "vkMapMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070074 return (PFN_vkVoidFunction)vkMapMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070075 if (!strcmp(funcName, "vkUnmapMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070076 return (PFN_vkVoidFunction)vkUnmapMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070077 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070078 return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070079 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070080 return (PFN_vkVoidFunction)vkInvalidateMappedMemoryRanges;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070081 if (!strcmp(funcName, "vkGetDeviceMemoryCommitment"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070082 return (PFN_vkVoidFunction)vkGetDeviceMemoryCommitment;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070083 if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070084 return (PFN_vkVoidFunction)vkGetImageSparseMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070085 if (!strcmp(funcName, "vkGetImageMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070086 return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070087 if (!strcmp(funcName, "vkGetBufferMemoryRequirements"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070088 return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070089 if (!strcmp(funcName, "vkBindImageMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070090 return (PFN_vkVoidFunction)vkBindImageMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070091 if (!strcmp(funcName, "vkBindBufferMemory"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070092 return (PFN_vkVoidFunction)vkBindBufferMemory;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070093 if (!strcmp(funcName, "vkQueueBindSparse"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070094 return (PFN_vkVoidFunction)vkQueueBindSparse;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070095 if (!strcmp(funcName, "vkCreateFence"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070096 return (PFN_vkVoidFunction)vkCreateFence;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070097 if (!strcmp(funcName, "vkDestroyFence"))
Jon Ashburn23d36b12016-02-02 17:47:28 -070098 return (PFN_vkVoidFunction)vkDestroyFence;
Jon Ashburn8a39efc2015-11-06 11:02:40 -070099 if (!strcmp(funcName, "vkGetFenceStatus"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700100 return (PFN_vkVoidFunction)vkGetFenceStatus;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700101 if (!strcmp(funcName, "vkResetFences"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700102 return (PFN_vkVoidFunction)vkResetFences;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700103 if (!strcmp(funcName, "vkWaitForFences"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700104 return (PFN_vkVoidFunction)vkWaitForFences;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700105 if (!strcmp(funcName, "vkCreateSemaphore"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700106 return (PFN_vkVoidFunction)vkCreateSemaphore;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700107 if (!strcmp(funcName, "vkDestroySemaphore"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700108 return (PFN_vkVoidFunction)vkDestroySemaphore;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700109 if (!strcmp(funcName, "vkCreateEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700110 return (PFN_vkVoidFunction)vkCreateEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700111 if (!strcmp(funcName, "vkDestroyEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700112 return (PFN_vkVoidFunction)vkDestroyEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700113 if (!strcmp(funcName, "vkGetEventStatus"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700114 return (PFN_vkVoidFunction)vkGetEventStatus;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700115 if (!strcmp(funcName, "vkSetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700116 return (PFN_vkVoidFunction)vkSetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700117 if (!strcmp(funcName, "vkResetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700118 return (PFN_vkVoidFunction)vkResetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700119 if (!strcmp(funcName, "vkCreateQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700120 return (PFN_vkVoidFunction)vkCreateQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700121 if (!strcmp(funcName, "vkDestroyQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700122 return (PFN_vkVoidFunction)vkDestroyQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700123 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700124 return (PFN_vkVoidFunction)vkGetQueryPoolResults;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700125 if (!strcmp(funcName, "vkCreateBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700126 return (PFN_vkVoidFunction)vkCreateBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700127 if (!strcmp(funcName, "vkDestroyBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700128 return (PFN_vkVoidFunction)vkDestroyBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700129 if (!strcmp(funcName, "vkCreateBufferView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700130 return (PFN_vkVoidFunction)vkCreateBufferView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700131 if (!strcmp(funcName, "vkDestroyBufferView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700132 return (PFN_vkVoidFunction)vkDestroyBufferView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700133 if (!strcmp(funcName, "vkCreateImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700134 return (PFN_vkVoidFunction)vkCreateImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700135 if (!strcmp(funcName, "vkDestroyImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700136 return (PFN_vkVoidFunction)vkDestroyImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700137 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700138 return (PFN_vkVoidFunction)vkGetImageSubresourceLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700139 if (!strcmp(funcName, "vkCreateImageView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700140 return (PFN_vkVoidFunction)vkCreateImageView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700141 if (!strcmp(funcName, "vkDestroyImageView"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700142 return (PFN_vkVoidFunction)vkDestroyImageView;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700143 if (!strcmp(funcName, "vkCreateShaderModule"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700144 return (PFN_vkVoidFunction)vkCreateShaderModule;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700145 if (!strcmp(funcName, "vkDestroyShaderModule"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700146 return (PFN_vkVoidFunction)vkDestroyShaderModule;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700147 if (!strcmp(funcName, "vkCreatePipelineCache"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700148 return (PFN_vkVoidFunction)vkCreatePipelineCache;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700149 if (!strcmp(funcName, "vkDestroyPipelineCache"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700150 return (PFN_vkVoidFunction)vkDestroyPipelineCache;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700151 if (!strcmp(funcName, "vkGetPipelineCacheData"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700152 return (PFN_vkVoidFunction)vkGetPipelineCacheData;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700153 if (!strcmp(funcName, "vkMergePipelineCaches"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700154 return (PFN_vkVoidFunction)vkMergePipelineCaches;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700155 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700156 return (PFN_vkVoidFunction)vkCreateGraphicsPipelines;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700157 if (!strcmp(funcName, "vkCreateComputePipelines"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700158 return (PFN_vkVoidFunction)vkCreateComputePipelines;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700159 if (!strcmp(funcName, "vkDestroyPipeline"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700160 return (PFN_vkVoidFunction)vkDestroyPipeline;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700161 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700162 return (PFN_vkVoidFunction)vkCreatePipelineLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700163 if (!strcmp(funcName, "vkDestroyPipelineLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700164 return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700165 if (!strcmp(funcName, "vkCreateSampler"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700166 return (PFN_vkVoidFunction)vkCreateSampler;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700167 if (!strcmp(funcName, "vkDestroySampler"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700168 return (PFN_vkVoidFunction)vkDestroySampler;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700169 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700170 return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700171 if (!strcmp(funcName, "vkDestroyDescriptorSetLayout"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700172 return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700173 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700174 return (PFN_vkVoidFunction)vkCreateDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700175 if (!strcmp(funcName, "vkDestroyDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700176 return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700177 if (!strcmp(funcName, "vkResetDescriptorPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700178 return (PFN_vkVoidFunction)vkResetDescriptorPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700179 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700180 return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700181 if (!strcmp(funcName, "vkFreeDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700182 return (PFN_vkVoidFunction)vkFreeDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700183 if (!strcmp(funcName, "vkUpdateDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700184 return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700185 if (!strcmp(funcName, "vkCreateFramebuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700186 return (PFN_vkVoidFunction)vkCreateFramebuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700187 if (!strcmp(funcName, "vkDestroyFramebuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700188 return (PFN_vkVoidFunction)vkDestroyFramebuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700189 if (!strcmp(funcName, "vkCreateRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700190 return (PFN_vkVoidFunction)vkCreateRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700191 if (!strcmp(funcName, "vkDestroyRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700192 return (PFN_vkVoidFunction)vkDestroyRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700193 if (!strcmp(funcName, "vkGetRenderAreaGranularity"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700194 return (PFN_vkVoidFunction)vkGetRenderAreaGranularity;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700195 if (!strcmp(funcName, "vkCreateCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700196 return (PFN_vkVoidFunction)vkCreateCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700197 if (!strcmp(funcName, "vkDestroyCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700198 return (PFN_vkVoidFunction)vkDestroyCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700199 if (!strcmp(funcName, "vkResetCommandPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700200 return (PFN_vkVoidFunction)vkResetCommandPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700201 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700202 return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700203 if (!strcmp(funcName, "vkFreeCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700204 return (PFN_vkVoidFunction)vkFreeCommandBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700205 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700206 return (PFN_vkVoidFunction)vkBeginCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700207 if (!strcmp(funcName, "vkEndCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700208 return (PFN_vkVoidFunction)vkEndCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700209 if (!strcmp(funcName, "vkResetCommandBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700210 return (PFN_vkVoidFunction)vkResetCommandBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700211 if (!strcmp(funcName, "vkCmdBindPipeline"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700212 return (PFN_vkVoidFunction)vkCmdBindPipeline;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700213 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700214 return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700215 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700216 return (PFN_vkVoidFunction)vkCmdBindVertexBuffers;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700217 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700218 return (PFN_vkVoidFunction)vkCmdBindIndexBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700219 if (!strcmp(funcName, "vkCmdSetViewport"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700220 return (PFN_vkVoidFunction)vkCmdSetViewport;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700221 if (!strcmp(funcName, "vkCmdSetScissor"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700222 return (PFN_vkVoidFunction)vkCmdSetScissor;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700223 if (!strcmp(funcName, "vkCmdSetLineWidth"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700224 return (PFN_vkVoidFunction)vkCmdSetLineWidth;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700225 if (!strcmp(funcName, "vkCmdSetDepthBias"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700226 return (PFN_vkVoidFunction)vkCmdSetDepthBias;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700227 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700228 return (PFN_vkVoidFunction)vkCmdSetBlendConstants;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700229 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700230 return (PFN_vkVoidFunction)vkCmdSetDepthBounds;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700231 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700232 return (PFN_vkVoidFunction)vkCmdSetStencilCompareMask;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700233 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700234 return (PFN_vkVoidFunction)vkCmdSetStencilWriteMask;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700235 if (!strcmp(funcName, "vkCmdSetStencilReference"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700236 return (PFN_vkVoidFunction)vkCmdSetStencilReference;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700237 if (!strcmp(funcName, "vkCmdDraw"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700238 return (PFN_vkVoidFunction)vkCmdDraw;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700239 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700240 return (PFN_vkVoidFunction)vkCmdDrawIndexed;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700241 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700242 return (PFN_vkVoidFunction)vkCmdDrawIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700243 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700244 return (PFN_vkVoidFunction)vkCmdDrawIndexedIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700245 if (!strcmp(funcName, "vkCmdDispatch"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700246 return (PFN_vkVoidFunction)vkCmdDispatch;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700247 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700248 return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700249 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700250 return (PFN_vkVoidFunction)vkCmdCopyBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700251 if (!strcmp(funcName, "vkCmdCopyImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700252 return (PFN_vkVoidFunction)vkCmdCopyImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700253 if (!strcmp(funcName, "vkCmdBlitImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700254 return (PFN_vkVoidFunction)vkCmdBlitImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700255 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700256 return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700257 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700258 return (PFN_vkVoidFunction)vkCmdCopyImageToBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700259 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700260 return (PFN_vkVoidFunction)vkCmdUpdateBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700261 if (!strcmp(funcName, "vkCmdFillBuffer"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700262 return (PFN_vkVoidFunction)vkCmdFillBuffer;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700263 if (!strcmp(funcName, "vkCmdClearColorImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700264 return (PFN_vkVoidFunction)vkCmdClearColorImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700265 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700266 return (PFN_vkVoidFunction)vkCmdClearDepthStencilImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700267 if (!strcmp(funcName, "vkCmdClearAttachments"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700268 return (PFN_vkVoidFunction)vkCmdClearAttachments;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700269 if (!strcmp(funcName, "vkCmdResolveImage"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700270 return (PFN_vkVoidFunction)vkCmdResolveImage;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700271 if (!strcmp(funcName, "vkCmdSetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700272 return (PFN_vkVoidFunction)vkCmdSetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700273 if (!strcmp(funcName, "vkCmdResetEvent"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700274 return (PFN_vkVoidFunction)vkCmdResetEvent;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700275 if (!strcmp(funcName, "vkCmdWaitEvents"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700276 return (PFN_vkVoidFunction)vkCmdWaitEvents;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700277 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700278 return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700279 if (!strcmp(funcName, "vkCmdBeginQuery"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700280 return (PFN_vkVoidFunction)vkCmdBeginQuery;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700281 if (!strcmp(funcName, "vkCmdEndQuery"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700282 return (PFN_vkVoidFunction)vkCmdEndQuery;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700283 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700284 return (PFN_vkVoidFunction)vkCmdResetQueryPool;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700285 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700286 return (PFN_vkVoidFunction)vkCmdWriteTimestamp;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700287 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700288 return (PFN_vkVoidFunction)vkCmdCopyQueryPoolResults;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700289 if (!strcmp(funcName, "vkCmdPushConstants"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700290 return (PFN_vkVoidFunction)vkCmdPushConstants;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700291 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700292 return (PFN_vkVoidFunction)vkCmdBeginRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700293 if (!strcmp(funcName, "vkCmdNextSubpass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700294 return (PFN_vkVoidFunction)vkCmdNextSubpass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700295 if (!strcmp(funcName, "vkCmdEndRenderPass"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700296 return (PFN_vkVoidFunction)vkCmdEndRenderPass;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700297 if (!strcmp(funcName, "vkCmdExecuteCommands"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700298 return (PFN_vkVoidFunction)vkCmdExecuteCommands;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700299
300 // Instance extensions
301 void *addr;
302 if (debug_report_instance_gpa(inst, funcName, &addr))
303 return addr;
304
305 if (wsi_swapchain_instance_gpa(inst, funcName, &addr))
306 return addr;
307
Mark Lobodzinski317574e2016-08-29 14:21:14 -0600308 if (extension_instance_gpa(inst, funcName, &addr))
309 return addr;
310
Jon Ashburnfc1031e2015-11-17 15:31:02 -0700311 addr = loader_dev_ext_gpa(inst, funcName);
312 return addr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700313}
314
Jon Ashburn23d36b12016-02-02 17:47:28 -0700315static inline void *globalGetProcAddr(const char *name) {
Jon Ashburnd55a3942015-05-06 09:02:10 -0600316 if (!name || name[0] != 'v' || name[1] != 'k')
317 return NULL;
318
319 name += 2;
320 if (!strcmp(name, "CreateInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700321 return (void *)vkCreateInstance;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600322 if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700323 return (void *)vkEnumerateInstanceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600324 if (!strcmp(name, "EnumerateInstanceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700325 return (void *)vkEnumerateInstanceLayerProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700326
Jon Ashburnd55a3942015-05-06 09:02:10 -0600327 return NULL;
328}
329
330/* These functions require special handling by the loader.
331* They are not just generic trampoline code entrypoints.
332* Thus GPA must return loader entrypoint for these instead of first function
333* in the chain. */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700334static inline void *loader_non_passthrough_gipa(const char *name) {
Jon Ashburnd55a3942015-05-06 09:02:10 -0600335 if (!name || name[0] != 'v' || name[1] != 'k')
336 return NULL;
337
338 name += 2;
339 if (!strcmp(name, "CreateInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700340 return (void *)vkCreateInstance;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600341 if (!strcmp(name, "DestroyInstance"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700342 return (void *)vkDestroyInstance;
Jon Ashburn45d42ca2015-10-08 15:59:17 -0600343 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700344 return (void *)vkGetDeviceProcAddr;
345 // remove once no longer locks
Jon Ashburnd55a3942015-05-06 09:02:10 -0600346 if (!strcmp(name, "EnumeratePhysicalDevices"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700347 return (void *)vkEnumeratePhysicalDevices;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600348 if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700349 return (void *)vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600350 if (!strcmp(name, "EnumerateDeviceLayerProperties"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700351 return (void *)vkEnumerateDeviceLayerProperties;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600352 if (!strcmp(name, "GetInstanceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700353 return (void *)vkGetInstanceProcAddr;
Jon Ashburnc15d0df2015-10-05 14:09:37 -0600354 if (!strcmp(name, "CreateDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700355 return (void *)vkCreateDevice;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600356
357 return NULL;
358}
359
Jon Ashburn23d36b12016-02-02 17:47:28 -0700360static inline void *loader_non_passthrough_gdpa(const char *name) {
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600361 if (!name || name[0] != 'v' || name[1] != 'k')
362 return NULL;
363
364 name += 2;
365
366 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700367 return (void *)vkGetDeviceProcAddr;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600368 if (!strcmp(name, "DestroyDevice"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700369 return (void *)vkDestroyDevice;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600370 if (!strcmp(name, "GetDeviceQueue"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700371 return (void *)vkGetDeviceQueue;
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800372 if (!strcmp(name, "AllocateCommandBuffers"))
Jon Ashburn23d36b12016-02-02 17:47:28 -0700373 return (void *)vkAllocateCommandBuffers;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600374
375 return NULL;
376}