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 #ifndef VULKAN_UTILS_H 16 #define VULKAN_UTILS_H 17 // Vulkan needs to be loaded dynamically on ohos 18 #include "vulkan/vulkan.h" 19 20 // Function pointer prototypes 21 extern PFN_vkCreateInstance vkCreateInstance; 22 extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; 23 extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; 24 extern PFN_vkCreateDevice vkCreateDevice; 25 extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; 26 extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; 27 extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; 28 extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; 29 extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; 30 extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; 31 extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; 32 extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; 33 extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; 34 extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; 35 extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; 36 extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; 37 extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; 38 extern PFN_vkCreateShaderModule vkCreateShaderModule; 39 extern PFN_vkCreateBuffer vkCreateBuffer; 40 extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; 41 extern PFN_vkMapMemory vkMapMemory; 42 extern PFN_vkUnmapMemory vkUnmapMemory; 43 extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; 44 extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; 45 extern PFN_vkBindBufferMemory vkBindBufferMemory; 46 extern PFN_vkDestroyBuffer vkDestroyBuffer; 47 extern PFN_vkAllocateMemory vkAllocateMemory; 48 extern PFN_vkBindImageMemory vkBindImageMemory; 49 extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; 50 extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; 51 extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; 52 extern PFN_vkCmdCopyImage vkCmdCopyImage; 53 extern PFN_vkCmdBlitImage vkCmdBlitImage; 54 extern PFN_vkCmdClearAttachments vkCmdClearAttachments; 55 extern PFN_vkCreateSampler vkCreateSampler; 56 extern PFN_vkDestroySampler vkDestroySampler; 57 extern PFN_vkDestroyImage vkDestroyImage; 58 extern PFN_vkFreeMemory vkFreeMemory; 59 extern PFN_vkCreateRenderPass vkCreateRenderPass; 60 extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; 61 extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; 62 extern PFN_vkCmdNextSubpass vkCmdNextSubpass; 63 extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; 64 extern PFN_vkCmdClearColorImage vkCmdClearColorImage; 65 extern PFN_vkCreateImage vkCreateImage; 66 extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; 67 extern PFN_vkCreateImageView vkCreateImageView; 68 extern PFN_vkDestroyImageView vkDestroyImageView; 69 extern PFN_vkCreateSemaphore vkCreateSemaphore; 70 extern PFN_vkDestroySemaphore vkDestroySemaphore; 71 extern PFN_vkCreateFence vkCreateFence; 72 extern PFN_vkDestroyFence vkDestroyFence; 73 extern PFN_vkWaitForFences vkWaitForFences; 74 extern PFN_vkResetFences vkResetFences; 75 extern PFN_vkResetDescriptorPool vkResetDescriptorPool; 76 extern PFN_vkCreateCommandPool vkCreateCommandPool; 77 extern PFN_vkDestroyCommandPool vkDestroyCommandPool; 78 extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; 79 extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; 80 extern PFN_vkResetCommandBuffer vkResetCommandBuffer; 81 extern PFN_vkEndCommandBuffer vkEndCommandBuffer; 82 extern PFN_vkGetDeviceQueue vkGetDeviceQueue; 83 extern PFN_vkQueueSubmit vkQueueSubmit; 84 extern PFN_vkQueueWaitIdle vkQueueWaitIdle; 85 extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; 86 extern PFN_vkCreateFramebuffer vkCreateFramebuffer; 87 extern PFN_vkCreatePipelineCache vkCreatePipelineCache; 88 extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; 89 extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; 90 extern PFN_vkCreateComputePipelines vkCreateComputePipelines; 91 extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; 92 extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; 93 extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; 94 extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; 95 extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; 96 extern PFN_vkCmdBindPipeline vkCmdBindPipeline; 97 extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; 98 extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; 99 extern PFN_vkCmdSetViewport vkCmdSetViewport; 100 extern PFN_vkCmdSetScissor vkCmdSetScissor; 101 extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; 102 extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; 103 extern PFN_vkCmdPushConstants vkCmdPushConstants; 104 extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; 105 extern PFN_vkCmdDraw vkCmdDraw; 106 extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; 107 extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; 108 extern PFN_vkCmdDispatch vkCmdDispatch; 109 extern PFN_vkDestroyPipeline vkDestroyPipeline; 110 extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; 111 extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; 112 extern PFN_vkDestroyDevice vkDestroyDevice; 113 extern PFN_vkDestroyInstance vkDestroyInstance; 114 extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; 115 extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; 116 extern PFN_vkDestroyRenderPass vkDestroyRenderPass; 117 extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; 118 extern PFN_vkDestroyShaderModule vkDestroyShaderModule; 119 extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; 120 extern PFN_vkCreateQueryPool vkCreateQueryPool; 121 extern PFN_vkDestroyQueryPool vkDestroyQueryPool; 122 extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; 123 extern PFN_vkCmdBeginQuery vkCmdBeginQuery; 124 extern PFN_vkCmdEndQuery vkCmdEndQuery; 125 extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; 126 extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; 127 128 extern PFN_vkCreateSurfaceOHOS vkCreateSurfaceOHOS; 129 extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; 130 extern PFN_vkCmdFillBuffer vkCmdFillBuffer; 131 extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; 132 extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; 133 extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; 134 extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; 135 136 extern PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; 137 extern PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; 138 extern PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; 139 extern PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; 140 extern PFN_vkQueuePresentKHR vkQueuePresentKHR; 141 extern PFN_vkGetMemoryNativeBufferOHOS vkGetMemoryNativeBufferOHOS; 142 extern PFN_vkGetNativeBufferPropertiesOHOS vkGetNativeBufferPropertiesOHOS; 143 namespace vkExample { 144 namespace utils { 145 bool LoadVulkanLibrary(); 146 void LoadVulkanFunctions(VkInstance instance); 147 void LoadVulkanFunctions(VkDevice device); 148 void FreeVulkanLibrary(); 149 } // namespace utils 150 } // namespace vkExample 151 #endif // VULKAN_UTILS_H