blob: 664d3dbc59e6d83d1a3eeb1ec3a35eed8c26874a [file] [log] [blame]
Jon Ashburn2139a3e2015-05-06 09:02:10 -06001/*
Jon Ashburn2139a3e2015-05-06 09:02:10 -06002 *
Jon Ashburn44aed662016-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 Ashburn2139a3e2015-05-06 09:02:10 -06006 *
Jon Ashburn44aed662016-02-02 17:47:28 -07007 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and/or associated documentation files (the "Materials"), to
9 * deal in the Materials without restriction, including without limitation the
10 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11 * sell copies of the Materials, and to permit persons to whom the Materials are
12 * furnished to do so, subject to the following conditions:
Jon Ashburn2139a3e2015-05-06 09:02:10 -060013 *
Jon Ashburn44aed662016-02-02 17:47:28 -070014 * The above copyright notice(s) and this permission notice shall be included in
15 * all copies or substantial portions of the Materials.
Jon Ashburn2139a3e2015-05-06 09:02:10 -060016 *
Jon Ashburn44aed662016-02-02 17:47:28 -070017 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jon Ashburn2139a3e2015-05-06 09:02:10 -060018 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jon Ashburn44aed662016-02-02 17:47:28 -070019 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Courtney Goeltzenleuchter96cd7952015-10-30 11:14:30 -060020 *
Jon Ashburn44aed662016-02-02 17:47:28 -070021 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
24 * USE OR OTHER DEALINGS IN THE MATERIALS.
25 *
Courtney Goeltzenleuchter96cd7952015-10-30 11:14:30 -060026 * Author: Jon Ashburn <jon@lunarg.com>
Jon Ashburn2139a3e2015-05-06 09:02:10 -060027 */
28
29#include <string.h>
Jon Ashburn99456002015-11-06 11:02:40 -070030#include "debug_report.h"
Ian Elliotta81e8ac2015-10-30 15:28:23 -060031#include "wsi.h"
Jon Ashburn2139a3e2015-05-06 09:02:10 -060032
Jon Ashburn44aed662016-02-02 17:47:28 -070033static inline void *trampolineGetProcAddr(struct loader_instance *inst,
34 const char *funcName) {
35 // Don't include or check global functions
Jon Ashburn99456002015-11-06 11:02:40 -070036 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Jon Ashburn44aed662016-02-02 17:47:28 -070037 return (PFN_vkVoidFunction)vkGetInstanceProcAddr;
Jon Ashburn99456002015-11-06 11:02:40 -070038 if (!strcmp(funcName, "vkDestroyInstance"))
Jon Ashburn44aed662016-02-02 17:47:28 -070039 return (PFN_vkVoidFunction)vkDestroyInstance;
Jon Ashburn99456002015-11-06 11:02:40 -070040 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Jon Ashburn44aed662016-02-02 17:47:28 -070041 return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices;
Jon Ashburn99456002015-11-06 11:02:40 -070042 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Jon Ashburn44aed662016-02-02 17:47:28 -070043 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFeatures;
Jon Ashburn99456002015-11-06 11:02:40 -070044 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070045 return (PFN_vkVoidFunction)vkGetPhysicalDeviceFormatProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070046 if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070047 return (PFN_vkVoidFunction)vkGetPhysicalDeviceImageFormatProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070048 if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070049 return (
50 PFN_vkVoidFunction)vkGetPhysicalDeviceSparseImageFormatProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070051 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070052 return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070053 if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070054 return (PFN_vkVoidFunction)vkGetPhysicalDeviceQueueFamilyProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070055 if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070056 return (PFN_vkVoidFunction)vkGetPhysicalDeviceMemoryProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070057 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070058 return (PFN_vkVoidFunction)vkEnumerateDeviceLayerProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070059 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -070060 return (PFN_vkVoidFunction)vkEnumerateDeviceExtensionProperties;
Jon Ashburn99456002015-11-06 11:02:40 -070061 if (!strcmp(funcName, "vkCreateDevice"))
Jon Ashburn44aed662016-02-02 17:47:28 -070062 return (PFN_vkVoidFunction)vkCreateDevice;
Jon Ashburn99456002015-11-06 11:02:40 -070063 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Jon Ashburn44aed662016-02-02 17:47:28 -070064 return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
Jon Ashburn99456002015-11-06 11:02:40 -070065 if (!strcmp(funcName, "vkDestroyDevice"))
Jon Ashburn44aed662016-02-02 17:47:28 -070066 return (PFN_vkVoidFunction)vkDestroyDevice;
Jon Ashburn99456002015-11-06 11:02:40 -070067 if (!strcmp(funcName, "vkGetDeviceQueue"))
Jon Ashburn44aed662016-02-02 17:47:28 -070068 return (PFN_vkVoidFunction)vkGetDeviceQueue;
Jon Ashburn99456002015-11-06 11:02:40 -070069 if (!strcmp(funcName, "vkQueueSubmit"))
Jon Ashburn44aed662016-02-02 17:47:28 -070070 return (PFN_vkVoidFunction)vkQueueSubmit;
Jon Ashburn99456002015-11-06 11:02:40 -070071 if (!strcmp(funcName, "vkQueueWaitIdle"))
Jon Ashburn44aed662016-02-02 17:47:28 -070072 return (PFN_vkVoidFunction)vkQueueWaitIdle;
Jon Ashburn99456002015-11-06 11:02:40 -070073 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Jon Ashburn44aed662016-02-02 17:47:28 -070074 return (PFN_vkVoidFunction)vkDeviceWaitIdle;
Jon Ashburn99456002015-11-06 11:02:40 -070075 if (!strcmp(funcName, "vkAllocateMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070076 return (PFN_vkVoidFunction)vkAllocateMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070077 if (!strcmp(funcName, "vkFreeMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070078 return (PFN_vkVoidFunction)vkFreeMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070079 if (!strcmp(funcName, "vkMapMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070080 return (PFN_vkVoidFunction)vkMapMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070081 if (!strcmp(funcName, "vkUnmapMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070082 return (PFN_vkVoidFunction)vkUnmapMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070083 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Jon Ashburn44aed662016-02-02 17:47:28 -070084 return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
Jon Ashburn99456002015-11-06 11:02:40 -070085 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Jon Ashburn44aed662016-02-02 17:47:28 -070086 return (PFN_vkVoidFunction)vkInvalidateMappedMemoryRanges;
Jon Ashburn99456002015-11-06 11:02:40 -070087 if (!strcmp(funcName, "vkGetDeviceMemoryCommitment"))
Jon Ashburn44aed662016-02-02 17:47:28 -070088 return (PFN_vkVoidFunction)vkGetDeviceMemoryCommitment;
Jon Ashburn99456002015-11-06 11:02:40 -070089 if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements"))
Jon Ashburn44aed662016-02-02 17:47:28 -070090 return (PFN_vkVoidFunction)vkGetImageSparseMemoryRequirements;
Jon Ashburn99456002015-11-06 11:02:40 -070091 if (!strcmp(funcName, "vkGetImageMemoryRequirements"))
Jon Ashburn44aed662016-02-02 17:47:28 -070092 return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
Jon Ashburn99456002015-11-06 11:02:40 -070093 if (!strcmp(funcName, "vkGetBufferMemoryRequirements"))
Jon Ashburn44aed662016-02-02 17:47:28 -070094 return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
Jon Ashburn99456002015-11-06 11:02:40 -070095 if (!strcmp(funcName, "vkBindImageMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070096 return (PFN_vkVoidFunction)vkBindImageMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070097 if (!strcmp(funcName, "vkBindBufferMemory"))
Jon Ashburn44aed662016-02-02 17:47:28 -070098 return (PFN_vkVoidFunction)vkBindBufferMemory;
Jon Ashburn99456002015-11-06 11:02:40 -070099 if (!strcmp(funcName, "vkQueueBindSparse"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700100 return (PFN_vkVoidFunction)vkQueueBindSparse;
Jon Ashburn99456002015-11-06 11:02:40 -0700101 if (!strcmp(funcName, "vkCreateFence"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700102 return (PFN_vkVoidFunction)vkCreateFence;
Jon Ashburn99456002015-11-06 11:02:40 -0700103 if (!strcmp(funcName, "vkDestroyFence"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700104 return (PFN_vkVoidFunction)vkDestroyFence;
Jon Ashburn99456002015-11-06 11:02:40 -0700105 if (!strcmp(funcName, "vkGetFenceStatus"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700106 return (PFN_vkVoidFunction)vkGetFenceStatus;
Jon Ashburn99456002015-11-06 11:02:40 -0700107 if (!strcmp(funcName, "vkResetFences"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700108 return (PFN_vkVoidFunction)vkResetFences;
Jon Ashburn99456002015-11-06 11:02:40 -0700109 if (!strcmp(funcName, "vkWaitForFences"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700110 return (PFN_vkVoidFunction)vkWaitForFences;
Jon Ashburn99456002015-11-06 11:02:40 -0700111 if (!strcmp(funcName, "vkCreateSemaphore"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700112 return (PFN_vkVoidFunction)vkCreateSemaphore;
Jon Ashburn99456002015-11-06 11:02:40 -0700113 if (!strcmp(funcName, "vkDestroySemaphore"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700114 return (PFN_vkVoidFunction)vkDestroySemaphore;
Jon Ashburn99456002015-11-06 11:02:40 -0700115 if (!strcmp(funcName, "vkCreateEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700116 return (PFN_vkVoidFunction)vkCreateEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700117 if (!strcmp(funcName, "vkDestroyEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700118 return (PFN_vkVoidFunction)vkDestroyEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700119 if (!strcmp(funcName, "vkGetEventStatus"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700120 return (PFN_vkVoidFunction)vkGetEventStatus;
Jon Ashburn99456002015-11-06 11:02:40 -0700121 if (!strcmp(funcName, "vkSetEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700122 return (PFN_vkVoidFunction)vkSetEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700123 if (!strcmp(funcName, "vkResetEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700124 return (PFN_vkVoidFunction)vkResetEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700125 if (!strcmp(funcName, "vkCreateQueryPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700126 return (PFN_vkVoidFunction)vkCreateQueryPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700127 if (!strcmp(funcName, "vkDestroyQueryPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700128 return (PFN_vkVoidFunction)vkDestroyQueryPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700129 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700130 return (PFN_vkVoidFunction)vkGetQueryPoolResults;
Jon Ashburn99456002015-11-06 11:02:40 -0700131 if (!strcmp(funcName, "vkCreateBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700132 return (PFN_vkVoidFunction)vkCreateBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700133 if (!strcmp(funcName, "vkDestroyBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700134 return (PFN_vkVoidFunction)vkDestroyBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700135 if (!strcmp(funcName, "vkCreateBufferView"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700136 return (PFN_vkVoidFunction)vkCreateBufferView;
Jon Ashburn99456002015-11-06 11:02:40 -0700137 if (!strcmp(funcName, "vkDestroyBufferView"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700138 return (PFN_vkVoidFunction)vkDestroyBufferView;
Jon Ashburn99456002015-11-06 11:02:40 -0700139 if (!strcmp(funcName, "vkCreateImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700140 return (PFN_vkVoidFunction)vkCreateImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700141 if (!strcmp(funcName, "vkDestroyImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700142 return (PFN_vkVoidFunction)vkDestroyImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700143 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700144 return (PFN_vkVoidFunction)vkGetImageSubresourceLayout;
Jon Ashburn99456002015-11-06 11:02:40 -0700145 if (!strcmp(funcName, "vkCreateImageView"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700146 return (PFN_vkVoidFunction)vkCreateImageView;
Jon Ashburn99456002015-11-06 11:02:40 -0700147 if (!strcmp(funcName, "vkDestroyImageView"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700148 return (PFN_vkVoidFunction)vkDestroyImageView;
Jon Ashburn99456002015-11-06 11:02:40 -0700149 if (!strcmp(funcName, "vkCreateShaderModule"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700150 return (PFN_vkVoidFunction)vkCreateShaderModule;
Jon Ashburn99456002015-11-06 11:02:40 -0700151 if (!strcmp(funcName, "vkDestroyShaderModule"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700152 return (PFN_vkVoidFunction)vkDestroyShaderModule;
Jon Ashburn99456002015-11-06 11:02:40 -0700153 if (!strcmp(funcName, "vkCreatePipelineCache"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700154 return (PFN_vkVoidFunction)vkCreatePipelineCache;
Jon Ashburn99456002015-11-06 11:02:40 -0700155 if (!strcmp(funcName, "vkDestroyPipelineCache"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700156 return (PFN_vkVoidFunction)vkDestroyPipelineCache;
Jon Ashburn99456002015-11-06 11:02:40 -0700157 if (!strcmp(funcName, "vkGetPipelineCacheData"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700158 return (PFN_vkVoidFunction)vkGetPipelineCacheData;
Jon Ashburn99456002015-11-06 11:02:40 -0700159 if (!strcmp(funcName, "vkMergePipelineCaches"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700160 return (PFN_vkVoidFunction)vkMergePipelineCaches;
Jon Ashburn99456002015-11-06 11:02:40 -0700161 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700162 return (PFN_vkVoidFunction)vkCreateGraphicsPipelines;
Jon Ashburn99456002015-11-06 11:02:40 -0700163 if (!strcmp(funcName, "vkCreateComputePipelines"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700164 return (PFN_vkVoidFunction)vkCreateComputePipelines;
Jon Ashburn99456002015-11-06 11:02:40 -0700165 if (!strcmp(funcName, "vkDestroyPipeline"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700166 return (PFN_vkVoidFunction)vkDestroyPipeline;
Jon Ashburn99456002015-11-06 11:02:40 -0700167 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700168 return (PFN_vkVoidFunction)vkCreatePipelineLayout;
Jon Ashburn99456002015-11-06 11:02:40 -0700169 if (!strcmp(funcName, "vkDestroyPipelineLayout"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700170 return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
Jon Ashburn99456002015-11-06 11:02:40 -0700171 if (!strcmp(funcName, "vkCreateSampler"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700172 return (PFN_vkVoidFunction)vkCreateSampler;
Jon Ashburn99456002015-11-06 11:02:40 -0700173 if (!strcmp(funcName, "vkDestroySampler"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700174 return (PFN_vkVoidFunction)vkDestroySampler;
Jon Ashburn99456002015-11-06 11:02:40 -0700175 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700176 return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
Jon Ashburn99456002015-11-06 11:02:40 -0700177 if (!strcmp(funcName, "vkDestroyDescriptorSetLayout"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700178 return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
Jon Ashburn99456002015-11-06 11:02:40 -0700179 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700180 return (PFN_vkVoidFunction)vkCreateDescriptorPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700181 if (!strcmp(funcName, "vkDestroyDescriptorPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700182 return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700183 if (!strcmp(funcName, "vkResetDescriptorPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700184 return (PFN_vkVoidFunction)vkResetDescriptorPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700185 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700186 return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
Jon Ashburn99456002015-11-06 11:02:40 -0700187 if (!strcmp(funcName, "vkFreeDescriptorSets"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700188 return (PFN_vkVoidFunction)vkFreeDescriptorSets;
Jon Ashburn99456002015-11-06 11:02:40 -0700189 if (!strcmp(funcName, "vkUpdateDescriptorSets"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700190 return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
Jon Ashburn99456002015-11-06 11:02:40 -0700191 if (!strcmp(funcName, "vkCreateFramebuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700192 return (PFN_vkVoidFunction)vkCreateFramebuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700193 if (!strcmp(funcName, "vkDestroyFramebuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700194 return (PFN_vkVoidFunction)vkDestroyFramebuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700195 if (!strcmp(funcName, "vkCreateRenderPass"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700196 return (PFN_vkVoidFunction)vkCreateRenderPass;
Jon Ashburn99456002015-11-06 11:02:40 -0700197 if (!strcmp(funcName, "vkDestroyRenderPass"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700198 return (PFN_vkVoidFunction)vkDestroyRenderPass;
Jon Ashburn99456002015-11-06 11:02:40 -0700199 if (!strcmp(funcName, "vkGetRenderAreaGranularity"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700200 return (PFN_vkVoidFunction)vkGetRenderAreaGranularity;
Jon Ashburn99456002015-11-06 11:02:40 -0700201 if (!strcmp(funcName, "vkCreateCommandPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700202 return (PFN_vkVoidFunction)vkCreateCommandPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700203 if (!strcmp(funcName, "vkDestroyCommandPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700204 return (PFN_vkVoidFunction)vkDestroyCommandPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700205 if (!strcmp(funcName, "vkResetCommandPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700206 return (PFN_vkVoidFunction)vkResetCommandPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700207 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700208 return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
Jon Ashburn99456002015-11-06 11:02:40 -0700209 if (!strcmp(funcName, "vkFreeCommandBuffers"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700210 return (PFN_vkVoidFunction)vkFreeCommandBuffers;
Jon Ashburn99456002015-11-06 11:02:40 -0700211 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700212 return (PFN_vkVoidFunction)vkBeginCommandBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700213 if (!strcmp(funcName, "vkEndCommandBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700214 return (PFN_vkVoidFunction)vkEndCommandBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700215 if (!strcmp(funcName, "vkResetCommandBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700216 return (PFN_vkVoidFunction)vkResetCommandBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700217 if (!strcmp(funcName, "vkCmdBindPipeline"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700218 return (PFN_vkVoidFunction)vkCmdBindPipeline;
Jon Ashburn99456002015-11-06 11:02:40 -0700219 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700220 return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
Jon Ashburn99456002015-11-06 11:02:40 -0700221 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700222 return (PFN_vkVoidFunction)vkCmdBindVertexBuffers;
Jon Ashburn99456002015-11-06 11:02:40 -0700223 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700224 return (PFN_vkVoidFunction)vkCmdBindIndexBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700225 if (!strcmp(funcName, "vkCmdSetViewport"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700226 return (PFN_vkVoidFunction)vkCmdSetViewport;
Jon Ashburn99456002015-11-06 11:02:40 -0700227 if (!strcmp(funcName, "vkCmdSetScissor"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700228 return (PFN_vkVoidFunction)vkCmdSetScissor;
Jon Ashburn99456002015-11-06 11:02:40 -0700229 if (!strcmp(funcName, "vkCmdSetLineWidth"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700230 return (PFN_vkVoidFunction)vkCmdSetLineWidth;
Jon Ashburn99456002015-11-06 11:02:40 -0700231 if (!strcmp(funcName, "vkCmdSetDepthBias"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700232 return (PFN_vkVoidFunction)vkCmdSetDepthBias;
Jon Ashburn99456002015-11-06 11:02:40 -0700233 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700234 return (PFN_vkVoidFunction)vkCmdSetBlendConstants;
Jon Ashburn99456002015-11-06 11:02:40 -0700235 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700236 return (PFN_vkVoidFunction)vkCmdSetDepthBounds;
Jon Ashburn99456002015-11-06 11:02:40 -0700237 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700238 return (PFN_vkVoidFunction)vkCmdSetStencilCompareMask;
Jon Ashburn99456002015-11-06 11:02:40 -0700239 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700240 return (PFN_vkVoidFunction)vkCmdSetStencilWriteMask;
Jon Ashburn99456002015-11-06 11:02:40 -0700241 if (!strcmp(funcName, "vkCmdSetStencilReference"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700242 return (PFN_vkVoidFunction)vkCmdSetStencilReference;
Jon Ashburn99456002015-11-06 11:02:40 -0700243 if (!strcmp(funcName, "vkCmdDraw"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700244 return (PFN_vkVoidFunction)vkCmdDraw;
Jon Ashburn99456002015-11-06 11:02:40 -0700245 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700246 return (PFN_vkVoidFunction)vkCmdDrawIndexed;
Jon Ashburn99456002015-11-06 11:02:40 -0700247 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700248 return (PFN_vkVoidFunction)vkCmdDrawIndirect;
Jon Ashburn99456002015-11-06 11:02:40 -0700249 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700250 return (PFN_vkVoidFunction)vkCmdDrawIndexedIndirect;
Jon Ashburn99456002015-11-06 11:02:40 -0700251 if (!strcmp(funcName, "vkCmdDispatch"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700252 return (PFN_vkVoidFunction)vkCmdDispatch;
Jon Ashburn99456002015-11-06 11:02:40 -0700253 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700254 return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
Jon Ashburn99456002015-11-06 11:02:40 -0700255 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700256 return (PFN_vkVoidFunction)vkCmdCopyBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700257 if (!strcmp(funcName, "vkCmdCopyImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700258 return (PFN_vkVoidFunction)vkCmdCopyImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700259 if (!strcmp(funcName, "vkCmdBlitImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700260 return (PFN_vkVoidFunction)vkCmdBlitImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700261 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700262 return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700263 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700264 return (PFN_vkVoidFunction)vkCmdCopyImageToBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700265 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700266 return (PFN_vkVoidFunction)vkCmdUpdateBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700267 if (!strcmp(funcName, "vkCmdFillBuffer"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700268 return (PFN_vkVoidFunction)vkCmdFillBuffer;
Jon Ashburn99456002015-11-06 11:02:40 -0700269 if (!strcmp(funcName, "vkCmdClearColorImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700270 return (PFN_vkVoidFunction)vkCmdClearColorImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700271 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700272 return (PFN_vkVoidFunction)vkCmdClearDepthStencilImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700273 if (!strcmp(funcName, "vkCmdClearAttachments"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700274 return (PFN_vkVoidFunction)vkCmdClearAttachments;
Jon Ashburn99456002015-11-06 11:02:40 -0700275 if (!strcmp(funcName, "vkCmdResolveImage"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700276 return (PFN_vkVoidFunction)vkCmdResolveImage;
Jon Ashburn99456002015-11-06 11:02:40 -0700277 if (!strcmp(funcName, "vkCmdSetEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700278 return (PFN_vkVoidFunction)vkCmdSetEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700279 if (!strcmp(funcName, "vkCmdResetEvent"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700280 return (PFN_vkVoidFunction)vkCmdResetEvent;
Jon Ashburn99456002015-11-06 11:02:40 -0700281 if (!strcmp(funcName, "vkCmdWaitEvents"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700282 return (PFN_vkVoidFunction)vkCmdWaitEvents;
Jon Ashburn99456002015-11-06 11:02:40 -0700283 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700284 return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
Jon Ashburn99456002015-11-06 11:02:40 -0700285 if (!strcmp(funcName, "vkCmdBeginQuery"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700286 return (PFN_vkVoidFunction)vkCmdBeginQuery;
Jon Ashburn99456002015-11-06 11:02:40 -0700287 if (!strcmp(funcName, "vkCmdEndQuery"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700288 return (PFN_vkVoidFunction)vkCmdEndQuery;
Jon Ashburn99456002015-11-06 11:02:40 -0700289 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700290 return (PFN_vkVoidFunction)vkCmdResetQueryPool;
Jon Ashburn99456002015-11-06 11:02:40 -0700291 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700292 return (PFN_vkVoidFunction)vkCmdWriteTimestamp;
Jon Ashburn99456002015-11-06 11:02:40 -0700293 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700294 return (PFN_vkVoidFunction)vkCmdCopyQueryPoolResults;
Jon Ashburn99456002015-11-06 11:02:40 -0700295 if (!strcmp(funcName, "vkCmdPushConstants"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700296 return (PFN_vkVoidFunction)vkCmdPushConstants;
Jon Ashburn99456002015-11-06 11:02:40 -0700297 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700298 return (PFN_vkVoidFunction)vkCmdBeginRenderPass;
Jon Ashburn99456002015-11-06 11:02:40 -0700299 if (!strcmp(funcName, "vkCmdNextSubpass"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700300 return (PFN_vkVoidFunction)vkCmdNextSubpass;
Jon Ashburn99456002015-11-06 11:02:40 -0700301 if (!strcmp(funcName, "vkCmdEndRenderPass"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700302 return (PFN_vkVoidFunction)vkCmdEndRenderPass;
Jon Ashburn99456002015-11-06 11:02:40 -0700303 if (!strcmp(funcName, "vkCmdExecuteCommands"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700304 return (PFN_vkVoidFunction)vkCmdExecuteCommands;
Jon Ashburn99456002015-11-06 11:02:40 -0700305
306 // Instance extensions
307 void *addr;
308 if (debug_report_instance_gpa(inst, funcName, &addr))
309 return addr;
310
311 if (wsi_swapchain_instance_gpa(inst, funcName, &addr))
312 return addr;
313
Jon Ashburn429e19f2015-11-17 15:31:02 -0700314 addr = loader_dev_ext_gpa(inst, funcName);
315 return addr;
Jon Ashburn99456002015-11-06 11:02:40 -0700316}
317
Jon Ashburn44aed662016-02-02 17:47:28 -0700318static inline void *globalGetProcAddr(const char *name) {
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600319 if (!name || name[0] != 'v' || name[1] != 'k')
320 return NULL;
321
322 name += 2;
323 if (!strcmp(name, "CreateInstance"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700324 return (void *)vkCreateInstance;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600325 if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700326 return (void *)vkEnumerateInstanceExtensionProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600327 if (!strcmp(name, "EnumerateInstanceLayerProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700328 return (void *)vkEnumerateInstanceLayerProperties;
Jon Ashburn99456002015-11-06 11:02:40 -0700329
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600330 return NULL;
331}
332
333/* These functions require special handling by the loader.
334* They are not just generic trampoline code entrypoints.
335* Thus GPA must return loader entrypoint for these instead of first function
336* in the chain. */
Jon Ashburn44aed662016-02-02 17:47:28 -0700337static inline void *loader_non_passthrough_gipa(const char *name) {
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600338 if (!name || name[0] != 'v' || name[1] != 'k')
339 return NULL;
340
341 name += 2;
342 if (!strcmp(name, "CreateInstance"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700343 return (void *)vkCreateInstance;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600344 if (!strcmp(name, "DestroyInstance"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700345 return (void *)vkDestroyInstance;
Jon Ashburn230556b2015-10-08 15:59:17 -0600346 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700347 return (void *)vkGetDeviceProcAddr;
348 // remove once no longer locks
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600349 if (!strcmp(name, "EnumeratePhysicalDevices"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700350 return (void *)vkEnumeratePhysicalDevices;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600351 if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700352 return (void *)vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600353 if (!strcmp(name, "EnumerateDeviceLayerProperties"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700354 return (void *)vkEnumerateDeviceLayerProperties;
Jon Ashburn8aa75cb2015-09-28 16:15:00 -0600355 if (!strcmp(name, "GetInstanceProcAddr"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700356 return (void *)vkGetInstanceProcAddr;
Jon Ashburna1eef1a2015-10-05 14:09:37 -0600357 if (!strcmp(name, "CreateDevice"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700358 return (void *)vkCreateDevice;
Jon Ashburn8aa75cb2015-09-28 16:15:00 -0600359
360 return NULL;
361}
362
Jon Ashburn44aed662016-02-02 17:47:28 -0700363static inline void *loader_non_passthrough_gdpa(const char *name) {
Jon Ashburn8aa75cb2015-09-28 16:15:00 -0600364 if (!name || name[0] != 'v' || name[1] != 'k')
365 return NULL;
366
367 name += 2;
368
369 if (!strcmp(name, "GetDeviceProcAddr"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700370 return (void *)vkGetDeviceProcAddr;
Jon Ashburn8aa75cb2015-09-28 16:15:00 -0600371 if (!strcmp(name, "DestroyDevice"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700372 return (void *)vkDestroyDevice;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600373 if (!strcmp(name, "GetDeviceQueue"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700374 return (void *)vkGetDeviceQueue;
Chia-I Wu1f851912015-10-27 18:04:07 +0800375 if (!strcmp(name, "AllocateCommandBuffers"))
Jon Ashburn44aed662016-02-02 17:47:28 -0700376 return (void *)vkAllocateCommandBuffers;
Jon Ashburn2139a3e2015-05-06 09:02:10 -0600377
378 return NULL;
379}