blob: 53c408ef77d4ccae74b39e006ddcee3888618810 [file] [log] [blame]
Jon Ashburnd55a3942015-05-06 09:02:10 -06001/*
Jon Ashburnd55a3942015-05-06 09:02:10 -06002 *
Courtney Goeltzenleuchterfcbe16f2015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Jon Ashburnd55a3942015-05-06 09:02:10 -06004 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060022 *
23 * Author: Cody Northrop <cody@lunarg.com>
24 * Author: Jon Ashburn <jon@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jon Ashburnd55a3942015-05-06 09:02:10 -060026 */
27
28#include <string.h>
Jon Ashburn8a39efc2015-11-06 11:02:40 -070029#include "debug_report.h"
Ian Elliott954fa342015-10-30 15:28:23 -060030#include "wsi.h"
Jon Ashburnd55a3942015-05-06 09:02:10 -060031
Jon Ashburn8a39efc2015-11-06 11:02:40 -070032static inline void* trampolineGetProcAddr(struct loader_instance *inst,
33 const char *funcName)
34{
35 //Don't include or check global functions
36 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
37 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
38 if (!strcmp(funcName, "vkDestroyInstance"))
39 return (PFN_vkVoidFunction) vkDestroyInstance;
40 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
41 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
42 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
43 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
44 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
45 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
46 if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
47 return (PFN_vkVoidFunction) vkGetPhysicalDeviceImageFormatProperties;
48 if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
49 return(PFN_vkVoidFunction) vkGetPhysicalDeviceSparseImageFormatProperties;
50 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
51 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
52 if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
53 return (PFN_vkVoidFunction) vkGetPhysicalDeviceQueueFamilyProperties;
54 if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties"))
55 return (PFN_vkVoidFunction) vkGetPhysicalDeviceMemoryProperties;
56 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
57 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
58 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
59 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
60 if (!strcmp(funcName, "vkCreateDevice"))
61 return (PFN_vkVoidFunction) vkCreateDevice;
62 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
63 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
64 if (!strcmp(funcName, "vkDestroyDevice"))
65 return (PFN_vkVoidFunction) vkDestroyDevice;
66 if (!strcmp(funcName, "vkGetDeviceQueue"))
67 return (PFN_vkVoidFunction) vkGetDeviceQueue;
68 if (!strcmp(funcName, "vkQueueSubmit"))
69 return (PFN_vkVoidFunction) vkQueueSubmit;
70 if (!strcmp(funcName, "vkQueueWaitIdle"))
71 return (PFN_vkVoidFunction) vkQueueWaitIdle;
72 if (!strcmp(funcName, "vkDeviceWaitIdle"))
73 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
74 if (!strcmp(funcName, "vkAllocateMemory"))
75 return (PFN_vkVoidFunction) vkAllocateMemory;
76 if (!strcmp(funcName, "vkFreeMemory"))
77 return (PFN_vkVoidFunction) vkFreeMemory;
78 if (!strcmp(funcName, "vkMapMemory"))
79 return (PFN_vkVoidFunction) vkMapMemory;
80 if (!strcmp(funcName, "vkUnmapMemory"))
81 return (PFN_vkVoidFunction) vkUnmapMemory;
82 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
83 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
84 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
85 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
86 if (!strcmp(funcName, "vkGetDeviceMemoryCommitment"))
87 return (PFN_vkVoidFunction) vkGetDeviceMemoryCommitment;
88 if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements"))
89 return (PFN_vkVoidFunction) vkGetImageSparseMemoryRequirements;
90 if (!strcmp(funcName, "vkGetImageMemoryRequirements"))
91 return (PFN_vkVoidFunction) vkGetImageMemoryRequirements;
92 if (!strcmp(funcName, "vkGetBufferMemoryRequirements"))
93 return (PFN_vkVoidFunction) vkGetBufferMemoryRequirements;
94 if (!strcmp(funcName, "vkBindImageMemory"))
95 return (PFN_vkVoidFunction) vkBindImageMemory;
96 if (!strcmp(funcName, "vkBindBufferMemory"))
97 return (PFN_vkVoidFunction) vkBindBufferMemory;
98 if (!strcmp(funcName, "vkQueueBindSparse"))
99 return (PFN_vkVoidFunction) vkQueueBindSparse;
100 if (!strcmp(funcName, "vkCreateFence"))
101 return (PFN_vkVoidFunction) vkCreateFence;
102 if (!strcmp(funcName, "vkDestroyFence"))
103 return (PFN_vkVoidFunction) vkDestroyFence;
104 if (!strcmp(funcName, "vkGetFenceStatus"))
105 return (PFN_vkVoidFunction) vkGetFenceStatus;
106 if (!strcmp(funcName, "vkResetFences"))
107 return (PFN_vkVoidFunction) vkResetFences;
108 if (!strcmp(funcName, "vkWaitForFences"))
109 return (PFN_vkVoidFunction) vkWaitForFences;
110 if (!strcmp(funcName, "vkCreateSemaphore"))
111 return (PFN_vkVoidFunction) vkCreateSemaphore;
112 if (!strcmp(funcName, "vkDestroySemaphore"))
113 return (PFN_vkVoidFunction) vkDestroySemaphore;
114 if (!strcmp(funcName, "vkCreateEvent"))
115 return (PFN_vkVoidFunction) vkCreateEvent;
116 if (!strcmp(funcName, "vkDestroyEvent"))
117 return (PFN_vkVoidFunction) vkDestroyEvent;
118 if (!strcmp(funcName, "vkGetEventStatus"))
119 return (PFN_vkVoidFunction) vkGetEventStatus;
120 if (!strcmp(funcName, "vkSetEvent"))
121 return (PFN_vkVoidFunction) vkSetEvent;
122 if (!strcmp(funcName, "vkResetEvent"))
123 return (PFN_vkVoidFunction) vkResetEvent;
124 if (!strcmp(funcName, "vkCreateQueryPool"))
125 return (PFN_vkVoidFunction) vkCreateQueryPool;
126 if (!strcmp(funcName, "vkDestroyQueryPool"))
127 return (PFN_vkVoidFunction) vkDestroyQueryPool;
128 if (!strcmp(funcName, "vkGetQueryPoolResults"))
129 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
130 if (!strcmp(funcName, "vkCreateBuffer"))
131 return (PFN_vkVoidFunction) vkCreateBuffer;
132 if (!strcmp(funcName, "vkDestroyBuffer"))
133 return (PFN_vkVoidFunction) vkDestroyBuffer;
134 if (!strcmp(funcName, "vkCreateBufferView"))
135 return (PFN_vkVoidFunction) vkCreateBufferView;
136 if (!strcmp(funcName, "vkDestroyBufferView"))
137 return (PFN_vkVoidFunction) vkDestroyBufferView;
138 if (!strcmp(funcName, "vkCreateImage"))
139 return (PFN_vkVoidFunction) vkCreateImage;
140 if (!strcmp(funcName, "vkDestroyImage"))
141 return (PFN_vkVoidFunction) vkDestroyImage;
142 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
143 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
144 if (!strcmp(funcName, "vkCreateImageView"))
145 return (PFN_vkVoidFunction) vkCreateImageView;
146 if (!strcmp(funcName, "vkDestroyImageView"))
147 return (PFN_vkVoidFunction) vkDestroyImageView;
148 if (!strcmp(funcName, "vkCreateShaderModule"))
149 return (PFN_vkVoidFunction) vkCreateShaderModule;
150 if (!strcmp(funcName, "vkDestroyShaderModule"))
151 return (PFN_vkVoidFunction) vkDestroyShaderModule;
152 if (!strcmp(funcName, "vkCreatePipelineCache"))
153 return (PFN_vkVoidFunction) vkCreatePipelineCache;
154 if (!strcmp(funcName, "vkDestroyPipelineCache"))
155 return (PFN_vkVoidFunction) vkDestroyPipelineCache;
156 if (!strcmp(funcName, "vkGetPipelineCacheData"))
157 return (PFN_vkVoidFunction) vkGetPipelineCacheData;
158 if (!strcmp(funcName, "vkMergePipelineCaches"))
159 return (PFN_vkVoidFunction) vkMergePipelineCaches;
160 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
161 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
162 if (!strcmp(funcName, "vkCreateComputePipelines"))
163 return (PFN_vkVoidFunction) vkCreateComputePipelines;
164 if (!strcmp(funcName, "vkDestroyPipeline"))
165 return (PFN_vkVoidFunction) vkDestroyPipeline;
166 if (!strcmp(funcName, "vkCreatePipelineLayout"))
167 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
168 if (!strcmp(funcName, "vkDestroyPipelineLayout"))
169 return (PFN_vkVoidFunction) vkDestroyPipelineLayout;
170 if (!strcmp(funcName, "vkCreateSampler"))
171 return (PFN_vkVoidFunction) vkCreateSampler;
172 if (!strcmp(funcName, "vkDestroySampler"))
173 return (PFN_vkVoidFunction) vkDestroySampler;
174 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
175 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
176 if (!strcmp(funcName, "vkDestroyDescriptorSetLayout"))
177 return (PFN_vkVoidFunction) vkDestroyDescriptorSetLayout;
178 if (!strcmp(funcName, "vkCreateDescriptorPool"))
179 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
180 if (!strcmp(funcName, "vkDestroyDescriptorPool"))
181 return (PFN_vkVoidFunction) vkDestroyDescriptorPool;
182 if (!strcmp(funcName, "vkResetDescriptorPool"))
183 return (PFN_vkVoidFunction) vkResetDescriptorPool;
184 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
185 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
186 if (!strcmp(funcName, "vkFreeDescriptorSets"))
187 return (PFN_vkVoidFunction) vkFreeDescriptorSets;
188 if (!strcmp(funcName, "vkUpdateDescriptorSets"))
189 return (PFN_vkVoidFunction) vkUpdateDescriptorSets;
190 if (!strcmp(funcName, "vkCreateFramebuffer"))
191 return (PFN_vkVoidFunction) vkCreateFramebuffer;
192 if (!strcmp(funcName, "vkDestroyFramebuffer"))
193 return (PFN_vkVoidFunction) vkDestroyFramebuffer;
194 if (!strcmp(funcName, "vkCreateRenderPass"))
195 return (PFN_vkVoidFunction) vkCreateRenderPass;
196 if (!strcmp(funcName, "vkDestroyRenderPass"))
197 return (PFN_vkVoidFunction) vkDestroyRenderPass;
198 if (!strcmp(funcName, "vkGetRenderAreaGranularity"))
199 return (PFN_vkVoidFunction) vkGetRenderAreaGranularity;
200 if (!strcmp(funcName, "vkCreateCommandPool"))
201 return (PFN_vkVoidFunction) vkCreateCommandPool;
202 if (!strcmp(funcName, "vkDestroyCommandPool"))
203 return (PFN_vkVoidFunction) vkDestroyCommandPool;
204 if (!strcmp(funcName, "vkResetCommandPool"))
205 return (PFN_vkVoidFunction) vkResetCommandPool;
206 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
207 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
208 if (!strcmp(funcName, "vkFreeCommandBuffers"))
209 return (PFN_vkVoidFunction) vkFreeCommandBuffers;
210 if (!strcmp(funcName, "vkBeginCommandBuffer"))
211 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
212 if (!strcmp(funcName, "vkEndCommandBuffer"))
213 return (PFN_vkVoidFunction) vkEndCommandBuffer;
214 if (!strcmp(funcName, "vkResetCommandBuffer"))
215 return (PFN_vkVoidFunction) vkResetCommandBuffer;
216 if (!strcmp(funcName, "vkCmdBindPipeline"))
217 return (PFN_vkVoidFunction) vkCmdBindPipeline;
218 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
219 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
220 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
221 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
222 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
223 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
224 if (!strcmp(funcName, "vkCmdSetViewport"))
225 return (PFN_vkVoidFunction) vkCmdSetViewport;
226 if (!strcmp(funcName, "vkCmdSetScissor"))
227 return (PFN_vkVoidFunction) vkCmdSetScissor;
228 if (!strcmp(funcName, "vkCmdSetLineWidth"))
229 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
230 if (!strcmp(funcName, "vkCmdSetDepthBias"))
231 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
232 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
233 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
234 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
235 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
236 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
237 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
238 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
239 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
240 if (!strcmp(funcName, "vkCmdSetStencilReference"))
241 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
242 if (!strcmp(funcName, "vkCmdDraw"))
243 return (PFN_vkVoidFunction) vkCmdDraw;
244 if (!strcmp(funcName, "vkCmdDrawIndexed"))
245 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
246 if (!strcmp(funcName, "vkCmdDrawIndirect"))
247 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
248 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
249 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
250 if (!strcmp(funcName, "vkCmdDispatch"))
251 return (PFN_vkVoidFunction) vkCmdDispatch;
252 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
253 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
254 if (!strcmp(funcName, "vkCmdCopyBuffer"))
255 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
256 if (!strcmp(funcName, "vkCmdCopyImage"))
257 return (PFN_vkVoidFunction) vkCmdCopyImage;
258 if (!strcmp(funcName, "vkCmdBlitImage"))
259 return (PFN_vkVoidFunction) vkCmdBlitImage;
260 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
261 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
262 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
263 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
264 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
265 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
266 if (!strcmp(funcName, "vkCmdFillBuffer"))
267 return (PFN_vkVoidFunction) vkCmdFillBuffer;
268 if (!strcmp(funcName, "vkCmdClearColorImage"))
269 return (PFN_vkVoidFunction) vkCmdClearColorImage;
270 if (!strcmp(funcName, "vkCmdClearDepthStencilImage"))
271 return (PFN_vkVoidFunction) vkCmdClearDepthStencilImage;
272 if (!strcmp(funcName, "vkCmdClearAttachments"))
273 return (PFN_vkVoidFunction) vkCmdClearAttachments;
274 if (!strcmp(funcName, "vkCmdResolveImage"))
275 return (PFN_vkVoidFunction) vkCmdResolveImage;
276 if (!strcmp(funcName, "vkCmdSetEvent"))
277 return (PFN_vkVoidFunction) vkCmdSetEvent;
278 if (!strcmp(funcName, "vkCmdResetEvent"))
279 return (PFN_vkVoidFunction) vkCmdResetEvent;
280 if (!strcmp(funcName, "vkCmdWaitEvents"))
281 return (PFN_vkVoidFunction) vkCmdWaitEvents;
282 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
283 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
284 if (!strcmp(funcName, "vkCmdBeginQuery"))
285 return (PFN_vkVoidFunction) vkCmdBeginQuery;
286 if (!strcmp(funcName, "vkCmdEndQuery"))
287 return (PFN_vkVoidFunction) vkCmdEndQuery;
288 if (!strcmp(funcName, "vkCmdResetQueryPool"))
289 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
290 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
291 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
292 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
293 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
294 if (!strcmp(funcName, "vkCmdPushConstants"))
295 return (PFN_vkVoidFunction) vkCmdPushConstants;
296 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
297 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
298 if (!strcmp(funcName, "vkCmdNextSubpass"))
299 return (PFN_vkVoidFunction) vkCmdNextSubpass;
300 if (!strcmp(funcName, "vkCmdEndRenderPass"))
301 return (PFN_vkVoidFunction) vkCmdEndRenderPass;
302 if (!strcmp(funcName, "vkCmdExecuteCommands"))
303 return (PFN_vkVoidFunction) vkCmdExecuteCommands;
304
305 // Instance extensions
306 void *addr;
307 if (debug_report_instance_gpa(inst, funcName, &addr))
308 return addr;
309
310 if (wsi_swapchain_instance_gpa(inst, funcName, &addr))
311 return addr;
312
Jon Ashburnfc1031e2015-11-17 15:31:02 -0700313 addr = loader_dev_ext_gpa(inst, funcName);
314 return addr;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700315}
316
Jon Ashburnd55a3942015-05-06 09:02:10 -0600317static inline void* globalGetProcAddr(const char *name)
318{
319 if (!name || name[0] != 'v' || name[1] != 'k')
320 return NULL;
321
322 name += 2;
323 if (!strcmp(name, "CreateInstance"))
324 return (void*) vkCreateInstance;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600325 if (!strcmp(name, "EnumerateInstanceExtensionProperties"))
326 return (void*) vkEnumerateInstanceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600327 if (!strcmp(name, "EnumerateInstanceLayerProperties"))
328 return (void*) vkEnumerateInstanceLayerProperties;
Jon Ashburn8a39efc2015-11-06 11:02:40 -0700329
Jon Ashburnd55a3942015-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 Ashburn69e9ea22015-09-28 16:15:00 -0600337static inline void *loader_non_passthrough_gipa(const char *name)
Jon Ashburnd55a3942015-05-06 09:02:10 -0600338{
339 if (!name || name[0] != 'v' || name[1] != 'k')
340 return NULL;
341
342 name += 2;
343 if (!strcmp(name, "CreateInstance"))
344 return (void*) vkCreateInstance;
345 if (!strcmp(name, "DestroyInstance"))
346 return (void*) vkDestroyInstance;
Jon Ashburn45d42ca2015-10-08 15:59:17 -0600347 if (!strcmp(name, "GetDeviceProcAddr"))
348 return (void*) vkGetDeviceProcAddr;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600349 // remove once no longer locks
Jon Ashburnd55a3942015-05-06 09:02:10 -0600350 if (!strcmp(name, "EnumeratePhysicalDevices"))
351 return (void*) vkEnumeratePhysicalDevices;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600352 if (!strcmp(name, "EnumerateDeviceExtensionProperties"))
353 return (void*) vkEnumerateDeviceExtensionProperties;
354 if (!strcmp(name, "EnumerateDeviceLayerProperties"))
355 return (void*) vkEnumerateDeviceLayerProperties;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600356 if (!strcmp(name, "GetInstanceProcAddr"))
357 return (void*) vkGetInstanceProcAddr;
Jon Ashburnc15d0df2015-10-05 14:09:37 -0600358 if (!strcmp(name, "CreateDevice"))
359 return (void*) vkCreateDevice;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600360
361 return NULL;
362}
363
364static inline void *loader_non_passthrough_gdpa(const char *name)
365{
366 if (!name || name[0] != 'v' || name[1] != 'k')
367 return NULL;
368
369 name += 2;
370
371 if (!strcmp(name, "GetDeviceProcAddr"))
372 return (void*) vkGetDeviceProcAddr;
Jon Ashburn69e9ea22015-09-28 16:15:00 -0600373 if (!strcmp(name, "DestroyDevice"))
374 return (void*) vkDestroyDevice;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600375 if (!strcmp(name, "GetDeviceQueue"))
376 return (void*) vkGetDeviceQueue;
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800377 if (!strcmp(name, "AllocateCommandBuffers"))
378 return (void*) vkAllocateCommandBuffers;
Jon Ashburnd55a3942015-05-06 09:02:10 -0600379
380 return NULL;
381}