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