• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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