Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 1 | /* |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 2 | * |
Courtney Goeltzenleuchter | fcbe16f | 2015-10-29 13:50:34 -0600 | [diff] [blame] | 3 | * Copyright (C) 2015 Valve Corporation |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 4 | * |
| 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 Goeltzenleuchter | 0555952 | 2015-10-30 11:14:30 -0600 | [diff] [blame] | 22 | * |
| 23 | * Author: Cody Northrop <cody@lunarg.com> |
| 24 | * Author: Jon Ashburn <jon@lunarg.com> |
| 25 | * Author: Tony Barbour <tony@LunarG.com> |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 26 | */ |
| 27 | |
| 28 | #include <string.h> |
Jon Ashburn | 8a39efc | 2015-11-06 11:02:40 -0700 | [diff] [blame] | 29 | #include "debug_report.h" |
Ian Elliott | 954fa34 | 2015-10-30 15:28:23 -0600 | [diff] [blame] | 30 | #include "wsi.h" |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 31 | |
Jon Ashburn | 8a39efc | 2015-11-06 11:02:40 -0700 | [diff] [blame] | 32 | static 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 Ashburn | fc1031e | 2015-11-17 15:31:02 -0700 | [diff] [blame] | 313 | addr = loader_dev_ext_gpa(inst, funcName); |
| 314 | return addr; |
Jon Ashburn | 8a39efc | 2015-11-06 11:02:40 -0700 | [diff] [blame] | 315 | } |
| 316 | |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 317 | static 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 Goeltzenleuchter | 35985f6 | 2015-09-14 17:22:16 -0600 | [diff] [blame] | 325 | if (!strcmp(name, "EnumerateInstanceExtensionProperties")) |
| 326 | return (void*) vkEnumerateInstanceExtensionProperties; |
Courtney Goeltzenleuchter | 35985f6 | 2015-09-14 17:22:16 -0600 | [diff] [blame] | 327 | if (!strcmp(name, "EnumerateInstanceLayerProperties")) |
| 328 | return (void*) vkEnumerateInstanceLayerProperties; |
Jon Ashburn | 8a39efc | 2015-11-06 11:02:40 -0700 | [diff] [blame] | 329 | |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 330 | 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 Ashburn | 69e9ea2 | 2015-09-28 16:15:00 -0600 | [diff] [blame] | 337 | static inline void *loader_non_passthrough_gipa(const char *name) |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 338 | { |
| 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 Ashburn | 45d42ca | 2015-10-08 15:59:17 -0600 | [diff] [blame] | 347 | if (!strcmp(name, "GetDeviceProcAddr")) |
| 348 | return (void*) vkGetDeviceProcAddr; |
Jon Ashburn | 69e9ea2 | 2015-09-28 16:15:00 -0600 | [diff] [blame] | 349 | // remove once no longer locks |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 350 | if (!strcmp(name, "EnumeratePhysicalDevices")) |
| 351 | return (void*) vkEnumeratePhysicalDevices; |
Courtney Goeltzenleuchter | 35985f6 | 2015-09-14 17:22:16 -0600 | [diff] [blame] | 352 | if (!strcmp(name, "EnumerateDeviceExtensionProperties")) |
| 353 | return (void*) vkEnumerateDeviceExtensionProperties; |
| 354 | if (!strcmp(name, "EnumerateDeviceLayerProperties")) |
| 355 | return (void*) vkEnumerateDeviceLayerProperties; |
Jon Ashburn | 69e9ea2 | 2015-09-28 16:15:00 -0600 | [diff] [blame] | 356 | if (!strcmp(name, "GetInstanceProcAddr")) |
| 357 | return (void*) vkGetInstanceProcAddr; |
Jon Ashburn | c15d0df | 2015-10-05 14:09:37 -0600 | [diff] [blame] | 358 | if (!strcmp(name, "CreateDevice")) |
| 359 | return (void*) vkCreateDevice; |
Jon Ashburn | 69e9ea2 | 2015-09-28 16:15:00 -0600 | [diff] [blame] | 360 | |
| 361 | return NULL; |
| 362 | } |
| 363 | |
| 364 | static 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 Ashburn | 69e9ea2 | 2015-09-28 16:15:00 -0600 | [diff] [blame] | 373 | if (!strcmp(name, "DestroyDevice")) |
| 374 | return (void*) vkDestroyDevice; |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 375 | if (!strcmp(name, "GetDeviceQueue")) |
| 376 | return (void*) vkGetDeviceQueue; |
Chia-I Wu | 3432a0c | 2015-10-27 18:04:07 +0800 | [diff] [blame] | 377 | if (!strcmp(name, "AllocateCommandBuffers")) |
| 378 | return (void*) vkAllocateCommandBuffers; |
Jon Ashburn | d55a394 | 2015-05-06 09:02:10 -0600 | [diff] [blame] | 379 | |
| 380 | return NULL; |
| 381 | } |