xref: /aosp_15_r20/cts/hostsidetests/gputools/layers/jni/nullLayer.cpp (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b7c941bbSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b7c941bbSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b7c941bbSAndroid Build Coastguard Worker  *
8*b7c941bbSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b7c941bbSAndroid Build Coastguard Worker  *
10*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b7c941bbSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b7c941bbSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b7c941bbSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b7c941bbSAndroid Build Coastguard Worker  * limitations under the License.
15*b7c941bbSAndroid Build Coastguard Worker  */
16*b7c941bbSAndroid Build Coastguard Worker 
17*b7c941bbSAndroid Build Coastguard Worker #include <cstring>
18*b7c941bbSAndroid Build Coastguard Worker #include <string>
19*b7c941bbSAndroid Build Coastguard Worker 
20*b7c941bbSAndroid Build Coastguard Worker #include "vk_layer_interface.h"
21*b7c941bbSAndroid Build Coastguard Worker #include <android/log.h>
22*b7c941bbSAndroid Build Coastguard Worker #include <vulkan/vulkan.h>
23*b7c941bbSAndroid Build Coastguard Worker 
24*b7c941bbSAndroid Build Coastguard Worker #define xstr(a) str(a)
25*b7c941bbSAndroid Build Coastguard Worker #define str(a) #a
26*b7c941bbSAndroid Build Coastguard Worker 
27*b7c941bbSAndroid Build Coastguard Worker #define LAYER_FULL_NAME "VK_LAYER_ANDROID_nullLayer" xstr(LAYERNAME)
28*b7c941bbSAndroid Build Coastguard Worker #define LOG_TAG LAYER_FULL_NAME
29*b7c941bbSAndroid Build Coastguard Worker 
30*b7c941bbSAndroid Build Coastguard Worker #define ALOGI(msg, ...) \
31*b7c941bbSAndroid Build Coastguard Worker     __android_log_print(ANDROID_LOG_INFO, LOG_TAG, (msg), __VA_ARGS__)
32*b7c941bbSAndroid Build Coastguard Worker 
33*b7c941bbSAndroid Build Coastguard Worker #ifdef DEBUGUTILSPECVERSION
34*b7c941bbSAndroid Build Coastguard Worker const VkExtensionProperties debug_utils_extension = {
35*b7c941bbSAndroid Build Coastguard Worker     "VK_EXT_debug_utils",
36*b7c941bbSAndroid Build Coastguard Worker     static_cast<uint32_t>(std::atoi(xstr(DEBUGUTILSPECVERSION))),
37*b7c941bbSAndroid Build Coastguard Worker };
38*b7c941bbSAndroid Build Coastguard Worker #endif
39*b7c941bbSAndroid Build Coastguard Worker 
40*b7c941bbSAndroid Build Coastguard Worker // Announce if anything loads this layer.  LAYERNAME is defined in Android.mk
41*b7c941bbSAndroid Build Coastguard Worker class StaticLogMessage {
42*b7c941bbSAndroid Build Coastguard Worker     public:
StaticLogMessage(const char * msg)43*b7c941bbSAndroid Build Coastguard Worker         StaticLogMessage(const char* msg) {
44*b7c941bbSAndroid Build Coastguard Worker             ALOGI("%s", msg);
45*b7c941bbSAndroid Build Coastguard Worker     }
46*b7c941bbSAndroid Build Coastguard Worker };
47*b7c941bbSAndroid Build Coastguard Worker StaticLogMessage
48*b7c941bbSAndroid Build Coastguard Worker     g_initMessage("VK_LAYER_ANDROID_nullLayer" xstr(LAYERNAME) " loaded");
49*b7c941bbSAndroid Build Coastguard Worker 
50*b7c941bbSAndroid Build Coastguard Worker namespace {
51*b7c941bbSAndroid Build Coastguard Worker 
52*b7c941bbSAndroid Build Coastguard Worker 
53*b7c941bbSAndroid Build Coastguard Worker // Minimal dispatch table for this simple layer
54*b7c941bbSAndroid Build Coastguard Worker struct {
55*b7c941bbSAndroid Build Coastguard Worker     PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
56*b7c941bbSAndroid Build Coastguard Worker     PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
57*b7c941bbSAndroid Build Coastguard Worker } g_VulkanDispatchTable;
58*b7c941bbSAndroid Build Coastguard Worker 
59*b7c941bbSAndroid Build Coastguard Worker template<class T>
getProperties(const uint32_t count,const T * properties,uint32_t * pCount,T * pProperties)60*b7c941bbSAndroid Build Coastguard Worker VkResult getProperties(const uint32_t count, const T *properties, uint32_t *pCount,
61*b7c941bbSAndroid Build Coastguard Worker                             T *pProperties) {
62*b7c941bbSAndroid Build Coastguard Worker     uint32_t copySize;
63*b7c941bbSAndroid Build Coastguard Worker 
64*b7c941bbSAndroid Build Coastguard Worker     if (pProperties == NULL || properties == NULL) {
65*b7c941bbSAndroid Build Coastguard Worker         *pCount = count;
66*b7c941bbSAndroid Build Coastguard Worker         return VK_SUCCESS;
67*b7c941bbSAndroid Build Coastguard Worker     }
68*b7c941bbSAndroid Build Coastguard Worker 
69*b7c941bbSAndroid Build Coastguard Worker     copySize = *pCount < count ? *pCount : count;
70*b7c941bbSAndroid Build Coastguard Worker     memcpy(pProperties, properties, copySize * sizeof(T));
71*b7c941bbSAndroid Build Coastguard Worker     *pCount = copySize;
72*b7c941bbSAndroid Build Coastguard Worker     if (copySize < count) {
73*b7c941bbSAndroid Build Coastguard Worker         return VK_INCOMPLETE;
74*b7c941bbSAndroid Build Coastguard Worker     }
75*b7c941bbSAndroid Build Coastguard Worker 
76*b7c941bbSAndroid Build Coastguard Worker     return VK_SUCCESS;
77*b7c941bbSAndroid Build Coastguard Worker }
78*b7c941bbSAndroid Build Coastguard Worker 
79*b7c941bbSAndroid Build Coastguard Worker static const VkLayerProperties LAYER_PROPERTIES = {
80*b7c941bbSAndroid Build Coastguard Worker     LAYER_FULL_NAME,
81*b7c941bbSAndroid Build Coastguard Worker     VK_MAKE_VERSION(1, 0, VK_HEADER_VERSION),
82*b7c941bbSAndroid Build Coastguard Worker     1,
83*b7c941bbSAndroid Build Coastguard Worker     "Layer: nullLayer" xstr(LAYERNAME),
84*b7c941bbSAndroid Build Coastguard Worker };
85*b7c941bbSAndroid Build Coastguard Worker 
EnumerateInstanceLayerProperties(uint32_t * pCount,VkLayerProperties * pProperties)86*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) {
87*b7c941bbSAndroid Build Coastguard Worker     return getProperties<VkLayerProperties>(1, &LAYER_PROPERTIES, pCount, pProperties);
88*b7c941bbSAndroid Build Coastguard Worker }
89*b7c941bbSAndroid Build Coastguard Worker 
EnumerateDeviceLayerProperties(VkPhysicalDevice,uint32_t * pCount,VkLayerProperties * pProperties)90*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice /* physicalDevice */, uint32_t *pCount,
91*b7c941bbSAndroid Build Coastguard Worker                                                               VkLayerProperties *pProperties) {
92*b7c941bbSAndroid Build Coastguard Worker     return getProperties<VkLayerProperties>(0, NULL, pCount, pProperties);
93*b7c941bbSAndroid Build Coastguard Worker }
94*b7c941bbSAndroid Build Coastguard Worker 
EnumerateInstanceExtensionProperties(const char *,uint32_t * pCount,VkExtensionProperties * pProperties)95*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char* /* pLayerName */, uint32_t *pCount,
96*b7c941bbSAndroid Build Coastguard Worker                                                                     VkExtensionProperties *pProperties) {
97*b7c941bbSAndroid Build Coastguard Worker #ifdef DEBUGUTILSPECVERSION
98*b7c941bbSAndroid Build Coastguard Worker   return getProperties<VkExtensionProperties>(1, &debug_utils_extension, pCount,
99*b7c941bbSAndroid Build Coastguard Worker                                               pProperties);
100*b7c941bbSAndroid Build Coastguard Worker #else
101*b7c941bbSAndroid Build Coastguard Worker   return getProperties<VkExtensionProperties>(0, NULL, pCount, pProperties);
102*b7c941bbSAndroid Build Coastguard Worker #endif
103*b7c941bbSAndroid Build Coastguard Worker }
104*b7c941bbSAndroid Build Coastguard Worker 
EnumerateDeviceExtensionProperties(VkPhysicalDevice,const char *,uint32_t * pCount,VkExtensionProperties * pProperties)105*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice /* physicalDevice */, const char* /* pLayerName */,
106*b7c941bbSAndroid Build Coastguard Worker                                                                   uint32_t *pCount, VkExtensionProperties *pProperties) {
107*b7c941bbSAndroid Build Coastguard Worker     return getProperties<VkExtensionProperties>(0, NULL, pCount, pProperties);
108*b7c941bbSAndroid Build Coastguard Worker }
109*b7c941bbSAndroid Build Coastguard Worker 
nullCreateDevice(VkPhysicalDevice physicalDevice,const VkDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice)110*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL nullCreateDevice(VkPhysicalDevice physicalDevice,
111*b7c941bbSAndroid Build Coastguard Worker                                                 const VkDeviceCreateInfo* pCreateInfo,
112*b7c941bbSAndroid Build Coastguard Worker                                                 const VkAllocationCallbacks* pAllocator,
113*b7c941bbSAndroid Build Coastguard Worker                                                 VkDevice* pDevice) {
114*b7c941bbSAndroid Build Coastguard Worker     VkLayerDeviceCreateInfo *layerCreateInfo = (VkLayerDeviceCreateInfo*)pCreateInfo->pNext;
115*b7c941bbSAndroid Build Coastguard Worker     const char *msg = "nullCreateDevice called in " LAYER_FULL_NAME;
116*b7c941bbSAndroid Build Coastguard Worker     ALOGI("%s", msg);
117*b7c941bbSAndroid Build Coastguard Worker 
118*b7c941bbSAndroid Build Coastguard Worker     // Step through the pNext chain until we get to the link function
119*b7c941bbSAndroid Build Coastguard Worker     while(layerCreateInfo && (layerCreateInfo->sType != VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO ||
120*b7c941bbSAndroid Build Coastguard Worker                               layerCreateInfo->function != VK_LAYER_FUNCTION_LINK)) {
121*b7c941bbSAndroid Build Coastguard Worker       layerCreateInfo = (VkLayerDeviceCreateInfo *)layerCreateInfo->pNext;
122*b7c941bbSAndroid Build Coastguard Worker     }
123*b7c941bbSAndroid Build Coastguard Worker 
124*b7c941bbSAndroid Build Coastguard Worker     if(layerCreateInfo == NULL)
125*b7c941bbSAndroid Build Coastguard Worker       return VK_ERROR_INITIALIZATION_FAILED;
126*b7c941bbSAndroid Build Coastguard Worker 
127*b7c941bbSAndroid Build Coastguard Worker     // Grab GDPA and GIPA for the next layer
128*b7c941bbSAndroid Build Coastguard Worker     PFN_vkGetDeviceProcAddr gdpa = layerCreateInfo->u.pLayerInfo->pfnNextGetDeviceProcAddr;
129*b7c941bbSAndroid Build Coastguard Worker     PFN_vkGetInstanceProcAddr gipa = layerCreateInfo->u.pLayerInfo->pfnNextGetInstanceProcAddr;
130*b7c941bbSAndroid Build Coastguard Worker 
131*b7c941bbSAndroid Build Coastguard Worker     // Track them in our dispatch table
132*b7c941bbSAndroid Build Coastguard Worker     g_VulkanDispatchTable.GetDeviceProcAddr = gdpa;
133*b7c941bbSAndroid Build Coastguard Worker     g_VulkanDispatchTable.GetInstanceProcAddr = gipa;
134*b7c941bbSAndroid Build Coastguard Worker 
135*b7c941bbSAndroid Build Coastguard Worker     // Advance the chain for next layer
136*b7c941bbSAndroid Build Coastguard Worker     layerCreateInfo->u.pLayerInfo = layerCreateInfo->u.pLayerInfo->pNext;
137*b7c941bbSAndroid Build Coastguard Worker 
138*b7c941bbSAndroid Build Coastguard Worker     // Call the next layer
139*b7c941bbSAndroid Build Coastguard Worker     PFN_vkCreateDevice createFunc = (PFN_vkCreateDevice)gipa(VK_NULL_HANDLE, "vkCreateDevice");
140*b7c941bbSAndroid Build Coastguard Worker     VkResult ret = createFunc(physicalDevice, pCreateInfo, pAllocator, pDevice);
141*b7c941bbSAndroid Build Coastguard Worker 
142*b7c941bbSAndroid Build Coastguard Worker     return ret;
143*b7c941bbSAndroid Build Coastguard Worker }
144*b7c941bbSAndroid Build Coastguard Worker 
nullCreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)145*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL nullCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
146*b7c941bbSAndroid Build Coastguard Worker                                                   const VkAllocationCallbacks* pAllocator,
147*b7c941bbSAndroid Build Coastguard Worker                                                   VkInstance* pInstance) {
148*b7c941bbSAndroid Build Coastguard Worker     VkLayerInstanceCreateInfo *layerCreateInfo = (VkLayerInstanceCreateInfo *)pCreateInfo->pNext;
149*b7c941bbSAndroid Build Coastguard Worker     const char *msg = "nullCreateInstance called in " LAYER_FULL_NAME;
150*b7c941bbSAndroid Build Coastguard Worker     ALOGI("%s", msg);
151*b7c941bbSAndroid Build Coastguard Worker 
152*b7c941bbSAndroid Build Coastguard Worker     // Step through the pNext chain until we get to the link function
153*b7c941bbSAndroid Build Coastguard Worker     while(layerCreateInfo && (layerCreateInfo->sType != VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO ||
154*b7c941bbSAndroid Build Coastguard Worker                               layerCreateInfo->function != VK_LAYER_FUNCTION_LINK)) {
155*b7c941bbSAndroid Build Coastguard Worker       layerCreateInfo = (VkLayerInstanceCreateInfo *)layerCreateInfo->pNext;
156*b7c941bbSAndroid Build Coastguard Worker     }
157*b7c941bbSAndroid Build Coastguard Worker 
158*b7c941bbSAndroid Build Coastguard Worker     if(layerCreateInfo == NULL)
159*b7c941bbSAndroid Build Coastguard Worker       return VK_ERROR_INITIALIZATION_FAILED;
160*b7c941bbSAndroid Build Coastguard Worker 
161*b7c941bbSAndroid Build Coastguard Worker     // Grab GIPA for the next layer
162*b7c941bbSAndroid Build Coastguard Worker     PFN_vkGetInstanceProcAddr gpa = layerCreateInfo->u.pLayerInfo->pfnNextGetInstanceProcAddr;
163*b7c941bbSAndroid Build Coastguard Worker 
164*b7c941bbSAndroid Build Coastguard Worker     // Track it in our dispatch table
165*b7c941bbSAndroid Build Coastguard Worker     g_VulkanDispatchTable.GetInstanceProcAddr = gpa;
166*b7c941bbSAndroid Build Coastguard Worker 
167*b7c941bbSAndroid Build Coastguard Worker     // Advance the chain for next layer
168*b7c941bbSAndroid Build Coastguard Worker     layerCreateInfo->u.pLayerInfo = layerCreateInfo->u.pLayerInfo->pNext;
169*b7c941bbSAndroid Build Coastguard Worker 
170*b7c941bbSAndroid Build Coastguard Worker     // Call the next layer
171*b7c941bbSAndroid Build Coastguard Worker     PFN_vkCreateInstance createFunc = (PFN_vkCreateInstance)gpa(VK_NULL_HANDLE, "vkCreateInstance");
172*b7c941bbSAndroid Build Coastguard Worker     VkResult ret = createFunc(pCreateInfo, pAllocator, pInstance);
173*b7c941bbSAndroid Build Coastguard Worker 
174*b7c941bbSAndroid Build Coastguard Worker     return ret;
175*b7c941bbSAndroid Build Coastguard Worker }
176*b7c941bbSAndroid Build Coastguard Worker 
GetDeviceProcAddr(VkDevice dev,const char * funcName)177*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice dev, const char* funcName) {
178*b7c941bbSAndroid Build Coastguard Worker 
179*b7c941bbSAndroid Build Coastguard Worker     const char* targetFunc = "vkCreateDevice";
180*b7c941bbSAndroid Build Coastguard Worker     if (!strncmp(targetFunc, funcName, sizeof("vkCreateDevice"))) {
181*b7c941bbSAndroid Build Coastguard Worker         return (PFN_vkVoidFunction)nullCreateDevice;
182*b7c941bbSAndroid Build Coastguard Worker     }
183*b7c941bbSAndroid Build Coastguard Worker 
184*b7c941bbSAndroid Build Coastguard Worker     return (PFN_vkVoidFunction)g_VulkanDispatchTable.GetDeviceProcAddr(dev, funcName);
185*b7c941bbSAndroid Build Coastguard Worker }
186*b7c941bbSAndroid Build Coastguard Worker 
GetInstanceProcAddr(VkInstance instance,const char * funcName)187*b7c941bbSAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char* funcName) {
188*b7c941bbSAndroid Build Coastguard Worker 
189*b7c941bbSAndroid Build Coastguard Worker     const char* targetFunc = "vkCreateInstance";
190*b7c941bbSAndroid Build Coastguard Worker     if (!strncmp(targetFunc, funcName, sizeof("vkCreateInstance"))) {
191*b7c941bbSAndroid Build Coastguard Worker         return (PFN_vkVoidFunction)nullCreateInstance;
192*b7c941bbSAndroid Build Coastguard Worker     }
193*b7c941bbSAndroid Build Coastguard Worker 
194*b7c941bbSAndroid Build Coastguard Worker     return (PFN_vkVoidFunction)g_VulkanDispatchTable.GetInstanceProcAddr(instance, funcName);
195*b7c941bbSAndroid Build Coastguard Worker }
196*b7c941bbSAndroid Build Coastguard Worker 
197*b7c941bbSAndroid Build Coastguard Worker }  // namespace
198*b7c941bbSAndroid Build Coastguard Worker 
199*b7c941bbSAndroid Build Coastguard Worker // loader-layer interface v0, just wrappers since there is only a layer
200*b7c941bbSAndroid Build Coastguard Worker 
vkEnumerateInstanceLayerProperties(uint32_t * pCount,VkLayerProperties * pProperties)201*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount,
202*b7c941bbSAndroid Build Coastguard Worker                                                                   VkLayerProperties *pProperties) {
203*b7c941bbSAndroid Build Coastguard Worker     return EnumerateInstanceLayerProperties(pCount, pProperties);
204*b7c941bbSAndroid Build Coastguard Worker }
205*b7c941bbSAndroid Build Coastguard Worker 
vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pCount,VkLayerProperties * pProperties)206*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount,
207*b7c941bbSAndroid Build Coastguard Worker                                                                 VkLayerProperties *pProperties) {
208*b7c941bbSAndroid Build Coastguard Worker     return EnumerateDeviceLayerProperties(physicalDevice, pCount, pProperties);
209*b7c941bbSAndroid Build Coastguard Worker }
210*b7c941bbSAndroid Build Coastguard Worker 
vkEnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)211*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,
212*b7c941bbSAndroid Build Coastguard Worker                                                                       VkExtensionProperties *pProperties) {
213*b7c941bbSAndroid Build Coastguard Worker     return EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties);
214*b7c941bbSAndroid Build Coastguard Worker }
215*b7c941bbSAndroid Build Coastguard Worker 
vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)216*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
217*b7c941bbSAndroid Build Coastguard Worker                                                                     const char *pLayerName, uint32_t *pCount,
218*b7c941bbSAndroid Build Coastguard Worker                                                                     VkExtensionProperties *pProperties) {
219*b7c941bbSAndroid Build Coastguard Worker     return EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
220*b7c941bbSAndroid Build Coastguard Worker }
221*b7c941bbSAndroid Build Coastguard Worker 
vkGetDeviceProcAddr(VkDevice dev,const char * funcName)222*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) {
223*b7c941bbSAndroid Build Coastguard Worker     return GetDeviceProcAddr(dev, funcName);
224*b7c941bbSAndroid Build Coastguard Worker }
225*b7c941bbSAndroid Build Coastguard Worker 
vkGetInstanceProcAddr(VkInstance instance,const char * funcName)226*b7c941bbSAndroid Build Coastguard Worker __attribute((visibility("default"))) VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) {
227*b7c941bbSAndroid Build Coastguard Worker     return GetInstanceProcAddr(instance, funcName);
228*b7c941bbSAndroid Build Coastguard Worker }
229