• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #include "AndroidVulkanDispatch.h"
15 
16 #include "AndroidHostCommon.h"
17 #include "Ashmem.h"
18 
19 #include <dlfcn.h>
20 #include <stdio.h>
21 #include <string.h>
22 
23 extern "C" {
24 
load_android_vulkan_dispatch(const char * path)25 EXPORT android_vulkan_dispatch* load_android_vulkan_dispatch(const char* path) {
26 #ifdef _WIN32
27     const char* libPath = path ? path : "vulkan_android.dll";
28 #elif defined(__APPLE__)
29     const char* libPath = path ? path : "libvulkan_android.dylib";
30 #else
31     const char* libPath = path ? path : "libvulkan_android.so";
32 #endif
33 
34     android_vulkan_dispatch* out = new android_vulkan_dispatch;
35     memset(out, 0x0, sizeof(android_vulkan_dispatch));
36 
37     void* lib = dlopen(libPath, RTLD_NOW);
38     if (!lib) {
39         fprintf(stderr, "%s: libvulkan_android not found!\n", __func__);
40         return out;
41     } else {
42         fprintf(stderr, "%s: libvulkan_android found\n", __func__);
43     }
44 
45 #ifdef VK_VERSION_1_0
46     out->vkDestroyInstance = (PFN_vkDestroyInstance)dlsym(lib, "vkDestroyInstance");
47     out->vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)dlsym(lib, "vkEnumeratePhysicalDevices");
48     out->vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)dlsym(lib, "vkGetPhysicalDeviceFeatures");
49     out->vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)dlsym(lib, "vkGetPhysicalDeviceFormatProperties");
50     out->vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)dlsym(lib, "vkGetPhysicalDeviceImageFormatProperties");
51     out->vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)dlsym(lib, "vkGetPhysicalDeviceProperties");
52     out->vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)dlsym(lib, "vkGetPhysicalDeviceQueueFamilyProperties");
53     out->vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)dlsym(lib, "vkGetPhysicalDeviceMemoryProperties");
54     out->vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr");
55     out->vkCreateDevice = (PFN_vkCreateDevice)dlsym(lib, "vkCreateDevice");
56     out->vkDestroyDevice = (PFN_vkDestroyDevice)dlsym(lib, "vkDestroyDevice");
57     out->vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)dlsym(lib, "vkEnumerateDeviceExtensionProperties");
58     out->vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)dlsym(lib, "vkEnumerateDeviceLayerProperties");
59     out->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)dlsym(lib, "vkGetDeviceQueue");
60     out->vkQueueSubmit = (PFN_vkQueueSubmit)dlsym(lib, "vkQueueSubmit");
61     out->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)dlsym(lib, "vkQueueWaitIdle");
62     out->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)dlsym(lib, "vkDeviceWaitIdle");
63     out->vkCreateInstance = (PFN_vkCreateInstance)dlsym(lib, "vkCreateInstance");
64     out->vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)dlsym(lib, "vkEnumerateInstanceExtensionProperties");
65     out->vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)dlsym(lib, "vkEnumerateInstanceLayerProperties");
66     out->vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)dlsym(lib, "vkGetDeviceProcAddr");
67 #endif
68 #ifdef VK_VERSION_1_1
69     out->vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)dlsym(lib, "vkEnumeratePhysicalDeviceGroups");
70 #endif
71 #ifdef VK_KHR_surface
72     out->vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)dlsym(lib, "vkDestroySurfaceKHR");
73 #endif
74 #ifdef VK_KHR_swapchain
75     out->vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)dlsym(lib, "vkCreateSwapchainKHR");
76     out->vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)dlsym(lib, "vkDestroySwapchainKHR");
77     out->vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)dlsym(lib, "vkGetSwapchainImagesKHR");
78     out->vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)dlsym(lib, "vkAcquireNextImageKHR");
79     out->vkQueuePresentKHR = (PFN_vkQueuePresentKHR)dlsym(lib, "vkQueuePresentKHR");
80 #endif
81 #ifdef VK_KHR_display
82     out->vkCreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)dlsym(lib, "vkCreateDisplayPlaneSurfaceKHR");
83 #endif
84 #ifdef VK_KHR_xlib_surface
85     out->vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)dlsym(lib, "vkCreateXlibSurfaceKHR");
86     out->vkGetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)dlsym(lib, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
87 #endif
88 #ifdef VK_KHR_xcb_surface
89     out->vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)dlsym(lib, "vkCreateXcbSurfaceKHR");
90     out->vkGetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)dlsym(lib, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
91 #endif
92 #ifdef VK_KHR_wayland_surface
93     out->vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)dlsym(lib, "vkCreateWaylandSurfaceKHR");
94 #endif
95 #ifdef VK_KHR_mir_surface
96     out->vkCreateMirSurfaceKHR = (PFN_vkCreateMirSurfaceKHR)dlsym(lib, "vkCreateMirSurfaceKHR");
97 #endif
98 #ifdef VK_KHR_android_surface
99     out->vkCreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)dlsym(lib, "vkCreateAndroidSurfaceKHR");
100 #endif
101 #ifdef VK_KHR_win32_surface
102     out->vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)dlsym(lib, "vkCreateWin32SurfaceKHR");
103     out->vkGetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)dlsym(lib, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
104 #endif
105 #ifdef VK_KHR_device_group_creation
106     out->vkEnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)dlsym(lib, "vkEnumeratePhysicalDeviceGroupsKHR");
107 #endif
108 #ifdef VK_EXT_debug_report
109     out->vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)dlsym(lib, "vkCreateDebugReportCallbackEXT");
110     out->vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)dlsym(lib, "vkDestroyDebugReportCallbackEXT");
111     out->vkDebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)dlsym(lib, "vkDebugReportMessageEXT");
112 #endif
113 #ifdef VK_NN_vi_surface
114     out->vkCreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)dlsym(lib, "vkCreateViSurfaceNN");
115 #endif
116 #ifdef VK_MVK_ios_surface
117     out->vkCreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)dlsym(lib, "vkCreateIOSSurfaceMVK");
118 #endif
119 #ifdef VK_MVK_macos_surface
120     out->vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)dlsym(lib, "vkCreateMacOSSurfaceMVK");
121 #endif
122 #ifdef VK_EXT_debug_utils
123     out->vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)dlsym(lib, "vkCreateDebugUtilsMessengerEXT");
124     out->vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)dlsym(lib, "vkDestroyDebugUtilsMessengerEXT");
125     out->vkSubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT)dlsym(lib, "vkSubmitDebugUtilsMessageEXT");
126 #endif
127 #ifdef VK_VERSION_1_0
128     out->vkAllocateMemory = (PFN_vkAllocateMemory)dlsym(lib, "vkAllocateMemory");
129     out->vkFreeMemory = (PFN_vkFreeMemory)dlsym(lib, "vkFreeMemory");
130     out->vkMapMemory = (PFN_vkMapMemory)dlsym(lib, "vkMapMemory");
131     out->vkUnmapMemory = (PFN_vkUnmapMemory)dlsym(lib, "vkUnmapMemory");
132     out->vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)dlsym(lib, "vkFlushMappedMemoryRanges");
133     out->vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)dlsym(lib, "vkInvalidateMappedMemoryRanges");
134     out->vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)dlsym(lib, "vkGetDeviceMemoryCommitment");
135     out->vkBindBufferMemory = (PFN_vkBindBufferMemory)dlsym(lib, "vkBindBufferMemory");
136     out->vkBindImageMemory = (PFN_vkBindImageMemory)dlsym(lib, "vkBindImageMemory");
137     out->vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)dlsym(lib, "vkGetBufferMemoryRequirements");
138     out->vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)dlsym(lib, "vkGetImageMemoryRequirements");
139     out->vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)dlsym(lib, "vkGetImageSparseMemoryRequirements");
140     out->vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)dlsym(lib, "vkGetPhysicalDeviceSparseImageFormatProperties");
141     out->vkQueueBindSparse = (PFN_vkQueueBindSparse)dlsym(lib, "vkQueueBindSparse");
142     out->vkCreateFence = (PFN_vkCreateFence)dlsym(lib, "vkCreateFence");
143     out->vkDestroyFence = (PFN_vkDestroyFence)dlsym(lib, "vkDestroyFence");
144     out->vkResetFences = (PFN_vkResetFences)dlsym(lib, "vkResetFences");
145     out->vkGetFenceStatus = (PFN_vkGetFenceStatus)dlsym(lib, "vkGetFenceStatus");
146     out->vkWaitForFences = (PFN_vkWaitForFences)dlsym(lib, "vkWaitForFences");
147     out->vkCreateSemaphore = (PFN_vkCreateSemaphore)dlsym(lib, "vkCreateSemaphore");
148     out->vkDestroySemaphore = (PFN_vkDestroySemaphore)dlsym(lib, "vkDestroySemaphore");
149     out->vkCreateEvent = (PFN_vkCreateEvent)dlsym(lib, "vkCreateEvent");
150     out->vkDestroyEvent = (PFN_vkDestroyEvent)dlsym(lib, "vkDestroyEvent");
151     out->vkGetEventStatus = (PFN_vkGetEventStatus)dlsym(lib, "vkGetEventStatus");
152     out->vkSetEvent = (PFN_vkSetEvent)dlsym(lib, "vkSetEvent");
153     out->vkResetEvent = (PFN_vkResetEvent)dlsym(lib, "vkResetEvent");
154     out->vkCreateQueryPool = (PFN_vkCreateQueryPool)dlsym(lib, "vkCreateQueryPool");
155     out->vkDestroyQueryPool = (PFN_vkDestroyQueryPool)dlsym(lib, "vkDestroyQueryPool");
156     out->vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)dlsym(lib, "vkGetQueryPoolResults");
157     out->vkCreateBuffer = (PFN_vkCreateBuffer)dlsym(lib, "vkCreateBuffer");
158     out->vkDestroyBuffer = (PFN_vkDestroyBuffer)dlsym(lib, "vkDestroyBuffer");
159     out->vkCreateBufferView = (PFN_vkCreateBufferView)dlsym(lib, "vkCreateBufferView");
160     out->vkDestroyBufferView = (PFN_vkDestroyBufferView)dlsym(lib, "vkDestroyBufferView");
161     out->vkCreateImage = (PFN_vkCreateImage)dlsym(lib, "vkCreateImage");
162     out->vkDestroyImage = (PFN_vkDestroyImage)dlsym(lib, "vkDestroyImage");
163     out->vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)dlsym(lib, "vkGetImageSubresourceLayout");
164     out->vkCreateImageView = (PFN_vkCreateImageView)dlsym(lib, "vkCreateImageView");
165     out->vkDestroyImageView = (PFN_vkDestroyImageView)dlsym(lib, "vkDestroyImageView");
166     out->vkCreateShaderModule = (PFN_vkCreateShaderModule)dlsym(lib, "vkCreateShaderModule");
167     out->vkDestroyShaderModule = (PFN_vkDestroyShaderModule)dlsym(lib, "vkDestroyShaderModule");
168     out->vkCreatePipelineCache = (PFN_vkCreatePipelineCache)dlsym(lib, "vkCreatePipelineCache");
169     out->vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)dlsym(lib, "vkDestroyPipelineCache");
170     out->vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)dlsym(lib, "vkGetPipelineCacheData");
171     out->vkMergePipelineCaches = (PFN_vkMergePipelineCaches)dlsym(lib, "vkMergePipelineCaches");
172     out->vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)dlsym(lib, "vkCreateGraphicsPipelines");
173     out->vkCreateComputePipelines = (PFN_vkCreateComputePipelines)dlsym(lib, "vkCreateComputePipelines");
174     out->vkDestroyPipeline = (PFN_vkDestroyPipeline)dlsym(lib, "vkDestroyPipeline");
175     out->vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)dlsym(lib, "vkCreatePipelineLayout");
176     out->vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)dlsym(lib, "vkDestroyPipelineLayout");
177     out->vkCreateSampler = (PFN_vkCreateSampler)dlsym(lib, "vkCreateSampler");
178     out->vkDestroySampler = (PFN_vkDestroySampler)dlsym(lib, "vkDestroySampler");
179     out->vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)dlsym(lib, "vkCreateDescriptorSetLayout");
180     out->vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)dlsym(lib, "vkDestroyDescriptorSetLayout");
181     out->vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)dlsym(lib, "vkCreateDescriptorPool");
182     out->vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)dlsym(lib, "vkDestroyDescriptorPool");
183     out->vkResetDescriptorPool = (PFN_vkResetDescriptorPool)dlsym(lib, "vkResetDescriptorPool");
184     out->vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)dlsym(lib, "vkAllocateDescriptorSets");
185     out->vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)dlsym(lib, "vkFreeDescriptorSets");
186     out->vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)dlsym(lib, "vkUpdateDescriptorSets");
187     out->vkCreateFramebuffer = (PFN_vkCreateFramebuffer)dlsym(lib, "vkCreateFramebuffer");
188     out->vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)dlsym(lib, "vkDestroyFramebuffer");
189     out->vkCreateRenderPass = (PFN_vkCreateRenderPass)dlsym(lib, "vkCreateRenderPass");
190     out->vkDestroyRenderPass = (PFN_vkDestroyRenderPass)dlsym(lib, "vkDestroyRenderPass");
191     out->vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)dlsym(lib, "vkGetRenderAreaGranularity");
192     out->vkCreateCommandPool = (PFN_vkCreateCommandPool)dlsym(lib, "vkCreateCommandPool");
193     out->vkDestroyCommandPool = (PFN_vkDestroyCommandPool)dlsym(lib, "vkDestroyCommandPool");
194     out->vkResetCommandPool = (PFN_vkResetCommandPool)dlsym(lib, "vkResetCommandPool");
195     out->vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)dlsym(lib, "vkAllocateCommandBuffers");
196     out->vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)dlsym(lib, "vkFreeCommandBuffers");
197     out->vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)dlsym(lib, "vkBeginCommandBuffer");
198     out->vkEndCommandBuffer = (PFN_vkEndCommandBuffer)dlsym(lib, "vkEndCommandBuffer");
199     out->vkResetCommandBuffer = (PFN_vkResetCommandBuffer)dlsym(lib, "vkResetCommandBuffer");
200     out->vkCmdBindPipeline = (PFN_vkCmdBindPipeline)dlsym(lib, "vkCmdBindPipeline");
201     out->vkCmdSetViewport = (PFN_vkCmdSetViewport)dlsym(lib, "vkCmdSetViewport");
202     out->vkCmdSetScissor = (PFN_vkCmdSetScissor)dlsym(lib, "vkCmdSetScissor");
203     out->vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)dlsym(lib, "vkCmdSetLineWidth");
204     out->vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)dlsym(lib, "vkCmdSetDepthBias");
205     out->vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)dlsym(lib, "vkCmdSetBlendConstants");
206     out->vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)dlsym(lib, "vkCmdSetDepthBounds");
207     out->vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)dlsym(lib, "vkCmdSetStencilCompareMask");
208     out->vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)dlsym(lib, "vkCmdSetStencilWriteMask");
209     out->vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)dlsym(lib, "vkCmdSetStencilReference");
210     out->vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)dlsym(lib, "vkCmdBindDescriptorSets");
211     out->vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)dlsym(lib, "vkCmdBindIndexBuffer");
212     out->vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)dlsym(lib, "vkCmdBindVertexBuffers");
213     out->vkCmdDraw = (PFN_vkCmdDraw)dlsym(lib, "vkCmdDraw");
214     out->vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)dlsym(lib, "vkCmdDrawIndexed");
215     out->vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)dlsym(lib, "vkCmdDrawIndirect");
216     out->vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)dlsym(lib, "vkCmdDrawIndexedIndirect");
217     out->vkCmdDispatch = (PFN_vkCmdDispatch)dlsym(lib, "vkCmdDispatch");
218     out->vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)dlsym(lib, "vkCmdDispatchIndirect");
219     out->vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)dlsym(lib, "vkCmdCopyBuffer");
220     out->vkCmdCopyImage = (PFN_vkCmdCopyImage)dlsym(lib, "vkCmdCopyImage");
221     out->vkCmdBlitImage = (PFN_vkCmdBlitImage)dlsym(lib, "vkCmdBlitImage");
222     out->vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)dlsym(lib, "vkCmdCopyBufferToImage");
223     out->vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)dlsym(lib, "vkCmdCopyImageToBuffer");
224     out->vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)dlsym(lib, "vkCmdUpdateBuffer");
225     out->vkCmdFillBuffer = (PFN_vkCmdFillBuffer)dlsym(lib, "vkCmdFillBuffer");
226     out->vkCmdClearColorImage = (PFN_vkCmdClearColorImage)dlsym(lib, "vkCmdClearColorImage");
227     out->vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)dlsym(lib, "vkCmdClearDepthStencilImage");
228     out->vkCmdClearAttachments = (PFN_vkCmdClearAttachments)dlsym(lib, "vkCmdClearAttachments");
229     out->vkCmdResolveImage = (PFN_vkCmdResolveImage)dlsym(lib, "vkCmdResolveImage");
230     out->vkCmdSetEvent = (PFN_vkCmdSetEvent)dlsym(lib, "vkCmdSetEvent");
231     out->vkCmdResetEvent = (PFN_vkCmdResetEvent)dlsym(lib, "vkCmdResetEvent");
232     out->vkCmdWaitEvents = (PFN_vkCmdWaitEvents)dlsym(lib, "vkCmdWaitEvents");
233     out->vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)dlsym(lib, "vkCmdPipelineBarrier");
234     out->vkCmdBeginQuery = (PFN_vkCmdBeginQuery)dlsym(lib, "vkCmdBeginQuery");
235     out->vkCmdEndQuery = (PFN_vkCmdEndQuery)dlsym(lib, "vkCmdEndQuery");
236     out->vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)dlsym(lib, "vkCmdResetQueryPool");
237     out->vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)dlsym(lib, "vkCmdWriteTimestamp");
238     out->vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)dlsym(lib, "vkCmdCopyQueryPoolResults");
239     out->vkCmdPushConstants = (PFN_vkCmdPushConstants)dlsym(lib, "vkCmdPushConstants");
240     out->vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)dlsym(lib, "vkCmdBeginRenderPass");
241     out->vkCmdNextSubpass = (PFN_vkCmdNextSubpass)dlsym(lib, "vkCmdNextSubpass");
242     out->vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)dlsym(lib, "vkCmdEndRenderPass");
243     out->vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)dlsym(lib, "vkCmdExecuteCommands");
244 #endif
245 #ifdef VK_VERSION_1_1
246     out->vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)dlsym(lib, "vkEnumerateInstanceVersion");
247     out->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)dlsym(lib, "vkBindBufferMemory2");
248     out->vkBindImageMemory2 = (PFN_vkBindImageMemory2)dlsym(lib, "vkBindImageMemory2");
249     out->vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)dlsym(lib, "vkGetDeviceGroupPeerMemoryFeatures");
250     out->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)dlsym(lib, "vkCmdSetDeviceMask");
251     out->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)dlsym(lib, "vkCmdDispatchBase");
252     out->vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)dlsym(lib, "vkGetImageMemoryRequirements2");
253     out->vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)dlsym(lib, "vkGetBufferMemoryRequirements2");
254     out->vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)dlsym(lib, "vkGetImageSparseMemoryRequirements2");
255     out->vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)dlsym(lib, "vkGetPhysicalDeviceFeatures2");
256     out->vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)dlsym(lib, "vkGetPhysicalDeviceProperties2");
257     out->vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)dlsym(lib, "vkGetPhysicalDeviceFormatProperties2");
258     out->vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)dlsym(lib, "vkGetPhysicalDeviceImageFormatProperties2");
259     out->vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)dlsym(lib, "vkGetPhysicalDeviceQueueFamilyProperties2");
260     out->vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)dlsym(lib, "vkGetPhysicalDeviceMemoryProperties2");
261     out->vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)dlsym(lib, "vkGetPhysicalDeviceSparseImageFormatProperties2");
262     out->vkTrimCommandPool = (PFN_vkTrimCommandPool)dlsym(lib, "vkTrimCommandPool");
263     out->vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)dlsym(lib, "vkGetDeviceQueue2");
264     out->vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)dlsym(lib, "vkCreateSamplerYcbcrConversion");
265     out->vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)dlsym(lib, "vkDestroySamplerYcbcrConversion");
266     out->vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)dlsym(lib, "vkCreateDescriptorUpdateTemplate");
267     out->vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)dlsym(lib, "vkDestroyDescriptorUpdateTemplate");
268     out->vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)dlsym(lib, "vkUpdateDescriptorSetWithTemplate");
269     out->vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)dlsym(lib, "vkGetPhysicalDeviceExternalBufferProperties");
270     out->vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)dlsym(lib, "vkGetPhysicalDeviceExternalFenceProperties");
271     out->vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)dlsym(lib, "vkGetPhysicalDeviceExternalSemaphoreProperties");
272     out->vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)dlsym(lib, "vkGetDescriptorSetLayoutSupport");
273 #endif
274 #ifdef VK_KHR_surface
275     out->vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)dlsym(lib, "vkGetPhysicalDeviceSurfaceSupportKHR");
276     out->vkGetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)dlsym(lib, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
277     out->vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)dlsym(lib, "vkGetPhysicalDeviceSurfaceFormatsKHR");
278     out->vkGetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)dlsym(lib, "vkGetPhysicalDeviceSurfacePresentModesKHR");
279 #endif
280 #ifdef VK_KHR_swapchain
281     out->vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)dlsym(lib, "vkGetDeviceGroupPresentCapabilitiesKHR");
282     out->vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)dlsym(lib, "vkGetDeviceGroupSurfacePresentModesKHR");
283     out->vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR)dlsym(lib, "vkGetPhysicalDevicePresentRectanglesKHR");
284     out->vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)dlsym(lib, "vkAcquireNextImage2KHR");
285 #endif
286 #ifdef VK_KHR_display
287     out->vkGetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)dlsym(lib, "vkGetPhysicalDeviceDisplayPropertiesKHR");
288     out->vkGetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)dlsym(lib, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
289     out->vkGetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)dlsym(lib, "vkGetDisplayPlaneSupportedDisplaysKHR");
290     out->vkGetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)dlsym(lib, "vkGetDisplayModePropertiesKHR");
291     out->vkCreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)dlsym(lib, "vkCreateDisplayModeKHR");
292     out->vkGetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)dlsym(lib, "vkGetDisplayPlaneCapabilitiesKHR");
293 #endif
294 #ifdef VK_KHR_display_swapchain
295     out->vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)dlsym(lib, "vkCreateSharedSwapchainsKHR");
296 #endif
297 #ifdef VK_KHR_wayland_surface
298     out->vkGetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)dlsym(lib, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
299 #endif
300 #ifdef VK_KHR_mir_surface
301     out->vkGetPhysicalDeviceMirPresentationSupportKHR = (PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)dlsym(lib, "vkGetPhysicalDeviceMirPresentationSupportKHR");
302 #endif
303 #ifdef VK_KHR_get_physical_device_properties2
304     out->vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)dlsym(lib, "vkGetPhysicalDeviceFeatures2KHR");
305     out->vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceProperties2KHR");
306     out->vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceFormatProperties2KHR");
307     out->vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceImageFormatProperties2KHR");
308     out->vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceQueueFamilyProperties2KHR");
309     out->vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceMemoryProperties2KHR");
310     out->vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
311 #endif
312 #ifdef VK_KHR_device_group
313     out->vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)dlsym(lib, "vkGetDeviceGroupPeerMemoryFeaturesKHR");
314     out->vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)dlsym(lib, "vkCmdSetDeviceMaskKHR");
315     out->vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)dlsym(lib, "vkCmdDispatchBaseKHR");
316 #endif
317 #ifdef VK_KHR_maintenance1
318     out->vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)dlsym(lib, "vkTrimCommandPoolKHR");
319 #endif
320 #ifdef VK_KHR_external_memory_capabilities
321     out->vkGetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)dlsym(lib, "vkGetPhysicalDeviceExternalBufferPropertiesKHR");
322 #endif
323 #ifdef VK_KHR_external_memory_win32
324     out->vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)dlsym(lib, "vkGetMemoryWin32HandleKHR");
325     out->vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)dlsym(lib, "vkGetMemoryWin32HandlePropertiesKHR");
326 #endif
327 #ifdef VK_KHR_external_memory_fd
328     out->vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)dlsym(lib, "vkGetMemoryFdKHR");
329     out->vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)dlsym(lib, "vkGetMemoryFdPropertiesKHR");
330 #endif
331 #ifdef VK_KHR_external_semaphore_capabilities
332     out->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)dlsym(lib, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
333 #endif
334 #ifdef VK_KHR_external_semaphore_win32
335     out->vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)dlsym(lib, "vkImportSemaphoreWin32HandleKHR");
336     out->vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)dlsym(lib, "vkGetSemaphoreWin32HandleKHR");
337 #endif
338 #ifdef VK_KHR_external_semaphore_fd
339     out->vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)dlsym(lib, "vkImportSemaphoreFdKHR");
340     out->vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)dlsym(lib, "vkGetSemaphoreFdKHR");
341 #endif
342 #ifdef VK_KHR_push_descriptor
343     out->vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)dlsym(lib, "vkCmdPushDescriptorSetKHR");
344     out->vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)dlsym(lib, "vkCmdPushDescriptorSetWithTemplateKHR");
345 #endif
346 #ifdef VK_KHR_descriptor_update_template
347     out->vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)dlsym(lib, "vkCreateDescriptorUpdateTemplateKHR");
348     out->vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)dlsym(lib, "vkDestroyDescriptorUpdateTemplateKHR");
349     out->vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)dlsym(lib, "vkUpdateDescriptorSetWithTemplateKHR");
350 #endif
351 #ifdef VK_KHR_create_renderpass2
352     out->vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)dlsym(lib, "vkCreateRenderPass2KHR");
353     out->vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)dlsym(lib, "vkCmdBeginRenderPass2KHR");
354     out->vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)dlsym(lib, "vkCmdNextSubpass2KHR");
355     out->vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)dlsym(lib, "vkCmdEndRenderPass2KHR");
356 #endif
357 #ifdef VK_KHR_shared_presentable_image
358     out->vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)dlsym(lib, "vkGetSwapchainStatusKHR");
359 #endif
360 #ifdef VK_KHR_external_fence_capabilities
361     out->vkGetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)dlsym(lib, "vkGetPhysicalDeviceExternalFencePropertiesKHR");
362 #endif
363 #ifdef VK_KHR_external_fence_win32
364     out->vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)dlsym(lib, "vkImportFenceWin32HandleKHR");
365     out->vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)dlsym(lib, "vkGetFenceWin32HandleKHR");
366 #endif
367 #ifdef VK_KHR_external_fence_fd
368     out->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)dlsym(lib, "vkImportFenceFdKHR");
369     out->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)dlsym(lib, "vkGetFenceFdKHR");
370 #endif
371 #ifdef VK_KHR_get_surface_capabilities2
372     out->vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)dlsym(lib, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
373     out->vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)dlsym(lib, "vkGetPhysicalDeviceSurfaceFormats2KHR");
374 #endif
375 #ifdef VK_KHR_get_display_properties2
376     out->vkGetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceDisplayProperties2KHR");
377     out->vkGetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)dlsym(lib, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
378     out->vkGetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR)dlsym(lib, "vkGetDisplayModeProperties2KHR");
379     out->vkGetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR)dlsym(lib, "vkGetDisplayPlaneCapabilities2KHR");
380 #endif
381 #ifdef VK_KHR_get_memory_requirements2
382     out->vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)dlsym(lib, "vkGetImageMemoryRequirements2KHR");
383     out->vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)dlsym(lib, "vkGetBufferMemoryRequirements2KHR");
384     out->vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)dlsym(lib, "vkGetImageSparseMemoryRequirements2KHR");
385 #endif
386 #ifdef VK_KHR_sampler_ycbcr_conversion
387     out->vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)dlsym(lib, "vkCreateSamplerYcbcrConversionKHR");
388     out->vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)dlsym(lib, "vkDestroySamplerYcbcrConversionKHR");
389 #endif
390 #ifdef VK_KHR_bind_memory2
391     out->vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)dlsym(lib, "vkBindBufferMemory2KHR");
392     out->vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)dlsym(lib, "vkBindImageMemory2KHR");
393 #endif
394 #ifdef VK_KHR_maintenance3
395     out->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)dlsym(lib, "vkGetDescriptorSetLayoutSupportKHR");
396 #endif
397 #ifdef VK_KHR_draw_indirect_count
398     out->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)dlsym(lib, "vkCmdDrawIndirectCountKHR");
399     out->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)dlsym(lib, "vkCmdDrawIndexedIndirectCountKHR");
400 #endif
401 #ifdef VK_ANDROID_native_buffer
402     out->vkGetSwapchainGrallocUsageANDROID = (PFN_vkGetSwapchainGrallocUsageANDROID)dlsym(lib, "vkGetSwapchainGrallocUsageANDROID");
403     out->vkAcquireImageANDROID = (PFN_vkAcquireImageANDROID)dlsym(lib, "vkAcquireImageANDROID");
404     out->vkQueueSignalReleaseImageANDROID = (PFN_vkQueueSignalReleaseImageANDROID)dlsym(lib, "vkQueueSignalReleaseImageANDROID");
405 #endif
406 #ifdef VK_EXT_debug_marker
407     out->vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)dlsym(lib, "vkDebugMarkerSetObjectTagEXT");
408     out->vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)dlsym(lib, "vkDebugMarkerSetObjectNameEXT");
409     out->vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)dlsym(lib, "vkCmdDebugMarkerBeginEXT");
410     out->vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)dlsym(lib, "vkCmdDebugMarkerEndEXT");
411     out->vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)dlsym(lib, "vkCmdDebugMarkerInsertEXT");
412 #endif
413 #ifdef VK_AMD_draw_indirect_count
414     out->vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)dlsym(lib, "vkCmdDrawIndirectCountAMD");
415     out->vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)dlsym(lib, "vkCmdDrawIndexedIndirectCountAMD");
416 #endif
417 #ifdef VK_AMD_shader_info
418     out->vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)dlsym(lib, "vkGetShaderInfoAMD");
419 #endif
420 #ifdef VK_NV_external_memory_capabilities
421     out->vkGetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)dlsym(lib, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
422 #endif
423 #ifdef VK_NV_external_memory_win32
424     out->vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)dlsym(lib, "vkGetMemoryWin32HandleNV");
425 #endif
426 #ifdef VK_EXT_conditional_rendering
427     out->vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)dlsym(lib, "vkCmdBeginConditionalRenderingEXT");
428     out->vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)dlsym(lib, "vkCmdEndConditionalRenderingEXT");
429 #endif
430 #ifdef VK_NVX_device_generated_commands
431     out->vkCmdProcessCommandsNVX = (PFN_vkCmdProcessCommandsNVX)dlsym(lib, "vkCmdProcessCommandsNVX");
432     out->vkCmdReserveSpaceForCommandsNVX = (PFN_vkCmdReserveSpaceForCommandsNVX)dlsym(lib, "vkCmdReserveSpaceForCommandsNVX");
433     out->vkCreateIndirectCommandsLayoutNVX = (PFN_vkCreateIndirectCommandsLayoutNVX)dlsym(lib, "vkCreateIndirectCommandsLayoutNVX");
434     out->vkDestroyIndirectCommandsLayoutNVX = (PFN_vkDestroyIndirectCommandsLayoutNVX)dlsym(lib, "vkDestroyIndirectCommandsLayoutNVX");
435     out->vkCreateObjectTableNVX = (PFN_vkCreateObjectTableNVX)dlsym(lib, "vkCreateObjectTableNVX");
436     out->vkDestroyObjectTableNVX = (PFN_vkDestroyObjectTableNVX)dlsym(lib, "vkDestroyObjectTableNVX");
437     out->vkRegisterObjectsNVX = (PFN_vkRegisterObjectsNVX)dlsym(lib, "vkRegisterObjectsNVX");
438     out->vkUnregisterObjectsNVX = (PFN_vkUnregisterObjectsNVX)dlsym(lib, "vkUnregisterObjectsNVX");
439     out->vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = (PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)dlsym(lib, "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
440 #endif
441 #ifdef VK_NV_clip_space_w_scaling
442     out->vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)dlsym(lib, "vkCmdSetViewportWScalingNV");
443 #endif
444 #ifdef VK_EXT_direct_mode_display
445     out->vkReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)dlsym(lib, "vkReleaseDisplayEXT");
446 #endif
447 #ifdef VK_EXT_acquire_xlib_display
448     out->vkAcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)dlsym(lib, "vkAcquireXlibDisplayEXT");
449     out->vkGetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)dlsym(lib, "vkGetRandROutputDisplayEXT");
450 #endif
451 #ifdef VK_EXT_display_surface_counter
452     out->vkGetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)dlsym(lib, "vkGetPhysicalDeviceSurfaceCapabilities2EXT");
453 #endif
454 #ifdef VK_EXT_display_control
455     out->vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)dlsym(lib, "vkDisplayPowerControlEXT");
456     out->vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)dlsym(lib, "vkRegisterDeviceEventEXT");
457     out->vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)dlsym(lib, "vkRegisterDisplayEventEXT");
458     out->vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)dlsym(lib, "vkGetSwapchainCounterEXT");
459 #endif
460 #ifdef VK_GOOGLE_display_timing
461     out->vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)dlsym(lib, "vkGetRefreshCycleDurationGOOGLE");
462     out->vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)dlsym(lib, "vkGetPastPresentationTimingGOOGLE");
463 #endif
464 #ifdef VK_EXT_discard_rectangles
465     out->vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)dlsym(lib, "vkCmdSetDiscardRectangleEXT");
466 #endif
467 #ifdef VK_EXT_hdr_metadata
468     out->vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)dlsym(lib, "vkSetHdrMetadataEXT");
469 #endif
470 #ifdef VK_EXT_debug_utils
471     out->vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)dlsym(lib, "vkSetDebugUtilsObjectNameEXT");
472     out->vkSetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)dlsym(lib, "vkSetDebugUtilsObjectTagEXT");
473     out->vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)dlsym(lib, "vkQueueBeginDebugUtilsLabelEXT");
474     out->vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)dlsym(lib, "vkQueueEndDebugUtilsLabelEXT");
475     out->vkQueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)dlsym(lib, "vkQueueInsertDebugUtilsLabelEXT");
476     out->vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)dlsym(lib, "vkCmdBeginDebugUtilsLabelEXT");
477     out->vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)dlsym(lib, "vkCmdEndDebugUtilsLabelEXT");
478     out->vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)dlsym(lib, "vkCmdInsertDebugUtilsLabelEXT");
479 #endif
480 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
481     out->vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)dlsym(lib, "vkGetAndroidHardwareBufferPropertiesANDROID");
482     out->vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)dlsym(lib, "vkGetMemoryAndroidHardwareBufferANDROID");
483 #endif
484 #ifdef VK_EXT_sample_locations
485     out->vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)dlsym(lib, "vkCmdSetSampleLocationsEXT");
486     out->vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)dlsym(lib, "vkGetPhysicalDeviceMultisamplePropertiesEXT");
487 #endif
488 #ifdef VK_EXT_validation_cache
489     out->vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)dlsym(lib, "vkCreateValidationCacheEXT");
490     out->vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)dlsym(lib, "vkDestroyValidationCacheEXT");
491     out->vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)dlsym(lib, "vkMergeValidationCachesEXT");
492     out->vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)dlsym(lib, "vkGetValidationCacheDataEXT");
493 #endif
494 #ifdef VK_EXT_external_memory_host
495     out->vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)dlsym(lib, "vkGetMemoryHostPointerPropertiesEXT");
496 #endif
497 #ifdef VK_AMD_buffer_marker
498     out->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)dlsym(lib, "vkCmdWriteBufferMarkerAMD");
499 #endif
500 #ifdef VK_NV_device_diagnostic_checkpoints
501     out->vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)dlsym(lib, "vkCmdSetCheckpointNV");
502     out->vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)dlsym(lib, "vkGetQueueCheckpointDataNV");
503 #endif
504 #if defined(VK_GOOGLE_gfxstream) || defined(VK_GOOGLE_address_space)
505     out->vkMapMemoryIntoAddressSpaceGOOGLE = (PFN_vkMapMemoryIntoAddressSpaceGOOGLE)dlsym(lib, "vkMapMemoryIntoAddressSpaceGOOGLE");
506 #endif
507 #ifdef VK_VERSION_1_0
508     out->vkDestroyInstance = (PFN_vkDestroyInstance)dlsym(lib, "vkDestroyInstance");
509     out->vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)dlsym(lib, "vkEnumeratePhysicalDevices");
510     out->vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)dlsym(lib, "vkGetPhysicalDeviceFeatures");
511     out->vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)dlsym(lib, "vkGetPhysicalDeviceFormatProperties");
512     out->vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)dlsym(lib, "vkGetPhysicalDeviceImageFormatProperties");
513     out->vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)dlsym(lib, "vkGetPhysicalDeviceProperties");
514     out->vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)dlsym(lib, "vkGetPhysicalDeviceQueueFamilyProperties");
515     out->vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)dlsym(lib, "vkGetPhysicalDeviceMemoryProperties");
516     out->vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr");
517     out->vkCreateDevice = (PFN_vkCreateDevice)dlsym(lib, "vkCreateDevice");
518     out->vkDestroyDevice = (PFN_vkDestroyDevice)dlsym(lib, "vkDestroyDevice");
519     out->vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)dlsym(lib, "vkEnumerateDeviceExtensionProperties");
520     out->vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)dlsym(lib, "vkEnumerateDeviceLayerProperties");
521     out->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)dlsym(lib, "vkGetDeviceQueue");
522     out->vkQueueSubmit = (PFN_vkQueueSubmit)dlsym(lib, "vkQueueSubmit");
523     out->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)dlsym(lib, "vkQueueWaitIdle");
524     out->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)dlsym(lib, "vkDeviceWaitIdle");
525     out->vkDestroyInstance = (PFN_vkDestroyInstance)dlsym(lib, "vkDestroyInstance");
526     out->vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)dlsym(lib, "vkEnumeratePhysicalDevices");
527     out->vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)dlsym(lib, "vkGetPhysicalDeviceFeatures");
528     out->vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)dlsym(lib, "vkGetPhysicalDeviceFormatProperties");
529     out->vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)dlsym(lib, "vkGetPhysicalDeviceImageFormatProperties");
530     out->vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)dlsym(lib, "vkGetPhysicalDeviceProperties");
531     out->vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)dlsym(lib, "vkGetPhysicalDeviceQueueFamilyProperties");
532     out->vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)dlsym(lib, "vkGetPhysicalDeviceMemoryProperties");
533     out->vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(lib, "vkGetInstanceProcAddr");
534     out->vkCreateDevice = (PFN_vkCreateDevice)dlsym(lib, "vkCreateDevice");
535     out->vkDestroyDevice = (PFN_vkDestroyDevice)dlsym(lib, "vkDestroyDevice");
536     out->vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)dlsym(lib, "vkEnumerateDeviceExtensionProperties");
537     out->vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)dlsym(lib, "vkEnumerateDeviceLayerProperties");
538     out->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)dlsym(lib, "vkGetDeviceQueue");
539     out->vkQueueSubmit = (PFN_vkQueueSubmit)dlsym(lib, "vkQueueSubmit");
540     out->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)dlsym(lib, "vkQueueWaitIdle");
541     out->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)dlsym(lib, "vkDeviceWaitIdle");
542 #endif
543     return out;
544 }
545 
546 } // extern "C"
547