rsDispatch.cpp revision 62e9af7113ca5a33e6da4608470034f691c792b9
18872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger/*
28872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Copyright (C) 2011-2012 The Android Open Source Project
38872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger *
48872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Licensed under the Apache License, Version 2.0 (the "License");
58872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * you may not use this file except in compliance with the License.
68872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * You may obtain a copy of the License at
78872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger *
88872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger *      http://www.apache.org/licenses/LICENSE-2.0
98872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger *
108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Unless required by applicable law or agreed to in writing, software
118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * distributed under the License is distributed on an "AS IS" BASIS,
128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * See the License for the specific language governing permissions and
148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * limitations under the License.
158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger */
168872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger#define LOG_TAG "libDispatch"
17c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger#include <android/log.h>
18c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger
196f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger#include "rsDispatch.h"
207de73858975fc4dbccfa1c188f6d1a12d39ce2c5Matt Sarett#include <dlfcn.h>
21c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger#include <limits.h>
22aed7f58fb05a25ce2112829e77c0eb5dd268e8a7sergeyv
23afc221499d943386256feb9db46c119ff834bf79Yuqian Li#define LOG_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "RS Dispatch", __VA_ARGS__);
24021693b967a2c5556dddd183eb0247df4079e1adStan Iliev#define REDUCE_API_LEVEL INT_MAX
258872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger
2644dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarettbool loadSymbols(void* handle, dispatchTable& dispatchTab, int device_api) {
27ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett#ifdef __LP64__
286f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger    // Function to set the native lib path for 64bit compat lib.
29849911a9c4315fc552faa38516c842b2541b1909John Reck    dispatchTab.SetNativeLibDir = (SetNativeLibDirFnPtr)dlsym(handle, "rsaContextSetNativeLibDir");
30849911a9c4315fc552faa38516c842b2541b1909John Reck    if (dispatchTab.SetNativeLibDir == NULL) {
31849911a9c4315fc552faa38516c842b2541b1909John Reck        LOG_ERR("Couldn't initialize dispatchTab.SetNativeLibDir");
326f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger        return false;
3362feb3a0b4690144a067080ab17beae160ea6320Matt Sarett    }
34afc221499d943386256feb9db46c119ff834bf79Yuqian Li#endif
35849911a9c4315fc552faa38516c842b2541b1909John Reck    dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType");
36849911a9c4315fc552faa38516c842b2541b1909John Reck    if (dispatchTab.AllocationGetType == NULL) {
37f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationGetType");
388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3960126efd7d905ca24822765c6dafac17fef278abBen Wagner    }
4060126efd7d905ca24822765c6dafac17fef278abBen Wagner    dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData");
418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.TypeGetNativeData == NULL) {
428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.TypeGetNativeData");
43f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
44f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
45c1b33d665c8caf5760f68c45c6ca0baa649b832aJohn Reck    dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData");
468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ElementGetNativeData == NULL) {
478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ElementGetNativeData");
488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
49ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    }
50ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements");
518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ElementGetSubElements == NULL) {
528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ElementGetSubElements");
53f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
54f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
55ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate");
56ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    if (dispatchTab.DeviceCreate == NULL) {
57ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett        LOG_ERR("Couldn't initialize dispatchTab.DeviceCreate");
58ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett        return false;
59ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    }
60f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy");
61c1b33d665c8caf5760f68c45c6ca0baa649b832aJohn Reck    if (dispatchTab.DeviceDestroy == NULL) {
628242656f495847c50c9ceaea92839dce78218a75Romain Guy        LOG_ERR("Couldn't initialize dispatchTab.DeviceDestroy");
63ca9b703b8862b4b0a9c6134a0b3e0d1a89a9ae64Matt Sarett        return false;
64ca9b703b8862b4b0a9c6134a0b3e0d1a89a9ae64Matt Sarett    }
658242656f495847c50c9ceaea92839dce78218a75Romain Guy    dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig");
668242656f495847c50c9ceaea92839dce78218a75Romain Guy    if (dispatchTab.DeviceSetConfig == NULL) {
67ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett        LOG_ERR("Couldn't initialize dispatchTab.DeviceSetConfig");
688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
70021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");;
71021693b967a2c5556dddd183eb0247df4079e1adStan Iliev    if (dispatchTab.ContextCreate == NULL) {
72c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextCreate");
736acfe16b5650446dbdcce3bd779b52fb6533a41eMike Reed        return false;
746acfe16b5650446dbdcce3bd779b52fb6533a41eMike Reed    }
756acfe16b5650446dbdcce3bd779b52fb6533a41eMike Reed    dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");;
766acfe16b5650446dbdcce3bd779b52fb6533a41eMike Reed    if (dispatchTab.GetName == NULL) {
77c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.GetName");
78c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger        return false;
79c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger    }
80c190813b938ecf28d9e76b07098e9637ced8808eDerek Sollenberger    dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy");
818872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ContextDestroy == NULL) {
828872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextDestroy");
838872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
848872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
85c1b33d665c8caf5760f68c45c6ca0baa649b832aJohn Reck    dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage");
868242656f495847c50c9ceaea92839dce78218a75Romain Guy    if (dispatchTab.ContextGetMessage == NULL) {
87ca9b703b8862b4b0a9c6134a0b3e0d1a89a9ae64Matt Sarett        LOG_ERR("Couldn't initialize dispatchTab.ContextGetMessage");
88ca9b703b8862b4b0a9c6134a0b3e0d1a89a9ae64Matt Sarett        return false;
898242656f495847c50c9ceaea92839dce78218a75Romain Guy    }
908242656f495847c50c9ceaea92839dce78218a75Romain Guy    dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage");
914f641d1e4586b027969052cc0ad6b65c1158e72eTony Mantler    if (dispatchTab.ContextPeekMessage == NULL) {
924f641d1e4586b027969052cc0ad6b65c1158e72eTony Mantler        LOG_ERR("Couldn't initialize dispatchTab.ContextPeekMessage");
93ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett        return false;
94ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    }
95ea70d22dc8dc5d61f075edf6d03f86f6a68169cdMatt Sarett    dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage");
964f641d1e4586b027969052cc0ad6b65c1158e72eTony Mantler    if (dispatchTab.ContextSendMessage == NULL) {
978872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextSendMessage");
98f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1008872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient");
1018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ContextInitToClient == NULL) {
1028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextInitToClient");
1038872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1048872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1058872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient");
106f35b989d26bb98900f6c5fa2e586326b30b6e161Leon Scroggins III    if (dispatchTab.ContextDeinitToClient == NULL) {
1078872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextDeinitToClient");
1088872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1098872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
110f35b989d26bb98900f6c5fa2e586326b30b6e161Leon Scroggins III    dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate");
1118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.TypeCreate == NULL) {
1128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.TypeCreate");
1138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
114f35b989d26bb98900f6c5fa2e586326b30b6e161Leon Scroggins III    }
1158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped");
1168872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.AllocationCreateTyped == NULL) {
1178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateTyped");
1188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1198872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1208872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap");
1218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.AllocationCreateFromBitmap == NULL) {
1228872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateFromBitmap");
1238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1248872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
125eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap");
1268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.AllocationCubeCreateFromBitmap == NULL) {
1278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap");
1288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface");
1315e27140f48a1ec0ae3890dca84bfa91bd32ecb3bFlorin Malita    if (dispatchTab.AllocationGetSurface == NULL) {
1325e27140f48a1ec0ae3890dca84bfa91bd32ecb3bFlorin Malita        LOG_ERR("Couldn't initialize dispatchTab.AllocationGetSurface");
1335e27140f48a1ec0ae3890dca84bfa91bd32ecb3bFlorin Malita        return false;
1345e27140f48a1ec0ae3890dca84bfa91bd32ecb3bFlorin Malita    }
1358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface");
136f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.AllocationSetSurface == NULL) {
137f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationSetSurface");
1388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish");
1418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ContextFinish == NULL) {
1428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextFinish");
143eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
144eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    }
1458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump");
1468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ContextDump == NULL) {
1478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextDump");
1488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1508872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority");
151f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ContextSetPriority == NULL) {
1528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ContextSetPriority");
1538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
154f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
1558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName");
1568872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.AssignName == NULL) {
1578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AssignName");
1588872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
160f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy");
161f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ObjDestroy == NULL) {
1628872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ObjDestroy");
1638872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1658872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate");
1668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ElementCreate == NULL) {
1678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ElementCreate");
1688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
1708872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2");
171eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    if (dispatchTab.ElementCreate2 == NULL) {
172eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        LOG_ERR("Couldn't initialize dispatchTab.ElementCreate2");
173eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
17483427ff2224c89cc1a590ea609206c95c8ee039eYuqian Li    }
17583427ff2224c89cc1a590ea609206c95c8ee039eYuqian Li    dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap");
17683427ff2224c89cc1a590ea609206c95c8ee039eYuqian Li    if (dispatchTab.AllocationCopyToBitmap == NULL) {
17783427ff2224c89cc1a590ea609206c95c8ee039eYuqian Li        LOG_ERR("Couldn't initialize dispatchTab.AllocationCopyToBitmap");
178eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
179eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    }
180eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData");
181eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    if (dispatchTab.Allocation1DData == NULL) {
182eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        LOG_ERR("Couldn't initialize dispatchTab.Allocation1DData");
183eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
184eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    }
185eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData");
1868872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.Allocation1DElementData == NULL) {
187eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        LOG_ERR("Couldn't initialize dispatchTab.Allocation1DElementData");
188eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
189b8201195dfb2bae05faaf91b9b3d065e2f199929Derek Sollenberger    }
190eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData");
19168885e38b86405b333e3f8fd4ff0a104889147c4Stan Iliev    if (dispatchTab.Allocation2DData == NULL) {
1928872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.Allocation2DData");
1938872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
1948872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
195eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData");
196eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    if (dispatchTab.Allocation3DData == NULL) {
197fd92ee4b731bee39f8b100cd138fb491de9d66eeYuqian Li        LOG_ERR("Couldn't initialize dispatchTab.Allocation3DData");
198fd92ee4b731bee39f8b100cd138fb491de9d66eeYuqian Li        return false;
199fd92ee4b731bee39f8b100cd138fb491de9d66eeYuqian Li    }
200eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps");
201fd92ee4b731bee39f8b100cd138fb491de9d66eeYuqian Li    if (dispatchTab.AllocationGenerateMipmaps == NULL) {
2028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationGenerateMipmaps");
2038872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
204f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
205f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead");
2066e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed    if (dispatchTab.AllocationRead == NULL) {
207f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationRead");
2086e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed        return false;
209f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
2106e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed    dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead");
211f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.Allocation1DRead == NULL) {
212f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.Allocation1DRead");
213f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
214f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
215f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead");
216f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.Allocation2DRead == NULL) {
217f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.Allocation2DRead");
218f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
219f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
220f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll");
221f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.AllocationSyncAll == NULL) {
222f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationSyncAll");
223f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
224f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
225f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D");
226f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.AllocationResize1D == NULL) {
227f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationResize1D");
228f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
229f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
230f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange");
231f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.AllocationCopy2DRange == NULL) {
232f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy2DRange");
233f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
234f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
2356e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed    dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange");
2366e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed    if (dispatchTab.AllocationCopy3DRange == NULL) {
2376e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed        LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy3DRange");
238f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
239f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
240f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate");
241f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.SamplerCreate == NULL) {
242f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.SamplerCreate");
243f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
244f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
245f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation");
246f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptBindAllocation == NULL) {
247f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptBindAllocation");
248f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
249f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
250f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone");
251f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptSetTimeZone == NULL) {
252f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetTimeZone");
253f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
2548872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
2558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke");
2568872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptInvoke == NULL) {
2578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptInvoke");
258eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
2598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
260eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV");
2618872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptInvokeV == NULL) {
2628872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeV");
263eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita        return false;
2648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
265eecff56fed5dd5206acfbc5007b4912081b36d3bFlorin Malita    dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach");
2668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptForEach == NULL) {
2678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptForEach");
2688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
2698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
270f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI");
271d1cbc1608906302130158acc4c72c82c89b49e10Ben Wagner    if (dispatchTab.ScriptSetVarI == NULL) {
2728872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarI");
2738872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
2748872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
2755e27140f48a1ec0ae3890dca84bfa91bd32ecb3bFlorin Malita    dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj");
2768872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptSetVarObj == NULL) {
277f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarObj");
2788872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
2798872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
280f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ");
2816e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed    if (dispatchTab.ScriptSetVarJ == NULL) {
282f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarJ");
283f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
284f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
285f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF");
286f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptSetVarF == NULL) {
2878872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarF");
2888872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
2898872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
290f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD");
291f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptSetVarD == NULL) {
292f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarD");
293f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
294f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
2958872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV");
296f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptSetVarV == NULL) {
297f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarV");
2988872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
299f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
3006acfe16b5650446dbdcce3bd779b52fb6533a41eMike Reed    dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV");
3018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptGetVarV == NULL) {
3028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptGetVarV");
303f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
304f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
305f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE");
306f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptSetVarVE == NULL) {
307f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarVE");
308f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        return false;
309f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    }
310f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate");
311f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev    if (dispatchTab.ScriptCCreate == NULL) {
3128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptCCreate");
3138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate");
3168872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptIntrinsicCreate == NULL) {
3178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptIntrinsicCreate");
3188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3198872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3208872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate");
3218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptKernelIDCreate == NULL) {
3228872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptKernelIDCreate");
3238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3248872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3258872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate");
3268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptFieldIDCreate == NULL) {
3278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptFieldIDCreate");
3288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate");
3318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptGroupCreate == NULL) {
3328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupCreate");
3338872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3348872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput");
3368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptGroupSetOutput == NULL) {
3378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetOutput");
3388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput");
3418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptGroupSetInput == NULL) {
3428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetInput");
3438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3448872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute");
3468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.ScriptGroupExecute == NULL) {
3478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupExecute");
3488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3508872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend");
3518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (dispatchTab.AllocationIoSend == NULL) {
3528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationIoSend");
3538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3548872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive");
3565e4389823191aafff7422561f134dbdb391e0a2dMike Reed    if (dispatchTab.AllocationIoReceive == NULL) {
3578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize dispatchTab.AllocationIoReceive");
3588872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
3598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3608872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    // API_21 functions
3618872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (device_api >= 21) {
3628872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer");
3638872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.AllocationGetPointer == NULL) {
3648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.AllocationGetPointer");
3658872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
3668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
3678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
3688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    // API_23 functions
3698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    if (device_api >= 23) {
3708872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        // ScriptGroup V2 functions
3718872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate");
3728872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.ScriptInvokeIDCreate == NULL) {
3738872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeIDCreate");
3748872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
3758872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
3768872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate");
3778872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.ClosureCreate == NULL) {
3788872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.ClosureCreate");
3798872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
3808872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
3818872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate");
3828872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.InvokeClosureCreate == NULL) {
3838872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.InvokeClosureCreate");
3848872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
3856e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed        }
3868872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg");
387f50806afb8982acbab4510a8d04bbcf13a2bcd9eStan Iliev        if (dispatchTab.ClosureSetArg == NULL) {
3888872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.ClosureSetArg");
3895ec6a2878b2ad933c5da6fe2341c854155acc24cChris Craik            return false;
3908872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
3918872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal");
3926e49c9f007c879f05b035c40c0ba543c00f9d0d0Mike Reed        if (dispatchTab.ClosureSetGlobal == NULL) {
393f7d98f436cf1351cb479e0abd6af7056553a6fa9Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.ClosureSetGlobal");
394f7d98f436cf1351cb479e0abd6af7056553a6fa9Derek Sollenberger            return false;
3955ec6a2878b2ad933c5da6fe2341c854155acc24cChris Craik        }
3968872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create");
3978872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.ScriptGroup2Create == NULL) {
3988872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.ScriptGroup2Create");
3998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
4008872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
4018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData");
402acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenberger        if (dispatchTab.AllocationElementData == NULL) {
403acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.AllocationElementData");
404acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenberger            return false;
405acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenberger        }
4068872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        dispatchTab.AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead");
4078872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        if (dispatchTab.AllocationElementRead == NULL) {
4088872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            LOG_ERR("Couldn't initialize dispatchTab.AllocationElementRead");
4098872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger            return false;
4108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        }
41144dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        dispatchTab.Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead");
41244dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        if (dispatchTab.Allocation3DRead == NULL) {
41344dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            LOG_ERR("Couldn't initialize dispatchTab.Allocation3DRead");
41444dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            return false;
41544dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        }
41644dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        dispatchTab.ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti");
41744dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        if (dispatchTab.ScriptForEachMulti == NULL) {
41844dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            LOG_ERR("Couldn't initialize dispatchTab.ScriptForEachMulti");
41944dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            return false;
42044dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        }
42144dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett    }
42244dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett    // TODO: Update the API level when reduce is added.
42344dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett    if (device_api >= REDUCE_API_LEVEL) {
42444dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        dispatchTab.ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce");
42544dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        if (dispatchTab.ScriptReduce == nullptr) {
42644dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            LOG_ERR("Couldn't initialize dispatchTab.ScriptReduce");
42744dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett            return false;
42844dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett        }
42944dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett    }
43044dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett
43144dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett    return true;
43244dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett
43344dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett}
43444dc270830758d5b0f5b099e7c0e308bdf027dfbMatt Sarett
4358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger
4368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerbool loadIOSuppSyms(void* handleIO, ioSuppDT& ioDispatch){
4378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    ioDispatch.sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "AllocationSetSurface");
438260ab726486317496bc12a57d599ea96dcde3284Mike Reed    if (ioDispatch.sAllocationSetSurface == NULL) {
4398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        LOG_ERR("Couldn't initialize ioDispatch.sAllocationSetSurface");
4408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger        return false;
4418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger    }
442acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenberger    return true;
4438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger}
4448872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger