blob: 951ea6e5710114d23149ef4225ec22e6b91eb54f [file] [log] [blame]
Chia-I Wueb7db122016-03-24 09:11:06 +08001/*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// WARNING: This file is generated. See ../README.md for instructions.
18
19#include <string.h>
Mark Salyzyna5e161b2016-09-29 08:08:05 -070020
Chia-I Wueb7db122016-03-24 09:11:06 +080021#include <algorithm>
Mark Salyzyna5e161b2016-09-29 08:08:05 -070022
Mark Salyzyn7823e122016-09-29 08:08:05 -070023#include <log/log.h>
Chia-I Wueb7db122016-03-24 09:11:06 +080024
25#include "driver.h"
Chia-I Wueb7db122016-03-24 09:11:06 +080026
27namespace vulkan {
28namespace driver {
29
30namespace {
31
32// clang-format off
33
Chia-I Wueb7db122016-03-24 09:11:06 +080034VKAPI_ATTR VkResult checkedCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) {
Chia-I Wu36cc00a2016-04-13 16:52:06 +080035 if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
36 return CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
37 } else {
Chia-I Wu5beb2ac2016-05-04 16:37:23 +080038 Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkCreateSwapchainKHR not executed.");
Chia-I Wu36cc00a2016-04-13 16:52:06 +080039 return VK_SUCCESS;
40 }
Chia-I Wueb7db122016-03-24 09:11:06 +080041}
42
43VKAPI_ATTR void checkedDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) {
Chia-I Wu36cc00a2016-04-13 16:52:06 +080044 if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
45 DestroySwapchainKHR(device, swapchain, pAllocator);
46 } else {
Chia-I Wu5beb2ac2016-05-04 16:37:23 +080047 Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkDestroySwapchainKHR not executed.");
Chia-I Wu36cc00a2016-04-13 16:52:06 +080048 }
Chia-I Wueb7db122016-03-24 09:11:06 +080049}
50
51VKAPI_ATTR VkResult checkedGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) {
Chia-I Wu36cc00a2016-04-13 16:52:06 +080052 if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
53 return GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
54 } else {
Chia-I Wu5beb2ac2016-05-04 16:37:23 +080055 Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkGetSwapchainImagesKHR not executed.");
Chia-I Wu36cc00a2016-04-13 16:52:06 +080056 return VK_SUCCESS;
57 }
Chia-I Wueb7db122016-03-24 09:11:06 +080058}
59
60VKAPI_ATTR VkResult checkedAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) {
Chia-I Wu36cc00a2016-04-13 16:52:06 +080061 if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
62 return AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
63 } else {
Chia-I Wu5beb2ac2016-05-04 16:37:23 +080064 Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkAcquireNextImageKHR not executed.");
Chia-I Wu36cc00a2016-04-13 16:52:06 +080065 return VK_SUCCESS;
66 }
Chia-I Wueb7db122016-03-24 09:11:06 +080067}
68
69VKAPI_ATTR VkResult checkedQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* pPresentInfo) {
Chia-I Wu36cc00a2016-04-13 16:52:06 +080070 if (GetData(queue).hook_extensions[ProcHook::KHR_swapchain]) {
71 return QueuePresentKHR(queue, pPresentInfo);
72 } else {
Chia-I Wu5beb2ac2016-05-04 16:37:23 +080073 Logger(queue).Err(queue, "VK_KHR_swapchain not enabled. vkQueuePresentKHR not executed.");
Chia-I Wu36cc00a2016-04-13 16:52:06 +080074 return VK_SUCCESS;
75 }
Chia-I Wueb7db122016-03-24 09:11:06 +080076}
77
Ian Elliott4c8bb2a2016-12-29 11:07:26 -070078VKAPI_ATTR VkResult checkedGetRefreshCycleDurationGOOGLE(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) {
79 if (GetData(device).hook_extensions[ProcHook::GOOGLE_display_timing]) {
80 return GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
81 } else {
82 Logger(device).Err(device, "VK_GOOGLE_display_timing not enabled. vkGetRefreshCycleDurationGOOGLE not executed.");
83 return VK_SUCCESS;
84 }
85}
86
87VKAPI_ATTR VkResult checkedGetPastPresentationTimingGOOGLE(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) {
88 if (GetData(device).hook_extensions[ProcHook::GOOGLE_display_timing]) {
89 return GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
90 } else {
91 Logger(device).Err(device, "VK_GOOGLE_display_timing not enabled. vkGetPastPresentationTimingGOOGLE not executed.");
92 return VK_SUCCESS;
93 }
94}
95
Chris Forbes0f2ac2e2017-01-18 13:33:53 +130096VKAPI_ATTR VkResult checkedGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain) {
Chris Forbes1d5f68c2017-01-31 10:17:01 +130097 if (GetData(device).hook_extensions[ProcHook::KHR_shared_presentable_image]) {
Chris Forbes0f2ac2e2017-01-18 13:33:53 +130098 return GetSwapchainStatusKHR(device, swapchain);
99 } else {
Chris Forbes1d5f68c2017-01-31 10:17:01 +1300100 Logger(device).Err(device, "VK_KHR_shared_presentable_image not enabled. vkGetSwapchainStatusKHR not executed.");
Chris Forbes0f2ac2e2017-01-18 13:33:53 +1300101 return VK_SUCCESS;
102 }
103}
104
Chia-I Wueb7db122016-03-24 09:11:06 +0800105// clang-format on
106
107const ProcHook g_proc_hooks[] = {
108 // clang-format off
109 {
110 "vkAcquireImageANDROID",
111 ProcHook::DEVICE,
112 ProcHook::ANDROID_native_buffer,
113 nullptr,
114 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800115 },
116 {
117 "vkAcquireNextImageKHR",
118 ProcHook::DEVICE,
119 ProcHook::KHR_swapchain,
Chia-I Wu62262232016-03-26 07:06:44 +0800120 reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImageKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800121 reinterpret_cast<PFN_vkVoidFunction>(checkedAcquireNextImageKHR),
122 },
123 {
124 "vkAllocateCommandBuffers",
125 ProcHook::DEVICE,
126 ProcHook::EXTENSION_CORE,
Chia-I Wu6a58a8a2016-03-24 16:29:51 +0800127 reinterpret_cast<PFN_vkVoidFunction>(AllocateCommandBuffers),
Chia-I Wueb7db122016-03-24 09:11:06 +0800128 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800129 },
130 {
131 "vkCreateAndroidSurfaceKHR",
132 ProcHook::INSTANCE,
133 ProcHook::KHR_android_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800134 reinterpret_cast<PFN_vkVoidFunction>(CreateAndroidSurfaceKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800135 nullptr,
136 },
137 {
138 "vkCreateDebugReportCallbackEXT",
139 ProcHook::INSTANCE,
140 ProcHook::EXT_debug_report,
Chia-I Wu62262232016-03-26 07:06:44 +0800141 reinterpret_cast<PFN_vkVoidFunction>(CreateDebugReportCallbackEXT),
Chia-I Wueb7db122016-03-24 09:11:06 +0800142 nullptr,
143 },
144 {
145 "vkCreateDevice",
146 ProcHook::INSTANCE,
147 ProcHook::EXTENSION_CORE,
Chia-I Wu4901db72016-03-24 16:38:58 +0800148 reinterpret_cast<PFN_vkVoidFunction>(CreateDevice),
Chia-I Wueb7db122016-03-24 09:11:06 +0800149 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800150 },
151 {
152 "vkCreateInstance",
153 ProcHook::GLOBAL,
154 ProcHook::EXTENSION_CORE,
Chia-I Wuff4a6c72016-03-24 16:05:56 +0800155 reinterpret_cast<PFN_vkVoidFunction>(CreateInstance),
Chia-I Wueb7db122016-03-24 09:11:06 +0800156 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800157 },
158 {
159 "vkCreateSwapchainKHR",
160 ProcHook::DEVICE,
161 ProcHook::KHR_swapchain,
Chia-I Wu62262232016-03-26 07:06:44 +0800162 reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800163 reinterpret_cast<PFN_vkVoidFunction>(checkedCreateSwapchainKHR),
164 },
165 {
166 "vkDebugReportMessageEXT",
167 ProcHook::INSTANCE,
168 ProcHook::EXT_debug_report,
Chia-I Wu62262232016-03-26 07:06:44 +0800169 reinterpret_cast<PFN_vkVoidFunction>(DebugReportMessageEXT),
Chia-I Wueb7db122016-03-24 09:11:06 +0800170 nullptr,
171 },
172 {
173 "vkDestroyDebugReportCallbackEXT",
174 ProcHook::INSTANCE,
175 ProcHook::EXT_debug_report,
Chia-I Wu62262232016-03-26 07:06:44 +0800176 reinterpret_cast<PFN_vkVoidFunction>(DestroyDebugReportCallbackEXT),
Chia-I Wueb7db122016-03-24 09:11:06 +0800177 nullptr,
178 },
179 {
180 "vkDestroyDevice",
181 ProcHook::DEVICE,
182 ProcHook::EXTENSION_CORE,
Chia-I Wu4901db72016-03-24 16:38:58 +0800183 reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice),
Chia-I Wueb7db122016-03-24 09:11:06 +0800184 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800185 },
186 {
187 "vkDestroyInstance",
188 ProcHook::INSTANCE,
189 ProcHook::EXTENSION_CORE,
Chia-I Wuff4a6c72016-03-24 16:05:56 +0800190 reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance),
Chia-I Wueb7db122016-03-24 09:11:06 +0800191 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800192 },
193 {
194 "vkDestroySurfaceKHR",
195 ProcHook::INSTANCE,
196 ProcHook::KHR_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800197 reinterpret_cast<PFN_vkVoidFunction>(DestroySurfaceKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800198 nullptr,
199 },
200 {
201 "vkDestroySwapchainKHR",
202 ProcHook::DEVICE,
203 ProcHook::KHR_swapchain,
Chia-I Wu62262232016-03-26 07:06:44 +0800204 reinterpret_cast<PFN_vkVoidFunction>(DestroySwapchainKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800205 reinterpret_cast<PFN_vkVoidFunction>(checkedDestroySwapchainKHR),
206 },
207 {
208 "vkEnumerateDeviceExtensionProperties",
209 ProcHook::INSTANCE,
210 ProcHook::EXTENSION_CORE,
Chia-I Wu01cf3052016-03-24 16:16:21 +0800211 reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties),
Chia-I Wueb7db122016-03-24 09:11:06 +0800212 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800213 },
214 {
215 "vkEnumerateInstanceExtensionProperties",
216 ProcHook::GLOBAL,
217 ProcHook::EXTENSION_CORE,
218 reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceExtensionProperties),
219 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800220 },
221 {
222 "vkEnumeratePhysicalDevices",
223 ProcHook::INSTANCE,
224 ProcHook::EXTENSION_CORE,
Chia-I Wuff4a6c72016-03-24 16:05:56 +0800225 reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices),
Chia-I Wueb7db122016-03-24 09:11:06 +0800226 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800227 },
228 {
229 "vkGetDeviceProcAddr",
230 ProcHook::DEVICE,
231 ProcHook::EXTENSION_CORE,
232 reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr),
233 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800234 },
235 {
236 "vkGetDeviceQueue",
237 ProcHook::DEVICE,
238 ProcHook::EXTENSION_CORE,
Chia-I Wuba0be412016-03-24 16:24:40 +0800239 reinterpret_cast<PFN_vkVoidFunction>(GetDeviceQueue),
Chia-I Wueb7db122016-03-24 09:11:06 +0800240 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800241 },
242 {
243 "vkGetInstanceProcAddr",
244 ProcHook::INSTANCE,
245 ProcHook::EXTENSION_CORE,
246 reinterpret_cast<PFN_vkVoidFunction>(GetInstanceProcAddr),
247 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800248 },
249 {
Ian Elliott4c8bb2a2016-12-29 11:07:26 -0700250 "vkGetPastPresentationTimingGOOGLE",
251 ProcHook::DEVICE,
252 ProcHook::GOOGLE_display_timing,
253 reinterpret_cast<PFN_vkVoidFunction>(GetPastPresentationTimingGOOGLE),
254 reinterpret_cast<PFN_vkVoidFunction>(checkedGetPastPresentationTimingGOOGLE),
255 },
256 {
Chia-I Wueb7db122016-03-24 09:11:06 +0800257 "vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
258 ProcHook::INSTANCE,
259 ProcHook::KHR_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800260 reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilitiesKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800261 nullptr,
262 },
263 {
264 "vkGetPhysicalDeviceSurfaceFormatsKHR",
265 ProcHook::INSTANCE,
266 ProcHook::KHR_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800267 reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800268 nullptr,
269 },
270 {
271 "vkGetPhysicalDeviceSurfacePresentModesKHR",
272 ProcHook::INSTANCE,
273 ProcHook::KHR_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800274 reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800275 nullptr,
276 },
277 {
278 "vkGetPhysicalDeviceSurfaceSupportKHR",
279 ProcHook::INSTANCE,
280 ProcHook::KHR_surface,
Chia-I Wu62262232016-03-26 07:06:44 +0800281 reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceSupportKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800282 nullptr,
283 },
284 {
Ian Elliott4c8bb2a2016-12-29 11:07:26 -0700285 "vkGetRefreshCycleDurationGOOGLE",
286 ProcHook::DEVICE,
287 ProcHook::GOOGLE_display_timing,
288 reinterpret_cast<PFN_vkVoidFunction>(GetRefreshCycleDurationGOOGLE),
289 reinterpret_cast<PFN_vkVoidFunction>(checkedGetRefreshCycleDurationGOOGLE),
290 },
291 {
Chris Forbes8e4438b2016-12-07 16:26:49 +1300292 "vkGetSwapchainGrallocUsage2ANDROID",
293 ProcHook::DEVICE,
294 ProcHook::ANDROID_native_buffer,
295 nullptr,
296 nullptr,
297 },
298 {
Chia-I Wueb7db122016-03-24 09:11:06 +0800299 "vkGetSwapchainGrallocUsageANDROID",
300 ProcHook::DEVICE,
301 ProcHook::ANDROID_native_buffer,
302 nullptr,
303 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800304 },
305 {
306 "vkGetSwapchainImagesKHR",
307 ProcHook::DEVICE,
308 ProcHook::KHR_swapchain,
Chia-I Wu62262232016-03-26 07:06:44 +0800309 reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800310 reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainImagesKHR),
311 },
312 {
Chris Forbes0f2ac2e2017-01-18 13:33:53 +1300313 "vkGetSwapchainStatusKHR",
314 ProcHook::DEVICE,
Chris Forbes1d5f68c2017-01-31 10:17:01 +1300315 ProcHook::KHR_shared_presentable_image,
Chris Forbes0f2ac2e2017-01-18 13:33:53 +1300316 reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainStatusKHR),
317 reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainStatusKHR),
318 },
319 {
Chia-I Wueb7db122016-03-24 09:11:06 +0800320 "vkQueuePresentKHR",
321 ProcHook::DEVICE,
322 ProcHook::KHR_swapchain,
Chia-I Wu62262232016-03-26 07:06:44 +0800323 reinterpret_cast<PFN_vkVoidFunction>(QueuePresentKHR),
Chia-I Wueb7db122016-03-24 09:11:06 +0800324 reinterpret_cast<PFN_vkVoidFunction>(checkedQueuePresentKHR),
325 },
326 {
327 "vkQueueSignalReleaseImageANDROID",
328 ProcHook::DEVICE,
329 ProcHook::ANDROID_native_buffer,
330 nullptr,
331 nullptr,
Chia-I Wueb7db122016-03-24 09:11:06 +0800332 },
333 // clang-format on
334};
335
336} // anonymous
337
338const ProcHook* GetProcHook(const char* name) {
339 const auto& begin = g_proc_hooks;
340 const auto& end =
341 g_proc_hooks + sizeof(g_proc_hooks) / sizeof(g_proc_hooks[0]);
342 const auto hook = std::lower_bound(
343 begin, end, name,
344 [](const ProcHook& e, const char* n) { return strcmp(e.name, n) < 0; });
345 return (hook < end && strcmp(hook->name, name) == 0) ? hook : nullptr;
346}
347
348ProcHook::Extension GetProcHookExtension(const char* name) {
349 // clang-format off
350 if (strcmp(name, "VK_ANDROID_native_buffer") == 0) return ProcHook::ANDROID_native_buffer;
351 if (strcmp(name, "VK_EXT_debug_report") == 0) return ProcHook::EXT_debug_report;
352 if (strcmp(name, "VK_KHR_android_surface") == 0) return ProcHook::KHR_android_surface;
Chris Forbes48853712017-01-12 14:09:33 +1300353 if (strcmp(name, "VK_KHR_incremental_present") == 0) return ProcHook::KHR_incremental_present;
Chia-I Wueb7db122016-03-24 09:11:06 +0800354 if (strcmp(name, "VK_KHR_surface") == 0) return ProcHook::KHR_surface;
355 if (strcmp(name, "VK_KHR_swapchain") == 0) return ProcHook::KHR_swapchain;
Ian Elliott4c8bb2a2016-12-29 11:07:26 -0700356 if (strcmp(name, "VK_GOOGLE_display_timing") == 0) return ProcHook::GOOGLE_display_timing;
Chris Forbes1d5f68c2017-01-31 10:17:01 +1300357 if (strcmp(name, "VK_KHR_shared_presentable_image") == 0) return ProcHook::KHR_shared_presentable_image;
Chia-I Wueb7db122016-03-24 09:11:06 +0800358 // clang-format on
359 return ProcHook::EXTENSION_UNKNOWN;
360}
361
Chia-I Wucc5e2762016-03-24 13:01:16 +0800362#define UNLIKELY(expr) __builtin_expect((expr), 0)
363
Chris Forbes5948b3e2016-12-23 13:49:53 +1300364#define INIT_PROC(required, obj, proc) \
Chia-I Wucc5e2762016-03-24 13:01:16 +0800365 do { \
366 data.driver.proc = \
367 reinterpret_cast<PFN_vk##proc>(get_proc(obj, "vk" #proc)); \
Chris Forbes5948b3e2016-12-23 13:49:53 +1300368 if (UNLIKELY(required && !data.driver.proc)) { \
Chia-I Wucc5e2762016-03-24 13:01:16 +0800369 ALOGE("missing " #obj " proc: vk" #proc); \
370 success = false; \
371 } \
372 } while (0)
373
Chris Forbes5948b3e2016-12-23 13:49:53 +1300374#define INIT_PROC_EXT(ext, required, obj, proc) \
375 do { \
376 if (extensions[ProcHook::ext]) \
377 INIT_PROC(required, obj, proc); \
Chia-I Wucc5e2762016-03-24 13:01:16 +0800378 } while (0)
379
Chia-I Wucbe07ef2016-04-13 15:01:00 +0800380bool InitDriverTable(VkInstance instance,
381 PFN_vkGetInstanceProcAddr get_proc,
382 const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) {
Chia-I Wucc5e2762016-03-24 13:01:16 +0800383 auto& data = GetData(instance);
384 bool success = true;
385
386 // clang-format off
Chris Forbes5948b3e2016-12-23 13:49:53 +1300387 INIT_PROC(true, instance, DestroyInstance);
388 INIT_PROC(true, instance, EnumeratePhysicalDevices);
389 INIT_PROC(true, instance, GetInstanceProcAddr);
Jesse Hall85bb0c52017-02-09 22:13:02 -0800390 INIT_PROC(true, instance, GetPhysicalDeviceProperties);
Chris Forbes5948b3e2016-12-23 13:49:53 +1300391 INIT_PROC(true, instance, CreateDevice);
392 INIT_PROC(true, instance, EnumerateDeviceExtensionProperties);
393 INIT_PROC_EXT(EXT_debug_report, true, instance, CreateDebugReportCallbackEXT);
394 INIT_PROC_EXT(EXT_debug_report, true, instance, DestroyDebugReportCallbackEXT);
395 INIT_PROC_EXT(EXT_debug_report, true, instance, DebugReportMessageEXT);
Chia-I Wucc5e2762016-03-24 13:01:16 +0800396 // clang-format on
397
398 return success;
399}
400
Chia-I Wucbe07ef2016-04-13 15:01:00 +0800401bool InitDriverTable(VkDevice dev,
402 PFN_vkGetDeviceProcAddr get_proc,
403 const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) {
Chia-I Wucc5e2762016-03-24 13:01:16 +0800404 auto& data = GetData(dev);
405 bool success = true;
406
407 // clang-format off
Chris Forbes5948b3e2016-12-23 13:49:53 +1300408 INIT_PROC(true, dev, GetDeviceProcAddr);
409 INIT_PROC(true, dev, DestroyDevice);
410 INIT_PROC(true, dev, GetDeviceQueue);
411 INIT_PROC(true, dev, CreateImage);
412 INIT_PROC(true, dev, DestroyImage);
413 INIT_PROC(true, dev, AllocateCommandBuffers);
Chris Forbesd8277912017-02-10 14:59:59 +1300414 INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID);
Chris Forbes5948b3e2016-12-23 13:49:53 +1300415 INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID);
416 INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID);
417 INIT_PROC_EXT(ANDROID_native_buffer, true, dev, QueueSignalReleaseImageANDROID);
Chia-I Wucc5e2762016-03-24 13:01:16 +0800418 // clang-format on
419
420 return success;
421}
422
Chia-I Wueb7db122016-03-24 09:11:06 +0800423} // namespace driver
424} // namespace vulkan
425
426// clang-format on