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 #include <limits.h>
22
23 #define LOG_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "RS Dispatch", __VA_ARGS__);
24 #define REDUCE_API_LEVEL 24
25
loadSymbols(void * handle,dispatchTable & dispatchTab,int targetApiLevel)26 bool loadSymbols(void* handle, dispatchTable& dispatchTab, int targetApiLevel) {
27 #ifdef __LP64__
28 // Function to set the native lib path for 64bit compat lib.
29 dispatchTab.SetNativeLibDir = (SetNativeLibDirFnPtr)dlsym(handle, "rsaContextSetNativeLibDir");
30 if (dispatchTab.SetNativeLibDir == nullptr) {
31 LOG_ERR("Couldn't initialize dispatchTab.SetNativeLibDir");
32 return false;
33 }
34 #endif
35
36 dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData");
37 dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData");
38 dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead");
39 dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData");
40 dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead");
41 dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData");
42 dispatchTab.Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead");
43 dispatchTab.AllocationAdapterCreate = (AllocationAdapterCreateFnPtr)dlsym(handle, "rsAllocationAdapterCreate");
44 dispatchTab.AllocationAdapterOffset = (AllocationAdapterOffsetFnPtr)dlsym(handle, "rsAllocationAdapterOffset");
45 dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange");
46 dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange");
47 dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap");
48 dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap");
49 dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped");
50 dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap");
51 dispatchTab.AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData");
52 dispatchTab.AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead");
53 dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps");
54 dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer");
55 dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface");
56 dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType");
57 dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive");
58 dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend");
59 dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead");
60 dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D");
61 dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface");
62 dispatchTab.AllocationSetupBufferQueue = (AllocationSetupBufferQueueFnPtr)dlsym(handle, "rsAllocationSetupBufferQueue");
63 dispatchTab.AllocationShareBufferQueue = (AllocationShareBufferQueueFnPtr)dlsym(handle, "rsAllocationShareBufferQueue");
64 dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll");
65 dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName");
66 dispatchTab.ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate");
67 dispatchTab.ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg");
68 dispatchTab.ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal");
69 dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");;
70 dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient");
71 dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy");
72 dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump");
73 dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish");
74 dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage");
75 dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient");
76 dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage");
77 dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage");
78 dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority");
79 dispatchTab.ContextSetCacheDir = (ContextSetCacheDirFnPtr)dlsym(handle, "rsContextSetCacheDir");
80 dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate");
81 dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy");
82 dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig");
83 dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate");
84 dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2");
85 dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData");
86 dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements");
87 dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");;
88 dispatchTab.InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate");
89 dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy");
90 dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate");
91 dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation");
92 dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate");
93 dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate");
94 dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach");
95 dispatchTab.ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti");
96 dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV");
97 dispatchTab.ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create");
98 dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate");
99 dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute");
100 dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput");
101 dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput");
102 dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate");
103 dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke");
104 dispatchTab.ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate");
105 dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV");
106 dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate");
107 dispatchTab.ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce");
108 dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone");
109 dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD");
110 dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF");
111 dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI");
112 dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ");
113 dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj");
114 dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV");
115 dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE");
116 dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate");
117 dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData");
118
119 // Load graphics APIs
120 dispatchTab.ContextCreateGL = (ContextCreateGLFnPtr)dlsym(handle, "rsContextCreateGL");
121 dispatchTab.ContextSetSurface = (ContextSetSurfaceFnPtr)dlsym(handle, "rsContextSetSurface");
122 dispatchTab.ContextPause = (ContextPauseFnPtr)dlsym(handle, "rsContextPause");
123 dispatchTab.ContextResume = (ContextResumeFnPtr)dlsym(handle, "rsContextResume");
124 dispatchTab.ContextBindProgramStore = (ContextBindProgramStoreFnPtr)dlsym(handle, "rsContextBindProgramStore");
125 dispatchTab.ContextBindProgramFragment = (ContextBindProgramFragmentFnPtr)dlsym(handle, "rsContextBindProgramFragment");
126 dispatchTab.ContextBindProgramVertex = (ContextBindProgramVertexFnPtr)dlsym(handle, "rsContextBindProgramVertex");
127 dispatchTab.ContextBindProgramRaster = (ContextBindProgramRasterFnPtr)dlsym(handle, "rsContextBindProgramRaster");
128 dispatchTab.ContextBindFont = (ContextBindFontFnPtr)dlsym(handle, "rsContextBindFont");
129 dispatchTab.ContextBindRootScript = (ContextBindRootScriptFnPtr)dlsym(handle, "rsContextBindRootScript");
130
131 dispatchTab.ProgramStoreCreate = (ProgramStoreCreateFnPtr)dlsym(handle, "rsProgramStoreCreate");
132 dispatchTab.ProgramRasterCreate = (ProgramRasterCreateFnPtr)dlsym(handle, "rsProgramRasterCreate");
133 dispatchTab.ProgramBindConstants = (ProgramBindConstantsFnPtr)dlsym(handle, "rsProgramBindConstants");
134 dispatchTab.ProgramBindTexture = (ProgramBindTextureFnPtr)dlsym(handle, "rsProgramBindTexture");
135 dispatchTab.ProgramBindSampler = (ProgramBindSamplerFnPtr)dlsym(handle, "rsProgramBindSampler");
136 dispatchTab.ProgramFragmentCreate = (ProgramFragmentCreateFnPtr)dlsym(handle, "rsProgramFragmentCreate");
137 dispatchTab.ProgramVertexCreate = (ProgramVertexCreateFnPtr)dlsym(handle, "rsProgramVertexCreate");
138 dispatchTab.FontCreateFromFile = (FontCreateFromFileFnPtr)dlsym(handle, "rsFontCreateFromFile");
139 dispatchTab.FontCreateFromMemory = (FontCreateFromMemoryFnPtr)dlsym(handle, "rsFontCreateFromMemory");
140 dispatchTab.MeshCreate = (MeshCreateFnPtr)dlsym(handle, "rsMeshCreate");
141 dispatchTab.MeshGetVertexBufferCount = (MeshGetVertexBufferCountFnPtr)dlsym(handle, "rsaMeshGetVertexBufferCount");
142 dispatchTab.MeshGetIndexCount = (MeshGetIndexCountFnPtr)dlsym(handle, "rsaMeshGetIndexCount");
143 dispatchTab.MeshGetVertices = (MeshGetVerticesFnPtr)dlsym(handle, "rsaMeshGetVertices");
144 dispatchTab.MeshGetIndices = (MeshGetIndicesFnPtr)dlsym(handle, "rsaMeshGetIndices");
145 dispatchTab.FileA3DGetEntryByIndex = (FileA3DGetEntryByIndexFnPtr)dlsym(handle, "rsaFileA3DGetEntryByIndex");
146 dispatchTab.FileA3DGetNumIndexEntries = (FileA3DGetNumIndexEntriesFnPtr)dlsym(handle, "rsaFileA3DGetNumIndexEntries");
147 dispatchTab.FileA3DGetIndexEntries = (FileA3DGetIndexEntriesFnPtr)dlsym(handle, "rsaFileA3DGetIndexEntries");
148 dispatchTab.FileA3DCreateFromMemory = (FileA3DCreateFromMemoryFnPtr)dlsym(handle, "rsaFileA3DCreateFromMemory");
149 dispatchTab.FileA3DCreateFromAsset = (FileA3DCreateFromAssetFnPtr)dlsym(handle, "rsaFileA3DCreateFromAsset");
150 dispatchTab.FileA3DCreateFromFile = (FileA3DCreateFromFileFnPtr)dlsym(handle, "rsaFileA3DCreateFromFile");
151
152 // Clear error buffer for later operations.
153 dlerror();
154
155 if (dispatchTab.AllocationGetType == nullptr) {
156 LOG_ERR("Couldn't initialize dispatchTab.AllocationGetType");
157 return false;
158 }
159 if (dispatchTab.TypeGetNativeData == nullptr) {
160 LOG_ERR("Couldn't initialize dispatchTab.TypeGetNativeData");
161 return false;
162 }
163 if (dispatchTab.ElementGetNativeData == nullptr) {
164 LOG_ERR("Couldn't initialize dispatchTab.ElementGetNativeData");
165 return false;
166 }
167 if (dispatchTab.ElementGetSubElements == nullptr) {
168 LOG_ERR("Couldn't initialize dispatchTab.ElementGetSubElements");
169 return false;
170 }
171 if (dispatchTab.DeviceCreate == nullptr) {
172 LOG_ERR("Couldn't initialize dispatchTab.DeviceCreate");
173 return false;
174 }
175 if (dispatchTab.DeviceDestroy == nullptr) {
176 LOG_ERR("Couldn't initialize dispatchTab.DeviceDestroy");
177 return false;
178 }
179 if (dispatchTab.DeviceSetConfig == nullptr) {
180 LOG_ERR("Couldn't initialize dispatchTab.DeviceSetConfig");
181 return false;
182 }
183 if (dispatchTab.ContextCreate == nullptr) {
184 LOG_ERR("Couldn't initialize dispatchTab.ContextCreate");
185 return false;
186 }
187 if (dispatchTab.GetName == nullptr) {
188 LOG_ERR("Couldn't initialize dispatchTab.GetName");
189 return false;
190 }
191 if (dispatchTab.ContextDestroy == nullptr) {
192 LOG_ERR("Couldn't initialize dispatchTab.ContextDestroy");
193 return false;
194 }
195 if (dispatchTab.ContextGetMessage == nullptr) {
196 LOG_ERR("Couldn't initialize dispatchTab.ContextGetMessage");
197 return false;
198 }
199 if (dispatchTab.ContextPeekMessage == nullptr) {
200 LOG_ERR("Couldn't initialize dispatchTab.ContextPeekMessage");
201 return false;
202 }
203 if (dispatchTab.ContextSendMessage == nullptr) {
204 LOG_ERR("Couldn't initialize dispatchTab.ContextSendMessage");
205 return false;
206 }
207 if (dispatchTab.ContextInitToClient == nullptr) {
208 LOG_ERR("Couldn't initialize dispatchTab.ContextInitToClient");
209 return false;
210 }
211 if (dispatchTab.ContextDeinitToClient == nullptr) {
212 LOG_ERR("Couldn't initialize dispatchTab.ContextDeinitToClient");
213 return false;
214 }
215 if (dispatchTab.TypeCreate == nullptr) {
216 LOG_ERR("Couldn't initialize dispatchTab.TypeCreate");
217 return false;
218 }
219 if (dispatchTab.AllocationCreateTyped == nullptr) {
220 LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateTyped");
221 return false;
222 }
223 if (dispatchTab.AllocationCreateFromBitmap == nullptr) {
224 LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateFromBitmap");
225 return false;
226 }
227 if (dispatchTab.AllocationCubeCreateFromBitmap == nullptr) {
228 LOG_ERR("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap");
229 return false;
230 }
231 if (dispatchTab.AllocationGetSurface == nullptr) {
232 LOG_ERR("Couldn't initialize dispatchTab.AllocationGetSurface");
233 return false;
234 }
235 if (dispatchTab.AllocationSetSurface == nullptr) {
236 LOG_ERR("Couldn't initialize dispatchTab.AllocationSetSurface");
237 return false;
238 }
239 if (dispatchTab.ContextFinish == nullptr) {
240 LOG_ERR("Couldn't initialize dispatchTab.ContextFinish");
241 return false;
242 }
243 if (dispatchTab.ContextDump == nullptr) {
244 LOG_ERR("Couldn't initialize dispatchTab.ContextDump");
245 return false;
246 }
247 if (dispatchTab.ContextSetPriority == nullptr) {
248 LOG_ERR("Couldn't initialize dispatchTab.ContextSetPriority");
249 return false;
250 }
251 if (dispatchTab.AssignName == nullptr) {
252 LOG_ERR("Couldn't initialize dispatchTab.AssignName");
253 return false;
254 }
255 if (dispatchTab.ObjDestroy == nullptr) {
256 LOG_ERR("Couldn't initialize dispatchTab.ObjDestroy");
257 return false;
258 }
259 if (dispatchTab.ElementCreate == nullptr) {
260 LOG_ERR("Couldn't initialize dispatchTab.ElementCreate");
261 return false;
262 }
263 if (dispatchTab.ElementCreate2 == nullptr) {
264 LOG_ERR("Couldn't initialize dispatchTab.ElementCreate2");
265 return false;
266 }
267 if (dispatchTab.AllocationCopyToBitmap == nullptr) {
268 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopyToBitmap");
269 return false;
270 }
271 if (dispatchTab.Allocation1DData == nullptr) {
272 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DData");
273 return false;
274 }
275 if (dispatchTab.Allocation1DElementData == nullptr) {
276 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DElementData");
277 return false;
278 }
279 if (dispatchTab.Allocation2DData == nullptr) {
280 LOG_ERR("Couldn't initialize dispatchTab.Allocation2DData");
281 return false;
282 }
283 if (dispatchTab.Allocation3DData == nullptr) {
284 LOG_ERR("Couldn't initialize dispatchTab.Allocation3DData");
285 return false;
286 }
287 if (dispatchTab.AllocationGenerateMipmaps == nullptr) {
288 LOG_ERR("Couldn't initialize dispatchTab.AllocationGenerateMipmaps");
289 return false;
290 }
291 if (dispatchTab.AllocationRead == nullptr) {
292 LOG_ERR("Couldn't initialize dispatchTab.AllocationRead");
293 return false;
294 }
295 if (dispatchTab.Allocation1DRead == nullptr) {
296 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DRead");
297 return false;
298 }
299 if (dispatchTab.Allocation2DRead == nullptr) {
300 LOG_ERR("Couldn't initialize dispatchTab.Allocation2DRead");
301 return false;
302 }
303 if (dispatchTab.AllocationSyncAll == nullptr) {
304 LOG_ERR("Couldn't initialize dispatchTab.AllocationSyncAll");
305 return false;
306 }
307 if (dispatchTab.AllocationResize1D == nullptr) {
308 LOG_ERR("Couldn't initialize dispatchTab.AllocationResize1D");
309 return false;
310 }
311 if (dispatchTab.AllocationCopy2DRange == nullptr) {
312 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy2DRange");
313 return false;
314 }
315 if (dispatchTab.AllocationCopy3DRange == nullptr) {
316 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy3DRange");
317 return false;
318 }
319 if (dispatchTab.SamplerCreate == nullptr) {
320 LOG_ERR("Couldn't initialize dispatchTab.SamplerCreate");
321 return false;
322 }
323 if (dispatchTab.ScriptBindAllocation == nullptr) {
324 LOG_ERR("Couldn't initialize dispatchTab.ScriptBindAllocation");
325 return false;
326 }
327 if (dispatchTab.ScriptSetTimeZone == nullptr) {
328 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetTimeZone");
329 return false;
330 }
331 if (dispatchTab.ScriptInvoke == nullptr) {
332 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvoke");
333 return false;
334 }
335 if (dispatchTab.ScriptInvokeV == nullptr) {
336 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeV");
337 return false;
338 }
339 if (dispatchTab.ScriptForEach == nullptr) {
340 LOG_ERR("Couldn't initialize dispatchTab.ScriptForEach");
341 return false;
342 }
343 if (dispatchTab.ScriptSetVarI == nullptr) {
344 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarI");
345 return false;
346 }
347 if (dispatchTab.ScriptSetVarObj == nullptr) {
348 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarObj");
349 return false;
350 }
351 if (dispatchTab.ScriptSetVarJ == nullptr) {
352 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarJ");
353 return false;
354 }
355 if (dispatchTab.ScriptSetVarF == nullptr) {
356 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarF");
357 return false;
358 }
359 if (dispatchTab.ScriptSetVarD == nullptr) {
360 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarD");
361 return false;
362 }
363 if (dispatchTab.ScriptSetVarV == nullptr) {
364 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarV");
365 return false;
366 }
367 if (dispatchTab.ScriptGetVarV == nullptr) {
368 LOG_ERR("Couldn't initialize dispatchTab.ScriptGetVarV");
369 return false;
370 }
371 if (dispatchTab.ScriptSetVarVE == nullptr) {
372 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarVE");
373 return false;
374 }
375 if (dispatchTab.ScriptCCreate == nullptr) {
376 LOG_ERR("Couldn't initialize dispatchTab.ScriptCCreate");
377 return false;
378 }
379 if (dispatchTab.ScriptIntrinsicCreate == nullptr) {
380 LOG_ERR("Couldn't initialize dispatchTab.ScriptIntrinsicCreate");
381 return false;
382 }
383 if (dispatchTab.ScriptKernelIDCreate == nullptr) {
384 LOG_ERR("Couldn't initialize dispatchTab.ScriptKernelIDCreate");
385 return false;
386 }
387 if (dispatchTab.ScriptFieldIDCreate == nullptr) {
388 LOG_ERR("Couldn't initialize dispatchTab.ScriptFieldIDCreate");
389 return false;
390 }
391 if (dispatchTab.ScriptGroupCreate == nullptr) {
392 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupCreate");
393 return false;
394 }
395 if (dispatchTab.ScriptGroupSetOutput == nullptr) {
396 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetOutput");
397 return false;
398 }
399 if (dispatchTab.ScriptGroupSetInput == nullptr) {
400 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetInput");
401 return false;
402 }
403 if (dispatchTab.ScriptGroupExecute == nullptr) {
404 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupExecute");
405 return false;
406 }
407 if (dispatchTab.AllocationIoSend == nullptr) {
408 LOG_ERR("Couldn't initialize dispatchTab.AllocationIoSend");
409 return false;
410 }
411 if (dispatchTab.AllocationIoReceive == nullptr) {
412 LOG_ERR("Couldn't initialize dispatchTab.AllocationIoReceive");
413 return false;
414 }
415 // API_21 functions
416 if (targetApiLevel >= 21) {
417 if (dispatchTab.AllocationGetPointer == nullptr) {
418 LOG_ERR("Couldn't initialize dispatchTab.AllocationGetPointer");
419 return false;
420 }
421 }
422 // API_23 functions
423 if (targetApiLevel >= 23) {
424 // ScriptGroup V2 functions
425 if (dispatchTab.ScriptInvokeIDCreate == nullptr) {
426 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeIDCreate");
427 return false;
428 }
429 if (dispatchTab.ClosureCreate == nullptr) {
430 LOG_ERR("Couldn't initialize dispatchTab.ClosureCreate");
431 return false;
432 }
433 if (dispatchTab.InvokeClosureCreate == nullptr) {
434 LOG_ERR("Couldn't initialize dispatchTab.InvokeClosureCreate");
435 return false;
436 }
437 if (dispatchTab.ClosureSetArg == nullptr) {
438 LOG_ERR("Couldn't initialize dispatchTab.ClosureSetArg");
439 return false;
440 }
441 if (dispatchTab.ClosureSetGlobal == nullptr) {
442 LOG_ERR("Couldn't initialize dispatchTab.ClosureSetGlobal");
443 return false;
444 }
445 if (dispatchTab.ScriptGroup2Create == nullptr) {
446 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroup2Create");
447 return false;
448 }
449 if (dispatchTab.AllocationElementData == nullptr) {
450 LOG_ERR("Couldn't initialize dispatchTab.AllocationElementData");
451 return false;
452 }
453 if (dispatchTab.AllocationElementRead == nullptr) {
454 LOG_ERR("Couldn't initialize dispatchTab.AllocationElementRead");
455 return false;
456 }
457 if (dispatchTab.Allocation3DRead == nullptr) {
458 LOG_ERR("Couldn't initialize dispatchTab.Allocation3DRead");
459 return false;
460 }
461 if (dispatchTab.ScriptForEachMulti == nullptr) {
462 LOG_ERR("Couldn't initialize dispatchTab.ScriptForEachMulti");
463 return false;
464 }
465 }
466
467 if (targetApiLevel >= REDUCE_API_LEVEL) {
468 if (dispatchTab.ScriptReduce == nullptr) {
469 LOG_ERR("Couldn't initialize dispatchTab.ScriptReduce");
470 return false;
471 }
472 }
473
474 return true;
475
476 }
477
478
loadIOSuppSyms(void * handleIO,ioSuppDT & ioDispatch)479 bool loadIOSuppSyms(void* handleIO, ioSuppDT& ioDispatch){
480 ioDispatch.sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "AllocationSetSurface");
481 if (ioDispatch.sAllocationSetSurface == nullptr) {
482 LOG_ERR("Couldn't initialize ioDispatch.sAllocationSetSurface");
483 return false;
484 }
485 return true;
486 }