glad_vulkan.c (37298B)
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