1 // Copyright 2017 The Dawn Authors 2 // 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 DAWNNATIVE_VULKAN_VULKANFUNCTIONS_H_ 16 #define DAWNNATIVE_VULKAN_VULKANFUNCTIONS_H_ 17 18 #include "common/vulkan_platform.h" 19 20 #include "dawn_native/Error.h" 21 22 class DynamicLib; 23 24 namespace dawn_native { namespace vulkan { 25 26 struct VulkanGlobalKnobs; 27 struct VulkanDeviceKnobs; 28 29 // Stores the Vulkan entry points. Also loads them from the dynamic library 30 // and the vkGet*ProcAddress entry points. 31 struct VulkanFunctions { 32 MaybeError LoadGlobalProcs(const DynamicLib& vulkanLib); 33 MaybeError LoadInstanceProcs(VkInstance instance, const VulkanGlobalKnobs& usedGlobals); 34 MaybeError LoadDeviceProcs(VkDevice device, const VulkanDeviceKnobs& usedKnobs); 35 36 // ---------- Global procs 37 38 // Initial proc from which we can get all the others 39 PFN_vkGetInstanceProcAddr GetInstanceProcAddr = nullptr; 40 41 PFN_vkCreateInstance CreateInstance = nullptr; 42 PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties = nullptr; 43 PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties = nullptr; 44 // DestroyInstance isn't technically a global proc but we want to be able to use it 45 // before querying the instance procs in case we need to error out during initialization. 46 PFN_vkDestroyInstance DestroyInstance = nullptr; 47 48 // ---------- Instance procs 49 50 // Core Vulkan 1.0 51 PFN_vkCreateDevice CreateDevice = nullptr; 52 PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties = nullptr; 53 PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties = nullptr; 54 PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices = nullptr; 55 PFN_vkGetDeviceProcAddr GetDeviceProcAddr = nullptr; 56 PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures = nullptr; 57 PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties = nullptr; 58 PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties = 59 nullptr; 60 PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties = nullptr; 61 PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties = nullptr; 62 PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties = 63 nullptr; 64 PFN_vkGetPhysicalDeviceSparseImageFormatProperties 65 GetPhysicalDeviceSparseImageFormatProperties = nullptr; 66 // Not technically an instance proc but we want to be able to use it as soon as the 67 // device is created. 68 PFN_vkDestroyDevice DestroyDevice = nullptr; 69 70 // VK_EXT_debug_report 71 PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT = nullptr; 72 PFN_vkDebugReportMessageEXT DebugReportMessageEXT = nullptr; 73 PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT = nullptr; 74 75 // VK_KHR_surface 76 PFN_vkDestroySurfaceKHR DestroySurfaceKHR = nullptr; 77 PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR = nullptr; 78 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR = 79 nullptr; 80 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR = nullptr; 81 PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR = 82 nullptr; 83 84 // ---------- Device procs 85 86 // Core Vulkan 1.0 87 PFN_vkAllocateCommandBuffers AllocateCommandBuffers = nullptr; 88 PFN_vkAllocateDescriptorSets AllocateDescriptorSets = nullptr; 89 PFN_vkAllocateMemory AllocateMemory = nullptr; 90 PFN_vkBeginCommandBuffer BeginCommandBuffer = nullptr; 91 PFN_vkBindBufferMemory BindBufferMemory = nullptr; 92 PFN_vkBindImageMemory BindImageMemory = nullptr; 93 PFN_vkCmdBeginQuery CmdBeginQuery = nullptr; 94 PFN_vkCmdBeginRenderPass CmdBeginRenderPass = nullptr; 95 PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets = nullptr; 96 PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer = nullptr; 97 PFN_vkCmdBindPipeline CmdBindPipeline = nullptr; 98 PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers = nullptr; 99 PFN_vkCmdBlitImage CmdBlitImage = nullptr; 100 PFN_vkCmdClearAttachments CmdClearAttachments = nullptr; 101 PFN_vkCmdClearColorImage CmdClearColorImage = nullptr; 102 PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage = nullptr; 103 PFN_vkCmdCopyBuffer CmdCopyBuffer = nullptr; 104 PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage = nullptr; 105 PFN_vkCmdCopyImage CmdCopyImage = nullptr; 106 PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer = nullptr; 107 PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults = nullptr; 108 PFN_vkCmdDispatch CmdDispatch = nullptr; 109 PFN_vkCmdDispatchIndirect CmdDispatchIndirect = nullptr; 110 PFN_vkCmdDraw CmdDraw = nullptr; 111 PFN_vkCmdDrawIndexed CmdDrawIndexed = nullptr; 112 PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect = nullptr; 113 PFN_vkCmdDrawIndirect CmdDrawIndirect = nullptr; 114 PFN_vkCmdEndQuery CmdEndQuery = nullptr; 115 PFN_vkCmdEndRenderPass CmdEndRenderPass = nullptr; 116 PFN_vkCmdExecuteCommands CmdExecuteCommands = nullptr; 117 PFN_vkCmdFillBuffer CmdFillBuffer = nullptr; 118 PFN_vkCmdNextSubpass CmdNextSubpass = nullptr; 119 PFN_vkCmdPipelineBarrier CmdPipelineBarrier = nullptr; 120 PFN_vkCmdPushConstants CmdPushConstants = nullptr; 121 PFN_vkCmdResetEvent CmdResetEvent = nullptr; 122 PFN_vkCmdResetQueryPool CmdResetQueryPool = nullptr; 123 PFN_vkCmdResolveImage CmdResolveImage = nullptr; 124 PFN_vkCmdSetBlendConstants CmdSetBlendConstants = nullptr; 125 PFN_vkCmdSetDepthBias CmdSetDepthBias = nullptr; 126 PFN_vkCmdSetDepthBounds CmdSetDepthBounds = nullptr; 127 PFN_vkCmdSetEvent CmdSetEvent = nullptr; 128 PFN_vkCmdSetLineWidth CmdSetLineWidth = nullptr; 129 PFN_vkCmdSetScissor CmdSetScissor = nullptr; 130 PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask = nullptr; 131 PFN_vkCmdSetStencilReference CmdSetStencilReference = nullptr; 132 PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask = nullptr; 133 PFN_vkCmdSetViewport CmdSetViewport = nullptr; 134 PFN_vkCmdUpdateBuffer CmdUpdateBuffer = nullptr; 135 PFN_vkCmdWaitEvents CmdWaitEvents = nullptr; 136 PFN_vkCmdWriteTimestamp CmdWriteTimestamp = nullptr; 137 PFN_vkCreateBuffer CreateBuffer = nullptr; 138 PFN_vkCreateBufferView CreateBufferView = nullptr; 139 PFN_vkCreateCommandPool CreateCommandPool = nullptr; 140 PFN_vkCreateComputePipelines CreateComputePipelines = nullptr; 141 PFN_vkCreateDescriptorPool CreateDescriptorPool = nullptr; 142 PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout = nullptr; 143 PFN_vkCreateEvent CreateEvent = nullptr; 144 PFN_vkCreateFence CreateFence = nullptr; 145 PFN_vkCreateFramebuffer CreateFramebuffer = nullptr; 146 PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines = nullptr; 147 PFN_vkCreateImage CreateImage = nullptr; 148 PFN_vkCreateImageView CreateImageView = nullptr; 149 PFN_vkCreatePipelineCache CreatePipelineCache = nullptr; 150 PFN_vkCreatePipelineLayout CreatePipelineLayout = nullptr; 151 PFN_vkCreateQueryPool CreateQueryPool = nullptr; 152 PFN_vkCreateRenderPass CreateRenderPass = nullptr; 153 PFN_vkCreateSampler CreateSampler = nullptr; 154 PFN_vkCreateSemaphore CreateSemaphore = nullptr; 155 PFN_vkCreateShaderModule CreateShaderModule = nullptr; 156 PFN_vkDestroyBuffer DestroyBuffer = nullptr; 157 PFN_vkDestroyBufferView DestroyBufferView = nullptr; 158 PFN_vkDestroyCommandPool DestroyCommandPool = nullptr; 159 PFN_vkDestroyDescriptorPool DestroyDescriptorPool = nullptr; 160 PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout = nullptr; 161 PFN_vkDestroyEvent DestroyEvent = nullptr; 162 PFN_vkDestroyFence DestroyFence = nullptr; 163 PFN_vkDestroyFramebuffer DestroyFramebuffer = nullptr; 164 PFN_vkDestroyImage DestroyImage = nullptr; 165 PFN_vkDestroyImageView DestroyImageView = nullptr; 166 PFN_vkDestroyPipeline DestroyPipeline = nullptr; 167 PFN_vkDestroyPipelineCache DestroyPipelineCache = nullptr; 168 PFN_vkDestroyPipelineLayout DestroyPipelineLayout = nullptr; 169 PFN_vkDestroyQueryPool DestroyQueryPool = nullptr; 170 PFN_vkDestroyRenderPass DestroyRenderPass = nullptr; 171 PFN_vkDestroySampler DestroySampler = nullptr; 172 PFN_vkDestroySemaphore DestroySemaphore = nullptr; 173 PFN_vkDestroyShaderModule DestroyShaderModule = nullptr; 174 PFN_vkDeviceWaitIdle DeviceWaitIdle = nullptr; 175 PFN_vkEndCommandBuffer EndCommandBuffer = nullptr; 176 PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges = nullptr; 177 PFN_vkFreeCommandBuffers FreeCommandBuffers = nullptr; 178 PFN_vkFreeDescriptorSets FreeDescriptorSets = nullptr; 179 PFN_vkFreeMemory FreeMemory = nullptr; 180 PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements = nullptr; 181 PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment = nullptr; 182 PFN_vkGetDeviceQueue GetDeviceQueue = nullptr; 183 PFN_vkGetEventStatus GetEventStatus = nullptr; 184 PFN_vkGetFenceStatus GetFenceStatus = nullptr; 185 PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements = nullptr; 186 PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements = nullptr; 187 PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout = nullptr; 188 PFN_vkGetPipelineCacheData GetPipelineCacheData = nullptr; 189 PFN_vkGetQueryPoolResults GetQueryPoolResults = nullptr; 190 PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity = nullptr; 191 PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges = nullptr; 192 PFN_vkMapMemory MapMemory = nullptr; 193 PFN_vkMergePipelineCaches MergePipelineCaches = nullptr; 194 PFN_vkQueueBindSparse QueueBindSparse = nullptr; 195 PFN_vkQueueSubmit QueueSubmit = nullptr; 196 PFN_vkQueueWaitIdle QueueWaitIdle = nullptr; 197 PFN_vkResetCommandBuffer ResetCommandBuffer = nullptr; 198 PFN_vkResetCommandPool ResetCommandPool = nullptr; 199 PFN_vkResetDescriptorPool ResetDescriptorPool = nullptr; 200 PFN_vkResetEvent ResetEvent = nullptr; 201 PFN_vkResetFences ResetFences = nullptr; 202 PFN_vkSetEvent SetEvent = nullptr; 203 PFN_vkUnmapMemory UnmapMemory = nullptr; 204 PFN_vkUpdateDescriptorSets UpdateDescriptorSets = nullptr; 205 PFN_vkWaitForFences WaitForFences = nullptr; 206 207 // VK_EXT_debug_marker 208 PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT = nullptr; 209 PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT = nullptr; 210 PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT = nullptr; 211 212 // VK_KHR_swapchain 213 PFN_vkCreateSwapchainKHR CreateSwapchainKHR = nullptr; 214 PFN_vkDestroySwapchainKHR DestroySwapchainKHR = nullptr; 215 PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR = nullptr; 216 PFN_vkAcquireNextImageKHR AcquireNextImageKHR = nullptr; 217 PFN_vkQueuePresentKHR QueuePresentKHR = nullptr; 218 }; 219 220 }} // namespace dawn_native::vulkan 221 222 #endif // DAWNNATIVE_VULKAN_VULKANFUNCTIONS_H_ 223