12139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn/*
22139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn *
344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015 The Khronos Group Inc.
444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015 Valve Corporation
544aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015 LunarG, Inc.
62139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn *
744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Permission is hereby granted, free of charge, to any person obtaining a copy
844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * of this software and/or associated documentation files (the "Materials"), to
944aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * deal in the Materials without restriction, including without limitation the
1044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1144aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * sell copies of the Materials, and to permit persons to whom the Materials are
1244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * furnished to do so, subject to the following conditions:
132139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn *
1444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * The above copyright notice(s) and this permission notice shall be included in
1544aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * all copies or substantial portions of the Materials.
162139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn *
1744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
182139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1944aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
2044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn *
2144aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
2444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * USE OR OTHER DEALINGS IN THE MATERIALS.
2596cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter *
2696cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter * Author: Jon Ashburn <jon@lunarg.com>
272139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn */
282139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
292139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn#include <string.h>
30994560074f43babedf590909b2af41aca59167baJon Ashburn#include "debug_report.h"
31a81e8ac0c34d96ed4e81c95f108e80c3e97bd9f9Ian Elliott#include "wsi.h"
322139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
3344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburnstatic inline void *trampolineGetProcAddr(struct loader_instance *inst,
3444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn                                          const char *funcName) {
3544aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn    // Don't include or check global functions
36994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetInstanceProcAddr"))
3744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetInstanceProcAddr;
38994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyInstance"))
3944aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyInstance;
40994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
4144aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices;
42994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
4344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceFeatures;
44994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
4544aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceFormatProperties;
46994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
4744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceImageFormatProperties;
48994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
4944aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (
5044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn            PFN_vkVoidFunction)vkGetPhysicalDeviceSparseImageFormatProperties;
51994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
5244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties;
53994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
5444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceQueueFamilyProperties;
55994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties"))
5644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPhysicalDeviceMemoryProperties;
57994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
5844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkEnumerateDeviceLayerProperties;
59994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkEnumerateDeviceExtensionProperties;
61994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateDevice"))
6244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateDevice;
63994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetDeviceProcAddr"))
6444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
65994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyDevice"))
6644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyDevice;
67994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetDeviceQueue"))
6844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetDeviceQueue;
69994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkQueueSubmit"))
7044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkQueueSubmit;
71994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkQueueWaitIdle"))
7244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkQueueWaitIdle;
73994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDeviceWaitIdle"))
7444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDeviceWaitIdle;
75994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkAllocateMemory"))
7644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkAllocateMemory;
77994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkFreeMemory"))
7844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkFreeMemory;
79994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkMapMemory"))
8044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkMapMemory;
81994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkUnmapMemory"))
8244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkUnmapMemory;
83994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
8444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
85994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
8644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkInvalidateMappedMemoryRanges;
87994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetDeviceMemoryCommitment"))
8844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetDeviceMemoryCommitment;
89994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements"))
9044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetImageSparseMemoryRequirements;
91994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetImageMemoryRequirements"))
9244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
93994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetBufferMemoryRequirements"))
9444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
95994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkBindImageMemory"))
9644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkBindImageMemory;
97994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkBindBufferMemory"))
9844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkBindBufferMemory;
99994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkQueueBindSparse"))
10044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkQueueBindSparse;
101994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateFence"))
10244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateFence;
103994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyFence"))
10444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyFence;
105994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetFenceStatus"))
10644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetFenceStatus;
107994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkResetFences"))
10844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkResetFences;
109994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkWaitForFences"))
11044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkWaitForFences;
111994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateSemaphore"))
11244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateSemaphore;
113994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroySemaphore"))
11444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroySemaphore;
115994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateEvent"))
11644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateEvent;
117994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyEvent"))
11844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyEvent;
119994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetEventStatus"))
12044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetEventStatus;
121994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkSetEvent"))
12244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkSetEvent;
123994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkResetEvent"))
12444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkResetEvent;
125994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateQueryPool"))
12644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateQueryPool;
127994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyQueryPool"))
12844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyQueryPool;
129994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetQueryPoolResults"))
13044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetQueryPoolResults;
131994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateBuffer"))
13244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateBuffer;
133994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyBuffer"))
13444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyBuffer;
135994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateBufferView"))
13644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateBufferView;
137994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyBufferView"))
13844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyBufferView;
139994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateImage"))
14044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateImage;
141994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyImage"))
14244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyImage;
143994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
14444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetImageSubresourceLayout;
145994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateImageView"))
14644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateImageView;
147994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyImageView"))
14844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyImageView;
149994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateShaderModule"))
15044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateShaderModule;
151994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyShaderModule"))
15244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyShaderModule;
153994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreatePipelineCache"))
15444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreatePipelineCache;
155994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyPipelineCache"))
15644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyPipelineCache;
157994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetPipelineCacheData"))
15844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetPipelineCacheData;
159994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkMergePipelineCaches"))
16044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkMergePipelineCaches;
161994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
16244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateGraphicsPipelines;
163994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateComputePipelines"))
16444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateComputePipelines;
165994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyPipeline"))
16644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyPipeline;
167994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreatePipelineLayout"))
16844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreatePipelineLayout;
169994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyPipelineLayout"))
17044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
171994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateSampler"))
17244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateSampler;
173994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroySampler"))
17444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroySampler;
175994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
17644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
177994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyDescriptorSetLayout"))
17844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
179994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateDescriptorPool"))
18044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateDescriptorPool;
181994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyDescriptorPool"))
18244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
183994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkResetDescriptorPool"))
18444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkResetDescriptorPool;
185994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkAllocateDescriptorSets"))
18644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
187994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkFreeDescriptorSets"))
18844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkFreeDescriptorSets;
189994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkUpdateDescriptorSets"))
19044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
191994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateFramebuffer"))
19244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateFramebuffer;
193994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyFramebuffer"))
19444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyFramebuffer;
195994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateRenderPass"))
19644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateRenderPass;
197994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyRenderPass"))
19844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyRenderPass;
199994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkGetRenderAreaGranularity"))
20044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkGetRenderAreaGranularity;
201994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCreateCommandPool"))
20244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCreateCommandPool;
203994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkDestroyCommandPool"))
20444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkDestroyCommandPool;
205994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkResetCommandPool"))
20644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkResetCommandPool;
207994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkAllocateCommandBuffers"))
20844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
209994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkFreeCommandBuffers"))
21044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkFreeCommandBuffers;
211994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkBeginCommandBuffer"))
21244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkBeginCommandBuffer;
213994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkEndCommandBuffer"))
21444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkEndCommandBuffer;
215994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkResetCommandBuffer"))
21644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkResetCommandBuffer;
217994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBindPipeline"))
21844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBindPipeline;
219994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
22044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
221994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
22244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBindVertexBuffers;
223994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
22444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBindIndexBuffer;
225994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetViewport"))
22644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetViewport;
227994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetScissor"))
22844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetScissor;
229994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetLineWidth"))
23044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetLineWidth;
231994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetDepthBias"))
23244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetDepthBias;
233994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetBlendConstants"))
23444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetBlendConstants;
235994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetDepthBounds"))
23644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetDepthBounds;
237994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
23844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetStencilCompareMask;
239994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
24044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetStencilWriteMask;
241994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetStencilReference"))
24244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetStencilReference;
243994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDraw"))
24444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDraw;
245994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDrawIndexed"))
24644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDrawIndexed;
247994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDrawIndirect"))
24844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDrawIndirect;
249994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
25044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDrawIndexedIndirect;
251994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDispatch"))
25244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDispatch;
253994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdDispatchIndirect"))
25444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
255994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdCopyBuffer"))
25644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdCopyBuffer;
257994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdCopyImage"))
25844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdCopyImage;
259994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBlitImage"))
26044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBlitImage;
261994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
26244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
263994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
26444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdCopyImageToBuffer;
265994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdUpdateBuffer"))
26644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdUpdateBuffer;
267994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdFillBuffer"))
26844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdFillBuffer;
269994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdClearColorImage"))
27044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdClearColorImage;
271994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
27244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdClearDepthStencilImage;
273994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdClearAttachments"))
27444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdClearAttachments;
275994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdResolveImage"))
27644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdResolveImage;
277994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdSetEvent"))
27844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdSetEvent;
279994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdResetEvent"))
28044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdResetEvent;
281994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdWaitEvents"))
28244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdWaitEvents;
283994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdPipelineBarrier"))
28444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
285994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBeginQuery"))
28644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBeginQuery;
287994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdEndQuery"))
28844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdEndQuery;
289994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdResetQueryPool"))
29044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdResetQueryPool;
291994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdWriteTimestamp"))
29244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdWriteTimestamp;
293994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
29444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdCopyQueryPoolResults;
295994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdPushConstants"))
29644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdPushConstants;
297994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdBeginRenderPass"))
29844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdBeginRenderPass;
299994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdNextSubpass"))
30044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdNextSubpass;
301994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdEndRenderPass"))
30244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdEndRenderPass;
303994560074f43babedf590909b2af41aca59167baJon Ashburn    if (!strcmp(funcName, "vkCmdExecuteCommands"))
30444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (PFN_vkVoidFunction)vkCmdExecuteCommands;
305994560074f43babedf590909b2af41aca59167baJon Ashburn
306994560074f43babedf590909b2af41aca59167baJon Ashburn    // Instance extensions
307994560074f43babedf590909b2af41aca59167baJon Ashburn    void *addr;
308994560074f43babedf590909b2af41aca59167baJon Ashburn    if (debug_report_instance_gpa(inst, funcName, &addr))
309994560074f43babedf590909b2af41aca59167baJon Ashburn        return addr;
310994560074f43babedf590909b2af41aca59167baJon Ashburn
311994560074f43babedf590909b2af41aca59167baJon Ashburn    if (wsi_swapchain_instance_gpa(inst, funcName, &addr))
312994560074f43babedf590909b2af41aca59167baJon Ashburn        return addr;
313994560074f43babedf590909b2af41aca59167baJon Ashburn
314429e19f6db395429cd2fe1a82f7a5df05e534dd1Jon Ashburn    addr = loader_dev_ext_gpa(inst, funcName);
315429e19f6db395429cd2fe1a82f7a5df05e534dd1Jon Ashburn    return addr;
316994560074f43babedf590909b2af41aca59167baJon Ashburn}
317994560074f43babedf590909b2af41aca59167baJon Ashburn
31844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburnstatic inline void *globalGetProcAddr(const char *name) {
3192139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!name || name[0] != 'v' || name[1] != 'k')
3202139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn        return NULL;
3212139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
3222139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    name += 2;
3232139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!strcmp(name, "CreateInstance"))
32444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkCreateInstance;
32574c4ce9c4fa101c0989a29cf918e799fa67adcecCourtney Goeltzenleuchter    if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
32644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkEnumerateInstanceExtensionProperties;
32774c4ce9c4fa101c0989a29cf918e799fa67adcecCourtney Goeltzenleuchter    if (!strcmp(name, "EnumerateInstanceLayerProperties"))
32844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkEnumerateInstanceLayerProperties;
329994560074f43babedf590909b2af41aca59167baJon Ashburn
3302139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    return NULL;
3312139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn}
3322139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
3332139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn/* These functions require special handling by the loader.
3342139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn*  They are not just generic trampoline code entrypoints.
3352139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn*  Thus GPA must return loader entrypoint for these instead of first function
3362139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn*  in the chain. */
33744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburnstatic inline void *loader_non_passthrough_gipa(const char *name) {
3382139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!name || name[0] != 'v' || name[1] != 'k')
3392139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn        return NULL;
3402139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
3412139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    name += 2;
3422139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!strcmp(name, "CreateInstance"))
34344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkCreateInstance;
3442139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!strcmp(name, "DestroyInstance"))
34544aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkDestroyInstance;
346230556b692221db984be0294e849dd30d1ce301cJon Ashburn    if (!strcmp(name, "GetDeviceProcAddr"))
34744aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkGetDeviceProcAddr;
34844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn    // remove once no longer locks
3492139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!strcmp(name, "EnumeratePhysicalDevices"))
35044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkEnumeratePhysicalDevices;
3518aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
35244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkEnumerateDeviceExtensionProperties;
3538aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    if (!strcmp(name, "EnumerateDeviceLayerProperties"))
35444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkEnumerateDeviceLayerProperties;
35553c167777cbf86f9f05aca0404162de3b7aa543bJon Ashburn    if (!strcmp(name, "GetInstanceProcAddr"))
35644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkGetInstanceProcAddr;
357a1eef1a0fa4e7af0053fb4ab7d07f45c152b5c76Jon Ashburn    if (!strcmp(name, "CreateDevice"))
35844aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkCreateDevice;
3598aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn
3608aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    return NULL;
3618aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn}
3628aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn
36344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburnstatic inline void *loader_non_passthrough_gdpa(const char *name) {
3648aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    if (!name || name[0] != 'v' || name[1] != 'k')
3658aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn        return NULL;
3668aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn
3678aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    name += 2;
3688aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn
3691245cec54fd74fea87bc95913788726054a91518Jon Ashburn    if (!strcmp(name, "GetDeviceProcAddr"))
37044aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkGetDeviceProcAddr;
3718aa75cbc41b2b5e9e5dd4742a49f279f55d1c028Jon Ashburn    if (!strcmp(name, "DestroyDevice"))
37244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkDestroyDevice;
3732139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    if (!strcmp(name, "GetDeviceQueue"))
37444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkGetDeviceQueue;
3751f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu    if (!strcmp(name, "AllocateCommandBuffers"))
37644aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn        return (void *)vkAllocateCommandBuffers;
3772139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn
3782139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn    return NULL;
3792139a3e9bb6cf96db0431b456798c205e067bb3cJon Ashburn}
380