OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "vk/GrVkInterface.h" | 8 #include "vk/GrVkInterface.h" |
9 #include "vk/GrVkUtil.h" | 9 #include "vk/GrVkUtil.h" |
10 | 10 |
11 GrVkInterface::GrVkInterface() { | 11 GrVkInterface::GrVkInterface() { |
12 } | 12 } |
13 | 13 |
14 #define GET_PROC(F) functions->f ## F = (PFN_vk ## F) vkGetInstanceProcAddr(inst
ance, "vk" #F) | 14 #define GET_PROC(F) functions->f ## F = (PFN_vk ## F) vkGetInstanceProcAddr(inst
ance, "vk" #F) |
15 #define GET_PROC_LOCAL(inst, F) PFN_vk ## F F = (PFN_vk ## F) vkGetInstanceProcA
ddr(inst, "vk" #F) | 15 #define GET_PROC_LOCAL(inst, F) PFN_vk ## F F = (PFN_vk ## F) vkGetInstanceProcA
ddr(inst, "vk" #F) |
| 16 #define GET_DEV_PROC(F) functions->f ## F = (PFN_vk ## F) vkGetDeviceProcAddr(de
vice, "vk" #F) |
16 | 17 |
17 const GrVkInterface* GrVkCreateInterface(VkInstance instance) { | 18 const GrVkInterface* GrVkCreateInterface(VkInstance instance, VkPhysicalDevice p
hysDev, |
| 19 VkDevice device) { |
18 | 20 |
19 GET_PROC_LOCAL(nullptr, EnumerateInstanceExtensionProperties); | 21 GET_PROC_LOCAL(nullptr, EnumerateInstanceExtensionProperties); |
20 GET_PROC_LOCAL(instance, EnumerateDeviceExtensionProperties); | 22 GET_PROC_LOCAL(instance, EnumerateDeviceExtensionProperties); |
21 GET_PROC_LOCAL(nullptr, EnumerateInstanceLayerProperties); | 23 GET_PROC_LOCAL(nullptr, EnumerateInstanceLayerProperties); |
22 GET_PROC_LOCAL(instance, EnumerateDeviceLayerProperties); | 24 GET_PROC_LOCAL(instance, EnumerateDeviceLayerProperties); |
23 | 25 |
24 GrVkExtensions extensions; | 26 GrVkExtensions extensions; |
25 if (!extensions.init(kGrVkMinimumVersion, | 27 if (!extensions.init(kGrVkMinimumVersion, |
| 28 physDev, |
26 EnumerateInstanceExtensionProperties, | 29 EnumerateInstanceExtensionProperties, |
27 EnumerateDeviceExtensionProperties, | 30 EnumerateDeviceExtensionProperties, |
28 EnumerateInstanceLayerProperties, | 31 EnumerateInstanceLayerProperties, |
29 EnumerateDeviceLayerProperties)) { | 32 EnumerateDeviceLayerProperties)) { |
30 return nullptr; | 33 return nullptr; |
31 } | 34 } |
32 | 35 |
33 GrVkInterface* interface = new GrVkInterface(); | 36 GrVkInterface* interface = new GrVkInterface(); |
34 GrVkInterface::Functions* functions = &interface->fFunctions; | 37 GrVkInterface::Functions* functions = &interface->fFunctions; |
35 | 38 |
36 GET_PROC(CreateInstance); | 39 GET_PROC(CreateInstance); |
37 GET_PROC(DestroyInstance); | 40 GET_PROC(DestroyInstance); |
38 GET_PROC(EnumeratePhysicalDevices); | 41 GET_PROC(EnumeratePhysicalDevices); |
39 GET_PROC(GetPhysicalDeviceFeatures); | 42 GET_PROC(GetPhysicalDeviceFeatures); |
40 GET_PROC(GetPhysicalDeviceFormatProperties); | 43 GET_PROC(GetPhysicalDeviceFormatProperties); |
41 GET_PROC(GetPhysicalDeviceImageFormatProperties); | 44 GET_PROC(GetPhysicalDeviceImageFormatProperties); |
42 GET_PROC(GetPhysicalDeviceProperties); | 45 GET_PROC(GetPhysicalDeviceProperties); |
43 GET_PROC(GetPhysicalDeviceQueueFamilyProperties); | 46 GET_PROC(GetPhysicalDeviceQueueFamilyProperties); |
44 GET_PROC(GetPhysicalDeviceMemoryProperties); | 47 GET_PROC(GetPhysicalDeviceMemoryProperties); |
45 GET_PROC(CreateDevice); | 48 GET_PROC(CreateDevice); |
46 GET_PROC(DestroyDevice); | 49 GET_PROC(DestroyDevice); |
47 GET_PROC(EnumerateInstanceExtensionProperties); | 50 GET_PROC(EnumerateInstanceExtensionProperties); |
48 GET_PROC(EnumerateDeviceExtensionProperties); | 51 GET_PROC(EnumerateDeviceExtensionProperties); |
49 GET_PROC(EnumerateInstanceLayerProperties); | 52 GET_PROC(EnumerateInstanceLayerProperties); |
50 GET_PROC(EnumerateDeviceLayerProperties); | 53 GET_PROC(EnumerateDeviceLayerProperties); |
51 GET_PROC(GetDeviceQueue); | 54 GET_DEV_PROC(GetDeviceQueue); |
52 GET_PROC(QueueSubmit); | 55 GET_DEV_PROC(QueueSubmit); |
53 GET_PROC(QueueWaitIdle); | 56 GET_DEV_PROC(QueueWaitIdle); |
54 GET_PROC(DeviceWaitIdle); | 57 GET_DEV_PROC(DeviceWaitIdle); |
55 GET_PROC(AllocateMemory); | 58 GET_DEV_PROC(AllocateMemory); |
56 GET_PROC(FreeMemory); | 59 GET_DEV_PROC(FreeMemory); |
57 GET_PROC(MapMemory); | 60 GET_DEV_PROC(MapMemory); |
58 GET_PROC(UnmapMemory); | 61 GET_DEV_PROC(UnmapMemory); |
59 GET_PROC(FlushMappedMemoryRanges); | 62 GET_DEV_PROC(FlushMappedMemoryRanges); |
60 GET_PROC(InvalidateMappedMemoryRanges); | 63 GET_DEV_PROC(InvalidateMappedMemoryRanges); |
61 GET_PROC(GetDeviceMemoryCommitment); | 64 GET_DEV_PROC(GetDeviceMemoryCommitment); |
62 GET_PROC(BindBufferMemory); | 65 GET_DEV_PROC(BindBufferMemory); |
63 GET_PROC(BindImageMemory); | 66 GET_DEV_PROC(BindImageMemory); |
64 GET_PROC(GetBufferMemoryRequirements); | 67 GET_DEV_PROC(GetBufferMemoryRequirements); |
65 GET_PROC(GetImageMemoryRequirements); | 68 GET_DEV_PROC(GetImageMemoryRequirements); |
66 GET_PROC(GetImageSparseMemoryRequirements); | 69 GET_DEV_PROC(GetImageSparseMemoryRequirements); |
67 GET_PROC(GetPhysicalDeviceSparseImageFormatProperties); | 70 GET_PROC(GetPhysicalDeviceSparseImageFormatProperties); |
68 GET_PROC(QueueBindSparse); | 71 GET_DEV_PROC(QueueBindSparse); |
69 GET_PROC(CreateFence); | 72 GET_DEV_PROC(CreateFence); |
70 GET_PROC(DestroyFence); | 73 GET_DEV_PROC(DestroyFence); |
71 GET_PROC(ResetFences); | 74 GET_DEV_PROC(ResetFences); |
72 GET_PROC(GetFenceStatus); | 75 GET_DEV_PROC(GetFenceStatus); |
73 GET_PROC(WaitForFences); | 76 GET_DEV_PROC(WaitForFences); |
74 GET_PROC(CreateSemaphore); | 77 GET_DEV_PROC(CreateSemaphore); |
75 GET_PROC(DestroySemaphore); | 78 GET_DEV_PROC(DestroySemaphore); |
76 GET_PROC(CreateEvent); | 79 GET_DEV_PROC(CreateEvent); |
77 GET_PROC(DestroyEvent); | 80 GET_DEV_PROC(DestroyEvent); |
78 GET_PROC(GetEventStatus); | 81 GET_DEV_PROC(GetEventStatus); |
79 GET_PROC(SetEvent); | 82 GET_DEV_PROC(SetEvent); |
80 GET_PROC(ResetEvent); | 83 GET_DEV_PROC(ResetEvent); |
81 GET_PROC(CreateQueryPool); | 84 GET_DEV_PROC(CreateQueryPool); |
82 GET_PROC(DestroyQueryPool); | 85 GET_DEV_PROC(DestroyQueryPool); |
83 GET_PROC(GetQueryPoolResults); | 86 GET_DEV_PROC(GetQueryPoolResults); |
84 GET_PROC(CreateBuffer); | 87 GET_DEV_PROC(CreateBuffer); |
85 GET_PROC(DestroyBuffer); | 88 GET_DEV_PROC(DestroyBuffer); |
86 GET_PROC(CreateBufferView); | 89 GET_DEV_PROC(CreateBufferView); |
87 GET_PROC(DestroyBufferView); | 90 GET_DEV_PROC(DestroyBufferView); |
88 GET_PROC(CreateImage); | 91 GET_DEV_PROC(CreateImage); |
89 GET_PROC(DestroyImage); | 92 GET_DEV_PROC(DestroyImage); |
90 GET_PROC(GetImageSubresourceLayout); | 93 GET_DEV_PROC(GetImageSubresourceLayout); |
91 GET_PROC(CreateImageView); | 94 GET_DEV_PROC(CreateImageView); |
92 GET_PROC(DestroyImageView); | 95 GET_DEV_PROC(DestroyImageView); |
93 GET_PROC(CreateShaderModule); | 96 GET_DEV_PROC(CreateShaderModule); |
94 GET_PROC(DestroyShaderModule); | 97 GET_DEV_PROC(DestroyShaderModule); |
95 GET_PROC(CreatePipelineCache); | 98 GET_DEV_PROC(CreatePipelineCache); |
96 GET_PROC(DestroyPipelineCache); | 99 GET_DEV_PROC(DestroyPipelineCache); |
97 GET_PROC(GetPipelineCacheData); | 100 GET_DEV_PROC(GetPipelineCacheData); |
98 GET_PROC(MergePipelineCaches); | 101 GET_DEV_PROC(MergePipelineCaches); |
99 GET_PROC(CreateGraphicsPipelines); | 102 GET_DEV_PROC(CreateGraphicsPipelines); |
100 GET_PROC(CreateComputePipelines); | 103 GET_DEV_PROC(CreateComputePipelines); |
101 GET_PROC(DestroyPipeline); | 104 GET_DEV_PROC(DestroyPipeline); |
102 GET_PROC(CreatePipelineLayout); | 105 GET_DEV_PROC(CreatePipelineLayout); |
103 GET_PROC(DestroyPipelineLayout); | 106 GET_DEV_PROC(DestroyPipelineLayout); |
104 GET_PROC(CreateSampler); | 107 GET_DEV_PROC(CreateSampler); |
105 GET_PROC(DestroySampler); | 108 GET_DEV_PROC(DestroySampler); |
106 GET_PROC(CreateDescriptorSetLayout); | 109 GET_DEV_PROC(CreateDescriptorSetLayout); |
107 GET_PROC(DestroyDescriptorSetLayout); | 110 GET_DEV_PROC(DestroyDescriptorSetLayout); |
108 GET_PROC(CreateDescriptorPool); | 111 GET_DEV_PROC(CreateDescriptorPool); |
109 GET_PROC(DestroyDescriptorPool); | 112 GET_DEV_PROC(DestroyDescriptorPool); |
110 GET_PROC(ResetDescriptorPool); | 113 GET_DEV_PROC(ResetDescriptorPool); |
111 GET_PROC(AllocateDescriptorSets); | 114 GET_DEV_PROC(AllocateDescriptorSets); |
112 GET_PROC(FreeDescriptorSets); | 115 GET_DEV_PROC(FreeDescriptorSets); |
113 GET_PROC(UpdateDescriptorSets); | 116 GET_DEV_PROC(UpdateDescriptorSets); |
114 GET_PROC(CreateFramebuffer); | 117 GET_DEV_PROC(CreateFramebuffer); |
115 GET_PROC(DestroyFramebuffer); | 118 GET_DEV_PROC(DestroyFramebuffer); |
116 GET_PROC(CreateRenderPass); | 119 GET_DEV_PROC(CreateRenderPass); |
117 GET_PROC(DestroyRenderPass); | 120 GET_DEV_PROC(DestroyRenderPass); |
118 GET_PROC(GetRenderAreaGranularity); | 121 GET_DEV_PROC(GetRenderAreaGranularity); |
119 GET_PROC(CreateCommandPool); | 122 GET_DEV_PROC(CreateCommandPool); |
120 GET_PROC(DestroyCommandPool); | 123 GET_DEV_PROC(DestroyCommandPool); |
121 GET_PROC(ResetCommandPool); | 124 GET_DEV_PROC(ResetCommandPool); |
122 GET_PROC(AllocateCommandBuffers); | 125 GET_DEV_PROC(AllocateCommandBuffers); |
123 GET_PROC(FreeCommandBuffers); | 126 GET_DEV_PROC(FreeCommandBuffers); |
124 GET_PROC(BeginCommandBuffer); | 127 GET_DEV_PROC(BeginCommandBuffer); |
125 GET_PROC(EndCommandBuffer); | 128 GET_DEV_PROC(EndCommandBuffer); |
126 GET_PROC(ResetCommandBuffer); | 129 GET_DEV_PROC(ResetCommandBuffer); |
127 GET_PROC(CmdBindPipeline); | 130 GET_DEV_PROC(CmdBindPipeline); |
128 GET_PROC(CmdSetViewport); | 131 GET_DEV_PROC(CmdSetViewport); |
129 GET_PROC(CmdSetScissor); | 132 GET_DEV_PROC(CmdSetScissor); |
130 GET_PROC(CmdSetLineWidth); | 133 GET_DEV_PROC(CmdSetLineWidth); |
131 GET_PROC(CmdSetDepthBias); | 134 GET_DEV_PROC(CmdSetDepthBias); |
132 GET_PROC(CmdSetBlendConstants); | 135 GET_DEV_PROC(CmdSetBlendConstants); |
133 GET_PROC(CmdSetDepthBounds); | 136 GET_DEV_PROC(CmdSetDepthBounds); |
134 GET_PROC(CmdSetStencilCompareMask); | 137 GET_DEV_PROC(CmdSetStencilCompareMask); |
135 GET_PROC(CmdSetStencilWriteMask); | 138 GET_DEV_PROC(CmdSetStencilWriteMask); |
136 GET_PROC(CmdSetStencilReference); | 139 GET_DEV_PROC(CmdSetStencilReference); |
137 GET_PROC(CmdBindDescriptorSets); | 140 GET_DEV_PROC(CmdBindDescriptorSets); |
138 GET_PROC(CmdBindIndexBuffer); | 141 GET_DEV_PROC(CmdBindIndexBuffer); |
139 GET_PROC(CmdBindVertexBuffers); | 142 GET_DEV_PROC(CmdBindVertexBuffers); |
140 GET_PROC(CmdDraw); | 143 GET_DEV_PROC(CmdDraw); |
141 GET_PROC(CmdDrawIndexed); | 144 GET_DEV_PROC(CmdDrawIndexed); |
142 GET_PROC(CmdDrawIndirect); | 145 GET_DEV_PROC(CmdDrawIndirect); |
143 GET_PROC(CmdDrawIndexedIndirect); | 146 GET_DEV_PROC(CmdDrawIndexedIndirect); |
144 GET_PROC(CmdDispatch); | 147 GET_DEV_PROC(CmdDispatch); |
145 GET_PROC(CmdDispatchIndirect); | 148 GET_DEV_PROC(CmdDispatchIndirect); |
146 GET_PROC(CmdCopyBuffer); | 149 GET_DEV_PROC(CmdCopyBuffer); |
147 GET_PROC(CmdCopyImage); | 150 GET_DEV_PROC(CmdCopyImage); |
148 GET_PROC(CmdBlitImage); | 151 GET_DEV_PROC(CmdBlitImage); |
149 GET_PROC(CmdCopyBufferToImage); | 152 GET_DEV_PROC(CmdCopyBufferToImage); |
150 GET_PROC(CmdCopyImageToBuffer); | 153 GET_DEV_PROC(CmdCopyImageToBuffer); |
151 GET_PROC(CmdUpdateBuffer); | 154 GET_DEV_PROC(CmdUpdateBuffer); |
152 GET_PROC(CmdFillBuffer); | 155 GET_DEV_PROC(CmdFillBuffer); |
153 GET_PROC(CmdClearColorImage); | 156 GET_DEV_PROC(CmdClearColorImage); |
154 GET_PROC(CmdClearDepthStencilImage); | 157 GET_DEV_PROC(CmdClearDepthStencilImage); |
155 GET_PROC(CmdClearAttachments); | 158 GET_DEV_PROC(CmdClearAttachments); |
156 GET_PROC(CmdResolveImage); | 159 GET_DEV_PROC(CmdResolveImage); |
157 GET_PROC(CmdSetEvent); | 160 GET_DEV_PROC(CmdSetEvent); |
158 GET_PROC(CmdResetEvent); | 161 GET_DEV_PROC(CmdResetEvent); |
159 GET_PROC(CmdWaitEvents); | 162 GET_DEV_PROC(CmdWaitEvents); |
160 GET_PROC(CmdPipelineBarrier); | 163 GET_DEV_PROC(CmdPipelineBarrier); |
161 GET_PROC(CmdBeginQuery); | 164 GET_DEV_PROC(CmdBeginQuery); |
162 GET_PROC(CmdEndQuery); | 165 GET_DEV_PROC(CmdEndQuery); |
163 GET_PROC(CmdResetQueryPool); | 166 GET_DEV_PROC(CmdResetQueryPool); |
164 GET_PROC(CmdWriteTimestamp); | 167 GET_DEV_PROC(CmdWriteTimestamp); |
165 GET_PROC(CmdCopyQueryPoolResults); | 168 GET_DEV_PROC(CmdCopyQueryPoolResults); |
166 GET_PROC(CmdPushConstants); | 169 GET_DEV_PROC(CmdPushConstants); |
167 GET_PROC(CmdBeginRenderPass); | 170 GET_DEV_PROC(CmdBeginRenderPass); |
168 GET_PROC(CmdNextSubpass); | 171 GET_DEV_PROC(CmdNextSubpass); |
169 GET_PROC(CmdEndRenderPass); | 172 GET_DEV_PROC(CmdEndRenderPass); |
170 GET_PROC(CmdExecuteCommands); | 173 GET_DEV_PROC(CmdExecuteCommands); |
171 // TODO: break these out with extension checks | 174 // TODO: break these out with extension checks |
172 GET_PROC(DestroySurfaceKHR); | 175 GET_PROC(DestroySurfaceKHR); |
173 GET_PROC(GetPhysicalDeviceSurfaceSupportKHR); | 176 GET_PROC(GetPhysicalDeviceSurfaceSupportKHR); |
174 GET_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR); | 177 GET_PROC(GetPhysicalDeviceSurfaceCapabilitiesKHR); |
175 GET_PROC(GetPhysicalDeviceSurfaceFormatsKHR); | 178 GET_PROC(GetPhysicalDeviceSurfaceFormatsKHR); |
176 GET_PROC(GetPhysicalDeviceSurfacePresentModesKHR); | 179 GET_PROC(GetPhysicalDeviceSurfacePresentModesKHR); |
177 GET_PROC(CreateSwapchainKHR); | 180 GET_DEV_PROC(CreateSwapchainKHR); |
178 GET_PROC(DestroySwapchainKHR); | 181 GET_DEV_PROC(DestroySwapchainKHR); |
179 GET_PROC(GetSwapchainImagesKHR); | 182 GET_DEV_PROC(GetSwapchainImagesKHR); |
180 GET_PROC(AcquireNextImageKHR); | 183 GET_DEV_PROC(AcquireNextImageKHR); |
181 GET_PROC(QueuePresentKHR); | 184 GET_DEV_PROC(QueuePresentKHR); |
182 GET_PROC(GetPhysicalDeviceDisplayPropertiesKHR); | 185 GET_PROC(GetPhysicalDeviceDisplayPropertiesKHR); |
183 GET_PROC(GetPhysicalDeviceDisplayPlanePropertiesKHR); | 186 GET_PROC(GetPhysicalDeviceDisplayPlanePropertiesKHR); |
184 GET_PROC(GetDisplayPlaneSupportedDisplaysKHR); | 187 GET_PROC(GetDisplayPlaneSupportedDisplaysKHR); |
185 GET_PROC(GetDisplayModePropertiesKHR); | 188 GET_PROC(GetDisplayModePropertiesKHR); |
186 GET_PROC(CreateDisplayModeKHR); | 189 GET_PROC(CreateDisplayModeKHR); |
187 GET_PROC(GetDisplayPlaneCapabilitiesKHR); | 190 GET_PROC(GetDisplayPlaneCapabilitiesKHR); |
188 GET_PROC(CreateDisplayPlaneSurfaceKHR); | 191 GET_PROC(CreateDisplayPlaneSurfaceKHR); |
189 GET_PROC(CreateSharedSwapchainsKHR); | 192 GET_DEV_PROC(CreateSharedSwapchainsKHR); |
190 | 193 |
191 if (extensions.hasInstanceExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) { | 194 if (extensions.hasInstanceExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) { |
192 GET_PROC(CreateDebugReportCallbackEXT); | 195 GET_PROC(CreateDebugReportCallbackEXT); |
193 GET_PROC(DebugReportMessageEXT); | 196 GET_PROC(DebugReportMessageEXT); |
194 GET_PROC(DestroyDebugReportCallbackEXT); | 197 GET_PROC(DestroyDebugReportCallbackEXT); |
195 } | 198 } |
196 | 199 |
197 interface->fExtensions.swap(&extensions); | 200 interface->fExtensions.swap(&extensions); |
198 | 201 |
199 return interface; | 202 return interface; |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 NULL == fFunctions.fCreateDisplayPlaneSurfaceKHR || | 362 NULL == fFunctions.fCreateDisplayPlaneSurfaceKHR || |
360 NULL == fFunctions.fCreateSharedSwapchainsKHR || | 363 NULL == fFunctions.fCreateSharedSwapchainsKHR || |
361 NULL == fFunctions.fCreateDebugReportCallbackEXT || | 364 NULL == fFunctions.fCreateDebugReportCallbackEXT || |
362 NULL == fFunctions.fDebugReportMessageEXT || | 365 NULL == fFunctions.fDebugReportMessageEXT || |
363 NULL == fFunctions.fDestroyDebugReportCallbackEXT) { | 366 NULL == fFunctions.fDestroyDebugReportCallbackEXT) { |
364 return false; | 367 return false; |
365 } | 368 } |
366 return true; | 369 return true; |
367 } | 370 } |
368 | 371 |
OLD | NEW |