xref: /aosp_15_r20/frameworks/native/vulkan/libvulkan/driver_gen.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright 2016 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker // WARNING: This file is generated. See ../README.md for instructions.
18*38e8c45fSAndroid Build Coastguard Worker 
19*38e8c45fSAndroid Build Coastguard Worker #include <log/log.h>
20*38e8c45fSAndroid Build Coastguard Worker #include <string.h>
21*38e8c45fSAndroid Build Coastguard Worker 
22*38e8c45fSAndroid Build Coastguard Worker #include <algorithm>
23*38e8c45fSAndroid Build Coastguard Worker 
24*38e8c45fSAndroid Build Coastguard Worker #include "driver.h"
25*38e8c45fSAndroid Build Coastguard Worker 
26*38e8c45fSAndroid Build Coastguard Worker namespace vulkan {
27*38e8c45fSAndroid Build Coastguard Worker namespace driver {
28*38e8c45fSAndroid Build Coastguard Worker 
29*38e8c45fSAndroid Build Coastguard Worker /*
30*38e8c45fSAndroid Build Coastguard Worker  * This file is autogenerated by driver_generator.py. Do not edit directly.
31*38e8c45fSAndroid Build Coastguard Worker  */
32*38e8c45fSAndroid Build Coastguard Worker namespace {
33*38e8c45fSAndroid Build Coastguard Worker 
34*38e8c45fSAndroid Build Coastguard Worker // clang-format off
35*38e8c45fSAndroid Build Coastguard Worker 
checkedCreateSwapchainKHR(VkDevice device,const VkSwapchainCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchain)36*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) {
37*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
38*38e8c45fSAndroid Build Coastguard Worker         return CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
39*38e8c45fSAndroid Build Coastguard Worker     } else {
40*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkCreateSwapchainKHR not executed.");
41*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
42*38e8c45fSAndroid Build Coastguard Worker     }
43*38e8c45fSAndroid Build Coastguard Worker }
44*38e8c45fSAndroid Build Coastguard Worker 
checkedDestroySwapchainKHR(VkDevice device,VkSwapchainKHR swapchain,const VkAllocationCallbacks * pAllocator)45*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR void checkedDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) {
46*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
47*38e8c45fSAndroid Build Coastguard Worker         DestroySwapchainKHR(device, swapchain, pAllocator);
48*38e8c45fSAndroid Build Coastguard Worker     } else {
49*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkDestroySwapchainKHR not executed.");
50*38e8c45fSAndroid Build Coastguard Worker     }
51*38e8c45fSAndroid Build Coastguard Worker }
52*38e8c45fSAndroid Build Coastguard Worker 
checkedGetSwapchainImagesKHR(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pSwapchainImageCount,VkImage * pSwapchainImages)53*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) {
54*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
55*38e8c45fSAndroid Build Coastguard Worker         return GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
56*38e8c45fSAndroid Build Coastguard Worker     } else {
57*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkGetSwapchainImagesKHR not executed.");
58*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
59*38e8c45fSAndroid Build Coastguard Worker     }
60*38e8c45fSAndroid Build Coastguard Worker }
61*38e8c45fSAndroid Build Coastguard Worker 
checkedAcquireNextImageKHR(VkDevice device,VkSwapchainKHR swapchain,uint64_t timeout,VkSemaphore semaphore,VkFence fence,uint32_t * pImageIndex)62*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) {
63*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
64*38e8c45fSAndroid Build Coastguard Worker         return AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
65*38e8c45fSAndroid Build Coastguard Worker     } else {
66*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkAcquireNextImageKHR not executed.");
67*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
68*38e8c45fSAndroid Build Coastguard Worker     }
69*38e8c45fSAndroid Build Coastguard Worker }
70*38e8c45fSAndroid Build Coastguard Worker 
checkedQueuePresentKHR(VkQueue queue,const VkPresentInfoKHR * pPresentInfo)71*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* pPresentInfo) {
72*38e8c45fSAndroid Build Coastguard Worker     if (GetData(queue).hook_extensions[ProcHook::KHR_swapchain]) {
73*38e8c45fSAndroid Build Coastguard Worker         return QueuePresentKHR(queue, pPresentInfo);
74*38e8c45fSAndroid Build Coastguard Worker     } else {
75*38e8c45fSAndroid Build Coastguard Worker         Logger(queue).Err(queue, "VK_KHR_swapchain not enabled. vkQueuePresentKHR not executed.");
76*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
77*38e8c45fSAndroid Build Coastguard Worker     }
78*38e8c45fSAndroid Build Coastguard Worker }
79*38e8c45fSAndroid Build Coastguard Worker 
checkedBindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)80*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) {
81*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::EXTENSION_CORE_1_1]) {
82*38e8c45fSAndroid Build Coastguard Worker         return BindImageMemory2(device, bindInfoCount, pBindInfos);
83*38e8c45fSAndroid Build Coastguard Worker     } else {
84*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_VERSION_1_1 not enabled. vkBindImageMemory2 not executed.");
85*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
86*38e8c45fSAndroid Build Coastguard Worker     }
87*38e8c45fSAndroid Build Coastguard Worker }
88*38e8c45fSAndroid Build Coastguard Worker 
checkedBindImageMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)89*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) {
90*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_bind_memory2]) {
91*38e8c45fSAndroid Build Coastguard Worker         return BindImageMemory2KHR(device, bindInfoCount, pBindInfos);
92*38e8c45fSAndroid Build Coastguard Worker     } else {
93*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_bind_memory2 not enabled. vkBindImageMemory2KHR not executed.");
94*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
95*38e8c45fSAndroid Build Coastguard Worker     }
96*38e8c45fSAndroid Build Coastguard Worker }
97*38e8c45fSAndroid Build Coastguard Worker 
checkedGetDeviceGroupPresentCapabilitiesKHR(VkDevice device,VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities)98*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) {
99*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
100*38e8c45fSAndroid Build Coastguard Worker         return GetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
101*38e8c45fSAndroid Build Coastguard Worker     } else {
102*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkGetDeviceGroupPresentCapabilitiesKHR not executed.");
103*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
104*38e8c45fSAndroid Build Coastguard Worker     }
105*38e8c45fSAndroid Build Coastguard Worker }
106*38e8c45fSAndroid Build Coastguard Worker 
checkedGetDeviceGroupSurfacePresentModesKHR(VkDevice device,VkSurfaceKHR surface,VkDeviceGroupPresentModeFlagsKHR * pModes)107*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) {
108*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
109*38e8c45fSAndroid Build Coastguard Worker         return GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
110*38e8c45fSAndroid Build Coastguard Worker     } else {
111*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkGetDeviceGroupSurfacePresentModesKHR not executed.");
112*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
113*38e8c45fSAndroid Build Coastguard Worker     }
114*38e8c45fSAndroid Build Coastguard Worker }
115*38e8c45fSAndroid Build Coastguard Worker 
checkedAcquireNextImage2KHR(VkDevice device,const VkAcquireNextImageInfoKHR * pAcquireInfo,uint32_t * pImageIndex)116*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex) {
117*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_swapchain]) {
118*38e8c45fSAndroid Build Coastguard Worker         return AcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
119*38e8c45fSAndroid Build Coastguard Worker     } else {
120*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_swapchain not enabled. vkAcquireNextImage2KHR not executed.");
121*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
122*38e8c45fSAndroid Build Coastguard Worker     }
123*38e8c45fSAndroid Build Coastguard Worker }
124*38e8c45fSAndroid Build Coastguard Worker 
checkedSetHdrMetadataEXT(VkDevice device,uint32_t swapchainCount,const VkSwapchainKHR * pSwapchains,const VkHdrMetadataEXT * pMetadata)125*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR void checkedSetHdrMetadataEXT(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) {
126*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::EXT_hdr_metadata]) {
127*38e8c45fSAndroid Build Coastguard Worker         SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
128*38e8c45fSAndroid Build Coastguard Worker     } else {
129*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_EXT_hdr_metadata not enabled. vkSetHdrMetadataEXT not executed.");
130*38e8c45fSAndroid Build Coastguard Worker     }
131*38e8c45fSAndroid Build Coastguard Worker }
132*38e8c45fSAndroid Build Coastguard Worker 
checkedGetSwapchainStatusKHR(VkDevice device,VkSwapchainKHR swapchain)133*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain) {
134*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::KHR_shared_presentable_image]) {
135*38e8c45fSAndroid Build Coastguard Worker         return GetSwapchainStatusKHR(device, swapchain);
136*38e8c45fSAndroid Build Coastguard Worker     } else {
137*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_KHR_shared_presentable_image not enabled. vkGetSwapchainStatusKHR not executed.");
138*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
139*38e8c45fSAndroid Build Coastguard Worker     }
140*38e8c45fSAndroid Build Coastguard Worker }
141*38e8c45fSAndroid Build Coastguard Worker 
checkedGetRefreshCycleDurationGOOGLE(VkDevice device,VkSwapchainKHR swapchain,VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties)142*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetRefreshCycleDurationGOOGLE(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) {
143*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::GOOGLE_display_timing]) {
144*38e8c45fSAndroid Build Coastguard Worker         return GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
145*38e8c45fSAndroid Build Coastguard Worker     } else {
146*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_GOOGLE_display_timing not enabled. vkGetRefreshCycleDurationGOOGLE not executed.");
147*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
148*38e8c45fSAndroid Build Coastguard Worker     }
149*38e8c45fSAndroid Build Coastguard Worker }
150*38e8c45fSAndroid Build Coastguard Worker 
checkedGetPastPresentationTimingGOOGLE(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pPresentationTimingCount,VkPastPresentationTimingGOOGLE * pPresentationTimings)151*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedGetPastPresentationTimingGOOGLE(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) {
152*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::GOOGLE_display_timing]) {
153*38e8c45fSAndroid Build Coastguard Worker         return GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
154*38e8c45fSAndroid Build Coastguard Worker     } else {
155*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_GOOGLE_display_timing not enabled. vkGetPastPresentationTimingGOOGLE not executed.");
156*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
157*38e8c45fSAndroid Build Coastguard Worker     }
158*38e8c45fSAndroid Build Coastguard Worker }
159*38e8c45fSAndroid Build Coastguard Worker 
checkedGetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue)160*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR void checkedGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) {
161*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::EXTENSION_CORE_1_1]) {
162*38e8c45fSAndroid Build Coastguard Worker         GetDeviceQueue2(device, pQueueInfo, pQueue);
163*38e8c45fSAndroid Build Coastguard Worker     } else {
164*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_VERSION_1_1 not enabled. vkGetDeviceQueue2 not executed.");
165*38e8c45fSAndroid Build Coastguard Worker     }
166*38e8c45fSAndroid Build Coastguard Worker }
167*38e8c45fSAndroid Build Coastguard Worker 
checkedReleaseSwapchainImagesEXT(VkDevice device,const VkReleaseSwapchainImagesInfoEXT * pReleaseInfo)168*38e8c45fSAndroid Build Coastguard Worker VKAPI_ATTR VkResult checkedReleaseSwapchainImagesEXT(VkDevice device, const VkReleaseSwapchainImagesInfoEXT* pReleaseInfo) {
169*38e8c45fSAndroid Build Coastguard Worker     if (GetData(device).hook_extensions[ProcHook::EXT_swapchain_maintenance1]) {
170*38e8c45fSAndroid Build Coastguard Worker         return ReleaseSwapchainImagesEXT(device, pReleaseInfo);
171*38e8c45fSAndroid Build Coastguard Worker     } else {
172*38e8c45fSAndroid Build Coastguard Worker         Logger(device).Err(device, "VK_EXT_swapchain_maintenance1 not enabled. vkReleaseSwapchainImagesEXT not executed.");
173*38e8c45fSAndroid Build Coastguard Worker         return VK_SUCCESS;
174*38e8c45fSAndroid Build Coastguard Worker     }
175*38e8c45fSAndroid Build Coastguard Worker }
176*38e8c45fSAndroid Build Coastguard Worker 
177*38e8c45fSAndroid Build Coastguard Worker // clang-format on
178*38e8c45fSAndroid Build Coastguard Worker 
179*38e8c45fSAndroid Build Coastguard Worker const ProcHook g_proc_hooks[] = {
180*38e8c45fSAndroid Build Coastguard Worker     // clang-format off
181*38e8c45fSAndroid Build Coastguard Worker     {
182*38e8c45fSAndroid Build Coastguard Worker         "vkAcquireImageANDROID",
183*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
184*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
185*38e8c45fSAndroid Build Coastguard Worker         nullptr,
186*38e8c45fSAndroid Build Coastguard Worker         nullptr,
187*38e8c45fSAndroid Build Coastguard Worker     },
188*38e8c45fSAndroid Build Coastguard Worker     {
189*38e8c45fSAndroid Build Coastguard Worker         "vkAcquireNextImage2KHR",
190*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
191*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
192*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImage2KHR),
193*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedAcquireNextImage2KHR),
194*38e8c45fSAndroid Build Coastguard Worker     },
195*38e8c45fSAndroid Build Coastguard Worker     {
196*38e8c45fSAndroid Build Coastguard Worker         "vkAcquireNextImageKHR",
197*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
198*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
199*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImageKHR),
200*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedAcquireNextImageKHR),
201*38e8c45fSAndroid Build Coastguard Worker     },
202*38e8c45fSAndroid Build Coastguard Worker     {
203*38e8c45fSAndroid Build Coastguard Worker         "vkAllocateCommandBuffers",
204*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
205*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
206*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(AllocateCommandBuffers),
207*38e8c45fSAndroid Build Coastguard Worker         nullptr,
208*38e8c45fSAndroid Build Coastguard Worker     },
209*38e8c45fSAndroid Build Coastguard Worker     {
210*38e8c45fSAndroid Build Coastguard Worker         "vkBindImageMemory2",
211*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
212*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
213*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(BindImageMemory2),
214*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedBindImageMemory2),
215*38e8c45fSAndroid Build Coastguard Worker     },
216*38e8c45fSAndroid Build Coastguard Worker     {
217*38e8c45fSAndroid Build Coastguard Worker         "vkBindImageMemory2KHR",
218*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
219*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_bind_memory2,
220*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(BindImageMemory2KHR),
221*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedBindImageMemory2KHR),
222*38e8c45fSAndroid Build Coastguard Worker     },
223*38e8c45fSAndroid Build Coastguard Worker     {
224*38e8c45fSAndroid Build Coastguard Worker         "vkCreateAndroidSurfaceKHR",
225*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
226*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_android_surface,
227*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(CreateAndroidSurfaceKHR),
228*38e8c45fSAndroid Build Coastguard Worker         nullptr,
229*38e8c45fSAndroid Build Coastguard Worker     },
230*38e8c45fSAndroid Build Coastguard Worker     {
231*38e8c45fSAndroid Build Coastguard Worker         "vkCreateDebugReportCallbackEXT",
232*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
233*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXT_debug_report,
234*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(CreateDebugReportCallbackEXT),
235*38e8c45fSAndroid Build Coastguard Worker         nullptr,
236*38e8c45fSAndroid Build Coastguard Worker     },
237*38e8c45fSAndroid Build Coastguard Worker     {
238*38e8c45fSAndroid Build Coastguard Worker         "vkCreateDevice",
239*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
240*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
241*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(CreateDevice),
242*38e8c45fSAndroid Build Coastguard Worker         nullptr,
243*38e8c45fSAndroid Build Coastguard Worker     },
244*38e8c45fSAndroid Build Coastguard Worker     {
245*38e8c45fSAndroid Build Coastguard Worker         "vkCreateInstance",
246*38e8c45fSAndroid Build Coastguard Worker         ProcHook::GLOBAL,
247*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
248*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(CreateInstance),
249*38e8c45fSAndroid Build Coastguard Worker         nullptr,
250*38e8c45fSAndroid Build Coastguard Worker     },
251*38e8c45fSAndroid Build Coastguard Worker     {
252*38e8c45fSAndroid Build Coastguard Worker         "vkCreateSwapchainKHR",
253*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
254*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
255*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR),
256*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedCreateSwapchainKHR),
257*38e8c45fSAndroid Build Coastguard Worker     },
258*38e8c45fSAndroid Build Coastguard Worker     {
259*38e8c45fSAndroid Build Coastguard Worker         "vkDebugReportMessageEXT",
260*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
261*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXT_debug_report,
262*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DebugReportMessageEXT),
263*38e8c45fSAndroid Build Coastguard Worker         nullptr,
264*38e8c45fSAndroid Build Coastguard Worker     },
265*38e8c45fSAndroid Build Coastguard Worker     {
266*38e8c45fSAndroid Build Coastguard Worker         "vkDestroyDebugReportCallbackEXT",
267*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
268*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXT_debug_report,
269*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DestroyDebugReportCallbackEXT),
270*38e8c45fSAndroid Build Coastguard Worker         nullptr,
271*38e8c45fSAndroid Build Coastguard Worker     },
272*38e8c45fSAndroid Build Coastguard Worker     {
273*38e8c45fSAndroid Build Coastguard Worker         "vkDestroyDevice",
274*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
275*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
276*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice),
277*38e8c45fSAndroid Build Coastguard Worker         nullptr,
278*38e8c45fSAndroid Build Coastguard Worker     },
279*38e8c45fSAndroid Build Coastguard Worker     {
280*38e8c45fSAndroid Build Coastguard Worker         "vkDestroyInstance",
281*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
282*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
283*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance),
284*38e8c45fSAndroid Build Coastguard Worker         nullptr,
285*38e8c45fSAndroid Build Coastguard Worker     },
286*38e8c45fSAndroid Build Coastguard Worker     {
287*38e8c45fSAndroid Build Coastguard Worker         "vkDestroySurfaceKHR",
288*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
289*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_surface,
290*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DestroySurfaceKHR),
291*38e8c45fSAndroid Build Coastguard Worker         nullptr,
292*38e8c45fSAndroid Build Coastguard Worker     },
293*38e8c45fSAndroid Build Coastguard Worker     {
294*38e8c45fSAndroid Build Coastguard Worker         "vkDestroySwapchainKHR",
295*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
296*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
297*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(DestroySwapchainKHR),
298*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedDestroySwapchainKHR),
299*38e8c45fSAndroid Build Coastguard Worker     },
300*38e8c45fSAndroid Build Coastguard Worker     {
301*38e8c45fSAndroid Build Coastguard Worker         "vkEnumerateDeviceExtensionProperties",
302*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
303*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
304*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties),
305*38e8c45fSAndroid Build Coastguard Worker         nullptr,
306*38e8c45fSAndroid Build Coastguard Worker     },
307*38e8c45fSAndroid Build Coastguard Worker     {
308*38e8c45fSAndroid Build Coastguard Worker         "vkEnumerateInstanceExtensionProperties",
309*38e8c45fSAndroid Build Coastguard Worker         ProcHook::GLOBAL,
310*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
311*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceExtensionProperties),
312*38e8c45fSAndroid Build Coastguard Worker         nullptr,
313*38e8c45fSAndroid Build Coastguard Worker     },
314*38e8c45fSAndroid Build Coastguard Worker     {
315*38e8c45fSAndroid Build Coastguard Worker         "vkEnumeratePhysicalDeviceGroups",
316*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
317*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
318*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDeviceGroups),
319*38e8c45fSAndroid Build Coastguard Worker         nullptr,
320*38e8c45fSAndroid Build Coastguard Worker     },
321*38e8c45fSAndroid Build Coastguard Worker     {
322*38e8c45fSAndroid Build Coastguard Worker         "vkEnumeratePhysicalDevices",
323*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
324*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
325*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices),
326*38e8c45fSAndroid Build Coastguard Worker         nullptr,
327*38e8c45fSAndroid Build Coastguard Worker     },
328*38e8c45fSAndroid Build Coastguard Worker     {
329*38e8c45fSAndroid Build Coastguard Worker         "vkGetDeviceGroupPresentCapabilitiesKHR",
330*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
331*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
332*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetDeviceGroupPresentCapabilitiesKHR),
333*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetDeviceGroupPresentCapabilitiesKHR),
334*38e8c45fSAndroid Build Coastguard Worker     },
335*38e8c45fSAndroid Build Coastguard Worker     {
336*38e8c45fSAndroid Build Coastguard Worker         "vkGetDeviceGroupSurfacePresentModesKHR",
337*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
338*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
339*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetDeviceGroupSurfacePresentModesKHR),
340*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetDeviceGroupSurfacePresentModesKHR),
341*38e8c45fSAndroid Build Coastguard Worker     },
342*38e8c45fSAndroid Build Coastguard Worker     {
343*38e8c45fSAndroid Build Coastguard Worker         "vkGetDeviceProcAddr",
344*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
345*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
346*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr),
347*38e8c45fSAndroid Build Coastguard Worker         nullptr,
348*38e8c45fSAndroid Build Coastguard Worker     },
349*38e8c45fSAndroid Build Coastguard Worker     {
350*38e8c45fSAndroid Build Coastguard Worker         "vkGetDeviceQueue",
351*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
352*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
353*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetDeviceQueue),
354*38e8c45fSAndroid Build Coastguard Worker         nullptr,
355*38e8c45fSAndroid Build Coastguard Worker     },
356*38e8c45fSAndroid Build Coastguard Worker     {
357*38e8c45fSAndroid Build Coastguard Worker         "vkGetDeviceQueue2",
358*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
359*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
360*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetDeviceQueue2),
361*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetDeviceQueue2),
362*38e8c45fSAndroid Build Coastguard Worker     },
363*38e8c45fSAndroid Build Coastguard Worker     {
364*38e8c45fSAndroid Build Coastguard Worker         "vkGetInstanceProcAddr",
365*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
366*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
367*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetInstanceProcAddr),
368*38e8c45fSAndroid Build Coastguard Worker         nullptr,
369*38e8c45fSAndroid Build Coastguard Worker     },
370*38e8c45fSAndroid Build Coastguard Worker     {
371*38e8c45fSAndroid Build Coastguard Worker         "vkGetPastPresentationTimingGOOGLE",
372*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
373*38e8c45fSAndroid Build Coastguard Worker         ProcHook::GOOGLE_display_timing,
374*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPastPresentationTimingGOOGLE),
375*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetPastPresentationTimingGOOGLE),
376*38e8c45fSAndroid Build Coastguard Worker     },
377*38e8c45fSAndroid Build Coastguard Worker     {
378*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceExternalBufferProperties",
379*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
380*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
381*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceExternalBufferProperties),
382*38e8c45fSAndroid Build Coastguard Worker         nullptr,
383*38e8c45fSAndroid Build Coastguard Worker     },
384*38e8c45fSAndroid Build Coastguard Worker     {
385*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceExternalFenceProperties",
386*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
387*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
388*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceExternalFenceProperties),
389*38e8c45fSAndroid Build Coastguard Worker         nullptr,
390*38e8c45fSAndroid Build Coastguard Worker     },
391*38e8c45fSAndroid Build Coastguard Worker     {
392*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceExternalSemaphoreProperties",
393*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
394*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
395*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceExternalSemaphoreProperties),
396*38e8c45fSAndroid Build Coastguard Worker         nullptr,
397*38e8c45fSAndroid Build Coastguard Worker     },
398*38e8c45fSAndroid Build Coastguard Worker     {
399*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceFeatures2",
400*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
401*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
402*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFeatures2),
403*38e8c45fSAndroid Build Coastguard Worker         nullptr,
404*38e8c45fSAndroid Build Coastguard Worker     },
405*38e8c45fSAndroid Build Coastguard Worker     {
406*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceFormatProperties2",
407*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
408*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
409*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFormatProperties2),
410*38e8c45fSAndroid Build Coastguard Worker         nullptr,
411*38e8c45fSAndroid Build Coastguard Worker     },
412*38e8c45fSAndroid Build Coastguard Worker     {
413*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceImageFormatProperties2",
414*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
415*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
416*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceImageFormatProperties2),
417*38e8c45fSAndroid Build Coastguard Worker         nullptr,
418*38e8c45fSAndroid Build Coastguard Worker     },
419*38e8c45fSAndroid Build Coastguard Worker     {
420*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceMemoryProperties2",
421*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
422*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
423*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMemoryProperties2),
424*38e8c45fSAndroid Build Coastguard Worker         nullptr,
425*38e8c45fSAndroid Build Coastguard Worker     },
426*38e8c45fSAndroid Build Coastguard Worker     {
427*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDevicePresentRectanglesKHR",
428*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
429*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
430*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDevicePresentRectanglesKHR),
431*38e8c45fSAndroid Build Coastguard Worker         nullptr,
432*38e8c45fSAndroid Build Coastguard Worker     },
433*38e8c45fSAndroid Build Coastguard Worker     {
434*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceProperties2",
435*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
436*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
437*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceProperties2),
438*38e8c45fSAndroid Build Coastguard Worker         nullptr,
439*38e8c45fSAndroid Build Coastguard Worker     },
440*38e8c45fSAndroid Build Coastguard Worker     {
441*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceQueueFamilyProperties2",
442*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
443*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
444*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties2),
445*38e8c45fSAndroid Build Coastguard Worker         nullptr,
446*38e8c45fSAndroid Build Coastguard Worker     },
447*38e8c45fSAndroid Build Coastguard Worker     {
448*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSparseImageFormatProperties2",
449*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
450*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_1,
451*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSparseImageFormatProperties2),
452*38e8c45fSAndroid Build Coastguard Worker         nullptr,
453*38e8c45fSAndroid Build Coastguard Worker     },
454*38e8c45fSAndroid Build Coastguard Worker     {
455*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfaceCapabilities2KHR",
456*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
457*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_get_surface_capabilities2,
458*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilities2KHR),
459*38e8c45fSAndroid Build Coastguard Worker         nullptr,
460*38e8c45fSAndroid Build Coastguard Worker     },
461*38e8c45fSAndroid Build Coastguard Worker     {
462*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
463*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
464*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_surface,
465*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilitiesKHR),
466*38e8c45fSAndroid Build Coastguard Worker         nullptr,
467*38e8c45fSAndroid Build Coastguard Worker     },
468*38e8c45fSAndroid Build Coastguard Worker     {
469*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfaceFormats2KHR",
470*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
471*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_get_surface_capabilities2,
472*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormats2KHR),
473*38e8c45fSAndroid Build Coastguard Worker         nullptr,
474*38e8c45fSAndroid Build Coastguard Worker     },
475*38e8c45fSAndroid Build Coastguard Worker     {
476*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfaceFormatsKHR",
477*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
478*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_surface,
479*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR),
480*38e8c45fSAndroid Build Coastguard Worker         nullptr,
481*38e8c45fSAndroid Build Coastguard Worker     },
482*38e8c45fSAndroid Build Coastguard Worker     {
483*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfacePresentModesKHR",
484*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
485*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_surface,
486*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR),
487*38e8c45fSAndroid Build Coastguard Worker         nullptr,
488*38e8c45fSAndroid Build Coastguard Worker     },
489*38e8c45fSAndroid Build Coastguard Worker     {
490*38e8c45fSAndroid Build Coastguard Worker         "vkGetPhysicalDeviceSurfaceSupportKHR",
491*38e8c45fSAndroid Build Coastguard Worker         ProcHook::INSTANCE,
492*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_surface,
493*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceSupportKHR),
494*38e8c45fSAndroid Build Coastguard Worker         nullptr,
495*38e8c45fSAndroid Build Coastguard Worker     },
496*38e8c45fSAndroid Build Coastguard Worker     {
497*38e8c45fSAndroid Build Coastguard Worker         "vkGetRefreshCycleDurationGOOGLE",
498*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
499*38e8c45fSAndroid Build Coastguard Worker         ProcHook::GOOGLE_display_timing,
500*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetRefreshCycleDurationGOOGLE),
501*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetRefreshCycleDurationGOOGLE),
502*38e8c45fSAndroid Build Coastguard Worker     },
503*38e8c45fSAndroid Build Coastguard Worker     {
504*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainGrallocUsage2ANDROID",
505*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
506*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
507*38e8c45fSAndroid Build Coastguard Worker         nullptr,
508*38e8c45fSAndroid Build Coastguard Worker         nullptr,
509*38e8c45fSAndroid Build Coastguard Worker     },
510*38e8c45fSAndroid Build Coastguard Worker     {
511*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainGrallocUsage3ANDROID",
512*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
513*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
514*38e8c45fSAndroid Build Coastguard Worker         nullptr,
515*38e8c45fSAndroid Build Coastguard Worker         nullptr,
516*38e8c45fSAndroid Build Coastguard Worker     },
517*38e8c45fSAndroid Build Coastguard Worker     {
518*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainGrallocUsage4ANDROID",
519*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
520*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
521*38e8c45fSAndroid Build Coastguard Worker         nullptr,
522*38e8c45fSAndroid Build Coastguard Worker         nullptr,
523*38e8c45fSAndroid Build Coastguard Worker     },
524*38e8c45fSAndroid Build Coastguard Worker     {
525*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainGrallocUsageANDROID",
526*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
527*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
528*38e8c45fSAndroid Build Coastguard Worker         nullptr,
529*38e8c45fSAndroid Build Coastguard Worker         nullptr,
530*38e8c45fSAndroid Build Coastguard Worker     },
531*38e8c45fSAndroid Build Coastguard Worker     {
532*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainImagesKHR",
533*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
534*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
535*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR),
536*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainImagesKHR),
537*38e8c45fSAndroid Build Coastguard Worker     },
538*38e8c45fSAndroid Build Coastguard Worker     {
539*38e8c45fSAndroid Build Coastguard Worker         "vkGetSwapchainStatusKHR",
540*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
541*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_shared_presentable_image,
542*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainStatusKHR),
543*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedGetSwapchainStatusKHR),
544*38e8c45fSAndroid Build Coastguard Worker     },
545*38e8c45fSAndroid Build Coastguard Worker     {
546*38e8c45fSAndroid Build Coastguard Worker         "vkQueuePresentKHR",
547*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
548*38e8c45fSAndroid Build Coastguard Worker         ProcHook::KHR_swapchain,
549*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(QueuePresentKHR),
550*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedQueuePresentKHR),
551*38e8c45fSAndroid Build Coastguard Worker     },
552*38e8c45fSAndroid Build Coastguard Worker     {
553*38e8c45fSAndroid Build Coastguard Worker         "vkQueueSignalReleaseImageANDROID",
554*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
555*38e8c45fSAndroid Build Coastguard Worker         ProcHook::ANDROID_native_buffer,
556*38e8c45fSAndroid Build Coastguard Worker         nullptr,
557*38e8c45fSAndroid Build Coastguard Worker         nullptr,
558*38e8c45fSAndroid Build Coastguard Worker     },
559*38e8c45fSAndroid Build Coastguard Worker     {
560*38e8c45fSAndroid Build Coastguard Worker         "vkQueueSubmit",
561*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
562*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXTENSION_CORE_1_0,
563*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(QueueSubmit),
564*38e8c45fSAndroid Build Coastguard Worker         nullptr,
565*38e8c45fSAndroid Build Coastguard Worker     },
566*38e8c45fSAndroid Build Coastguard Worker     {
567*38e8c45fSAndroid Build Coastguard Worker         "vkReleaseSwapchainImagesEXT",
568*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
569*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXT_swapchain_maintenance1,
570*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(ReleaseSwapchainImagesEXT),
571*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedReleaseSwapchainImagesEXT),
572*38e8c45fSAndroid Build Coastguard Worker     },
573*38e8c45fSAndroid Build Coastguard Worker     {
574*38e8c45fSAndroid Build Coastguard Worker         "vkSetHdrMetadataEXT",
575*38e8c45fSAndroid Build Coastguard Worker         ProcHook::DEVICE,
576*38e8c45fSAndroid Build Coastguard Worker         ProcHook::EXT_hdr_metadata,
577*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(SetHdrMetadataEXT),
578*38e8c45fSAndroid Build Coastguard Worker         reinterpret_cast<PFN_vkVoidFunction>(checkedSetHdrMetadataEXT),
579*38e8c45fSAndroid Build Coastguard Worker     },
580*38e8c45fSAndroid Build Coastguard Worker     // clang-format on
581*38e8c45fSAndroid Build Coastguard Worker };
582*38e8c45fSAndroid Build Coastguard Worker 
583*38e8c45fSAndroid Build Coastguard Worker }  // namespace
584*38e8c45fSAndroid Build Coastguard Worker 
GetProcHook(const char * name)585*38e8c45fSAndroid Build Coastguard Worker const ProcHook* GetProcHook(const char* name) {
586*38e8c45fSAndroid Build Coastguard Worker     auto begin = std::cbegin(g_proc_hooks);
587*38e8c45fSAndroid Build Coastguard Worker     auto end = std::cend(g_proc_hooks);
588*38e8c45fSAndroid Build Coastguard Worker     auto hook = std::lower_bound(
589*38e8c45fSAndroid Build Coastguard Worker         begin, end, name,
590*38e8c45fSAndroid Build Coastguard Worker         [](const ProcHook& e, const char* n) { return strcmp(e.name, n) < 0; });
591*38e8c45fSAndroid Build Coastguard Worker     return (hook < end && strcmp(hook->name, name) == 0) ? hook : nullptr;
592*38e8c45fSAndroid Build Coastguard Worker }
593*38e8c45fSAndroid Build Coastguard Worker 
GetProcHookExtension(const char * name)594*38e8c45fSAndroid Build Coastguard Worker ProcHook::Extension GetProcHookExtension(const char* name) {
595*38e8c45fSAndroid Build Coastguard Worker     // clang-format off
596*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_ANDROID_native_buffer") == 0) return ProcHook::ANDROID_native_buffer;
597*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_EXT_debug_report") == 0) return ProcHook::EXT_debug_report;
598*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_EXT_hdr_metadata") == 0) return ProcHook::EXT_hdr_metadata;
599*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_EXT_swapchain_colorspace") == 0) return ProcHook::EXT_swapchain_colorspace;
600*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_GOOGLE_display_timing") == 0) return ProcHook::GOOGLE_display_timing;
601*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_GOOGLE_surfaceless_query") == 0) return ProcHook::GOOGLE_surfaceless_query;
602*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_android_surface") == 0) return ProcHook::KHR_android_surface;
603*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_get_surface_capabilities2") == 0) return ProcHook::KHR_get_surface_capabilities2;
604*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_incremental_present") == 0) return ProcHook::KHR_incremental_present;
605*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_shared_presentable_image") == 0) return ProcHook::KHR_shared_presentable_image;
606*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_surface") == 0) return ProcHook::KHR_surface;
607*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_surface_protected_capabilities") == 0) return ProcHook::KHR_surface_protected_capabilities;
608*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_swapchain") == 0) return ProcHook::KHR_swapchain;
609*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_EXT_swapchain_maintenance1") == 0) return ProcHook::EXT_swapchain_maintenance1;
610*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_EXT_surface_maintenance1") == 0) return ProcHook::EXT_surface_maintenance1;
611*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_ANDROID_external_memory_android_hardware_buffer") == 0) return ProcHook::ANDROID_external_memory_android_hardware_buffer;
612*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_bind_memory2") == 0) return ProcHook::KHR_bind_memory2;
613*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_get_physical_device_properties2") == 0) return ProcHook::KHR_get_physical_device_properties2;
614*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_device_group_creation") == 0) return ProcHook::KHR_device_group_creation;
615*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_external_memory_capabilities") == 0) return ProcHook::KHR_external_memory_capabilities;
616*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_external_semaphore_capabilities") == 0) return ProcHook::KHR_external_semaphore_capabilities;
617*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_external_fence_capabilities") == 0) return ProcHook::KHR_external_fence_capabilities;
618*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_external_fence_fd") == 0) return ProcHook::KHR_external_fence_fd;
619*38e8c45fSAndroid Build Coastguard Worker     if (strcmp(name, "VK_KHR_swapchain_mutable_format") == 0) return ProcHook::KHR_swapchain_mutable_format;
620*38e8c45fSAndroid Build Coastguard Worker     // clang-format on
621*38e8c45fSAndroid Build Coastguard Worker     return ProcHook::EXTENSION_UNKNOWN;
622*38e8c45fSAndroid Build Coastguard Worker }
623*38e8c45fSAndroid Build Coastguard Worker 
624*38e8c45fSAndroid Build Coastguard Worker #define UNLIKELY(expr) __builtin_expect((expr), 0)
625*38e8c45fSAndroid Build Coastguard Worker 
626*38e8c45fSAndroid Build Coastguard Worker #define INIT_PROC(required, obj, proc)                                 \
627*38e8c45fSAndroid Build Coastguard Worker     do {                                                               \
628*38e8c45fSAndroid Build Coastguard Worker         data.driver.proc =                                             \
629*38e8c45fSAndroid Build Coastguard Worker             reinterpret_cast<PFN_vk##proc>(get_proc(obj, "vk" #proc)); \
630*38e8c45fSAndroid Build Coastguard Worker         if (UNLIKELY(required && !data.driver.proc)) {                 \
631*38e8c45fSAndroid Build Coastguard Worker             ALOGE("missing " #obj " proc: vk" #proc);                  \
632*38e8c45fSAndroid Build Coastguard Worker             success = false;                                           \
633*38e8c45fSAndroid Build Coastguard Worker         }                                                              \
634*38e8c45fSAndroid Build Coastguard Worker     } while (0)
635*38e8c45fSAndroid Build Coastguard Worker 
636*38e8c45fSAndroid Build Coastguard Worker #define INIT_PROC_EXT(ext, required, obj, proc) \
637*38e8c45fSAndroid Build Coastguard Worker     do {                                        \
638*38e8c45fSAndroid Build Coastguard Worker         if (extensions[ProcHook::ext])          \
639*38e8c45fSAndroid Build Coastguard Worker             INIT_PROC(required, obj, proc);     \
640*38e8c45fSAndroid Build Coastguard Worker     } while (0)
641*38e8c45fSAndroid Build Coastguard Worker 
InitDriverTable(VkInstance instance,PFN_vkGetInstanceProcAddr get_proc,const std::bitset<ProcHook::EXTENSION_COUNT> & extensions)642*38e8c45fSAndroid Build Coastguard Worker bool InitDriverTable(VkInstance instance,
643*38e8c45fSAndroid Build Coastguard Worker                      PFN_vkGetInstanceProcAddr get_proc,
644*38e8c45fSAndroid Build Coastguard Worker                      const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) {
645*38e8c45fSAndroid Build Coastguard Worker     auto& data = GetData(instance);
646*38e8c45fSAndroid Build Coastguard Worker     bool success = true;
647*38e8c45fSAndroid Build Coastguard Worker 
648*38e8c45fSAndroid Build Coastguard Worker     // clang-format off
649*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, DestroyInstance);
650*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, EnumeratePhysicalDevices);
651*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, GetInstanceProcAddr);
652*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, GetPhysicalDeviceProperties);
653*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, CreateDevice);
654*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, instance, EnumerateDeviceExtensionProperties);
655*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(EXT_debug_report, true, instance, CreateDebugReportCallbackEXT);
656*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(EXT_debug_report, true, instance, DestroyDebugReportCallbackEXT);
657*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(EXT_debug_report, true, instance, DebugReportMessageEXT);
658*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceFeatures2);
659*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceFeatures2KHR);
660*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceProperties2);
661*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceProperties2KHR);
662*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceFormatProperties2);
663*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceFormatProperties2KHR);
664*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceImageFormatProperties2);
665*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceImageFormatProperties2KHR);
666*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceQueueFamilyProperties2);
667*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceQueueFamilyProperties2KHR);
668*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceMemoryProperties2);
669*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceMemoryProperties2KHR);
670*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceSparseImageFormatProperties2);
671*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceSparseImageFormatProperties2KHR);
672*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceExternalBufferProperties);
673*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_external_memory_capabilities, true, instance, GetPhysicalDeviceExternalBufferPropertiesKHR);
674*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceExternalSemaphoreProperties);
675*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_external_semaphore_capabilities, true, instance, GetPhysicalDeviceExternalSemaphorePropertiesKHR);
676*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, GetPhysicalDeviceExternalFenceProperties);
677*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_external_fence_capabilities, true, instance, GetPhysicalDeviceExternalFencePropertiesKHR);
678*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, instance, EnumeratePhysicalDeviceGroups);
679*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_device_group_creation, true, instance, EnumeratePhysicalDeviceGroupsKHR);
680*38e8c45fSAndroid Build Coastguard Worker     // clang-format on
681*38e8c45fSAndroid Build Coastguard Worker 
682*38e8c45fSAndroid Build Coastguard Worker     return success;
683*38e8c45fSAndroid Build Coastguard Worker }
684*38e8c45fSAndroid Build Coastguard Worker 
InitDriverTable(VkDevice dev,PFN_vkGetDeviceProcAddr get_proc,const std::bitset<ProcHook::EXTENSION_COUNT> & extensions)685*38e8c45fSAndroid Build Coastguard Worker bool InitDriverTable(VkDevice dev,
686*38e8c45fSAndroid Build Coastguard Worker                      PFN_vkGetDeviceProcAddr get_proc,
687*38e8c45fSAndroid Build Coastguard Worker                      const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) {
688*38e8c45fSAndroid Build Coastguard Worker     auto& data = GetData(dev);
689*38e8c45fSAndroid Build Coastguard Worker     bool success = true;
690*38e8c45fSAndroid Build Coastguard Worker 
691*38e8c45fSAndroid Build Coastguard Worker     // clang-format off
692*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, GetDeviceProcAddr);
693*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, DestroyDevice);
694*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, GetDeviceQueue);
695*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, QueueSubmit);
696*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, CreateImage);
697*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, DestroyImage);
698*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(true, dev, AllocateCommandBuffers);
699*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_external_fence_fd, true, dev, ImportFenceFdKHR);
700*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, dev, BindImageMemory2);
701*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(KHR_bind_memory2, true, dev, BindImageMemory2KHR);
702*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC(false, dev, GetDeviceQueue2);
703*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID);
704*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID);
705*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage3ANDROID);
706*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage4ANDROID);
707*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID);
708*38e8c45fSAndroid Build Coastguard Worker     INIT_PROC_EXT(ANDROID_native_buffer, true, dev, QueueSignalReleaseImageANDROID);
709*38e8c45fSAndroid Build Coastguard Worker     // clang-format on
710*38e8c45fSAndroid Build Coastguard Worker 
711*38e8c45fSAndroid Build Coastguard Worker     return success;
712*38e8c45fSAndroid Build Coastguard Worker }
713*38e8c45fSAndroid Build Coastguard Worker 
714*38e8c45fSAndroid Build Coastguard Worker const std::pair<const char*, uint32_t> g_promoted_instance_extensions[] = {
715*38e8c45fSAndroid Build Coastguard Worker     // clang-format off
716*38e8c45fSAndroid Build Coastguard Worker     std::make_pair("VK_KHR_device_group_creation", VK_API_VERSION_1_1),
717*38e8c45fSAndroid Build Coastguard Worker     std::make_pair("VK_KHR_external_fence_capabilities", VK_API_VERSION_1_1),
718*38e8c45fSAndroid Build Coastguard Worker     std::make_pair("VK_KHR_external_memory_capabilities", VK_API_VERSION_1_1),
719*38e8c45fSAndroid Build Coastguard Worker     std::make_pair("VK_KHR_external_semaphore_capabilities", VK_API_VERSION_1_1),
720*38e8c45fSAndroid Build Coastguard Worker     std::make_pair("VK_KHR_get_physical_device_properties2", VK_API_VERSION_1_1),
721*38e8c45fSAndroid Build Coastguard Worker     // clang-format on
722*38e8c45fSAndroid Build Coastguard Worker };
723*38e8c45fSAndroid Build Coastguard Worker 
GetInstanceExtensionPromotedVersion(const char * name)724*38e8c45fSAndroid Build Coastguard Worker std::optional<uint32_t> GetInstanceExtensionPromotedVersion(const char* name) {
725*38e8c45fSAndroid Build Coastguard Worker     auto begin = std::cbegin(g_promoted_instance_extensions);
726*38e8c45fSAndroid Build Coastguard Worker     auto end = std::cend(g_promoted_instance_extensions);
727*38e8c45fSAndroid Build Coastguard Worker     auto iter =
728*38e8c45fSAndroid Build Coastguard Worker         std::lower_bound(begin, end, name,
729*38e8c45fSAndroid Build Coastguard Worker                          [](const std::pair<const char*, uint32_t>& e,
730*38e8c45fSAndroid Build Coastguard Worker                             const char* n) { return strcmp(e.first, n) < 0; });
731*38e8c45fSAndroid Build Coastguard Worker     return (iter < end && strcmp(iter->first, name) == 0)
732*38e8c45fSAndroid Build Coastguard Worker                ? std::optional<uint32_t>(iter->second)
733*38e8c45fSAndroid Build Coastguard Worker                : std::nullopt;
734*38e8c45fSAndroid Build Coastguard Worker }
735*38e8c45fSAndroid Build Coastguard Worker 
CountPromotedInstanceExtensions(uint32_t begin_version,uint32_t end_version)736*38e8c45fSAndroid Build Coastguard Worker uint32_t CountPromotedInstanceExtensions(uint32_t begin_version,
737*38e8c45fSAndroid Build Coastguard Worker                                          uint32_t end_version) {
738*38e8c45fSAndroid Build Coastguard Worker     auto begin = std::cbegin(g_promoted_instance_extensions);
739*38e8c45fSAndroid Build Coastguard Worker     auto end = std::cend(g_promoted_instance_extensions);
740*38e8c45fSAndroid Build Coastguard Worker     uint32_t count = 0;
741*38e8c45fSAndroid Build Coastguard Worker 
742*38e8c45fSAndroid Build Coastguard Worker     for (auto iter = begin; iter != end; iter++)
743*38e8c45fSAndroid Build Coastguard Worker         if (iter->second > begin_version && iter->second <= end_version)
744*38e8c45fSAndroid Build Coastguard Worker             count++;
745*38e8c45fSAndroid Build Coastguard Worker 
746*38e8c45fSAndroid Build Coastguard Worker     return count;
747*38e8c45fSAndroid Build Coastguard Worker }
748*38e8c45fSAndroid Build Coastguard Worker 
GetPromotedInstanceExtensions(uint32_t begin_version,uint32_t end_version)749*38e8c45fSAndroid Build Coastguard Worker std::vector<const char*> GetPromotedInstanceExtensions(uint32_t begin_version,
750*38e8c45fSAndroid Build Coastguard Worker                                                        uint32_t end_version) {
751*38e8c45fSAndroid Build Coastguard Worker     auto begin = std::cbegin(g_promoted_instance_extensions);
752*38e8c45fSAndroid Build Coastguard Worker     auto end = std::cend(g_promoted_instance_extensions);
753*38e8c45fSAndroid Build Coastguard Worker     std::vector<const char*> extensions;
754*38e8c45fSAndroid Build Coastguard Worker 
755*38e8c45fSAndroid Build Coastguard Worker     for (auto iter = begin; iter != end; iter++)
756*38e8c45fSAndroid Build Coastguard Worker         if (iter->second > begin_version && iter->second <= end_version)
757*38e8c45fSAndroid Build Coastguard Worker             extensions.emplace_back(iter->first);
758*38e8c45fSAndroid Build Coastguard Worker 
759*38e8c45fSAndroid Build Coastguard Worker     return extensions;
760*38e8c45fSAndroid Build Coastguard Worker }
761*38e8c45fSAndroid Build Coastguard Worker 
762*38e8c45fSAndroid Build Coastguard Worker }  // namespace driver
763*38e8c45fSAndroid Build Coastguard Worker }  // namespace vulkan
764