1 /*
2  * Copyright (C) 2011-2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #define LOG_TAG "libDispatch"
17 #include <android/log.h>
18 
19 #include "rsDispatch.h"
20 #include <dlfcn.h>
21 
22 #define LOG_API(...)
23 
loadSymbols(void * handle,dispatchTable & dispatchTab,int device_api)24 bool loadSymbols(void* handle, dispatchTable& dispatchTab, int device_api) {
25     //fucntion to set the native lib path for 64bit compat lib.
26 #ifdef __LP64__
27     dispatchTab.SetNativeLibDir = (SetNativeLibDirFnPtr)dlsym(handle, "rsaContextSetNativeLibDir");
28     if (dispatchTab.SetNativeLibDir == NULL) {
29         LOG_API("Couldn't initialize dispatchTab.SetNativeLibDir");
30         return false;
31     }
32 #endif
33     dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType");
34     if (dispatchTab.AllocationGetType == NULL) {
35         LOG_API("Couldn't initialize dispatchTab.AllocationGetType");
36         return false;
37     }
38     dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData");
39     if (dispatchTab.TypeGetNativeData == NULL) {
40         LOG_API("Couldn't initialize dispatchTab.TypeGetNativeData");
41         return false;
42     }
43     dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData");
44     if (dispatchTab.ElementGetNativeData == NULL) {
45         LOG_API("Couldn't initialize dispatchTab.ElementGetNativeData");
46         return false;
47     }
48     dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements");
49     if (dispatchTab.ElementGetSubElements == NULL) {
50         LOG_API("Couldn't initialize dispatchTab.ElementGetSubElements");
51         return false;
52     }
53     dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate");
54     if (dispatchTab.DeviceCreate == NULL) {
55         LOG_API("Couldn't initialize dispatchTab.DeviceCreate");
56         return false;
57     }
58     dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy");
59     if (dispatchTab.DeviceDestroy == NULL) {
60         LOG_API("Couldn't initialize dispatchTab.DeviceDestroy");
61         return false;
62     }
63     dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig");
64     if (dispatchTab.DeviceSetConfig == NULL) {
65         LOG_API("Couldn't initialize dispatchTab.DeviceSetConfig");
66         return false;
67     }
68     dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");;
69     if (dispatchTab.ContextCreate == NULL) {
70         LOG_API("Couldn't initialize dispatchTab.ContextCreate");
71         return false;
72     }
73     dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");;
74     if (dispatchTab.GetName == NULL) {
75         LOG_API("Couldn't initialize dispatchTab.GetName");
76         return false;
77     }
78     dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy");
79     if (dispatchTab.ContextDestroy == NULL) {
80         LOG_API("Couldn't initialize dispatchTab.ContextDestroy");
81         return false;
82     }
83     dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage");
84     if (dispatchTab.ContextGetMessage == NULL) {
85         LOG_API("Couldn't initialize dispatchTab.ContextGetMessage");
86         return false;
87     }
88     dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage");
89     if (dispatchTab.ContextPeekMessage == NULL) {
90         LOG_API("Couldn't initialize dispatchTab.ContextPeekMessage");
91         return false;
92     }
93     dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage");
94     if (dispatchTab.ContextSendMessage == NULL) {
95         LOG_API("Couldn't initialize dispatchTab.ContextSendMessage");
96         return false;
97     }
98     dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient");
99     if (dispatchTab.ContextInitToClient == NULL) {
100         LOG_API("Couldn't initialize dispatchTab.ContextInitToClient");
101         return false;
102     }
103     dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient");
104     if (dispatchTab.ContextDeinitToClient == NULL) {
105         LOG_API("Couldn't initialize dispatchTab.ContextDeinitToClient");
106         return false;
107     }
108     dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate");
109     if (dispatchTab.TypeCreate == NULL) {
110         LOG_API("Couldn't initialize dispatchTab.TypeCreate");
111         return false;
112     }
113     dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped");
114     if (dispatchTab.AllocationCreateTyped == NULL) {
115         LOG_API("Couldn't initialize dispatchTab.AllocationCreateTyped");
116         return false;
117     }
118     dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap");
119     if (dispatchTab.AllocationCreateFromBitmap == NULL) {
120         LOG_API("Couldn't initialize dispatchTab.AllocationCreateFromBitmap");
121         return false;
122     }
123     dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap");
124     if (dispatchTab.AllocationCubeCreateFromBitmap == NULL) {
125         LOG_API("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap");
126         return false;
127     }
128     dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface");
129     if (dispatchTab.AllocationGetSurface == NULL) {
130         LOG_API("Couldn't initialize dispatchTab.AllocationGetSurface");
131         return false;
132     }
133     dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface");
134     if (dispatchTab.AllocationSetSurface == NULL) {
135         LOG_API("Couldn't initialize dispatchTab.AllocationSetSurface");
136         return false;
137     }
138     dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish");
139     if (dispatchTab.ContextFinish == NULL) {
140         LOG_API("Couldn't initialize dispatchTab.ContextFinish");
141         return false;
142     }
143     dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump");
144     if (dispatchTab.ContextDump == NULL) {
145         LOG_API("Couldn't initialize dispatchTab.ContextDump");
146         return false;
147     }
148     dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority");
149     if (dispatchTab.ContextSetPriority == NULL) {
150         LOG_API("Couldn't initialize dispatchTab.ContextSetPriority");
151         return false;
152     }
153     dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName");
154     if (dispatchTab.AssignName == NULL) {
155         LOG_API("Couldn't initialize dispatchTab.AssignName");
156         return false;
157     }
158     dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy");
159     if (dispatchTab.ObjDestroy == NULL) {
160         LOG_API("Couldn't initialize dispatchTab.ObjDestroy");
161         return false;
162     }
163     dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate");
164     if (dispatchTab.ElementCreate == NULL) {
165         LOG_API("Couldn't initialize dispatchTab.ElementCreate");
166         return false;
167     }
168     dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2");
169     if (dispatchTab.ElementCreate2 == NULL) {
170         LOG_API("Couldn't initialize dispatchTab.ElementCreate2");
171         return false;
172     }
173     dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap");
174     if (dispatchTab.AllocationCopyToBitmap == NULL) {
175         LOG_API("Couldn't initialize dispatchTab.AllocationCopyToBitmap");
176         return false;
177     }
178     dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData");
179     if (dispatchTab.Allocation1DData == NULL) {
180         LOG_API("Couldn't initialize dispatchTab.Allocation1DData");
181         return false;
182     }
183     dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData");
184     if (dispatchTab.Allocation1DElementData == NULL) {
185         LOG_API("Couldn't initialize dispatchTab.Allocation1DElementData");
186         return false;
187     }
188     dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData");
189     if (dispatchTab.Allocation2DData == NULL) {
190         LOG_API("Couldn't initialize dispatchTab.Allocation2DData");
191         return false;
192     }
193     dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData");
194     if (dispatchTab.Allocation3DData == NULL) {
195         LOG_API("Couldn't initialize dispatchTab.Allocation3DData");
196         return false;
197     }
198     dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps");
199     if (dispatchTab.AllocationGenerateMipmaps == NULL) {
200         LOG_API("Couldn't initialize dispatchTab.AllocationGenerateMipmaps");
201         return false;
202     }
203     dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead");
204     if (dispatchTab.AllocationRead == NULL) {
205         LOG_API("Couldn't initialize dispatchTab.AllocationRead");
206         return false;
207     }
208     dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead");
209     if (dispatchTab.Allocation1DRead == NULL) {
210         LOG_API("Couldn't initialize dispatchTab.Allocation1DRead");
211         return false;
212     }
213     dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead");
214     if (dispatchTab.Allocation2DRead == NULL) {
215         LOG_API("Couldn't initialize dispatchTab.Allocation2DRead");
216         return false;
217     }
218     dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll");
219     if (dispatchTab.AllocationSyncAll == NULL) {
220         LOG_API("Couldn't initialize dispatchTab.AllocationSyncAll");
221         return false;
222     }
223     dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D");
224     if (dispatchTab.AllocationResize1D == NULL) {
225         LOG_API("Couldn't initialize dispatchTab.AllocationResize1D");
226         return false;
227     }
228     dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange");
229     if (dispatchTab.AllocationCopy2DRange == NULL) {
230         LOG_API("Couldn't initialize dispatchTab.AllocationCopy2DRange");
231         return false;
232     }
233     dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange");
234     if (dispatchTab.AllocationCopy3DRange == NULL) {
235         LOG_API("Couldn't initialize dispatchTab.AllocationCopy3DRange");
236         return false;
237     }
238     dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate");
239     if (dispatchTab.SamplerCreate == NULL) {
240         LOG_API("Couldn't initialize dispatchTab.SamplerCreate");
241         return false;
242     }
243     dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation");
244     if (dispatchTab.ScriptBindAllocation == NULL) {
245         LOG_API("Couldn't initialize dispatchTab.ScriptBindAllocation");
246         return false;
247     }
248     dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone");
249     if (dispatchTab.ScriptSetTimeZone == NULL) {
250         LOG_API("Couldn't initialize dispatchTab.ScriptSetTimeZone");
251         return false;
252     }
253     dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke");
254     if (dispatchTab.ScriptInvoke == NULL) {
255         LOG_API("Couldn't initialize dispatchTab.ScriptInvoke");
256         return false;
257     }
258     dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV");
259     if (dispatchTab.ScriptInvokeV == NULL) {
260         LOG_API("Couldn't initialize dispatchTab.ScriptInvokeV");
261         return false;
262     }
263     dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach");
264     if (dispatchTab.ScriptForEach == NULL) {
265         LOG_API("Couldn't initialize dispatchTab.ScriptForEach");
266         return false;
267     }
268     dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI");
269     if (dispatchTab.ScriptSetVarI == NULL) {
270         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarI");
271         return false;
272     }
273     dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj");
274     if (dispatchTab.ScriptSetVarObj == NULL) {
275         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarObj");
276         return false;
277     }
278     dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ");
279     if (dispatchTab.ScriptSetVarJ == NULL) {
280         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarJ");
281         return false;
282     }
283     dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF");
284     if (dispatchTab.ScriptSetVarF == NULL) {
285         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarF");
286         return false;
287     }
288     dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD");
289     if (dispatchTab.ScriptSetVarD == NULL) {
290         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarD");
291         return false;
292     }
293     dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV");
294     if (dispatchTab.ScriptSetVarV == NULL) {
295         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarV");
296         return false;
297     }
298     dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV");
299     if (dispatchTab.ScriptGetVarV == NULL) {
300         LOG_API("Couldn't initialize dispatchTab.ScriptGetVarV");
301         return false;
302     }
303     dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE");
304     if (dispatchTab.ScriptSetVarVE == NULL) {
305         LOG_API("Couldn't initialize dispatchTab.ScriptSetVarVE");
306         return false;
307     }
308     dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate");
309     if (dispatchTab.ScriptCCreate == NULL) {
310         LOG_API("Couldn't initialize dispatchTab.ScriptCCreate");
311         return false;
312     }
313     dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate");
314     if (dispatchTab.ScriptIntrinsicCreate == NULL) {
315         LOG_API("Couldn't initialize dispatchTab.ScriptIntrinsicCreate");
316         return false;
317     }
318     dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate");
319     if (dispatchTab.ScriptKernelIDCreate == NULL) {
320         LOG_API("Couldn't initialize dispatchTab.ScriptKernelIDCreate");
321         return false;
322     }
323     dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate");
324     if (dispatchTab.ScriptFieldIDCreate == NULL) {
325         LOG_API("Couldn't initialize dispatchTab.ScriptFieldIDCreate");
326         return false;
327     }
328     dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate");
329     if (dispatchTab.ScriptGroupCreate == NULL) {
330         LOG_API("Couldn't initialize dispatchTab.ScriptGroupCreate");
331         return false;
332     }
333     dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput");
334     if (dispatchTab.ScriptGroupSetOutput == NULL) {
335         LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetOutput");
336         return false;
337     }
338     dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput");
339     if (dispatchTab.ScriptGroupSetInput == NULL) {
340         LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetInput");
341         return false;
342     }
343     dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute");
344     if (dispatchTab.ScriptGroupExecute == NULL) {
345         LOG_API("Couldn't initialize dispatchTab.ScriptGroupExecute");
346         return false;
347     }
348     dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend");
349     if (dispatchTab.AllocationIoSend == NULL) {
350         LOG_API("Couldn't initialize dispatchTab.AllocationIoSend");
351         return false;
352     }
353     dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive");
354     if (dispatchTab.AllocationIoReceive == NULL) {
355         LOG_API("Couldn't initialize dispatchTab.AllocationIoReceive");
356         return false;
357     }
358     // API_21 functions
359     if (device_api >= 21) {
360         dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer");
361         if (dispatchTab.AllocationGetPointer == NULL) {
362             LOG_API("Couldn't initialize dispatchTab.AllocationGetPointer");
363             return false;
364         }
365     }
366     // API_23 functions
367     if (device_api >= 23) {
368         //ScriptGroup V2 functions
369         dispatchTab.ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate");
370         if (dispatchTab.ScriptInvokeIDCreate == NULL) {
371             LOG_API("Couldn't initialize dispatchTab.ScriptInvokeIDCreate");
372             return false;
373         }
374         dispatchTab.ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate");
375         if (dispatchTab.ClosureCreate == NULL) {
376             LOG_API("Couldn't initialize dispatchTab.ClosureCreate");
377             return false;
378         }
379         dispatchTab.InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate");
380         if (dispatchTab.InvokeClosureCreate == NULL) {
381             LOG_API("Couldn't initialize dispatchTab.InvokeClosureCreate");
382             return false;
383         }
384         dispatchTab.ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg");
385         if (dispatchTab.ClosureSetArg == NULL) {
386             LOG_API("Couldn't initialize dispatchTab.ClosureSetArg");
387             return false;
388         }
389         dispatchTab.ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal");
390         if (dispatchTab.ClosureSetGlobal == NULL) {
391             LOG_API("Couldn't initialize dispatchTab.ClosureSetGlobal");
392             return false;
393         }
394         dispatchTab.ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create");
395         if (dispatchTab.ScriptGroup2Create == NULL) {
396             LOG_API("Couldn't initialize dispatchTab.ScriptGroup2Create");
397             return false;
398         }
399         dispatchTab.AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData");
400         if (dispatchTab.AllocationElementData == NULL) {
401             LOG_API("Couldn't initialize dispatchTab.AllocationElementData");
402             return false;
403         }
404         dispatchTab.AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead");
405         if (dispatchTab.AllocationElementRead == NULL) {
406             LOG_API("Couldn't initialize dispatchTab.AllocationElementRead");
407             return false;
408         }
409         dispatchTab.Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead");
410         if (dispatchTab.Allocation3DRead == NULL) {
411             LOG_API("Couldn't initialize dispatchTab.Allocation3DRead");
412             return false;
413         }
414         dispatchTab.ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti");
415         if (dispatchTab.ScriptForEachMulti == NULL) {
416             LOG_API("Couldn't initialize dispatchTab.ScriptForEachMulti");
417             return false;
418         }
419     }
420 
421     return true;
422 
423 }
424 
425 
loadIOSuppSyms(void * handleIO,ioSuppDT & ioDispatch)426 bool loadIOSuppSyms(void* handleIO, ioSuppDT& ioDispatch){
427     ioDispatch.sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "AllocationSetSurface");
428     if (ioDispatch.sAllocationSetSurface == NULL) {
429         LOG_API("Couldn't initialize ioDispatch.sAllocationSetSurface");
430         return false;
431     }
432     return true;
433 }
434