1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #include "vulkan_utils.h" 16 #include "logger_common.h" 17 #include <iostream> 18 #include <dlfcn.h> 19 20 PFN_vkCreateInstance vkCreateInstance; 21 PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; 22 PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; 23 PFN_vkCreateDevice vkCreateDevice; 24 PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; 25 PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; 26 PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; 27 PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; 28 PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; 29 PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; 30 PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; 31 PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; 32 PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; 33 PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; 34 PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; 35 PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; 36 PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; 37 PFN_vkCreateShaderModule vkCreateShaderModule; 38 PFN_vkCreateBuffer vkCreateBuffer; 39 PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; 40 PFN_vkMapMemory vkMapMemory; 41 PFN_vkUnmapMemory vkUnmapMemory; 42 PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; 43 PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; 44 PFN_vkBindBufferMemory vkBindBufferMemory; 45 PFN_vkDestroyBuffer vkDestroyBuffer; 46 PFN_vkAllocateMemory vkAllocateMemory; 47 PFN_vkBindImageMemory vkBindImageMemory; 48 PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; 49 PFN_vkCmdCopyBuffer vkCmdCopyBuffer; 50 PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; 51 PFN_vkCmdCopyImage vkCmdCopyImage; 52 PFN_vkCmdBlitImage vkCmdBlitImage; 53 PFN_vkCmdClearAttachments vkCmdClearAttachments; 54 PFN_vkCreateSampler vkCreateSampler; 55 PFN_vkDestroySampler vkDestroySampler; 56 PFN_vkDestroyImage vkDestroyImage; 57 PFN_vkFreeMemory vkFreeMemory; 58 PFN_vkCreateRenderPass vkCreateRenderPass; 59 PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; 60 PFN_vkCmdEndRenderPass vkCmdEndRenderPass; 61 PFN_vkCmdNextSubpass vkCmdNextSubpass; 62 PFN_vkCmdExecuteCommands vkCmdExecuteCommands; 63 PFN_vkCmdClearColorImage vkCmdClearColorImage; 64 PFN_vkCreateImage vkCreateImage; 65 PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; 66 PFN_vkCreateImageView vkCreateImageView; 67 PFN_vkDestroyImageView vkDestroyImageView; 68 PFN_vkCreateSemaphore vkCreateSemaphore; 69 PFN_vkDestroySemaphore vkDestroySemaphore; 70 PFN_vkCreateFence vkCreateFence; 71 PFN_vkDestroyFence vkDestroyFence; 72 PFN_vkWaitForFences vkWaitForFences; 73 PFN_vkResetFences vkResetFences; 74 PFN_vkResetDescriptorPool vkResetDescriptorPool; 75 PFN_vkCreateCommandPool vkCreateCommandPool; 76 PFN_vkDestroyCommandPool vkDestroyCommandPool; 77 PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; 78 PFN_vkBeginCommandBuffer vkBeginCommandBuffer; 79 PFN_vkResetCommandBuffer vkResetCommandBuffer; 80 PFN_vkEndCommandBuffer vkEndCommandBuffer; 81 PFN_vkGetDeviceQueue vkGetDeviceQueue; 82 PFN_vkQueueSubmit vkQueueSubmit; 83 PFN_vkQueueWaitIdle vkQueueWaitIdle; 84 PFN_vkDeviceWaitIdle vkDeviceWaitIdle; 85 PFN_vkCreateFramebuffer vkCreateFramebuffer; 86 PFN_vkCreatePipelineCache vkCreatePipelineCache; 87 PFN_vkCreatePipelineLayout vkCreatePipelineLayout; 88 PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; 89 PFN_vkCreateComputePipelines vkCreateComputePipelines; 90 PFN_vkCreateDescriptorPool vkCreateDescriptorPool; 91 PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; 92 PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; 93 PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; 94 PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; 95 PFN_vkCmdBindPipeline vkCmdBindPipeline; 96 PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; 97 PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; 98 PFN_vkCmdSetViewport vkCmdSetViewport; 99 PFN_vkCmdSetScissor vkCmdSetScissor; 100 PFN_vkCmdSetLineWidth vkCmdSetLineWidth; 101 PFN_vkCmdSetDepthBias vkCmdSetDepthBias; 102 PFN_vkCmdPushConstants vkCmdPushConstants; 103 PFN_vkCmdDrawIndexed vkCmdDrawIndexed; 104 PFN_vkCmdDraw vkCmdDraw; 105 PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; 106 PFN_vkCmdDrawIndirect vkCmdDrawIndirect; 107 PFN_vkCmdDispatch vkCmdDispatch; 108 PFN_vkDestroyPipeline vkDestroyPipeline; 109 PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; 110 PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; 111 PFN_vkDestroyDevice vkDestroyDevice; 112 PFN_vkDestroyInstance vkDestroyInstance; 113 PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; 114 PFN_vkFreeCommandBuffers vkFreeCommandBuffers; 115 PFN_vkDestroyRenderPass vkDestroyRenderPass; 116 PFN_vkDestroyFramebuffer vkDestroyFramebuffer; 117 PFN_vkDestroyShaderModule vkDestroyShaderModule; 118 PFN_vkDestroyPipelineCache vkDestroyPipelineCache; 119 PFN_vkCreateQueryPool vkCreateQueryPool; 120 PFN_vkDestroyQueryPool vkDestroyQueryPool; 121 PFN_vkGetQueryPoolResults vkGetQueryPoolResults; 122 PFN_vkCmdBeginQuery vkCmdBeginQuery; 123 PFN_vkCmdEndQuery vkCmdEndQuery; 124 PFN_vkCmdResetQueryPool vkCmdResetQueryPool; 125 PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; 126 127 PFN_vkCreateSurfaceOHOS vkCreateSurfaceOHOS; 128 PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; 129 PFN_vkCmdFillBuffer vkCmdFillBuffer; 130 PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; 131 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; 132 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; 133 PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; 134 135 PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; 136 PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; 137 PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; 138 PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; 139 PFN_vkQueuePresentKHR vkQueuePresentKHR; 140 PFN_vkGetMemoryNativeBufferOHOS vkGetMemoryNativeBufferOHOS; 141 PFN_vkGetNativeBufferPropertiesOHOS vkGetNativeBufferPropertiesOHOS; 142 143 void *g_libVulkan; 144 145 namespace vkExample { 146 namespace utils { 147 // Dynamically load Vulkan library and base function pointers LoadVulkanLibrary()148 bool LoadVulkanLibrary() 149 { 150 // Load vulkan library 151 constexpr char* path = "libvulkan.so"; 152 dlerror(); 153 g_libVulkan = dlopen(path, RTLD_NOW | RTLD_LOCAL); 154 if (!g_libVulkan) { 155 LOGI("Failed to load vulkan library, %{public}s", dlerror()); 156 return false; 157 } 158 159 // // Load base function pointers 160 vkEnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>( 161 dlsym(g_libVulkan, "vkEnumerateInstanceExtensionProperties")); 162 vkEnumerateInstanceLayerProperties = reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>( 163 dlsym(g_libVulkan, "vkEnumerateInstanceLayerProperties")); 164 vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(dlsym(g_libVulkan, "vkCreateInstance")); 165 vkGetInstanceProcAddr = 166 reinterpret_cast<PFN_vkGetInstanceProcAddr>(dlsym(g_libVulkan, "vkGetInstanceProcAddr")); 167 vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(dlsym(g_libVulkan, "vkGetDeviceProcAddr")); 168 169 return true; 170 } 171 FreeVulkanLibrary()172 void FreeVulkanLibrary() 173 { 174 dlclose(g_libVulkan); 175 } 176 // Load instance based Vulkan function pointers LoadVulkanFunctions(VkInstance instance)177 void LoadVulkanFunctions(VkInstance instance) 178 { 179 vkEnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>( 180 vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices")); 181 vkGetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>( 182 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties")); 183 vkGetPhysicalDeviceProperties2 = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>( 184 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2")); 185 vkEnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>( 186 vkGetInstanceProcAddr(instance, "vkEnumerateDeviceLayerProperties")); 187 vkEnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>( 188 vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties")); 189 vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>( 190 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties")); 191 vkGetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>( 192 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures")); 193 vkGetPhysicalDeviceFeatures2 = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2>( 194 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2")); 195 vkCreateDevice = reinterpret_cast<PFN_vkCreateDevice>(vkGetInstanceProcAddr(instance, "vkCreateDevice")); 196 vkGetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>( 197 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties")); 198 vkGetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>( 199 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceMemoryProperties")); 200 201 vkCmdPipelineBarrier = 202 reinterpret_cast<PFN_vkCmdPipelineBarrier>(vkGetInstanceProcAddr(instance, "vkCmdPipelineBarrier")); 203 vkCreateShaderModule = 204 reinterpret_cast<PFN_vkCreateShaderModule>(vkGetInstanceProcAddr(instance, "vkCreateShaderModule")); 205 206 vkCreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(vkGetInstanceProcAddr(instance, "vkCreateBuffer")); 207 vkGetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>( 208 vkGetInstanceProcAddr(instance, "vkGetBufferMemoryRequirements")); 209 vkMapMemory = reinterpret_cast<PFN_vkMapMemory>(vkGetInstanceProcAddr(instance, "vkMapMemory")); 210 vkUnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(vkGetInstanceProcAddr(instance, "vkUnmapMemory")); 211 vkFlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>( 212 vkGetInstanceProcAddr(instance, "vkFlushMappedMemoryRanges")); 213 vkInvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>( 214 vkGetInstanceProcAddr(instance, "vkInvalidateMappedMemoryRanges")); 215 vkBindBufferMemory = 216 reinterpret_cast<PFN_vkBindBufferMemory>(vkGetInstanceProcAddr(instance, "vkBindBufferMemory")); 217 vkDestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(vkGetInstanceProcAddr(instance, "vkDestroyBuffer")); 218 219 vkAllocateMemory = 220 reinterpret_cast<PFN_vkAllocateMemory>(vkGetInstanceProcAddr(instance, "vkAllocateMemory")); 221 vkFreeMemory = reinterpret_cast<PFN_vkFreeMemory>(vkGetInstanceProcAddr(instance, "vkFreeMemory")); 222 vkCreateRenderPass = 223 reinterpret_cast<PFN_vkCreateRenderPass>(vkGetInstanceProcAddr(instance, "vkCreateRenderPass")); 224 vkCmdBeginRenderPass = 225 reinterpret_cast<PFN_vkCmdBeginRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdBeginRenderPass")); 226 vkCmdEndRenderPass = 227 reinterpret_cast<PFN_vkCmdEndRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdEndRenderPass")); 228 vkCmdNextSubpass = 229 reinterpret_cast<PFN_vkCmdNextSubpass>(vkGetInstanceProcAddr(instance, "vkCmdNextSubpass")); 230 vkCmdExecuteCommands = 231 reinterpret_cast<PFN_vkCmdExecuteCommands>(vkGetInstanceProcAddr(instance, "vkCmdExecuteCommands")); 232 vkCmdClearColorImage = 233 reinterpret_cast<PFN_vkCmdClearColorImage>(vkGetInstanceProcAddr(instance, "vkCmdClearColorImage")); 234 235 vkCreateImage = reinterpret_cast<PFN_vkCreateImage>(vkGetInstanceProcAddr(instance, "vkCreateImage")); 236 vkGetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>( 237 vkGetInstanceProcAddr(instance, "vkGetImageMemoryRequirements")); 238 vkCreateImageView = 239 reinterpret_cast<PFN_vkCreateImageView>(vkGetInstanceProcAddr(instance, "vkCreateImageView")); 240 vkDestroyImageView = 241 reinterpret_cast<PFN_vkDestroyImageView>(vkGetInstanceProcAddr(instance, "vkDestroyImageView")); 242 vkBindImageMemory = 243 reinterpret_cast<PFN_vkBindImageMemory>(vkGetInstanceProcAddr(instance, "vkBindImageMemory")); 244 vkGetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>( 245 vkGetInstanceProcAddr(instance, "vkGetImageSubresourceLayout")); 246 vkCmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyImage")); 247 vkCmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(vkGetInstanceProcAddr(instance, "vkCmdBlitImage")); 248 vkDestroyImage = reinterpret_cast<PFN_vkDestroyImage>(vkGetInstanceProcAddr(instance, "vkDestroyImage")); 249 250 vkCmdClearAttachments = 251 reinterpret_cast<PFN_vkCmdClearAttachments>(vkGetInstanceProcAddr(instance, "vkCmdClearAttachments")); 252 253 vkCmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(vkGetInstanceProcAddr(instance, "vkCmdCopyBuffer")); 254 vkCmdCopyBufferToImage = 255 reinterpret_cast<PFN_vkCmdCopyBufferToImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyBufferToImage")); 256 257 vkCreateSampler = reinterpret_cast<PFN_vkCreateSampler>(vkGetInstanceProcAddr(instance, "vkCreateSampler")); 258 vkDestroySampler = 259 reinterpret_cast<PFN_vkDestroySampler>(vkGetInstanceProcAddr(instance, "vkDestroySampler")); 260 ; 261 262 vkCreateSemaphore = 263 reinterpret_cast<PFN_vkCreateSemaphore>(vkGetInstanceProcAddr(instance, "vkCreateSemaphore")); 264 vkDestroySemaphore = 265 reinterpret_cast<PFN_vkDestroySemaphore>(vkGetInstanceProcAddr(instance, "vkDestroySemaphore")); 266 267 vkCreateFence = reinterpret_cast<PFN_vkCreateFence>(vkGetInstanceProcAddr(instance, "vkCreateFence")); 268 vkDestroyFence = reinterpret_cast<PFN_vkDestroyFence>(vkGetInstanceProcAddr(instance, "vkDestroyFence")); 269 vkWaitForFences = reinterpret_cast<PFN_vkWaitForFences>(vkGetInstanceProcAddr(instance, "vkWaitForFences")); 270 vkResetFences = reinterpret_cast<PFN_vkResetFences>(vkGetInstanceProcAddr(instance, "vkResetFences")); 271 ; 272 vkResetDescriptorPool = 273 reinterpret_cast<PFN_vkResetDescriptorPool>(vkGetInstanceProcAddr(instance, "vkResetDescriptorPool")); 274 275 vkCreateCommandPool = 276 reinterpret_cast<PFN_vkCreateCommandPool>(vkGetInstanceProcAddr(instance, "vkCreateCommandPool")); 277 vkDestroyCommandPool = 278 reinterpret_cast<PFN_vkDestroyCommandPool>(vkGetInstanceProcAddr(instance, "vkDestroyCommandPool")); 279 ; 280 281 vkAllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>( 282 vkGetInstanceProcAddr(instance, "vkAllocateCommandBuffers")); 283 vkBeginCommandBuffer = 284 reinterpret_cast<PFN_vkBeginCommandBuffer>(vkGetInstanceProcAddr(instance, "vkBeginCommandBuffer")); 285 vkResetCommandBuffer = 286 reinterpret_cast<PFN_vkResetCommandBuffer>(vkGetInstanceProcAddr(instance, "vkResetCommandBuffer")); 287 vkEndCommandBuffer = 288 reinterpret_cast<PFN_vkEndCommandBuffer>(vkGetInstanceProcAddr(instance, "vkEndCommandBuffer")); 289 290 vkGetDeviceQueue = 291 reinterpret_cast<PFN_vkGetDeviceQueue>(vkGetInstanceProcAddr(instance, "vkGetDeviceQueue")); 292 vkQueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(vkGetInstanceProcAddr(instance, "vkQueueSubmit")); 293 vkQueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(vkGetInstanceProcAddr(instance, "vkQueueWaitIdle")); 294 295 vkDeviceWaitIdle = 296 reinterpret_cast<PFN_vkDeviceWaitIdle>(vkGetInstanceProcAddr(instance, "vkDeviceWaitIdle")); 297 298 vkCreateFramebuffer = 299 reinterpret_cast<PFN_vkCreateFramebuffer>(vkGetInstanceProcAddr(instance, "vkCreateFramebuffer")); 300 301 vkCreatePipelineCache = 302 reinterpret_cast<PFN_vkCreatePipelineCache>(vkGetInstanceProcAddr(instance, "vkCreatePipelineCache")); 303 vkCreatePipelineLayout = 304 reinterpret_cast<PFN_vkCreatePipelineLayout>(vkGetInstanceProcAddr(instance, "vkCreatePipelineLayout")); 305 vkCreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>( 306 vkGetInstanceProcAddr(instance, "vkCreateGraphicsPipelines")); 307 vkCreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>( 308 vkGetInstanceProcAddr(instance, "vkCreateComputePipelines")); 309 310 vkCreateDescriptorPool = 311 reinterpret_cast<PFN_vkCreateDescriptorPool>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorPool")); 312 vkCreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>( 313 vkGetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout")); 314 315 vkAllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>( 316 vkGetInstanceProcAddr(instance, "vkAllocateDescriptorSets")); 317 vkUpdateDescriptorSets = 318 reinterpret_cast<PFN_vkUpdateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSets")); 319 320 vkCmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>( 321 vkGetInstanceProcAddr(instance, "vkCmdBindDescriptorSets")); 322 vkCmdBindPipeline = 323 reinterpret_cast<PFN_vkCmdBindPipeline>(vkGetInstanceProcAddr(instance, "vkCmdBindPipeline")); 324 vkCmdBindVertexBuffers = 325 reinterpret_cast<PFN_vkCmdBindVertexBuffers>(vkGetInstanceProcAddr(instance, "vkCmdBindVertexBuffers")); 326 vkCmdBindIndexBuffer = 327 reinterpret_cast<PFN_vkCmdBindIndexBuffer>(vkGetInstanceProcAddr(instance, "vkCmdBindIndexBuffer")); 328 329 vkCmdSetViewport = 330 reinterpret_cast<PFN_vkCmdSetViewport>(vkGetInstanceProcAddr(instance, "vkCmdSetViewport")); 331 vkCmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(vkGetInstanceProcAddr(instance, "vkCmdSetScissor")); 332 vkCmdSetLineWidth = 333 reinterpret_cast<PFN_vkCmdSetLineWidth>(vkGetInstanceProcAddr(instance, "vkCmdSetLineWidth")); 334 vkCmdSetDepthBias = 335 reinterpret_cast<PFN_vkCmdSetDepthBias>(vkGetInstanceProcAddr(instance, "vkCmdSetDepthBias")); 336 vkCmdPushConstants = 337 reinterpret_cast<PFN_vkCmdPushConstants>(vkGetInstanceProcAddr(instance, "vkCmdPushConstants")); 338 ; 339 340 vkCmdDrawIndexed = 341 reinterpret_cast<PFN_vkCmdDrawIndexed>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndexed")); 342 vkCmdDraw = reinterpret_cast<PFN_vkCmdDraw>(vkGetInstanceProcAddr(instance, "vkCmdDraw")); 343 vkCmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>( 344 vkGetInstanceProcAddr(instance, "vkCmdDrawIndexedIndirect")); 345 vkCmdDrawIndirect = 346 reinterpret_cast<PFN_vkCmdDrawIndirect>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndirect")); 347 vkCmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(vkGetInstanceProcAddr(instance, "vkCmdDispatch")); 348 349 vkDestroyPipeline = 350 reinterpret_cast<PFN_vkDestroyPipeline>(vkGetInstanceProcAddr(instance, "vkDestroyPipeline")); 351 vkDestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>( 352 vkGetInstanceProcAddr(instance, "vkDestroyPipelineLayout")); 353 ; 354 vkDestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>( 355 vkGetInstanceProcAddr(instance, "vkDestroyDescriptorSetLayout")); 356 vkDestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(vkGetInstanceProcAddr(instance, "vkDestroyDevice")); 357 vkDestroyInstance = 358 reinterpret_cast<PFN_vkDestroyInstance>(vkGetInstanceProcAddr(instance, "vkDestroyInstance")); 359 vkDestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>( 360 vkGetInstanceProcAddr(instance, "vkDestroyDescriptorPool")); 361 vkFreeCommandBuffers = 362 reinterpret_cast<PFN_vkFreeCommandBuffers>(vkGetInstanceProcAddr(instance, "vkFreeCommandBuffers")); 363 vkDestroyRenderPass = 364 reinterpret_cast<PFN_vkDestroyRenderPass>(vkGetInstanceProcAddr(instance, "vkDestroyRenderPass")); 365 vkDestroyFramebuffer = 366 reinterpret_cast<PFN_vkDestroyFramebuffer>(vkGetInstanceProcAddr(instance, "vkDestroyFramebuffer")); 367 vkDestroyShaderModule = 368 reinterpret_cast<PFN_vkDestroyShaderModule>(vkGetInstanceProcAddr(instance, "vkDestroyShaderModule")); 369 vkDestroyPipelineCache = 370 reinterpret_cast<PFN_vkDestroyPipelineCache>(vkGetInstanceProcAddr(instance, "vkDestroyPipelineCache")); 371 372 vkCreateQueryPool = 373 reinterpret_cast<PFN_vkCreateQueryPool>(vkGetInstanceProcAddr(instance, "vkCreateQueryPool")); 374 vkDestroyQueryPool = 375 reinterpret_cast<PFN_vkDestroyQueryPool>(vkGetInstanceProcAddr(instance, "vkDestroyQueryPool")); 376 vkGetQueryPoolResults = 377 reinterpret_cast<PFN_vkGetQueryPoolResults>(vkGetInstanceProcAddr(instance, "vkGetQueryPoolResults")); 378 379 vkCmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(vkGetInstanceProcAddr(instance, "vkCmdBeginQuery")); 380 vkCmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(vkGetInstanceProcAddr(instance, "vkCmdEndQuery")); 381 vkCmdResetQueryPool = 382 reinterpret_cast<PFN_vkCmdResetQueryPool>(vkGetInstanceProcAddr(instance, "vkCmdResetQueryPool")); 383 vkCmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>( 384 vkGetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults")); 385 386 vkCreateSurfaceOHOS = 387 reinterpret_cast<PFN_vkCreateSurfaceOHOS>(vkGetInstanceProcAddr(instance, "vkCreateSurfaceOHOS")); 388 vkDestroySurfaceKHR = 389 reinterpret_cast<PFN_vkDestroySurfaceKHR>(vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR")); 390 391 vkCmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(vkGetInstanceProcAddr(instance, "vkCmdFillBuffer")); 392 vkGetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>( 393 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR")); 394 vkGetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>( 395 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR")); 396 vkGetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>( 397 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR")); 398 vkGetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfacePresentModesKHR>( 399 vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR")); 400 } 401 LoadVulkanFunctions(VkDevice device)402 void LoadVulkanFunctions(VkDevice device) 403 { 404 vkCreateSwapchainKHR = 405 reinterpret_cast<PFN_vkCreateSwapchainKHR>(vkGetDeviceProcAddr(device, "vkCreateSwapchainKHR")); 406 vkDestroySwapchainKHR = 407 reinterpret_cast<PFN_vkDestroySwapchainKHR>(vkGetDeviceProcAddr(device, "vkDestroySwapchainKHR")); 408 vkGetSwapchainImagesKHR = 409 reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(vkGetDeviceProcAddr(device, "vkGetSwapchainImagesKHR")); 410 vkAcquireNextImageKHR = 411 reinterpret_cast<PFN_vkAcquireNextImageKHR>(vkGetDeviceProcAddr(device, "vkAcquireNextImageKHR")); 412 vkQueuePresentKHR = 413 reinterpret_cast<PFN_vkQueuePresentKHR>(vkGetDeviceProcAddr(device, "vkQueuePresentKHR")); 414 vkGetMemoryNativeBufferOHOS = reinterpret_cast<PFN_vkGetMemoryNativeBufferOHOS>( 415 vkGetDeviceProcAddr(device, "vkGetMemoryNativeBufferOHOS")); 416 vkGetNativeBufferPropertiesOHOS = reinterpret_cast<PFN_vkGetNativeBufferPropertiesOHOS>( 417 vkGetDeviceProcAddr(device, "vkGetNativeBufferPropertiesOHOS")); 418 } 419 } // namespace utils 420 } // namespace vkExample 421