148d2eae90f08dc33754a9d280337249690a954d6Miao Wang/*
248d2eae90f08dc33754a9d280337249690a954d6Miao Wang * Copyright (C) 2011-2012 The Android Open Source Project
348d2eae90f08dc33754a9d280337249690a954d6Miao Wang *
448d2eae90f08dc33754a9d280337249690a954d6Miao Wang * Licensed under the Apache License, Version 2.0 (the "License");
548d2eae90f08dc33754a9d280337249690a954d6Miao Wang * you may not use this file except in compliance with the License.
648d2eae90f08dc33754a9d280337249690a954d6Miao Wang * You may obtain a copy of the License at
748d2eae90f08dc33754a9d280337249690a954d6Miao Wang *
848d2eae90f08dc33754a9d280337249690a954d6Miao Wang *      http://www.apache.org/licenses/LICENSE-2.0
948d2eae90f08dc33754a9d280337249690a954d6Miao Wang *
1048d2eae90f08dc33754a9d280337249690a954d6Miao Wang * Unless required by applicable law or agreed to in writing, software
1148d2eae90f08dc33754a9d280337249690a954d6Miao Wang * distributed under the License is distributed on an "AS IS" BASIS,
1248d2eae90f08dc33754a9d280337249690a954d6Miao Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1348d2eae90f08dc33754a9d280337249690a954d6Miao Wang * See the License for the specific language governing permissions and
1448d2eae90f08dc33754a9d280337249690a954d6Miao Wang * limitations under the License.
1548d2eae90f08dc33754a9d280337249690a954d6Miao Wang */
1648d2eae90f08dc33754a9d280337249690a954d6Miao Wang#define LOG_TAG "libDispatch"
1748d2eae90f08dc33754a9d280337249690a954d6Miao Wang#include <android/log.h>
1848d2eae90f08dc33754a9d280337249690a954d6Miao Wang
1948d2eae90f08dc33754a9d280337249690a954d6Miao Wang#include "rsDispatch.h"
2048d2eae90f08dc33754a9d280337249690a954d6Miao Wang#include <dlfcn.h>
2148d2eae90f08dc33754a9d280337249690a954d6Miao Wang
2248d2eae90f08dc33754a9d280337249690a954d6Miao Wang#define LOG_API(...)
2348d2eae90f08dc33754a9d280337249690a954d6Miao Wang
248a6a71757f64f02058a50778c75033546a79f2b5Miao Wangbool loadSymbols(void* handle, dispatchTable& dispatchTab, int device_api) {
25f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang    //fucntion to set the native lib path for 64bit compat lib.
26f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang#ifdef __LP64__
27f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang    dispatchTab.SetNativeLibDir = (SetNativeLibDirFnPtr)dlsym(handle, "rsaContextSetNativeLibDir");
28f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang    if (dispatchTab.SetNativeLibDir == NULL) {
29f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang        LOG_API("Couldn't initialize dispatchTab.SetNativeLibDir");
30f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang        return false;
31f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang    }
32f3213d7fd648da98bb3b03204eaf90f03c31926bMiao Wang#endif
3348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType");
3448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationGetType == NULL) {
3548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGetType");
3648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
3748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
3848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData");
3948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.TypeGetNativeData == NULL) {
4048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.TypeGetNativeData");
4148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
4248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
4348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData");
4448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ElementGetNativeData == NULL) {
4548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ElementGetNativeData");
4648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
4748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
4848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements");
4948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ElementGetSubElements == NULL) {
5048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ElementGetSubElements");
5148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
5248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
5348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate");
5448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.DeviceCreate == NULL) {
5548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceCreate");
5648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
5748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
5848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy");
5948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.DeviceDestroy == NULL) {
6048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceDestroy");
6148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
6248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
6348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig");
6448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.DeviceSetConfig == NULL) {
6548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.DeviceSetConfig");
6648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
6748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
6848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");;
6948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextCreate == NULL) {
7048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextCreate");
7148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
7248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
7348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");;
7448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.GetName == NULL) {
7548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.GetName");
7648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
7748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
7848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy");
7948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextDestroy == NULL) {
8048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDestroy");
8148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
8248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
8348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage");
8448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextGetMessage == NULL) {
8548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextGetMessage");
8648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
8748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
8848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage");
8948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextPeekMessage == NULL) {
9048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextPeekMessage");
9148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
9248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
9348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage");
9448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextSendMessage == NULL) {
9548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextSendMessage");
9648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
9748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
9848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient");
9948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextInitToClient == NULL) {
10048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextInitToClient");
10148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
10248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
10348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient");
10448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextDeinitToClient == NULL) {
10548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDeinitToClient");
10648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
10748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
10848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate");
10948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.TypeCreate == NULL) {
11048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.TypeCreate");
11148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
11248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
11348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped");
11448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCreateTyped == NULL) {
11548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCreateTyped");
11648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
11748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
11848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap");
11948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCreateFromBitmap == NULL) {
12048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCreateFromBitmap");
12148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
12248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
12348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap");
12448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCubeCreateFromBitmap == NULL) {
12548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap");
12648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
12748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
12848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface");
12948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationGetSurface == NULL) {
13048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGetSurface");
13148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
13248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
13348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface");
13448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationSetSurface == NULL) {
13548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationSetSurface");
13648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
13748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
13848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish");
13948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextFinish == NULL) {
14048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextFinish");
14148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
14248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
14348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump");
14448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextDump == NULL) {
14548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextDump");
14648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
14748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
14848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority");
14948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ContextSetPriority == NULL) {
15048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ContextSetPriority");
15148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
15248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
15348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName");
15448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AssignName == NULL) {
15548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AssignName");
15648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
15748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
15848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy");
15948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ObjDestroy == NULL) {
16048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ObjDestroy");
16148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
16248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
16348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate");
16448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ElementCreate == NULL) {
16548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ElementCreate");
16648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
16748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
16848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2");
16948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ElementCreate2 == NULL) {
17048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ElementCreate2");
17148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
17248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
17348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap");
17448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCopyToBitmap == NULL) {
17548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopyToBitmap");
17648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
17748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
17848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData");
17948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation1DData == NULL) {
18048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DData");
18148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
18248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
18348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData");
18448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation1DElementData == NULL) {
18548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DElementData");
18648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
18748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
18848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData");
18948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation2DData == NULL) {
19048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation2DData");
19148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
19248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
19348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData");
19448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation3DData == NULL) {
19548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation3DData");
19648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
19748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
19848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps");
19948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationGenerateMipmaps == NULL) {
20048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationGenerateMipmaps");
20148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
20248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
20348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead");
20448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationRead == NULL) {
20548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationRead");
20648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
20748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
20848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead");
20948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation1DRead == NULL) {
21048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation1DRead");
21148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
21248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
21348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead");
21448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.Allocation2DRead == NULL) {
21548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.Allocation2DRead");
21648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
21748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
21848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll");
21948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationSyncAll == NULL) {
22048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationSyncAll");
22148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
22248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
22348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D");
22448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationResize1D == NULL) {
22548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationResize1D");
22648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
22748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
22848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange");
22948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCopy2DRange == NULL) {
23048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopy2DRange");
23148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
23248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
23348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange");
23448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationCopy3DRange == NULL) {
23548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationCopy3DRange");
23648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
23748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
23848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate");
23948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.SamplerCreate == NULL) {
24048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.SamplerCreate");
24148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
24248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
24348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation");
24448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptBindAllocation == NULL) {
24548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptBindAllocation");
24648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
24748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
24848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone");
24948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetTimeZone == NULL) {
25048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetTimeZone");
25148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
25248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
25348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke");
25448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptInvoke == NULL) {
25548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptInvoke");
25648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
25748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
25848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV");
25948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptInvokeV == NULL) {
26048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptInvokeV");
26148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
26248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
26348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach");
26448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptForEach == NULL) {
26548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptForEach");
26648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
26748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
26848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI");
26948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarI == NULL) {
27048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarI");
27148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
27248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
27348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj");
27448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarObj == NULL) {
27548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarObj");
27648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
27748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
27848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ");
27948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarJ == NULL) {
28048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarJ");
28148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
28248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
28348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF");
28448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarF == NULL) {
28548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarF");
28648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
28748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
28848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD");
28948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarD == NULL) {
29048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarD");
29148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
29248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
29348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV");
29448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarV == NULL) {
29548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarV");
29648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
29748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
29848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV");
29948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptGetVarV == NULL) {
30048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGetVarV");
30148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
30248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
30348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE");
30448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptSetVarVE == NULL) {
30548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptSetVarVE");
30648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
30748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
30848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate");
30948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptCCreate == NULL) {
31048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptCCreate");
31148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
31248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
31348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate");
31448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptIntrinsicCreate == NULL) {
31548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptIntrinsicCreate");
31648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
31748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
31848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate");
31948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptKernelIDCreate == NULL) {
32048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptKernelIDCreate");
32148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
32248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
32348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate");
32448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptFieldIDCreate == NULL) {
32548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptFieldIDCreate");
32648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
32748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
32848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate");
32948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptGroupCreate == NULL) {
33048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupCreate");
33148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
33248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
33348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput");
33448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptGroupSetOutput == NULL) {
33548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetOutput");
33648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
33748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
33848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput");
33948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptGroupSetInput == NULL) {
34048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupSetInput");
34148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
34248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
34348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute");
34448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.ScriptGroupExecute == NULL) {
34548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.ScriptGroupExecute");
34648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
34748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
34848d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend");
34948d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationIoSend == NULL) {
35048d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationIoSend");
35148d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
35248d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
35348d2eae90f08dc33754a9d280337249690a954d6Miao Wang    dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive");
35448d2eae90f08dc33754a9d280337249690a954d6Miao Wang    if (dispatchTab.AllocationIoReceive == NULL) {
35548d2eae90f08dc33754a9d280337249690a954d6Miao Wang        LOG_API("Couldn't initialize dispatchTab.AllocationIoReceive");
35648d2eae90f08dc33754a9d280337249690a954d6Miao Wang        return false;
35748d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
3580245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang    // API_21 functions
3590245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang    if (device_api >= 21) {
3600245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang        dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer");
3610245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang        if (dispatchTab.AllocationGetPointer == NULL) {
3620245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang            LOG_API("Couldn't initialize dispatchTab.AllocationGetPointer");
3630245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang            return false;
3640245c71170202d2a372916ab9bd8aafd17f619a6Miao Wang        }
36548d2eae90f08dc33754a9d280337249690a954d6Miao Wang    }
3668a6a71757f64f02058a50778c75033546a79f2b5Miao Wang    // API_23 functions
3678a6a71757f64f02058a50778c75033546a79f2b5Miao Wang    if (device_api >= 23) {
3688a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        //ScriptGroup V2 functions
3698a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        dispatchTab.ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate");
3708a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        if (dispatchTab.ScriptInvokeIDCreate == NULL) {
3718a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            LOG_API("Couldn't initialize dispatchTab.ScriptInvokeIDCreate");
3728a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            return false;
3738a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        }
3748a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        dispatchTab.ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate");
3758a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        if (dispatchTab.ClosureCreate == NULL) {
3768a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            LOG_API("Couldn't initialize dispatchTab.ClosureCreate");
3778a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            return false;
3788a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        }
379974ca28675268310b1abb29c6ce95b57fa079e2aMiao Wang        dispatchTab.InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate");
380974ca28675268310b1abb29c6ce95b57fa079e2aMiao Wang        if (dispatchTab.InvokeClosureCreate == NULL) {
381974ca28675268310b1abb29c6ce95b57fa079e2aMiao Wang            LOG_API("Couldn't initialize dispatchTab.InvokeClosureCreate");
382974ca28675268310b1abb29c6ce95b57fa079e2aMiao Wang            return false;
383974ca28675268310b1abb29c6ce95b57fa079e2aMiao Wang        }
3848a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        dispatchTab.ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg");
3858a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        if (dispatchTab.ClosureSetArg == NULL) {
3868a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            LOG_API("Couldn't initialize dispatchTab.ClosureSetArg");
3878a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            return false;
3888a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        }
3898a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        dispatchTab.ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal");
3908a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        if (dispatchTab.ClosureSetGlobal == NULL) {
3918a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            LOG_API("Couldn't initialize dispatchTab.ClosureSetGlobal");
3928a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            return false;
3938a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        }
3948a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        dispatchTab.ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create");
3958a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        if (dispatchTab.ScriptGroup2Create == NULL) {
3968a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            LOG_API("Couldn't initialize dispatchTab.ScriptGroup2Create");
3978a6a71757f64f02058a50778c75033546a79f2b5Miao Wang            return false;
3988a6a71757f64f02058a50778c75033546a79f2b5Miao Wang        }
399cc8cea7477352898921044483a6c803e25d02665Miao Wang        dispatchTab.AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData");
400cc8cea7477352898921044483a6c803e25d02665Miao Wang        if (dispatchTab.AllocationElementData == NULL) {
401cc8cea7477352898921044483a6c803e25d02665Miao Wang            LOG_API("Couldn't initialize dispatchTab.AllocationElementData");
402cc8cea7477352898921044483a6c803e25d02665Miao Wang            return false;
403cc8cea7477352898921044483a6c803e25d02665Miao Wang        }
404cc8cea7477352898921044483a6c803e25d02665Miao Wang        dispatchTab.AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead");
405cc8cea7477352898921044483a6c803e25d02665Miao Wang        if (dispatchTab.AllocationElementRead == NULL) {
406cc8cea7477352898921044483a6c803e25d02665Miao Wang            LOG_API("Couldn't initialize dispatchTab.AllocationElementRead");
407cc8cea7477352898921044483a6c803e25d02665Miao Wang            return false;
408cc8cea7477352898921044483a6c803e25d02665Miao Wang        }
409cc8cea7477352898921044483a6c803e25d02665Miao Wang        dispatchTab.Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead");
410cc8cea7477352898921044483a6c803e25d02665Miao Wang        if (dispatchTab.Allocation3DRead == NULL) {
411cc8cea7477352898921044483a6c803e25d02665Miao Wang            LOG_API("Couldn't initialize dispatchTab.Allocation3DRead");
412cc8cea7477352898921044483a6c803e25d02665Miao Wang            return false;
413cc8cea7477352898921044483a6c803e25d02665Miao Wang        }
414549f8a500d72edda06f1f1a4986a57aba7f66294Miao Wang        dispatchTab.ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti");
415549f8a500d72edda06f1f1a4986a57aba7f66294Miao Wang        if (dispatchTab.ScriptForEachMulti == NULL) {
416549f8a500d72edda06f1f1a4986a57aba7f66294Miao Wang            LOG_API("Couldn't initialize dispatchTab.ScriptForEachMulti");
417549f8a500d72edda06f1f1a4986a57aba7f66294Miao Wang            return false;
418549f8a500d72edda06f1f1a4986a57aba7f66294Miao Wang        }
4198a6a71757f64f02058a50778c75033546a79f2b5Miao Wang    }
4208a6a71757f64f02058a50778c75033546a79f2b5Miao Wang
42148d2eae90f08dc33754a9d280337249690a954d6Miao Wang    return true;
4228a6a71757f64f02058a50778c75033546a79f2b5Miao Wang
42348d2eae90f08dc33754a9d280337249690a954d6Miao Wang}
42448d2eae90f08dc33754a9d280337249690a954d6Miao Wang
4252bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang
4262bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangbool loadIOSuppSyms(void* handleIO, ioSuppDT& ioDispatch){
4272bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    ioDispatch.sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "AllocationSetSurface");
4282bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    if (ioDispatch.sAllocationSetSurface == NULL) {
4292bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang        LOG_API("Couldn't initialize ioDispatch.sAllocationSetSurface");
4302bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang        return false;
4312bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    }
4322bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    return true;
4332bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang}
434