xref: /aosp_15_r20/external/swiftshader/src/Vulkan/VkGetProcAddress.cpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2018 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker //    http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker 
15*03ce13f7SAndroid Build Coastguard Worker #include "VkGetProcAddress.hpp"
16*03ce13f7SAndroid Build Coastguard Worker #include "VkDevice.hpp"
17*03ce13f7SAndroid Build Coastguard Worker 
18*03ce13f7SAndroid Build Coastguard Worker #include <string>
19*03ce13f7SAndroid Build Coastguard Worker #include <tuple>
20*03ce13f7SAndroid Build Coastguard Worker #include <type_traits>
21*03ce13f7SAndroid Build Coastguard Worker #include <unordered_map>
22*03ce13f7SAndroid Build Coastguard Worker #include <vector>
23*03ce13f7SAndroid Build Coastguard Worker 
24*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
25*03ce13f7SAndroid Build Coastguard Worker #	include <hardware/hwvulkan.h>
26*03ce13f7SAndroid Build Coastguard Worker #	include <vulkan/vk_android_native_buffer.h>
27*03ce13f7SAndroid Build Coastguard Worker #	include <cerrno>
28*03ce13f7SAndroid Build Coastguard Worker #endif
29*03ce13f7SAndroid Build Coastguard Worker 
30*03ce13f7SAndroid Build Coastguard Worker namespace vk {
31*03ce13f7SAndroid Build Coastguard Worker 
32*03ce13f7SAndroid Build Coastguard Worker // Functions that can be obtained through GetInstanceProcAddr without an instance
33*03ce13f7SAndroid Build Coastguard Worker #define MAKE_VULKAN_GLOBAL_ENTRY(aFunction)                           \
34*03ce13f7SAndroid Build Coastguard Worker 	{                                                                 \
35*03ce13f7SAndroid Build Coastguard Worker #		aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
36*03ce13f7SAndroid Build Coastguard Worker 	}
37*03ce13f7SAndroid Build Coastguard Worker 
38*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
39*03ce13f7SAndroid Build Coastguard Worker static const std::unordered_map<std::string, PFN_vkVoidFunction> globalFunctionPointers = {
40*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vkGetInstanceProcAddr),
41*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vkCreateInstance),
42*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceExtensionProperties),
43*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceLayerProperties),
44*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceVersion),
45*03ce13f7SAndroid Build Coastguard Worker 
46*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vk_icdGetInstanceProcAddr),
47*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vk_icdNegotiateLoaderICDInterfaceVersion),
48*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_WIN32_KHR
49*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_GLOBAL_ENTRY(vk_icdEnumerateAdapterPhysicalDevices),
50*03ce13f7SAndroid Build Coastguard Worker #endif  // VK_USE_PLATFORM_WIN32_KHR
51*03ce13f7SAndroid Build Coastguard Worker };
52*03ce13f7SAndroid Build Coastguard Worker #undef MAKE_VULKAN_GLOBAL_ENTRY
53*03ce13f7SAndroid Build Coastguard Worker 
54*03ce13f7SAndroid Build Coastguard Worker // Functions that can be obtained through GetInstanceProcAddr with an instance object
55*03ce13f7SAndroid Build Coastguard Worker struct InstanceFunctionEntry
56*03ce13f7SAndroid Build Coastguard Worker {
57*03ce13f7SAndroid Build Coastguard Worker 	PFN_vkVoidFunction pfn;
58*03ce13f7SAndroid Build Coastguard Worker 	// True if the first argument is a VkPhysicalDevice. See
59*03ce13f7SAndroid Build Coastguard Worker 	// https://github.com/KhronosGroup/Vulkan-Loader/blob/main/docs/LoaderDriverInterface.md#reason-for-adding-vk_icdgetphysicaldeviceprocaddr
60*03ce13f7SAndroid Build Coastguard Worker 	bool isPhysicalDeviceFn;
61*03ce13f7SAndroid Build Coastguard Worker };
62*03ce13f7SAndroid Build Coastguard Worker 
63*03ce13f7SAndroid Build Coastguard Worker // Template magic to detect if the first argument of a C function is a VkPhysicalDevice.
64*03ce13f7SAndroid Build Coastguard Worker template<typename T>
65*03ce13f7SAndroid Build Coastguard Worker struct FunctionArgs
66*03ce13f7SAndroid Build Coastguard Worker {};
67*03ce13f7SAndroid Build Coastguard Worker 
68*03ce13f7SAndroid Build Coastguard Worker template<typename R, typename... Args>
69*03ce13f7SAndroid Build Coastguard Worker struct FunctionArgs<VKAPI_ATTR R VKAPI_CALL(Args...)>
70*03ce13f7SAndroid Build Coastguard Worker {
71*03ce13f7SAndroid Build Coastguard Worker 	using Tuple = std::tuple<Args...>;
72*03ce13f7SAndroid Build Coastguard Worker 	using FirstType = typename std::tuple_element<0, Tuple>::type;
73*03ce13f7SAndroid Build Coastguard Worker };
74*03ce13f7SAndroid Build Coastguard Worker 
75*03ce13f7SAndroid Build Coastguard Worker template<typename T>
76*03ce13f7SAndroid Build Coastguard Worker constexpr bool HasPhysicalDeviceFirstArgument =
77*03ce13f7SAndroid Build Coastguard Worker     std::is_same<typename FunctionArgs<T>::FirstType, VkPhysicalDevice>::value;
78*03ce13f7SAndroid Build Coastguard Worker 
79*03ce13f7SAndroid Build Coastguard Worker #define MAKE_VULKAN_INSTANCE_ENTRY(aFunction)                       \
80*03ce13f7SAndroid Build Coastguard Worker 	{                                                               \
81*03ce13f7SAndroid Build Coastguard Worker 		#aFunction,                                                 \
82*03ce13f7SAndroid Build Coastguard Worker 		{                                                           \
83*03ce13f7SAndroid Build Coastguard Worker 			reinterpret_cast<PFN_vkVoidFunction>(aFunction),        \
84*03ce13f7SAndroid Build Coastguard Worker 			    HasPhysicalDeviceFirstArgument<decltype(aFunction)> \
85*03ce13f7SAndroid Build Coastguard Worker 		}                                                           \
86*03ce13f7SAndroid Build Coastguard Worker 	}
87*03ce13f7SAndroid Build Coastguard Worker 
88*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
89*03ce13f7SAndroid Build Coastguard Worker static const std::unordered_map<std::string, InstanceFunctionEntry> instanceFunctionPointers = {
90*03ce13f7SAndroid Build Coastguard Worker 
91*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyInstance),
92*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDevices),
93*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures),
94*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties),
95*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties),
96*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties),
97*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties),
98*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties),
99*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDevice),
100*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceExtensionProperties),
101*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceLayerProperties),
102*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties),
103*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroups),
104*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2),
105*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2),
106*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2),
107*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2),
108*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2),
109*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2),
110*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2),
111*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferProperties),
112*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFenceProperties),
113*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties),
114*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_device_group_creation
115*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroupsKHR),
116*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_external_fence_capabilities
117*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFencePropertiesKHR),
118*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_external_memory_capabilities
119*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR),
120*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_external_semaphore_capabilities
121*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR),
122*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_get_physical_device_properties2
123*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2KHR),
124*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2KHR),
125*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2KHR),
126*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2KHR),
127*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2KHR),
128*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2KHR),
129*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2KHR),
130*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_debug_utils
131*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCmdBeginDebugUtilsLabelEXT),
132*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCmdEndDebugUtilsLabelEXT),
133*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCmdInsertDebugUtilsLabelEXT),
134*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDebugUtilsMessengerEXT),
135*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyDebugUtilsMessengerEXT),
136*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkQueueBeginDebugUtilsLabelEXT),
137*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkQueueEndDebugUtilsLabelEXT),
138*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkQueueInsertDebugUtilsLabelEXT),
139*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkSetDebugUtilsObjectNameEXT),
140*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkSetDebugUtilsObjectTagEXT),
141*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkSubmitDebugUtilsMessageEXT),
142*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_tooling_info
143*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceToolProperties),
144*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
145*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_surface
146*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkDestroySurfaceKHR),
147*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceSupportKHR),
148*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR),
149*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceFormatsKHR),
150*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfacePresentModesKHR),
151*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDevicePresentRectanglesKHR),
152*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_get_surface_capabilities2
153*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceCapabilities2KHR),
154*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSurfaceFormats2KHR),
155*03ce13f7SAndroid Build Coastguard Worker #endif
156*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
157*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_Xcb_surface
158*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateXcbSurfaceKHR),
159*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceXcbPresentationSupportKHR),
160*03ce13f7SAndroid Build Coastguard Worker #endif
161*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
162*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_wayland_surface
163*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateWaylandSurfaceKHR),
164*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceWaylandPresentationSupportKHR),
165*03ce13f7SAndroid Build Coastguard Worker #endif
166*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
167*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_directfb_surface
168*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDirectFBSurfaceEXT),
169*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceDirectFBPresentationSupportEXT),
170*03ce13f7SAndroid Build Coastguard Worker #endif
171*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
172*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_display
173*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDisplayModeKHR),
174*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDisplayPlaneSurfaceKHR),
175*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetDisplayModePropertiesKHR),
176*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetDisplayPlaneCapabilitiesKHR),
177*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetDisplayPlaneSupportedDisplaysKHR),
178*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceDisplayPlanePropertiesKHR),
179*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceDisplayPropertiesKHR),
180*03ce13f7SAndroid Build Coastguard Worker #endif
181*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_MACOS_MVK
182*03ce13f7SAndroid Build Coastguard Worker 	// VK_MVK_macos_surface
183*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateMacOSSurfaceMVK),
184*03ce13f7SAndroid Build Coastguard Worker #endif
185*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_METAL_EXT
186*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_metal_surface
187*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateMetalSurfaceEXT),
188*03ce13f7SAndroid Build Coastguard Worker #endif
189*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WIN32_KHR
190*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_win32_surface
191*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateWin32SurfaceKHR),
192*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceWin32PresentationSupportKHR),
193*03ce13f7SAndroid Build Coastguard Worker #endif
194*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_INSTANCE_ENTRY(vkCreateHeadlessSurfaceEXT),
195*03ce13f7SAndroid Build Coastguard Worker };
196*03ce13f7SAndroid Build Coastguard Worker #undef MAKE_VULKAN_INSTANCE_ENTRY
197*03ce13f7SAndroid Build Coastguard Worker 
198*03ce13f7SAndroid Build Coastguard Worker // Functions that can be obtained through GetDeviceProcAddr with a device object
199*03ce13f7SAndroid Build Coastguard Worker #define MAKE_VULKAN_DEVICE_ENTRY(aFunction)                           \
200*03ce13f7SAndroid Build Coastguard Worker 	{                                                                 \
201*03ce13f7SAndroid Build Coastguard Worker #		aFunction, reinterpret_cast < PFN_vkVoidFunction>(aFunction) \
202*03ce13f7SAndroid Build Coastguard Worker 	}
203*03ce13f7SAndroid Build Coastguard Worker 
204*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
205*03ce13f7SAndroid Build Coastguard Worker static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionPointers = {
206*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceProcAddr),
207*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDevice),
208*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue),
209*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueSubmit),
210*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueWaitIdle),
211*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDeviceWaitIdle),
212*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkAllocateMemory),
213*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkFreeMemory),
214*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkMapMemory),
215*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkUnmapMemory),
216*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkFlushMappedMemoryRanges),
217*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkInvalidateMappedMemoryRanges),
218*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryCommitment),
219*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory),
220*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory),
221*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements),
222*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements),
223*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements),
224*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueBindSparse),
225*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateFence),
226*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFence),
227*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetFences),
228*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetFenceStatus),
229*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkWaitForFences),
230*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateSemaphore),
231*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroySemaphore),
232*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateEvent),
233*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyEvent),
234*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetEventStatus),
235*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkSetEvent),
236*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetEvent),
237*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateQueryPool),
238*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyQueryPool),
239*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetQueryPoolResults),
240*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateBuffer),
241*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBuffer),
242*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateBufferView),
243*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBufferView),
244*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateImage),
245*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImage),
246*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSubresourceLayout),
247*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateImageView),
248*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImageView),
249*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateShaderModule),
250*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyShaderModule),
251*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineCache),
252*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineCache),
253*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetPipelineCacheData),
254*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkMergePipelineCaches),
255*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateGraphicsPipelines),
256*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateComputePipelines),
257*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipeline),
258*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineLayout),
259*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineLayout),
260*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateSampler),
261*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroySampler),
262*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorSetLayout),
263*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorSetLayout),
264*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorPool),
265*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorPool),
266*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetDescriptorPool),
267*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkAllocateDescriptorSets),
268*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkFreeDescriptorSets),
269*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSets),
270*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateFramebuffer),
271*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFramebuffer),
272*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateRenderPass),
273*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyRenderPass),
274*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetRenderAreaGranularity),
275*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateCommandPool),
276*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyCommandPool),
277*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandPool),
278*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkAllocateCommandBuffers),
279*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkFreeCommandBuffers),
280*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkBeginCommandBuffer),
281*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkEndCommandBuffer),
282*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandBuffer),
283*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindPipeline),
284*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetViewport),
285*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetScissor),
286*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetLineWidth),
287*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBias),
288*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetBlendConstants),
289*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBounds),
290*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilCompareMask),
291*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilWriteMask),
292*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilReference),
293*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindDescriptorSets),
294*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindIndexBuffer),
295*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindVertexBuffers),
296*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDraw),
297*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexed),
298*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirect),
299*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirect),
300*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatch),
301*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchIndirect),
302*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBuffer),
303*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImage),
304*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBlitImage),
305*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBufferToImage),
306*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImageToBuffer),
307*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdUpdateBuffer),
308*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdFillBuffer),
309*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearColorImage),
310*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearDepthStencilImage),
311*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearAttachments),
312*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdResolveImage),
313*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetEvent),
314*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetEvent),
315*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdWaitEvents),
316*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdPipelineBarrier),
317*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginQuery),
318*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndQuery),
319*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetQueryPool),
320*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdWriteTimestamp),
321*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyQueryPoolResults),
322*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdPushConstants),
323*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass),
324*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass),
325*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass),
326*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdExecuteCommands),
327*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2),
328*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2),
329*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeatures),
330*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMask),
331*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBase),
332*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2),
333*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2),
334*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2),
335*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPool),
336*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue2),
337*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversion),
338*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversion),
339*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplate),
340*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplate),
341*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplate),
342*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupport),
343*03ce13f7SAndroid Build Coastguard Worker 	// Device level VK_EXT_debug_utils functions
344*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginDebugUtilsLabelEXT),
345*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndDebugUtilsLabelEXT),
346*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdInsertDebugUtilsLabelEXT),
347*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueBeginDebugUtilsLabelEXT),
348*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueEndDebugUtilsLabelEXT),
349*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueInsertDebugUtilsLabelEXT),
350*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkSetDebugUtilsObjectNameEXT),
351*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkSetDebugUtilsObjectTagEXT),
352*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
353*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetSwapchainGrallocUsageANDROID),
354*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetSwapchainGrallocUsage2ANDROID),
355*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkAcquireImageANDROID),
356*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueSignalReleaseImageANDROID),
357*03ce13f7SAndroid Build Coastguard Worker #endif
358*03ce13f7SAndroid Build Coastguard Worker 	// Vulkan 1.2 Entry point functions
359*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreateRenderPass2),
360*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass2),
361*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass2),
362*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass2),
363*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkResetQueryPool),
364*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_timeline_semaphore
365*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetSemaphoreCounterValue),
366*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkSignalSemaphore),
367*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkWaitSemaphores),
368*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_buffer_device_address
369*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferDeviceAddress),
370*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferOpaqueCaptureAddress),
371*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryOpaqueCaptureAddress),
372*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_draw_indirect_count
373*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirectCount),
374*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirectCount),
375*03ce13f7SAndroid Build Coastguard Worker 	// Vulkan 1.3 Entry point functions
376*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_copy_commands2
377*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBuffer2),
378*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImage2),
379*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBufferToImage2),
380*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImageToBuffer2),
381*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBlitImage2),
382*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdResolveImage2),
383*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_dynamic_rendering
384*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRendering),
385*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRendering),
386*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_maintenance4
387*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceBufferMemoryRequirements),
388*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceImageMemoryRequirements),
389*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceImageSparseMemoryRequirements),
390*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_synchronization2
391*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetEvent2),
392*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetEvent2),
393*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdWaitEvents2),
394*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdPipelineBarrier2),
395*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdWriteTimestamp2),
396*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkQueueSubmit2),
397*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_extended_dynamic_state
398*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetCullMode),
399*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetFrontFace),
400*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetPrimitiveTopology),
401*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetViewportWithCount),
402*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetScissorWithCount),
403*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindVertexBuffers2),
404*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthTestEnable),
405*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthWriteEnable),
406*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthCompareOp),
407*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBoundsTestEnable),
408*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilTestEnable),
409*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilOp),
410*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_extended_dynamic_state2 (partial promotion, VKCmdSetLogicOpEXT and VKCmdSetPatchControlPointsEXT are not promoted)
411*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetRasterizerDiscardEnable),
412*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBiasEnable),
413*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetPrimitiveRestartEnable),
414*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_private_data
415*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkCreatePrivateDataSlot),
416*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPrivateDataSlot),
417*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkSetPrivateData),
418*03ce13f7SAndroid Build Coastguard Worker 	MAKE_VULKAN_DEVICE_ENTRY(vkGetPrivateData),
419*03ce13f7SAndroid Build Coastguard Worker };
420*03ce13f7SAndroid Build Coastguard Worker 
421*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
422*03ce13f7SAndroid Build Coastguard Worker static const std::vector<std::pair<const char *, std::unordered_map<std::string, PFN_vkVoidFunction>>> deviceExtensionFunctionPointers = {
423*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_descriptor_update_template
424*03ce13f7SAndroid Build Coastguard Worker 	{
425*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME,
426*03ce13f7SAndroid Build Coastguard Worker 	    {
427*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplateKHR),
428*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplateKHR),
429*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplateKHR),
430*03ce13f7SAndroid Build Coastguard Worker 	    } },
431*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_device_group
432*03ce13f7SAndroid Build Coastguard Worker 	{
433*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_DEVICE_GROUP_EXTENSION_NAME,
434*03ce13f7SAndroid Build Coastguard Worker 	    {
435*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR),
436*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMaskKHR),
437*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBaseKHR),
438*03ce13f7SAndroid Build Coastguard Worker 	    } },
439*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_maintenance1
440*03ce13f7SAndroid Build Coastguard Worker 	{
441*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_MAINTENANCE1_EXTENSION_NAME,
442*03ce13f7SAndroid Build Coastguard Worker 	    {
443*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPoolKHR),
444*03ce13f7SAndroid Build Coastguard Worker 	    } },
445*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_sampler_ycbcr_conversion
446*03ce13f7SAndroid Build Coastguard Worker 	{
447*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME,
448*03ce13f7SAndroid Build Coastguard Worker 	    {
449*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversionKHR),
450*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversionKHR),
451*03ce13f7SAndroid Build Coastguard Worker 	    } },
452*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_bind_memory2
453*03ce13f7SAndroid Build Coastguard Worker 	{
454*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
455*03ce13f7SAndroid Build Coastguard Worker 	    {
456*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2KHR),
457*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2KHR),
458*03ce13f7SAndroid Build Coastguard Worker 	    } },
459*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_copy_commands2
460*03ce13f7SAndroid Build Coastguard Worker 	{
461*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME,
462*03ce13f7SAndroid Build Coastguard Worker 	    {
463*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdBlitImage2KHR),
464*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBuffer2KHR),
465*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBufferToImage2KHR),
466*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImage2KHR),
467*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImageToBuffer2KHR),
468*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdResolveImage2KHR),
469*03ce13f7SAndroid Build Coastguard Worker 	    } },
470*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_get_memory_requirements2
471*03ce13f7SAndroid Build Coastguard Worker 	{
472*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
473*03ce13f7SAndroid Build Coastguard Worker 	    {
474*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2KHR),
475*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2KHR),
476*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2KHR),
477*03ce13f7SAndroid Build Coastguard Worker 	    } },
478*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_maintenance3
479*03ce13f7SAndroid Build Coastguard Worker 	{
480*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_MAINTENANCE3_EXTENSION_NAME,
481*03ce13f7SAndroid Build Coastguard Worker 	    {
482*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
483*03ce13f7SAndroid Build Coastguard Worker 	    } },
484*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_maintenance4
485*03ce13f7SAndroid Build Coastguard Worker 	{
486*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_MAINTENANCE_4_EXTENSION_NAME,
487*03ce13f7SAndroid Build Coastguard Worker 	    {
488*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceBufferMemoryRequirementsKHR),
489*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceImageMemoryRequirementsKHR),
490*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceImageSparseMemoryRequirementsKHR),
491*03ce13f7SAndroid Build Coastguard Worker 	    } },
492*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_create_renderpass2
493*03ce13f7SAndroid Build Coastguard Worker 	{
494*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME,
495*03ce13f7SAndroid Build Coastguard Worker 	    {
496*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCreateRenderPass2KHR),
497*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass2KHR),
498*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass2KHR),
499*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass2KHR),
500*03ce13f7SAndroid Build Coastguard Worker 	    } },
501*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_timeline_semaphore
502*03ce13f7SAndroid Build Coastguard Worker 	{
503*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME,
504*03ce13f7SAndroid Build Coastguard Worker 	    {
505*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetSemaphoreCounterValueKHR),
506*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkSignalSemaphoreKHR),
507*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkWaitSemaphoresKHR),
508*03ce13f7SAndroid Build Coastguard Worker 	    } },
509*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_buffer_device_address
510*03ce13f7SAndroid Build Coastguard Worker 	{
511*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
512*03ce13f7SAndroid Build Coastguard Worker 	    {
513*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferDeviceAddressKHR),
514*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferOpaqueCaptureAddressKHR),
515*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryOpaqueCaptureAddressKHR),
516*03ce13f7SAndroid Build Coastguard Worker 	    } },
517*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_draw_indirect_count
518*03ce13f7SAndroid Build Coastguard Worker 	{
519*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
520*03ce13f7SAndroid Build Coastguard Worker 	    {
521*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirectCountKHR),
522*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirectCountKHR),
523*03ce13f7SAndroid Build Coastguard Worker 	    } },
524*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_dynamic_rendering
525*03ce13f7SAndroid Build Coastguard Worker 	{
526*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME,
527*03ce13f7SAndroid Build Coastguard Worker 	    {
528*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderingKHR),
529*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderingKHR),
530*03ce13f7SAndroid Build Coastguard Worker 	    } },
531*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_dynamic_rendering_local_read
532*03ce13f7SAndroid Build Coastguard Worker 	{
533*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME,
534*03ce13f7SAndroid Build Coastguard Worker 	    {
535*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetRenderingAttachmentLocationsKHR),
536*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetRenderingInputAttachmentIndicesKHR),
537*03ce13f7SAndroid Build Coastguard Worker 	    } },
538*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_extended_dynamic_state
539*03ce13f7SAndroid Build Coastguard Worker 	{
540*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME,
541*03ce13f7SAndroid Build Coastguard Worker 	    {
542*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindVertexBuffers2EXT),
543*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetCullModeEXT),
544*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBoundsTestEnableEXT),
545*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthCompareOpEXT),
546*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthTestEnableEXT),
547*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthWriteEnableEXT),
548*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetFrontFaceEXT),
549*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetPrimitiveTopologyEXT),
550*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetScissorWithCountEXT),
551*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilOpEXT),
552*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilTestEnableEXT),
553*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetViewportWithCountEXT),
554*03ce13f7SAndroid Build Coastguard Worker 	    } },
555*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_vertex_input_dynamic_state
556*03ce13f7SAndroid Build Coastguard Worker 	{
557*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME,
558*03ce13f7SAndroid Build Coastguard Worker 	    {
559*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetVertexInputEXT),
560*03ce13f7SAndroid Build Coastguard Worker 	    } },
561*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_line_rasterization
562*03ce13f7SAndroid Build Coastguard Worker 	{
563*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME,
564*03ce13f7SAndroid Build Coastguard Worker 	    {
565*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetLineStippleEXT),
566*03ce13f7SAndroid Build Coastguard Worker 	    } },
567*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_host_query_reset
568*03ce13f7SAndroid Build Coastguard Worker 	{
569*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME,
570*03ce13f7SAndroid Build Coastguard Worker 	    {
571*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkResetQueryPoolEXT),
572*03ce13f7SAndroid Build Coastguard Worker 	    } },
573*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_tooling_info
574*03ce13f7SAndroid Build Coastguard Worker 	{
575*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_TOOLING_INFO_EXTENSION_NAME,
576*03ce13f7SAndroid Build Coastguard Worker 	    {
577*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetPhysicalDeviceToolPropertiesEXT),
578*03ce13f7SAndroid Build Coastguard Worker 	    } },
579*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_synchronization2
580*03ce13f7SAndroid Build Coastguard Worker 	{
581*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME,
582*03ce13f7SAndroid Build Coastguard Worker 	    {
583*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdPipelineBarrier2KHR),
584*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetEvent2KHR),
585*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetEvent2KHR),
586*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdWaitEvents2KHR),
587*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCmdWriteTimestamp2KHR),
588*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkQueueSubmit2KHR),
589*03ce13f7SAndroid Build Coastguard Worker 	    } },
590*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
591*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_swapchain
592*03ce13f7SAndroid Build Coastguard Worker 	{
593*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_SWAPCHAIN_EXTENSION_NAME,
594*03ce13f7SAndroid Build Coastguard Worker 	    {
595*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCreateSwapchainKHR),
596*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkDestroySwapchainKHR),
597*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetSwapchainImagesKHR),
598*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkAcquireNextImageKHR),
599*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkAcquireNextImage2KHR),
600*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkQueuePresentKHR),
601*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHR),
602*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupSurfacePresentModesKHR),
603*03ce13f7SAndroid Build Coastguard Worker 	    } },
604*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_swapchain_maintenance1
605*03ce13f7SAndroid Build Coastguard Worker 	{
606*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME,
607*03ce13f7SAndroid Build Coastguard Worker 	    {
608*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkReleaseSwapchainImagesEXT),
609*03ce13f7SAndroid Build Coastguard Worker 	    } },
610*03ce13f7SAndroid Build Coastguard Worker #endif
611*03ce13f7SAndroid Build Coastguard Worker 
612*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
613*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_external_semaphore_fd
614*03ce13f7SAndroid Build Coastguard Worker 	{
615*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
616*03ce13f7SAndroid Build Coastguard Worker 	    {
617*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetSemaphoreFdKHR),
618*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkImportSemaphoreFdKHR),
619*03ce13f7SAndroid Build Coastguard Worker 	    } },
620*03ce13f7SAndroid Build Coastguard Worker #endif
621*03ce13f7SAndroid Build Coastguard Worker 
622*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
623*03ce13f7SAndroid Build Coastguard Worker 	// VK_FUCHSIA_external_semaphore
624*03ce13f7SAndroid Build Coastguard Worker 	{
625*03ce13f7SAndroid Build Coastguard Worker 	    VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
626*03ce13f7SAndroid Build Coastguard Worker 	    {
627*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetSemaphoreZirconHandleFUCHSIA),
628*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkImportSemaphoreZirconHandleFUCHSIA),
629*03ce13f7SAndroid Build Coastguard Worker 	    } },
630*03ce13f7SAndroid Build Coastguard Worker #endif
631*03ce13f7SAndroid Build Coastguard Worker 
632*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
633*03ce13f7SAndroid Build Coastguard Worker 	// VK_KHR_external_memory_fd
634*03ce13f7SAndroid Build Coastguard Worker 	{
635*03ce13f7SAndroid Build Coastguard Worker 	    VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
636*03ce13f7SAndroid Build Coastguard Worker 	    {
637*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryFdKHR),
638*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryFdPropertiesKHR),
639*03ce13f7SAndroid Build Coastguard Worker 	    } },
640*03ce13f7SAndroid Build Coastguard Worker #endif
641*03ce13f7SAndroid Build Coastguard Worker 
642*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_external_memory_host
643*03ce13f7SAndroid Build Coastguard Worker 	{
644*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME,
645*03ce13f7SAndroid Build Coastguard Worker 	    {
646*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryHostPointerPropertiesEXT),
647*03ce13f7SAndroid Build Coastguard Worker 	    } },
648*03ce13f7SAndroid Build Coastguard Worker 
649*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_private_data
650*03ce13f7SAndroid Build Coastguard Worker 	{
651*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_PRIVATE_DATA_EXTENSION_NAME,
652*03ce13f7SAndroid Build Coastguard Worker 	    {
653*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCreatePrivateDataSlotEXT),
654*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPrivateDataSlotEXT),
655*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetPrivateDataEXT),
656*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkSetPrivateDataEXT),
657*03ce13f7SAndroid Build Coastguard Worker 	    } },
658*03ce13f7SAndroid Build Coastguard Worker 	// VK_EXT_host_image_copy
659*03ce13f7SAndroid Build Coastguard Worker 	{
660*03ce13f7SAndroid Build Coastguard Worker 	    VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME,
661*03ce13f7SAndroid Build Coastguard Worker 	    {
662*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCopyImageToImageEXT),
663*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCopyImageToMemoryEXT),
664*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkCopyMemoryToImageEXT),
665*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSubresourceLayout2EXT),
666*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkTransitionImageLayoutEXT),
667*03ce13f7SAndroid Build Coastguard Worker 	    } },
668*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
669*03ce13f7SAndroid Build Coastguard Worker 	// VK_ANDROID_external_memory_android_hardware_buffer
670*03ce13f7SAndroid Build Coastguard Worker 	{
671*03ce13f7SAndroid Build Coastguard Worker 	    VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
672*03ce13f7SAndroid Build Coastguard Worker 	    {
673*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetAndroidHardwareBufferPropertiesANDROID),
674*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryAndroidHardwareBufferANDROID),
675*03ce13f7SAndroid Build Coastguard Worker 	    } },
676*03ce13f7SAndroid Build Coastguard Worker #endif
677*03ce13f7SAndroid Build Coastguard Worker 
678*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
679*03ce13f7SAndroid Build Coastguard Worker 	// VK_FUCHSIA_external_memory
680*03ce13f7SAndroid Build Coastguard Worker 	{
681*03ce13f7SAndroid Build Coastguard Worker 	    VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME,
682*03ce13f7SAndroid Build Coastguard Worker 	    {
683*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryZirconHandleFUCHSIA),
684*03ce13f7SAndroid Build Coastguard Worker 	        MAKE_VULKAN_DEVICE_ENTRY(vkGetMemoryZirconHandlePropertiesFUCHSIA),
685*03ce13f7SAndroid Build Coastguard Worker 	    } },
686*03ce13f7SAndroid Build Coastguard Worker #endif
687*03ce13f7SAndroid Build Coastguard Worker };
688*03ce13f7SAndroid Build Coastguard Worker 
689*03ce13f7SAndroid Build Coastguard Worker #undef MAKE_VULKAN_DEVICE_ENTRY
690*03ce13f7SAndroid Build Coastguard Worker 
GetInstanceProcAddr(Instance * instance,const char * pName)691*03ce13f7SAndroid Build Coastguard Worker PFN_vkVoidFunction GetInstanceProcAddr(Instance *instance, const char *pName)
692*03ce13f7SAndroid Build Coastguard Worker {
693*03ce13f7SAndroid Build Coastguard Worker 	auto globalFunction = globalFunctionPointers.find(std::string(pName));
694*03ce13f7SAndroid Build Coastguard Worker 	if(globalFunction != globalFunctionPointers.end())
695*03ce13f7SAndroid Build Coastguard Worker 	{
696*03ce13f7SAndroid Build Coastguard Worker 		return globalFunction->second;
697*03ce13f7SAndroid Build Coastguard Worker 	}
698*03ce13f7SAndroid Build Coastguard Worker 
699*03ce13f7SAndroid Build Coastguard Worker 	if(instance)
700*03ce13f7SAndroid Build Coastguard Worker 	{
701*03ce13f7SAndroid Build Coastguard Worker 		auto instanceFunction = instanceFunctionPointers.find(std::string(pName));
702*03ce13f7SAndroid Build Coastguard Worker 		if(instanceFunction != instanceFunctionPointers.end())
703*03ce13f7SAndroid Build Coastguard Worker 		{
704*03ce13f7SAndroid Build Coastguard Worker 			return instanceFunction->second.pfn;
705*03ce13f7SAndroid Build Coastguard Worker 		}
706*03ce13f7SAndroid Build Coastguard Worker 
707*03ce13f7SAndroid Build Coastguard Worker 		auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
708*03ce13f7SAndroid Build Coastguard Worker 		if(deviceFunction != deviceFunctionPointers.end())
709*03ce13f7SAndroid Build Coastguard Worker 		{
710*03ce13f7SAndroid Build Coastguard Worker 			return deviceFunction->second;
711*03ce13f7SAndroid Build Coastguard Worker 		}
712*03ce13f7SAndroid Build Coastguard Worker 
713*03ce13f7SAndroid Build Coastguard Worker 		for(const auto &deviceExtensionFunctions : deviceExtensionFunctionPointers)
714*03ce13f7SAndroid Build Coastguard Worker 		{
715*03ce13f7SAndroid Build Coastguard Worker 			deviceFunction = deviceExtensionFunctions.second.find(std::string(pName));
716*03ce13f7SAndroid Build Coastguard Worker 			if(deviceFunction != deviceExtensionFunctions.second.end())
717*03ce13f7SAndroid Build Coastguard Worker 			{
718*03ce13f7SAndroid Build Coastguard Worker 				return deviceFunction->second;
719*03ce13f7SAndroid Build Coastguard Worker 			}
720*03ce13f7SAndroid Build Coastguard Worker 		}
721*03ce13f7SAndroid Build Coastguard Worker 	}
722*03ce13f7SAndroid Build Coastguard Worker 
723*03ce13f7SAndroid Build Coastguard Worker 	return nullptr;
724*03ce13f7SAndroid Build Coastguard Worker }
725*03ce13f7SAndroid Build Coastguard Worker 
GetPhysicalDeviceProcAddr(Instance * instance,const char * pName)726*03ce13f7SAndroid Build Coastguard Worker PFN_vkVoidFunction GetPhysicalDeviceProcAddr(Instance *instance, const char *pName)
727*03ce13f7SAndroid Build Coastguard Worker {
728*03ce13f7SAndroid Build Coastguard Worker 	// This function must return nullptr if the name is not known, or the function doesn't take a
729*03ce13f7SAndroid Build Coastguard Worker 	// VkPhysicalDevice as the first argument. All functions that have a VkPhysicalDevice as first
730*03ce13f7SAndroid Build Coastguard Worker 	// argument are instance function, except for vkGetPhysicalDeviceToolPropertiesEXT which seems
731*03ce13f7SAndroid Build Coastguard Worker 	// to have been miscategorized as a device extension when it was made. So we special case that
732*03ce13f7SAndroid Build Coastguard Worker 	// funcion.
733*03ce13f7SAndroid Build Coastguard Worker 	std::string name = pName;
734*03ce13f7SAndroid Build Coastguard Worker 	if(name == "vkGetPhysicalDeviceToolPropertiesEXT")
735*03ce13f7SAndroid Build Coastguard Worker 	{
736*03ce13f7SAndroid Build Coastguard Worker 		return reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceToolPropertiesEXT);
737*03ce13f7SAndroid Build Coastguard Worker 	}
738*03ce13f7SAndroid Build Coastguard Worker 
739*03ce13f7SAndroid Build Coastguard Worker 	auto instanceFunction = instanceFunctionPointers.find(name);
740*03ce13f7SAndroid Build Coastguard Worker 	if(instanceFunction == instanceFunctionPointers.end())
741*03ce13f7SAndroid Build Coastguard Worker 	{
742*03ce13f7SAndroid Build Coastguard Worker 		return nullptr;
743*03ce13f7SAndroid Build Coastguard Worker 	}
744*03ce13f7SAndroid Build Coastguard Worker 
745*03ce13f7SAndroid Build Coastguard Worker 	if(!instanceFunction->second.isPhysicalDeviceFn)
746*03ce13f7SAndroid Build Coastguard Worker 	{
747*03ce13f7SAndroid Build Coastguard Worker 		return nullptr;
748*03ce13f7SAndroid Build Coastguard Worker 	}
749*03ce13f7SAndroid Build Coastguard Worker 
750*03ce13f7SAndroid Build Coastguard Worker 	return instanceFunction->second.pfn;
751*03ce13f7SAndroid Build Coastguard Worker }
752*03ce13f7SAndroid Build Coastguard Worker 
GetDeviceProcAddr(Device * device,const char * pName)753*03ce13f7SAndroid Build Coastguard Worker PFN_vkVoidFunction GetDeviceProcAddr(Device *device, const char *pName)
754*03ce13f7SAndroid Build Coastguard Worker {
755*03ce13f7SAndroid Build Coastguard Worker 	auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
756*03ce13f7SAndroid Build Coastguard Worker 	if(deviceFunction != deviceFunctionPointers.end())
757*03ce13f7SAndroid Build Coastguard Worker 	{
758*03ce13f7SAndroid Build Coastguard Worker 		return deviceFunction->second;
759*03ce13f7SAndroid Build Coastguard Worker 	}
760*03ce13f7SAndroid Build Coastguard Worker 
761*03ce13f7SAndroid Build Coastguard Worker 	for(const auto &deviceExtensionFunctions : deviceExtensionFunctionPointers)
762*03ce13f7SAndroid Build Coastguard Worker 	{
763*03ce13f7SAndroid Build Coastguard Worker 		if(device->hasExtension(deviceExtensionFunctions.first))
764*03ce13f7SAndroid Build Coastguard Worker 		{
765*03ce13f7SAndroid Build Coastguard Worker 			deviceFunction = deviceExtensionFunctions.second.find(std::string(pName));
766*03ce13f7SAndroid Build Coastguard Worker 			if(deviceFunction != deviceExtensionFunctions.second.end())
767*03ce13f7SAndroid Build Coastguard Worker 			{
768*03ce13f7SAndroid Build Coastguard Worker 				return deviceFunction->second;
769*03ce13f7SAndroid Build Coastguard Worker 			}
770*03ce13f7SAndroid Build Coastguard Worker 		}
771*03ce13f7SAndroid Build Coastguard Worker 	}
772*03ce13f7SAndroid Build Coastguard Worker 
773*03ce13f7SAndroid Build Coastguard Worker 	return nullptr;
774*03ce13f7SAndroid Build Coastguard Worker }
775*03ce13f7SAndroid Build Coastguard Worker 
776*03ce13f7SAndroid Build Coastguard Worker }  // namespace vk
777*03ce13f7SAndroid Build Coastguard Worker 
778*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
779*03ce13f7SAndroid Build Coastguard Worker 
780*03ce13f7SAndroid Build Coastguard Worker extern "C" hwvulkan_module_t HAL_MODULE_INFO_SYM;
781*03ce13f7SAndroid Build Coastguard Worker 
782*03ce13f7SAndroid Build Coastguard Worker namespace {
783*03ce13f7SAndroid Build Coastguard Worker 
CloseDevice(struct hw_device_t *)784*03ce13f7SAndroid Build Coastguard Worker int CloseDevice(struct hw_device_t *)
785*03ce13f7SAndroid Build Coastguard Worker {
786*03ce13f7SAndroid Build Coastguard Worker 	return 0;
787*03ce13f7SAndroid Build Coastguard Worker }
788*03ce13f7SAndroid Build Coastguard Worker 
789*03ce13f7SAndroid Build Coastguard Worker hwvulkan_device_t hal_device = {
790*03ce13f7SAndroid Build Coastguard Worker 	.common = {
791*03ce13f7SAndroid Build Coastguard Worker 	    .tag = HARDWARE_DEVICE_TAG,
792*03ce13f7SAndroid Build Coastguard Worker 	    .version = HWVULKAN_DEVICE_API_VERSION_0_1,
793*03ce13f7SAndroid Build Coastguard Worker 	    .module = &HAL_MODULE_INFO_SYM.common,
794*03ce13f7SAndroid Build Coastguard Worker 	    .close = CloseDevice,
795*03ce13f7SAndroid Build Coastguard Worker 	},
796*03ce13f7SAndroid Build Coastguard Worker 	.EnumerateInstanceExtensionProperties = vkEnumerateInstanceExtensionProperties,
797*03ce13f7SAndroid Build Coastguard Worker 	.CreateInstance = vkCreateInstance,
798*03ce13f7SAndroid Build Coastguard Worker 	.GetInstanceProcAddr = vkGetInstanceProcAddr,
799*03ce13f7SAndroid Build Coastguard Worker };
800*03ce13f7SAndroid Build Coastguard Worker 
OpenDevice(const hw_module_t * module,const char * id,hw_device_t ** device)801*03ce13f7SAndroid Build Coastguard Worker int OpenDevice(const hw_module_t *module, const char *id, hw_device_t **device)
802*03ce13f7SAndroid Build Coastguard Worker {
803*03ce13f7SAndroid Build Coastguard Worker 	if(strcmp(id, HWVULKAN_DEVICE_0) != 0) return -ENOENT;
804*03ce13f7SAndroid Build Coastguard Worker 	*device = &hal_device.common;
805*03ce13f7SAndroid Build Coastguard Worker 	return 0;
806*03ce13f7SAndroid Build Coastguard Worker }
807*03ce13f7SAndroid Build Coastguard Worker 
808*03ce13f7SAndroid Build Coastguard Worker hw_module_methods_t module_methods = { .open = OpenDevice };
809*03ce13f7SAndroid Build Coastguard Worker 
810*03ce13f7SAndroid Build Coastguard Worker }  // namespace
811*03ce13f7SAndroid Build Coastguard Worker 
812*03ce13f7SAndroid Build Coastguard Worker extern "C" hwvulkan_module_t HAL_MODULE_INFO_SYM = {
813*03ce13f7SAndroid Build Coastguard Worker 	.common = {
814*03ce13f7SAndroid Build Coastguard Worker 	    .tag = HARDWARE_MODULE_TAG,
815*03ce13f7SAndroid Build Coastguard Worker 	    .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
816*03ce13f7SAndroid Build Coastguard Worker 	    .hal_api_version = HARDWARE_HAL_API_VERSION,
817*03ce13f7SAndroid Build Coastguard Worker 	    .id = HWVULKAN_HARDWARE_MODULE_ID,
818*03ce13f7SAndroid Build Coastguard Worker 	    .name = "Swiftshader Pastel",
819*03ce13f7SAndroid Build Coastguard Worker 	    .author = "Google",
820*03ce13f7SAndroid Build Coastguard Worker 	    .methods = &module_methods,
821*03ce13f7SAndroid Build Coastguard Worker 	}
822*03ce13f7SAndroid Build Coastguard Worker };
823*03ce13f7SAndroid Build Coastguard Worker 
824*03ce13f7SAndroid Build Coastguard Worker #endif  // __ANDROID__
825*03ce13f7SAndroid Build Coastguard Worker 
826*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
827*03ce13f7SAndroid Build Coastguard Worker PFN_vkConnectToService vk::icdFuchsiaServiceConnectCallback = nullptr;
828*03ce13f7SAndroid Build Coastguard Worker #endif
829