blob: e1d3f9cb355deea8aaf69cfe62c612d9e3e21900 [file] [log] [blame]
Alexis Hetud73b8712018-09-21 15:14:43 -04001// Copyright 2018 The SwiftShader Authors. All Rights Reserved.
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#include "VkGetProcAddress.h"
16
17#include <unordered_map>
Merck Hung4241ad72018-09-27 09:14:11 +090018#include <string>
Alexis Hetud73b8712018-09-21 15:14:43 -040019
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080020#include <vulkan/vulkan.h>
21
Chris Forbesb3596a62019-04-05 12:24:30 -070022#ifdef __ANDROID__
23#include <cerrno>
24#include <hardware/hwvulkan.h>
25#endif
26
Alexis Hetud73b8712018-09-21 15:14:43 -040027namespace vk
28{
Alexis Hetud73b8712018-09-21 15:14:43 -040029
Nicolas Capensdc853642018-11-19 15:50:18 -050030#define MAKE_VULKAN_GLOBAL_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
31static const std::unordered_map<std::string, PFN_vkVoidFunction> globalFunctionPointers =
32{
33 MAKE_VULKAN_GLOBAL_ENTRY(vkCreateInstance),
34 MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceExtensionProperties),
35 MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceLayerProperties),
36 MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceVersion),
37};
38#undef MAKE_VULKAN_GLOBAL_ENTRY
39
40#define MAKE_VULKAN_INSTANCE_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
41static const std::unordered_map<std::string, PFN_vkVoidFunction> instanceFunctionPointers =
42{
43 MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyInstance),
44 MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDevices),
45 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures),
46 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties),
47 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties),
48 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties),
49 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties),
50 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties),
51 MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDevice),
52 MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceExtensionProperties),
53 MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceLayerProperties),
54 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties),
55 MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroups),
56 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2),
57 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2),
58 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2),
59 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2),
60 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2),
61 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2),
62 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2),
63 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferProperties),
64 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFenceProperties),
65 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties),
66 // VK_KHR_device_group_creation
67 MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroupsKHR),
68 // VK_KHR_external_fence_capabilities
69 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFencePropertiesKHR),
70 // VK_KHR_external_memory_capabilities
71 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR),
72 // VK_KHR_external_semaphore_capabilities
73 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR),
74 // VK_KHR_get_physical_device_properties2
75 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2KHR),
76 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2KHR),
77 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2KHR),
78 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2KHR),
79 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2KHR),
80 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2KHR),
81 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2KHR),
Chris Forbes1d667d62019-04-05 08:25:18 -070082#ifndef __ANDROID__
83 // VK_KHR_surface
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080084 MAKE_VULKAN_INSTANCE_ENTRY(vkDestroySurfaceKHR),
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080085 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceSupportKHR),
86 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR),
87 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceFormatsKHR),
88 MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfacePresentModesKHR),
Chris Forbes1d667d62019-04-05 08:25:18 -070089#endif
90#ifdef VK_USE_PLATFORM_XLIB_KHR
91 // VK_KHR_xlib_surface
92 MAKE_VULKAN_INSTANCE_ENTRY(vkCreateXlibSurfaceKHR),
93#endif
Nicolas Capensdc853642018-11-19 15:50:18 -050094};
Hernan Liatis53c89572019-02-25 15:50:26 -080095#undef MAKE_VULKAN_INSTANCE_ENTRY
Nicolas Capensdc853642018-11-19 15:50:18 -050096
97#define MAKE_VULKAN_DEVICE_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
98static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionPointers =
99{
100 MAKE_VULKAN_DEVICE_ENTRY(vkGetInstanceProcAddr),
101 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceProcAddr),
102 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDevice),
103 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue),
104 MAKE_VULKAN_DEVICE_ENTRY(vkQueueSubmit),
105 MAKE_VULKAN_DEVICE_ENTRY(vkQueueWaitIdle),
106 MAKE_VULKAN_DEVICE_ENTRY(vkDeviceWaitIdle),
107 MAKE_VULKAN_DEVICE_ENTRY(vkAllocateMemory),
108 MAKE_VULKAN_DEVICE_ENTRY(vkFreeMemory),
109 MAKE_VULKAN_DEVICE_ENTRY(vkMapMemory),
110 MAKE_VULKAN_DEVICE_ENTRY(vkUnmapMemory),
111 MAKE_VULKAN_DEVICE_ENTRY(vkFlushMappedMemoryRanges),
112 MAKE_VULKAN_DEVICE_ENTRY(vkInvalidateMappedMemoryRanges),
113 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryCommitment),
114 MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory),
115 MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory),
116 MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements),
117 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements),
118 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements),
119 MAKE_VULKAN_DEVICE_ENTRY(vkQueueBindSparse),
120 MAKE_VULKAN_DEVICE_ENTRY(vkCreateFence),
121 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFence),
122 MAKE_VULKAN_DEVICE_ENTRY(vkResetFences),
123 MAKE_VULKAN_DEVICE_ENTRY(vkGetFenceStatus),
124 MAKE_VULKAN_DEVICE_ENTRY(vkWaitForFences),
125 MAKE_VULKAN_DEVICE_ENTRY(vkCreateSemaphore),
126 MAKE_VULKAN_DEVICE_ENTRY(vkDestroySemaphore),
127 MAKE_VULKAN_DEVICE_ENTRY(vkCreateEvent),
128 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyEvent),
129 MAKE_VULKAN_DEVICE_ENTRY(vkGetEventStatus),
130 MAKE_VULKAN_DEVICE_ENTRY(vkSetEvent),
131 MAKE_VULKAN_DEVICE_ENTRY(vkResetEvent),
132 MAKE_VULKAN_DEVICE_ENTRY(vkCreateQueryPool),
133 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyQueryPool),
134 MAKE_VULKAN_DEVICE_ENTRY(vkGetQueryPoolResults),
135 MAKE_VULKAN_DEVICE_ENTRY(vkCreateBuffer),
136 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBuffer),
137 MAKE_VULKAN_DEVICE_ENTRY(vkCreateBufferView),
138 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBufferView),
139 MAKE_VULKAN_DEVICE_ENTRY(vkCreateImage),
140 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImage),
141 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSubresourceLayout),
142 MAKE_VULKAN_DEVICE_ENTRY(vkCreateImageView),
143 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImageView),
144 MAKE_VULKAN_DEVICE_ENTRY(vkCreateShaderModule),
145 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyShaderModule),
146 MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineCache),
147 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineCache),
148 MAKE_VULKAN_DEVICE_ENTRY(vkGetPipelineCacheData),
149 MAKE_VULKAN_DEVICE_ENTRY(vkMergePipelineCaches),
150 MAKE_VULKAN_DEVICE_ENTRY(vkCreateGraphicsPipelines),
151 MAKE_VULKAN_DEVICE_ENTRY(vkCreateComputePipelines),
152 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipeline),
153 MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineLayout),
154 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineLayout),
155 MAKE_VULKAN_DEVICE_ENTRY(vkCreateSampler),
156 MAKE_VULKAN_DEVICE_ENTRY(vkDestroySampler),
157 MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorSetLayout),
158 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorSetLayout),
159 MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorPool),
160 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorPool),
161 MAKE_VULKAN_DEVICE_ENTRY(vkResetDescriptorPool),
162 MAKE_VULKAN_DEVICE_ENTRY(vkAllocateDescriptorSets),
163 MAKE_VULKAN_DEVICE_ENTRY(vkFreeDescriptorSets),
164 MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSets),
165 MAKE_VULKAN_DEVICE_ENTRY(vkCreateFramebuffer),
166 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFramebuffer),
167 MAKE_VULKAN_DEVICE_ENTRY(vkCreateRenderPass),
168 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyRenderPass),
169 MAKE_VULKAN_DEVICE_ENTRY(vkGetRenderAreaGranularity),
170 MAKE_VULKAN_DEVICE_ENTRY(vkCreateCommandPool),
171 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyCommandPool),
172 MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandPool),
173 MAKE_VULKAN_DEVICE_ENTRY(vkAllocateCommandBuffers),
174 MAKE_VULKAN_DEVICE_ENTRY(vkFreeCommandBuffers),
175 MAKE_VULKAN_DEVICE_ENTRY(vkBeginCommandBuffer),
176 MAKE_VULKAN_DEVICE_ENTRY(vkEndCommandBuffer),
177 MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandBuffer),
178 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindPipeline),
179 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetViewport),
180 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetScissor),
181 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetLineWidth),
182 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBias),
183 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetBlendConstants),
184 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBounds),
185 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilCompareMask),
186 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilWriteMask),
187 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilReference),
188 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindDescriptorSets),
189 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindIndexBuffer),
190 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindVertexBuffers),
191 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDraw),
192 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexed),
193 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirect),
194 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirect),
195 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatch),
196 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchIndirect),
197 MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBuffer),
198 MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImage),
199 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBlitImage),
200 MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBufferToImage),
201 MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImageToBuffer),
202 MAKE_VULKAN_DEVICE_ENTRY(vkCmdUpdateBuffer),
203 MAKE_VULKAN_DEVICE_ENTRY(vkCmdFillBuffer),
204 MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearColorImage),
205 MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearDepthStencilImage),
206 MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearAttachments),
207 MAKE_VULKAN_DEVICE_ENTRY(vkCmdResolveImage),
208 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetEvent),
209 MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetEvent),
210 MAKE_VULKAN_DEVICE_ENTRY(vkCmdWaitEvents),
211 MAKE_VULKAN_DEVICE_ENTRY(vkCmdPipelineBarrier),
212 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginQuery),
213 MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndQuery),
214 MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetQueryPool),
215 MAKE_VULKAN_DEVICE_ENTRY(vkCmdWriteTimestamp),
216 MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyQueryPoolResults),
217 MAKE_VULKAN_DEVICE_ENTRY(vkCmdPushConstants),
218 MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass),
219 MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass),
220 MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass),
221 MAKE_VULKAN_DEVICE_ENTRY(vkCmdExecuteCommands),
222 MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2),
223 MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2),
224 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeatures),
225 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMask),
226 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBase),
227 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2),
228 MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2),
229 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2),
230 MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPool),
231 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue2),
232 MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversion),
233 MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversion),
234 MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplate),
235 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplate),
236 MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplate),
237 MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupport),
238 // VK_KHR_descriptor_update_template
239 MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplateKHR),
240 MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplateKHR),
241 MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplateKHR),
242 // VK_KHR_device_group
243 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR),
244 MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMaskKHR),
245 MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBaseKHR),
246 // VK_KHR_maintenance1
247 MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPoolKHR),
248 // VK_KHR_sampler_ycbcr_conversion
249 MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversionKHR),
250 MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversionKHR),
251 // VK_KHR_bind_memory2
252 MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2KHR),
253 MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2KHR),
254 // VK_KHR_get_memory_requirements2
255 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2KHR),
256 MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2KHR),
257 MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2KHR),
258 // VK_KHR_maintenance3
Hernan Liatisb607bc82019-02-21 13:46:36 -0800259 MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
Chris Forbes1d667d62019-04-05 08:25:18 -0700260#ifndef __ANDROID__
261 // VK_KHR_swapchain
Hernan Liatisc7943e92019-02-25 19:29:54 -0800262 MAKE_VULKAN_DEVICE_ENTRY(vkCreateSwapchainKHR),
263 MAKE_VULKAN_DEVICE_ENTRY(vkDestroySwapchainKHR),
Hernan Liatisd00375a2019-02-26 11:19:27 -0800264 MAKE_VULKAN_DEVICE_ENTRY(vkGetSwapchainImagesKHR),
Hernan Liatis6b12a502019-03-01 15:06:13 -0800265 MAKE_VULKAN_DEVICE_ENTRY(vkAcquireNextImageKHR),
266 MAKE_VULKAN_DEVICE_ENTRY(vkQueuePresentKHR),
Chris Forbesf993de32019-04-15 09:45:34 -0700267 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHR),
268 MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupSurfacePresentModesKHR),
Chris Forbes1d667d62019-04-05 08:25:18 -0700269#endif
Nicolas Capensdc853642018-11-19 15:50:18 -0500270};
271#undef MAKE_VULKAN_DEVICE_ENTRY
272
273PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName)
274{
275 auto globalFunction = globalFunctionPointers.find(std::string(pName));
276 if(globalFunction != globalFunctionPointers.end())
Alexis Hetud73b8712018-09-21 15:14:43 -0400277 {
Nicolas Capensdc853642018-11-19 15:50:18 -0500278 return globalFunction->second;
Alexis Hetud73b8712018-09-21 15:14:43 -0400279 }
Nicolas Capensdc853642018-11-19 15:50:18 -0500280
281 if(instance != VK_NULL_HANDLE)
282 {
283 auto instanceFunction = instanceFunctionPointers.find(std::string(pName));
284 if(instanceFunction != instanceFunctionPointers.end())
285 {
286 return instanceFunction->second;
287 }
288
289 auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
290 if(deviceFunction != deviceFunctionPointers.end())
291 {
292 return deviceFunction->second;
293 }
294 }
295
296 return nullptr;
297}
298
299PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName)
300{
301 auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
302 if(deviceFunction != deviceFunctionPointers.end())
303 {
304 return deviceFunction->second;
305 }
306
307 return nullptr;
308}
309
Alexis Hetud73b8712018-09-21 15:14:43 -0400310}
Chris Forbesb3596a62019-04-05 12:24:30 -0700311
312#ifdef __ANDROID__
313
314extern "C" hwvulkan_module_t HAL_MODULE_INFO_SYM;
315
316namespace {
317
318 int CloseDevice(struct hw_device_t *) { return 0; }
319
320 hwvulkan_device_t hal_device = {
321 .common = {
322 .tag = HARDWARE_DEVICE_TAG,
323 .version = HWVULKAN_DEVICE_API_VERSION_0_1,
324 .module = &HAL_MODULE_INFO_SYM.common,
325 .close = CloseDevice,
326 },
327 .EnumerateInstanceExtensionProperties = vkEnumerateInstanceExtensionProperties,
328 .CreateInstance = vkCreateInstance,
329 .GetInstanceProcAddr = vk::GetInstanceProcAddr,
330 };
331
332 int OpenDevice(const hw_module_t *module, const char *id, hw_device_t **device)
333 {
334 if (strcmp(id, HWVULKAN_DEVICE_0) != 0) return -ENOENT;
335 *device = &hal_device.common;
336 return 0;
337 }
338
339 hw_module_methods_t module_methods = { .open = OpenDevice };
340
341}
342
343extern "C" hwvulkan_module_t HAL_MODULE_INFO_SYM =
344{
345 .common =
346 {
347 .tag = HARDWARE_MODULE_TAG,
348 .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
349 .hal_api_version = HARDWARE_HAL_API_VERSION,
350 .id = HWVULKAN_HARDWARE_MODULE_ID,
351 .name = "Swiftshader Pastel",
352 .author = "Google",
353 .methods = &module_methods,
354 }
355};
356
357#endif