]> git.sesse.net Git - pistorm/blob - raylib/external/glfw/deps/glad_vulkan.c
5adfbbbe8b2496bbe6c82f2c3619545c475a1d02
[pistorm] / raylib / external / glfw / deps / glad_vulkan.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <glad/vulkan.h>
5
6 #ifndef GLAD_IMPL_UTIL_C_
7 #define GLAD_IMPL_UTIL_C_
8
9 #ifdef _MSC_VER
10 #define GLAD_IMPL_UTIL_SSCANF sscanf_s
11 #else
12 #define GLAD_IMPL_UTIL_SSCANF sscanf
13 #endif
14
15 #endif /* GLAD_IMPL_UTIL_C_ */
16
17
18 int GLAD_VK_VERSION_1_0 = 0;
19 int GLAD_VK_VERSION_1_1 = 0;
20 int GLAD_VK_EXT_debug_report = 0;
21 int GLAD_VK_KHR_surface = 0;
22 int GLAD_VK_KHR_swapchain = 0;
23
24
25
26 PFN_vkAcquireNextImage2KHR glad_vkAcquireNextImage2KHR = NULL;
27 PFN_vkAcquireNextImageKHR glad_vkAcquireNextImageKHR = NULL;
28 PFN_vkAllocateCommandBuffers glad_vkAllocateCommandBuffers = NULL;
29 PFN_vkAllocateDescriptorSets glad_vkAllocateDescriptorSets = NULL;
30 PFN_vkAllocateMemory glad_vkAllocateMemory = NULL;
31 PFN_vkBeginCommandBuffer glad_vkBeginCommandBuffer = NULL;
32 PFN_vkBindBufferMemory glad_vkBindBufferMemory = NULL;
33 PFN_vkBindBufferMemory2 glad_vkBindBufferMemory2 = NULL;
34 PFN_vkBindImageMemory glad_vkBindImageMemory = NULL;
35 PFN_vkBindImageMemory2 glad_vkBindImageMemory2 = NULL;
36 PFN_vkCmdBeginQuery glad_vkCmdBeginQuery = NULL;
37 PFN_vkCmdBeginRenderPass glad_vkCmdBeginRenderPass = NULL;
38 PFN_vkCmdBindDescriptorSets glad_vkCmdBindDescriptorSets = NULL;
39 PFN_vkCmdBindIndexBuffer glad_vkCmdBindIndexBuffer = NULL;
40 PFN_vkCmdBindPipeline glad_vkCmdBindPipeline = NULL;
41 PFN_vkCmdBindVertexBuffers glad_vkCmdBindVertexBuffers = NULL;
42 PFN_vkCmdBlitImage glad_vkCmdBlitImage = NULL;
43 PFN_vkCmdClearAttachments glad_vkCmdClearAttachments = NULL;
44 PFN_vkCmdClearColorImage glad_vkCmdClearColorImage = NULL;
45 PFN_vkCmdClearDepthStencilImage glad_vkCmdClearDepthStencilImage = NULL;
46 PFN_vkCmdCopyBuffer glad_vkCmdCopyBuffer = NULL;
47 PFN_vkCmdCopyBufferToImage glad_vkCmdCopyBufferToImage = NULL;
48 PFN_vkCmdCopyImage glad_vkCmdCopyImage = NULL;
49 PFN_vkCmdCopyImageToBuffer glad_vkCmdCopyImageToBuffer = NULL;
50 PFN_vkCmdCopyQueryPoolResults glad_vkCmdCopyQueryPoolResults = NULL;
51 PFN_vkCmdDispatch glad_vkCmdDispatch = NULL;
52 PFN_vkCmdDispatchBase glad_vkCmdDispatchBase = NULL;
53 PFN_vkCmdDispatchIndirect glad_vkCmdDispatchIndirect = NULL;
54 PFN_vkCmdDraw glad_vkCmdDraw = NULL;
55 PFN_vkCmdDrawIndexed glad_vkCmdDrawIndexed = NULL;
56 PFN_vkCmdDrawIndexedIndirect glad_vkCmdDrawIndexedIndirect = NULL;
57 PFN_vkCmdDrawIndirect glad_vkCmdDrawIndirect = NULL;
58 PFN_vkCmdEndQuery glad_vkCmdEndQuery = NULL;
59 PFN_vkCmdEndRenderPass glad_vkCmdEndRenderPass = NULL;
60 PFN_vkCmdExecuteCommands glad_vkCmdExecuteCommands = NULL;
61 PFN_vkCmdFillBuffer glad_vkCmdFillBuffer = NULL;
62 PFN_vkCmdNextSubpass glad_vkCmdNextSubpass = NULL;
63 PFN_vkCmdPipelineBarrier glad_vkCmdPipelineBarrier = NULL;
64 PFN_vkCmdPushConstants glad_vkCmdPushConstants = NULL;
65 PFN_vkCmdResetEvent glad_vkCmdResetEvent = NULL;
66 PFN_vkCmdResetQueryPool glad_vkCmdResetQueryPool = NULL;
67 PFN_vkCmdResolveImage glad_vkCmdResolveImage = NULL;
68 PFN_vkCmdSetBlendConstants glad_vkCmdSetBlendConstants = NULL;
69 PFN_vkCmdSetDepthBias glad_vkCmdSetDepthBias = NULL;
70 PFN_vkCmdSetDepthBounds glad_vkCmdSetDepthBounds = NULL;
71 PFN_vkCmdSetDeviceMask glad_vkCmdSetDeviceMask = NULL;
72 PFN_vkCmdSetEvent glad_vkCmdSetEvent = NULL;
73 PFN_vkCmdSetLineWidth glad_vkCmdSetLineWidth = NULL;
74 PFN_vkCmdSetScissor glad_vkCmdSetScissor = NULL;
75 PFN_vkCmdSetStencilCompareMask glad_vkCmdSetStencilCompareMask = NULL;
76 PFN_vkCmdSetStencilReference glad_vkCmdSetStencilReference = NULL;
77 PFN_vkCmdSetStencilWriteMask glad_vkCmdSetStencilWriteMask = NULL;
78 PFN_vkCmdSetViewport glad_vkCmdSetViewport = NULL;
79 PFN_vkCmdUpdateBuffer glad_vkCmdUpdateBuffer = NULL;
80 PFN_vkCmdWaitEvents glad_vkCmdWaitEvents = NULL;
81 PFN_vkCmdWriteTimestamp glad_vkCmdWriteTimestamp = NULL;
82 PFN_vkCreateBuffer glad_vkCreateBuffer = NULL;
83 PFN_vkCreateBufferView glad_vkCreateBufferView = NULL;
84 PFN_vkCreateCommandPool glad_vkCreateCommandPool = NULL;
85 PFN_vkCreateComputePipelines glad_vkCreateComputePipelines = NULL;
86 PFN_vkCreateDebugReportCallbackEXT glad_vkCreateDebugReportCallbackEXT = NULL;
87 PFN_vkCreateDescriptorPool glad_vkCreateDescriptorPool = NULL;
88 PFN_vkCreateDescriptorSetLayout glad_vkCreateDescriptorSetLayout = NULL;
89 PFN_vkCreateDescriptorUpdateTemplate glad_vkCreateDescriptorUpdateTemplate = NULL;
90 PFN_vkCreateDevice glad_vkCreateDevice = NULL;
91 PFN_vkCreateEvent glad_vkCreateEvent = NULL;
92 PFN_vkCreateFence glad_vkCreateFence = NULL;
93 PFN_vkCreateFramebuffer glad_vkCreateFramebuffer = NULL;
94 PFN_vkCreateGraphicsPipelines glad_vkCreateGraphicsPipelines = NULL;
95 PFN_vkCreateImage glad_vkCreateImage = NULL;
96 PFN_vkCreateImageView glad_vkCreateImageView = NULL;
97 PFN_vkCreateInstance glad_vkCreateInstance = NULL;
98 PFN_vkCreatePipelineCache glad_vkCreatePipelineCache = NULL;
99 PFN_vkCreatePipelineLayout glad_vkCreatePipelineLayout = NULL;
100 PFN_vkCreateQueryPool glad_vkCreateQueryPool = NULL;
101 PFN_vkCreateRenderPass glad_vkCreateRenderPass = NULL;
102 PFN_vkCreateSampler glad_vkCreateSampler = NULL;
103 PFN_vkCreateSamplerYcbcrConversion glad_vkCreateSamplerYcbcrConversion = NULL;
104 PFN_vkCreateSemaphore glad_vkCreateSemaphore = NULL;
105 PFN_vkCreateShaderModule glad_vkCreateShaderModule = NULL;
106 PFN_vkCreateSwapchainKHR glad_vkCreateSwapchainKHR = NULL;
107 PFN_vkDebugReportMessageEXT glad_vkDebugReportMessageEXT = NULL;
108 PFN_vkDestroyBuffer glad_vkDestroyBuffer = NULL;
109 PFN_vkDestroyBufferView glad_vkDestroyBufferView = NULL;
110 PFN_vkDestroyCommandPool glad_vkDestroyCommandPool = NULL;
111 PFN_vkDestroyDebugReportCallbackEXT glad_vkDestroyDebugReportCallbackEXT = NULL;
112 PFN_vkDestroyDescriptorPool glad_vkDestroyDescriptorPool = NULL;
113 PFN_vkDestroyDescriptorSetLayout glad_vkDestroyDescriptorSetLayout = NULL;
114 PFN_vkDestroyDescriptorUpdateTemplate glad_vkDestroyDescriptorUpdateTemplate = NULL;
115 PFN_vkDestroyDevice glad_vkDestroyDevice = NULL;
116 PFN_vkDestroyEvent glad_vkDestroyEvent = NULL;
117 PFN_vkDestroyFence glad_vkDestroyFence = NULL;
118 PFN_vkDestroyFramebuffer glad_vkDestroyFramebuffer = NULL;
119 PFN_vkDestroyImage glad_vkDestroyImage = NULL;
120 PFN_vkDestroyImageView glad_vkDestroyImageView = NULL;
121 PFN_vkDestroyInstance glad_vkDestroyInstance = NULL;
122 PFN_vkDestroyPipeline glad_vkDestroyPipeline = NULL;
123 PFN_vkDestroyPipelineCache glad_vkDestroyPipelineCache = NULL;
124 PFN_vkDestroyPipelineLayout glad_vkDestroyPipelineLayout = NULL;
125 PFN_vkDestroyQueryPool glad_vkDestroyQueryPool = NULL;
126 PFN_vkDestroyRenderPass glad_vkDestroyRenderPass = NULL;
127 PFN_vkDestroySampler glad_vkDestroySampler = NULL;
128 PFN_vkDestroySamplerYcbcrConversion glad_vkDestroySamplerYcbcrConversion = NULL;
129 PFN_vkDestroySemaphore glad_vkDestroySemaphore = NULL;
130 PFN_vkDestroyShaderModule glad_vkDestroyShaderModule = NULL;
131 PFN_vkDestroySurfaceKHR glad_vkDestroySurfaceKHR = NULL;
132 PFN_vkDestroySwapchainKHR glad_vkDestroySwapchainKHR = NULL;
133 PFN_vkDeviceWaitIdle glad_vkDeviceWaitIdle = NULL;
134 PFN_vkEndCommandBuffer glad_vkEndCommandBuffer = NULL;
135 PFN_vkEnumerateDeviceExtensionProperties glad_vkEnumerateDeviceExtensionProperties = NULL;
136 PFN_vkEnumerateDeviceLayerProperties glad_vkEnumerateDeviceLayerProperties = NULL;
137 PFN_vkEnumerateInstanceExtensionProperties glad_vkEnumerateInstanceExtensionProperties = NULL;
138 PFN_vkEnumerateInstanceLayerProperties glad_vkEnumerateInstanceLayerProperties = NULL;
139 PFN_vkEnumerateInstanceVersion glad_vkEnumerateInstanceVersion = NULL;
140 PFN_vkEnumeratePhysicalDeviceGroups glad_vkEnumeratePhysicalDeviceGroups = NULL;
141 PFN_vkEnumeratePhysicalDevices glad_vkEnumeratePhysicalDevices = NULL;
142 PFN_vkFlushMappedMemoryRanges glad_vkFlushMappedMemoryRanges = NULL;
143 PFN_vkFreeCommandBuffers glad_vkFreeCommandBuffers = NULL;
144 PFN_vkFreeDescriptorSets glad_vkFreeDescriptorSets = NULL;
145 PFN_vkFreeMemory glad_vkFreeMemory = NULL;
146 PFN_vkGetBufferMemoryRequirements glad_vkGetBufferMemoryRequirements = NULL;
147 PFN_vkGetBufferMemoryRequirements2 glad_vkGetBufferMemoryRequirements2 = NULL;
148 PFN_vkGetDescriptorSetLayoutSupport glad_vkGetDescriptorSetLayoutSupport = NULL;
149 PFN_vkGetDeviceGroupPeerMemoryFeatures glad_vkGetDeviceGroupPeerMemoryFeatures = NULL;
150 PFN_vkGetDeviceGroupPresentCapabilitiesKHR glad_vkGetDeviceGroupPresentCapabilitiesKHR = NULL;
151 PFN_vkGetDeviceGroupSurfacePresentModesKHR glad_vkGetDeviceGroupSurfacePresentModesKHR = NULL;
152 PFN_vkGetDeviceMemoryCommitment glad_vkGetDeviceMemoryCommitment = NULL;
153 PFN_vkGetDeviceProcAddr glad_vkGetDeviceProcAddr = NULL;
154 PFN_vkGetDeviceQueue glad_vkGetDeviceQueue = NULL;
155 PFN_vkGetDeviceQueue2 glad_vkGetDeviceQueue2 = NULL;
156 PFN_vkGetEventStatus glad_vkGetEventStatus = NULL;
157 PFN_vkGetFenceStatus glad_vkGetFenceStatus = NULL;
158 PFN_vkGetImageMemoryRequirements glad_vkGetImageMemoryRequirements = NULL;
159 PFN_vkGetImageMemoryRequirements2 glad_vkGetImageMemoryRequirements2 = NULL;
160 PFN_vkGetImageSparseMemoryRequirements glad_vkGetImageSparseMemoryRequirements = NULL;
161 PFN_vkGetImageSparseMemoryRequirements2 glad_vkGetImageSparseMemoryRequirements2 = NULL;
162 PFN_vkGetImageSubresourceLayout glad_vkGetImageSubresourceLayout = NULL;
163 PFN_vkGetInstanceProcAddr glad_vkGetInstanceProcAddr = NULL;
164 PFN_vkGetPhysicalDeviceExternalBufferProperties glad_vkGetPhysicalDeviceExternalBufferProperties = NULL;
165 PFN_vkGetPhysicalDeviceExternalFenceProperties glad_vkGetPhysicalDeviceExternalFenceProperties = NULL;
166 PFN_vkGetPhysicalDeviceExternalSemaphoreProperties glad_vkGetPhysicalDeviceExternalSemaphoreProperties = NULL;
167 PFN_vkGetPhysicalDeviceFeatures glad_vkGetPhysicalDeviceFeatures = NULL;
168 PFN_vkGetPhysicalDeviceFeatures2 glad_vkGetPhysicalDeviceFeatures2 = NULL;
169 PFN_vkGetPhysicalDeviceFormatProperties glad_vkGetPhysicalDeviceFormatProperties = NULL;
170 PFN_vkGetPhysicalDeviceFormatProperties2 glad_vkGetPhysicalDeviceFormatProperties2 = NULL;
171 PFN_vkGetPhysicalDeviceImageFormatProperties glad_vkGetPhysicalDeviceImageFormatProperties = NULL;
172 PFN_vkGetPhysicalDeviceImageFormatProperties2 glad_vkGetPhysicalDeviceImageFormatProperties2 = NULL;
173 PFN_vkGetPhysicalDeviceMemoryProperties glad_vkGetPhysicalDeviceMemoryProperties = NULL;
174 PFN_vkGetPhysicalDeviceMemoryProperties2 glad_vkGetPhysicalDeviceMemoryProperties2 = NULL;
175 PFN_vkGetPhysicalDevicePresentRectanglesKHR glad_vkGetPhysicalDevicePresentRectanglesKHR = NULL;
176 PFN_vkGetPhysicalDeviceProperties glad_vkGetPhysicalDeviceProperties = NULL;
177 PFN_vkGetPhysicalDeviceProperties2 glad_vkGetPhysicalDeviceProperties2 = NULL;
178 PFN_vkGetPhysicalDeviceQueueFamilyProperties glad_vkGetPhysicalDeviceQueueFamilyProperties = NULL;
179 PFN_vkGetPhysicalDeviceQueueFamilyProperties2 glad_vkGetPhysicalDeviceQueueFamilyProperties2 = NULL;
180 PFN_vkGetPhysicalDeviceSparseImageFormatProperties glad_vkGetPhysicalDeviceSparseImageFormatProperties = NULL;
181 PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 glad_vkGetPhysicalDeviceSparseImageFormatProperties2 = NULL;
182 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR glad_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = NULL;
183 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR glad_vkGetPhysicalDeviceSurfaceFormatsKHR = NULL;
184 PFN_vkGetPhysicalDeviceSurfacePresentModesKHR glad_vkGetPhysicalDeviceSurfacePresentModesKHR = NULL;
185 PFN_vkGetPhysicalDeviceSurfaceSupportKHR glad_vkGetPhysicalDeviceSurfaceSupportKHR = NULL;
186 PFN_vkGetPipelineCacheData glad_vkGetPipelineCacheData = NULL;
187 PFN_vkGetQueryPoolResults glad_vkGetQueryPoolResults = NULL;
188 PFN_vkGetRenderAreaGranularity glad_vkGetRenderAreaGranularity = NULL;
189 PFN_vkGetSwapchainImagesKHR glad_vkGetSwapchainImagesKHR = NULL;
190 PFN_vkInvalidateMappedMemoryRanges glad_vkInvalidateMappedMemoryRanges = NULL;
191 PFN_vkMapMemory glad_vkMapMemory = NULL;
192 PFN_vkMergePipelineCaches glad_vkMergePipelineCaches = NULL;
193 PFN_vkQueueBindSparse glad_vkQueueBindSparse = NULL;
194 PFN_vkQueuePresentKHR glad_vkQueuePresentKHR = NULL;
195 PFN_vkQueueSubmit glad_vkQueueSubmit = NULL;
196 PFN_vkQueueWaitIdle glad_vkQueueWaitIdle = NULL;
197 PFN_vkResetCommandBuffer glad_vkResetCommandBuffer = NULL;
198 PFN_vkResetCommandPool glad_vkResetCommandPool = NULL;
199 PFN_vkResetDescriptorPool glad_vkResetDescriptorPool = NULL;
200 PFN_vkResetEvent glad_vkResetEvent = NULL;
201 PFN_vkResetFences glad_vkResetFences = NULL;
202 PFN_vkSetEvent glad_vkSetEvent = NULL;
203 PFN_vkTrimCommandPool glad_vkTrimCommandPool = NULL;
204 PFN_vkUnmapMemory glad_vkUnmapMemory = NULL;
205 PFN_vkUpdateDescriptorSetWithTemplate glad_vkUpdateDescriptorSetWithTemplate = NULL;
206 PFN_vkUpdateDescriptorSets glad_vkUpdateDescriptorSets = NULL;
207 PFN_vkWaitForFences glad_vkWaitForFences = NULL;
208
209
210 static void glad_vk_load_VK_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) {
211     if(!GLAD_VK_VERSION_1_0) return;
212     vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers) load("vkAllocateCommandBuffers", userptr);
213     vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets) load("vkAllocateDescriptorSets", userptr);
214     vkAllocateMemory = (PFN_vkAllocateMemory) load("vkAllocateMemory", userptr);
215     vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer) load("vkBeginCommandBuffer", userptr);
216     vkBindBufferMemory = (PFN_vkBindBufferMemory) load("vkBindBufferMemory", userptr);
217     vkBindImageMemory = (PFN_vkBindImageMemory) load("vkBindImageMemory", userptr);
218     vkCmdBeginQuery = (PFN_vkCmdBeginQuery) load("vkCmdBeginQuery", userptr);
219     vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass) load("vkCmdBeginRenderPass", userptr);
220     vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets) load("vkCmdBindDescriptorSets", userptr);
221     vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer) load("vkCmdBindIndexBuffer", userptr);
222     vkCmdBindPipeline = (PFN_vkCmdBindPipeline) load("vkCmdBindPipeline", userptr);
223     vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers) load("vkCmdBindVertexBuffers", userptr);
224     vkCmdBlitImage = (PFN_vkCmdBlitImage) load("vkCmdBlitImage", userptr);
225     vkCmdClearAttachments = (PFN_vkCmdClearAttachments) load("vkCmdClearAttachments", userptr);
226     vkCmdClearColorImage = (PFN_vkCmdClearColorImage) load("vkCmdClearColorImage", userptr);
227     vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage) load("vkCmdClearDepthStencilImage", userptr);
228     vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer) load("vkCmdCopyBuffer", userptr);
229     vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage) load("vkCmdCopyBufferToImage", userptr);
230     vkCmdCopyImage = (PFN_vkCmdCopyImage) load("vkCmdCopyImage", userptr);
231     vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer) load("vkCmdCopyImageToBuffer", userptr);
232     vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults) load("vkCmdCopyQueryPoolResults", userptr);
233     vkCmdDispatch = (PFN_vkCmdDispatch) load("vkCmdDispatch", userptr);
234     vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect) load("vkCmdDispatchIndirect", userptr);
235     vkCmdDraw = (PFN_vkCmdDraw) load("vkCmdDraw", userptr);
236     vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed) load("vkCmdDrawIndexed", userptr);
237     vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect) load("vkCmdDrawIndexedIndirect", userptr);
238     vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect) load("vkCmdDrawIndirect", userptr);
239     vkCmdEndQuery = (PFN_vkCmdEndQuery) load("vkCmdEndQuery", userptr);
240     vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass) load("vkCmdEndRenderPass", userptr);
241     vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands) load("vkCmdExecuteCommands", userptr);
242     vkCmdFillBuffer = (PFN_vkCmdFillBuffer) load("vkCmdFillBuffer", userptr);
243     vkCmdNextSubpass = (PFN_vkCmdNextSubpass) load("vkCmdNextSubpass", userptr);
244     vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier) load("vkCmdPipelineBarrier", userptr);
245     vkCmdPushConstants = (PFN_vkCmdPushConstants) load("vkCmdPushConstants", userptr);
246     vkCmdResetEvent = (PFN_vkCmdResetEvent) load("vkCmdResetEvent", userptr);
247     vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool) load("vkCmdResetQueryPool", userptr);
248     vkCmdResolveImage = (PFN_vkCmdResolveImage) load("vkCmdResolveImage", userptr);
249     vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants) load("vkCmdSetBlendConstants", userptr);
250     vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias) load("vkCmdSetDepthBias", userptr);
251     vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds) load("vkCmdSetDepthBounds", userptr);
252     vkCmdSetEvent = (PFN_vkCmdSetEvent) load("vkCmdSetEvent", userptr);
253     vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth) load("vkCmdSetLineWidth", userptr);
254     vkCmdSetScissor = (PFN_vkCmdSetScissor) load("vkCmdSetScissor", userptr);
255     vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask) load("vkCmdSetStencilCompareMask", userptr);
256     vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference) load("vkCmdSetStencilReference", userptr);
257     vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask) load("vkCmdSetStencilWriteMask", userptr);
258     vkCmdSetViewport = (PFN_vkCmdSetViewport) load("vkCmdSetViewport", userptr);
259     vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer) load("vkCmdUpdateBuffer", userptr);
260     vkCmdWaitEvents = (PFN_vkCmdWaitEvents) load("vkCmdWaitEvents", userptr);
261     vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp) load("vkCmdWriteTimestamp", userptr);
262     vkCreateBuffer = (PFN_vkCreateBuffer) load("vkCreateBuffer", userptr);
263     vkCreateBufferView = (PFN_vkCreateBufferView) load("vkCreateBufferView", userptr);
264     vkCreateCommandPool = (PFN_vkCreateCommandPool) load("vkCreateCommandPool", userptr);
265     vkCreateComputePipelines = (PFN_vkCreateComputePipelines) load("vkCreateComputePipelines", userptr);
266     vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool) load("vkCreateDescriptorPool", userptr);
267     vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout) load("vkCreateDescriptorSetLayout", userptr);
268     vkCreateDevice = (PFN_vkCreateDevice) load("vkCreateDevice", userptr);
269     vkCreateEvent = (PFN_vkCreateEvent) load("vkCreateEvent", userptr);
270     vkCreateFence = (PFN_vkCreateFence) load("vkCreateFence", userptr);
271     vkCreateFramebuffer = (PFN_vkCreateFramebuffer) load("vkCreateFramebuffer", userptr);
272     vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines) load("vkCreateGraphicsPipelines", userptr);
273     vkCreateImage = (PFN_vkCreateImage) load("vkCreateImage", userptr);
274     vkCreateImageView = (PFN_vkCreateImageView) load("vkCreateImageView", userptr);
275     vkCreateInstance = (PFN_vkCreateInstance) load("vkCreateInstance", userptr);
276     vkCreatePipelineCache = (PFN_vkCreatePipelineCache) load("vkCreatePipelineCache", userptr);
277     vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout) load("vkCreatePipelineLayout", userptr);
278     vkCreateQueryPool = (PFN_vkCreateQueryPool) load("vkCreateQueryPool", userptr);
279     vkCreateRenderPass = (PFN_vkCreateRenderPass) load("vkCreateRenderPass", userptr);
280     vkCreateSampler = (PFN_vkCreateSampler) load("vkCreateSampler", userptr);
281     vkCreateSemaphore = (PFN_vkCreateSemaphore) load("vkCreateSemaphore", userptr);
282     vkCreateShaderModule = (PFN_vkCreateShaderModule) load("vkCreateShaderModule", userptr);
283     vkDestroyBuffer = (PFN_vkDestroyBuffer) load("vkDestroyBuffer", userptr);
284     vkDestroyBufferView = (PFN_vkDestroyBufferView) load("vkDestroyBufferView", userptr);
285     vkDestroyCommandPool = (PFN_vkDestroyCommandPool) load("vkDestroyCommandPool", userptr);
286     vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool) load("vkDestroyDescriptorPool", userptr);
287     vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout) load("vkDestroyDescriptorSetLayout", userptr);
288     vkDestroyDevice = (PFN_vkDestroyDevice) load("vkDestroyDevice", userptr);
289     vkDestroyEvent = (PFN_vkDestroyEvent) load("vkDestroyEvent", userptr);
290     vkDestroyFence = (PFN_vkDestroyFence) load("vkDestroyFence", userptr);
291     vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer) load("vkDestroyFramebuffer", userptr);
292     vkDestroyImage = (PFN_vkDestroyImage) load("vkDestroyImage", userptr);
293     vkDestroyImageView = (PFN_vkDestroyImageView) load("vkDestroyImageView", userptr);
294     vkDestroyInstance = (PFN_vkDestroyInstance) load("vkDestroyInstance", userptr);
295     vkDestroyPipeline = (PFN_vkDestroyPipeline) load("vkDestroyPipeline", userptr);
296     vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache) load("vkDestroyPipelineCache", userptr);
297     vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout) load("vkDestroyPipelineLayout", userptr);
298     vkDestroyQueryPool = (PFN_vkDestroyQueryPool) load("vkDestroyQueryPool", userptr);
299     vkDestroyRenderPass = (PFN_vkDestroyRenderPass) load("vkDestroyRenderPass", userptr);
300     vkDestroySampler = (PFN_vkDestroySampler) load("vkDestroySampler", userptr);
301     vkDestroySemaphore = (PFN_vkDestroySemaphore) load("vkDestroySemaphore", userptr);
302     vkDestroyShaderModule = (PFN_vkDestroyShaderModule) load("vkDestroyShaderModule", userptr);
303     vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle) load("vkDeviceWaitIdle", userptr);
304     vkEndCommandBuffer = (PFN_vkEndCommandBuffer) load("vkEndCommandBuffer", userptr);
305     vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties) load("vkEnumerateDeviceExtensionProperties", userptr);
306     vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties) load("vkEnumerateDeviceLayerProperties", userptr);
307     vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties) load("vkEnumerateInstanceExtensionProperties", userptr);
308     vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties) load("vkEnumerateInstanceLayerProperties", userptr);
309     vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) load("vkEnumeratePhysicalDevices", userptr);
310     vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges) load("vkFlushMappedMemoryRanges", userptr);
311     vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers) load("vkFreeCommandBuffers", userptr);
312     vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets) load("vkFreeDescriptorSets", userptr);
313     vkFreeMemory = (PFN_vkFreeMemory) load("vkFreeMemory", userptr);
314     vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements) load("vkGetBufferMemoryRequirements", userptr);
315     vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment) load("vkGetDeviceMemoryCommitment", userptr);
316     vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr) load("vkGetDeviceProcAddr", userptr);
317     vkGetDeviceQueue = (PFN_vkGetDeviceQueue) load("vkGetDeviceQueue", userptr);
318     vkGetEventStatus = (PFN_vkGetEventStatus) load("vkGetEventStatus", userptr);
319     vkGetFenceStatus = (PFN_vkGetFenceStatus) load("vkGetFenceStatus", userptr);
320     vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements) load("vkGetImageMemoryRequirements", userptr);
321     vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements) load("vkGetImageSparseMemoryRequirements", userptr);
322     vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout) load("vkGetImageSubresourceLayout", userptr);
323     vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) load("vkGetInstanceProcAddr", userptr);
324     vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures) load("vkGetPhysicalDeviceFeatures", userptr);
325     vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties) load("vkGetPhysicalDeviceFormatProperties", userptr);
326     vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties) load("vkGetPhysicalDeviceImageFormatProperties", userptr);
327     vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties) load("vkGetPhysicalDeviceMemoryProperties", userptr);
328     vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties) load("vkGetPhysicalDeviceProperties", userptr);
329     vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties) load("vkGetPhysicalDeviceQueueFamilyProperties", userptr);
330     vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties) load("vkGetPhysicalDeviceSparseImageFormatProperties", userptr);
331     vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData) load("vkGetPipelineCacheData", userptr);
332     vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults) load("vkGetQueryPoolResults", userptr);
333     vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity) load("vkGetRenderAreaGranularity", userptr);
334     vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges) load("vkInvalidateMappedMemoryRanges", userptr);
335     vkMapMemory = (PFN_vkMapMemory) load("vkMapMemory", userptr);
336     vkMergePipelineCaches = (PFN_vkMergePipelineCaches) load("vkMergePipelineCaches", userptr);
337     vkQueueBindSparse = (PFN_vkQueueBindSparse) load("vkQueueBindSparse", userptr);
338     vkQueueSubmit = (PFN_vkQueueSubmit) load("vkQueueSubmit", userptr);
339     vkQueueWaitIdle = (PFN_vkQueueWaitIdle) load("vkQueueWaitIdle", userptr);
340     vkResetCommandBuffer = (PFN_vkResetCommandBuffer) load("vkResetCommandBuffer", userptr);
341     vkResetCommandPool = (PFN_vkResetCommandPool) load("vkResetCommandPool", userptr);
342     vkResetDescriptorPool = (PFN_vkResetDescriptorPool) load("vkResetDescriptorPool", userptr);
343     vkResetEvent = (PFN_vkResetEvent) load("vkResetEvent", userptr);
344     vkResetFences = (PFN_vkResetFences) load("vkResetFences", userptr);
345     vkSetEvent = (PFN_vkSetEvent) load("vkSetEvent", userptr);
346     vkUnmapMemory = (PFN_vkUnmapMemory) load("vkUnmapMemory", userptr);
347     vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets) load("vkUpdateDescriptorSets", userptr);
348     vkWaitForFences = (PFN_vkWaitForFences) load("vkWaitForFences", userptr);
349 }
350 static void glad_vk_load_VK_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) {
351     if(!GLAD_VK_VERSION_1_1) return;
352     vkBindBufferMemory2 = (PFN_vkBindBufferMemory2) load("vkBindBufferMemory2", userptr);
353     vkBindImageMemory2 = (PFN_vkBindImageMemory2) load("vkBindImageMemory2", userptr);
354     vkCmdDispatchBase = (PFN_vkCmdDispatchBase) load("vkCmdDispatchBase", userptr);
355     vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask) load("vkCmdSetDeviceMask", userptr);
356     vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate) load("vkCreateDescriptorUpdateTemplate", userptr);
357     vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion) load("vkCreateSamplerYcbcrConversion", userptr);
358     vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate) load("vkDestroyDescriptorUpdateTemplate", userptr);
359     vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion) load("vkDestroySamplerYcbcrConversion", userptr);
360     vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion) load("vkEnumerateInstanceVersion", userptr);
361     vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups) load("vkEnumeratePhysicalDeviceGroups", userptr);
362     vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2) load("vkGetBufferMemoryRequirements2", userptr);
363     vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport) load("vkGetDescriptorSetLayoutSupport", userptr);
364     vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures) load("vkGetDeviceGroupPeerMemoryFeatures", userptr);
365     vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2) load("vkGetDeviceQueue2", userptr);
366     vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2) load("vkGetImageMemoryRequirements2", userptr);
367     vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2) load("vkGetImageSparseMemoryRequirements2", userptr);
368     vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties) load("vkGetPhysicalDeviceExternalBufferProperties", userptr);
369     vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties) load("vkGetPhysicalDeviceExternalFenceProperties", userptr);
370     vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties) load("vkGetPhysicalDeviceExternalSemaphoreProperties", userptr);
371     vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2) load("vkGetPhysicalDeviceFeatures2", userptr);
372     vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2) load("vkGetPhysicalDeviceFormatProperties2", userptr);
373     vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2) load("vkGetPhysicalDeviceImageFormatProperties2", userptr);
374     vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2) load("vkGetPhysicalDeviceMemoryProperties2", userptr);
375     vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) load("vkGetPhysicalDeviceProperties2", userptr);
376     vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2) load("vkGetPhysicalDeviceQueueFamilyProperties2", userptr);
377     vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2) load("vkGetPhysicalDeviceSparseImageFormatProperties2", userptr);
378     vkTrimCommandPool = (PFN_vkTrimCommandPool) load("vkTrimCommandPool", userptr);
379     vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate) load("vkUpdateDescriptorSetWithTemplate", userptr);
380 }
381 static void glad_vk_load_VK_EXT_debug_report( GLADuserptrloadfunc load, void* userptr) {
382     if(!GLAD_VK_EXT_debug_report) return;
383     vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT) load("vkCreateDebugReportCallbackEXT", userptr);
384     vkDebugReportMessageEXT = (PFN_vkDebugReportMessageEXT) load("vkDebugReportMessageEXT", userptr);
385     vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT) load("vkDestroyDebugReportCallbackEXT", userptr);
386 }
387 static void glad_vk_load_VK_KHR_surface( GLADuserptrloadfunc load, void* userptr) {
388     if(!GLAD_VK_KHR_surface) return;
389     vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR) load("vkDestroySurfaceKHR", userptr);
390     vkGetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR) load("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", userptr);
391     vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR) load("vkGetPhysicalDeviceSurfaceFormatsKHR", userptr);
392     vkGetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR) load("vkGetPhysicalDeviceSurfacePresentModesKHR", userptr);
393     vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR) load("vkGetPhysicalDeviceSurfaceSupportKHR", userptr);
394 }
395 static void glad_vk_load_VK_KHR_swapchain( GLADuserptrloadfunc load, void* userptr) {
396     if(!GLAD_VK_KHR_swapchain) return;
397     vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR) load("vkAcquireNextImage2KHR", userptr);
398     vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR) load("vkAcquireNextImageKHR", userptr);
399     vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR) load("vkCreateSwapchainKHR", userptr);
400     vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR) load("vkDestroySwapchainKHR", userptr);
401     vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR) load("vkGetDeviceGroupPresentCapabilitiesKHR", userptr);
402     vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR) load("vkGetDeviceGroupSurfacePresentModesKHR", userptr);
403     vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR) load("vkGetPhysicalDevicePresentRectanglesKHR", userptr);
404     vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR) load("vkGetSwapchainImagesKHR", userptr);
405     vkQueuePresentKHR = (PFN_vkQueuePresentKHR) load("vkQueuePresentKHR", userptr);
406 }
407
408
409
410 static int glad_vk_get_extensions( VkPhysicalDevice physical_device, uint32_t *out_extension_count, char ***out_extensions) {
411     uint32_t i;
412     uint32_t instance_extension_count = 0;
413     uint32_t device_extension_count = 0;
414     uint32_t max_extension_count;
415     uint32_t total_extension_count;
416     char **extensions;
417     VkExtensionProperties *ext_properties;
418     VkResult result;
419
420     if (vkEnumerateInstanceExtensionProperties == NULL || (physical_device != NULL && vkEnumerateDeviceExtensionProperties == NULL)) {
421         return 0;
422     }
423
424     result = vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, NULL);
425     if (result != VK_SUCCESS) {
426         return 0;
427     }
428
429     if (physical_device != NULL) {
430         result = vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, NULL);
431         if (result != VK_SUCCESS) {
432             return 0;
433         }
434     }
435
436     total_extension_count = instance_extension_count + device_extension_count;
437     max_extension_count = instance_extension_count > device_extension_count
438         ? instance_extension_count : device_extension_count;
439
440     ext_properties = (VkExtensionProperties*) malloc(max_extension_count * sizeof(VkExtensionProperties));
441     if (ext_properties == NULL) {
442         return 0;
443     }
444
445     result = vkEnumerateInstanceExtensionProperties(NULL, &instance_extension_count, ext_properties);
446     if (result != VK_SUCCESS) {
447         free((void*) ext_properties);
448         return 0;
449     }
450
451     extensions = (char**) calloc(total_extension_count, sizeof(char*));
452     if (extensions == NULL) {
453         free((void*) ext_properties);
454         return 0;
455     }
456
457     for (i = 0; i < instance_extension_count; ++i) {
458         VkExtensionProperties ext = ext_properties[i];
459
460         size_t extension_name_length = strlen(ext.extensionName) + 1;
461         extensions[i] = (char*) malloc(extension_name_length * sizeof(char));
462         memcpy(extensions[i], ext.extensionName, extension_name_length * sizeof(char));
463     }
464
465     if (physical_device != NULL) {
466         result = vkEnumerateDeviceExtensionProperties(physical_device, NULL, &device_extension_count, ext_properties);
467         if (result != VK_SUCCESS) {
468             for (i = 0; i < instance_extension_count; ++i) {
469                 free((void*) extensions[i]);
470             }
471             free(extensions);
472             return 0;
473         }
474
475         for (i = 0; i < device_extension_count; ++i) {
476             VkExtensionProperties ext = ext_properties[i];
477
478             size_t extension_name_length = strlen(ext.extensionName) + 1;
479             extensions[instance_extension_count + i] = (char*) malloc(extension_name_length * sizeof(char));
480             memcpy(extensions[instance_extension_count + i], ext.extensionName, extension_name_length * sizeof(char));
481         }
482     }
483
484     free((void*) ext_properties);
485
486     *out_extension_count = total_extension_count;
487     *out_extensions = extensions;
488
489     return 1;
490 }
491
492 static void glad_vk_free_extensions(uint32_t extension_count, char **extensions) {
493     uint32_t i;
494
495     for(i = 0; i < extension_count ; ++i) {
496         free((void*) (extensions[i]));
497     }
498
499     free((void*) extensions);
500 }
501
502 static int glad_vk_has_extension(const char *name, uint32_t extension_count, char **extensions) {
503     uint32_t i;
504
505     for (i = 0; i < extension_count; ++i) {
506         if(strcmp(name, extensions[i]) == 0) {
507             return 1;
508         }
509     }
510
511     return 0;
512 }
513
514 static GLADapiproc glad_vk_get_proc_from_userptr(const char* name, void *userptr) {
515     return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name);
516 }
517
518 static int glad_vk_find_extensions_vulkan( VkPhysicalDevice physical_device) {
519     uint32_t extension_count = 0;
520     char **extensions = NULL;
521     if (!glad_vk_get_extensions(physical_device, &extension_count, &extensions)) return 0;
522
523     GLAD_VK_EXT_debug_report = glad_vk_has_extension("VK_EXT_debug_report", extension_count, extensions);
524     GLAD_VK_KHR_surface = glad_vk_has_extension("VK_KHR_surface", extension_count, extensions);
525     GLAD_VK_KHR_swapchain = glad_vk_has_extension("VK_KHR_swapchain", extension_count, extensions);
526
527     glad_vk_free_extensions(extension_count, extensions);
528
529     return 1;
530 }
531
532 static int glad_vk_find_core_vulkan( VkPhysicalDevice physical_device) {
533     int major = 1;
534     int minor = 0;
535
536 #ifdef VK_VERSION_1_1
537     if (vkEnumerateInstanceVersion  != NULL) {
538         uint32_t version;
539         VkResult result;
540
541         result = vkEnumerateInstanceVersion(&version);
542         if (result == VK_SUCCESS) {
543             major = (int) VK_VERSION_MAJOR(version);
544             minor = (int) VK_VERSION_MINOR(version);
545         }
546     }
547 #endif
548
549     if (physical_device != NULL && vkGetPhysicalDeviceProperties  != NULL) {
550         VkPhysicalDeviceProperties properties;
551         vkGetPhysicalDeviceProperties(physical_device, &properties);
552
553         major = (int) VK_VERSION_MAJOR(properties.apiVersion);
554         minor = (int) VK_VERSION_MINOR(properties.apiVersion);
555     }
556
557     GLAD_VK_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1;
558     GLAD_VK_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1;
559
560     return GLAD_MAKE_VERSION(major, minor);
561 }
562
563 int gladLoadVulkanUserPtr( VkPhysicalDevice physical_device, GLADuserptrloadfunc load, void *userptr) {
564     int version;
565
566 #ifdef VK_VERSION_1_1
567     vkEnumerateInstanceVersion  = (PFN_vkEnumerateInstanceVersion) load("vkEnumerateInstanceVersion", userptr);
568 #endif
569     version = glad_vk_find_core_vulkan( physical_device);
570     if (!version) {
571         return 0;
572     }
573
574     glad_vk_load_VK_VERSION_1_0(load, userptr);
575     glad_vk_load_VK_VERSION_1_1(load, userptr);
576
577     if (!glad_vk_find_extensions_vulkan( physical_device)) return 0;
578     glad_vk_load_VK_EXT_debug_report(load, userptr);
579     glad_vk_load_VK_KHR_surface(load, userptr);
580     glad_vk_load_VK_KHR_swapchain(load, userptr);
581
582
583     return version;
584 }
585
586
587 int gladLoadVulkan( VkPhysicalDevice physical_device, GLADloadfunc load) {
588     return gladLoadVulkanUserPtr( physical_device, glad_vk_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load);
589 }
590
591
592
593