| 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 |
| 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 | |