rsDispatch.cpp revision ae2ec3febedfc29376b9104413fb4042028f1265
16ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets/* 26ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * Copyright (C) 2011-2012 The Android Open Source Project 36ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * 46ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * Licensed under the Apache License, Version 2.0 (the "License"); 56ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * you may not use this file except in compliance with the License. 66ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * You may obtain a copy of the License at 76ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * 86ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * http://www.apache.org/licenses/LICENSE-2.0 96ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * 106ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * Unless required by applicable law or agreed to in writing, software 116ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * distributed under the License is distributed on an "AS IS" BASIS, 126ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * See the License for the specific language governing permissions and 146ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets * limitations under the License. 156ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets */ 166ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#define LOG_TAG "libDispatch" 176ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#include <android/log.h> 186ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 196ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#include "rsDispatch.h" 206ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#include <dlfcn.h> 216ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#include <limits.h> 226ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 236ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#define LOG_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "RS Dispatch", __VA_ARGS__); 246ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#define REDUCE_API_LEVEL 24 256ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 266ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinetsbool loadSymbols(void* handle, dispatchTable& dispatchTab, int targetApiLevel) { 276ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#ifdef __LP64__ 286ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets // Function to set the native lib path for 64bit compat lib. 296ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.SetNativeLibDir = (SetNativeLibDirFnPtr)dlsym(handle, "rsaContextSetNativeLibDir"); 306ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.SetNativeLibDir == nullptr) { 316ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.SetNativeLibDir"); 326ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 336ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 346ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets#endif 356ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 366ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation1DData = (Allocation1DDataFnPtr)dlsym(handle, "rsAllocation1DData"); 376ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation1DElementData = (Allocation1DElementDataFnPtr)dlsym(handle, "rsAllocation1DElementData"); 386ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation1DRead = (Allocation1DReadFnPtr)dlsym(handle, "rsAllocation1DRead"); 396ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation2DData = (Allocation2DDataFnPtr)dlsym(handle, "rsAllocation2DData"); 406ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation2DRead = (Allocation2DReadFnPtr)dlsym(handle, "rsAllocation2DRead"); 416ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation3DData = (Allocation3DDataFnPtr)dlsym(handle, "rsAllocation3DData"); 426ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.Allocation3DRead = (Allocation3DReadFnPtr)dlsym(handle, "rsAllocation3DRead"); 436ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCopy2DRange = (AllocationCopy2DRangeFnPtr)dlsym(handle, "rsAllocationCopy2DRange"); 446ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCopy3DRange = (AllocationCopy3DRangeFnPtr)dlsym(handle, "rsAllocationCopy3DRange"); 456ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCopyToBitmap = (AllocationCopyToBitmapFnPtr)dlsym(handle, "rsAllocationCopyToBitmap"); 466ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCreateFromBitmap = (AllocationCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCreateFromBitmap"); 476ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCreateTyped = (AllocationCreateTypedFnPtr)dlsym(handle, "rsAllocationCreateTyped"); 486ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationCubeCreateFromBitmap = (AllocationCubeCreateFromBitmapFnPtr)dlsym(handle, "rsAllocationCubeCreateFromBitmap"); 496ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationElementData = (AllocationElementDataFnPtr)dlsym(handle, "rsAllocationElementData"); 506ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationElementRead = (AllocationElementReadFnPtr)dlsym(handle, "rsAllocationElementRead"); 516ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationGenerateMipmaps = (AllocationGenerateMipmapsFnPtr)dlsym(handle, "rsAllocationGenerateMipmaps"); 526ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationGetPointer = (AllocationGetPointerFnPtr)dlsym(handle, "rsAllocationGetPointer"); 536ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationGetSurface = (AllocationGetSurfaceFnPtr)dlsym(handle, "rsAllocationGetSurface"); 546ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationGetType = (AllocationGetTypeFnPtr)dlsym(handle, "rsaAllocationGetType"); 556ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationIoReceive = (AllocationIoReceiveFnPtr)dlsym(handle, "rsAllocationIoReceive"); 566ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationIoSend = (AllocationIoSendFnPtr)dlsym(handle, "rsAllocationIoSend"); 576ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationRead = (AllocationReadFnPtr)dlsym(handle, "rsAllocationRead"); 586ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationResize1D = (AllocationResize1DFnPtr)dlsym(handle, "rsAllocationResize1D"); 596ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationSetSurface = (AllocationSetSurfaceFnPtr)dlsym(handle, "rsAllocationSetSurface"); 606ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AllocationSyncAll = (AllocationSyncAllFnPtr)dlsym(handle, "rsAllocationSyncAll"); 616ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.AssignName = (AssignNameFnPtr)dlsym(handle, "rsAssignName"); 626ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ClosureCreate = (ClosureCreateFnPtr)dlsym(handle, "rsClosureCreate"); 636ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ClosureSetArg = (ClosureSetArgFnPtr)dlsym(handle, "rsClosureSetArg"); 646ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ClosureSetGlobal = (ClosureSetGlobalFnPtr)dlsym(handle, "rsClosureSetGlobal"); 656ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextCreate = (ContextCreateFnPtr)dlsym(handle, "rsContextCreate");; 666ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextDeinitToClient = (ContextDeinitToClientFnPtr)dlsym(handle, "rsContextDeinitToClient"); 676ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextDestroy = (ContextDestroyFnPtr)dlsym(handle, "rsContextDestroy"); 686ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextDump = (ContextDumpFnPtr)dlsym(handle, "rsContextDump"); 696ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextFinish = (ContextFinishFnPtr)dlsym(handle, "rsContextFinish"); 706ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextGetMessage = (ContextGetMessageFnPtr)dlsym(handle, "rsContextGetMessage"); 716ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextInitToClient = (ContextInitToClientFnPtr)dlsym(handle, "rsContextInitToClient"); 726ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextPeekMessage = (ContextPeekMessageFnPtr)dlsym(handle, "rsContextPeekMessage"); 736ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextSendMessage = (ContextSendMessageFnPtr)dlsym(handle, "rsContextSendMessage"); 746ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ContextSetPriority = (ContextSetPriorityFnPtr)dlsym(handle, "rsContextSetPriority"); 756ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.DeviceCreate = (DeviceCreateFnPtr)dlsym(handle, "rsDeviceCreate"); 766ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.DeviceDestroy = (DeviceDestroyFnPtr)dlsym(handle, "rsDeviceDestroy"); 776ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.DeviceSetConfig = (DeviceSetConfigFnPtr)dlsym(handle, "rsDeviceSetConfig"); 786ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ElementCreate = (ElementCreateFnPtr)dlsym(handle, "rsElementCreate"); 796ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ElementCreate2 = (ElementCreate2FnPtr)dlsym(handle, "rsElementCreate2"); 806ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ElementGetNativeData = (ElementGetNativeDataFnPtr)dlsym(handle, "rsaElementGetNativeData"); 816ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ElementGetSubElements = (ElementGetSubElementsFnPtr)dlsym(handle, "rsaElementGetSubElements"); 826ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.GetName = (GetNameFnPtr)dlsym(handle, "rsaGetName");; 836ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.InvokeClosureCreate = (InvokeClosureCreateFnPtr)dlsym(handle, "rsInvokeClosureCreate"); 846ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ObjDestroy = (ObjDestroyFnPtr)dlsym(handle, "rsObjDestroy"); 856ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.SamplerCreate = (SamplerCreateFnPtr)dlsym(handle, "rsSamplerCreate"); 866ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptBindAllocation = (ScriptBindAllocationFnPtr)dlsym(handle, "rsScriptBindAllocation"); 876ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptCCreate = (ScriptCCreateFnPtr)dlsym(handle, "rsScriptCCreate"); 886ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptFieldIDCreate = (ScriptFieldIDCreateFnPtr)dlsym(handle, "rsScriptFieldIDCreate"); 896ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptForEach = (ScriptForEachFnPtr)dlsym(handle, "rsScriptForEach"); 906ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptForEachMulti = (ScriptForEachMultiFnPtr)dlsym(handle, "rsScriptForEachMulti"); 916ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGetVarV = (ScriptGetVarVFnPtr)dlsym(handle, "rsScriptGetVarV"); 926ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGroup2Create = (ScriptGroup2CreateFnPtr)dlsym(handle, "rsScriptGroup2Create"); 936ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGroupCreate = (ScriptGroupCreateFnPtr)dlsym(handle, "rsScriptGroupCreate"); 946ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGroupExecute = (ScriptGroupExecuteFnPtr)dlsym(handle, "rsScriptGroupExecute"); 956ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGroupSetInput = (ScriptGroupSetInputFnPtr)dlsym(handle, "rsScriptGroupSetInput"); 966ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptGroupSetOutput = (ScriptGroupSetOutputFnPtr)dlsym(handle, "rsScriptGroupSetOutput"); 976ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptIntrinsicCreate = (ScriptIntrinsicCreateFnPtr)dlsym(handle, "rsScriptIntrinsicCreate"); 986ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptInvoke = (ScriptInvokeFnPtr)dlsym(handle, "rsScriptInvoke"); 996ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptInvokeIDCreate = (ScriptInvokeIDCreateFnPtr)dlsym(handle, "rsScriptInvokeIDCreate"); 1006ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptInvokeV = (ScriptInvokeVFnPtr)dlsym(handle, "rsScriptInvokeV"); 1016ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptKernelIDCreate = (ScriptKernelIDCreateFnPtr)dlsym(handle, "rsScriptKernelIDCreate"); 1026ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptReduce = (ScriptReduceFnPtr)dlsym(handle, "rsScriptReduce"); 1036ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetTimeZone = (ScriptSetTimeZoneFnPtr)dlsym(handle, "rsScriptSetTimeZone"); 1046ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarD = (ScriptSetVarDFnPtr)dlsym(handle, "rsScriptSetVarD"); 1056ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarF = (ScriptSetVarFFnPtr)dlsym(handle, "rsScriptSetVarF"); 1066ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarI = (ScriptSetVarIFnPtr)dlsym(handle, "rsScriptSetVarI"); 1076ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarJ = (ScriptSetVarJFnPtr)dlsym(handle, "rsScriptSetVarJ"); 1086ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarObj = (ScriptSetVarObjFnPtr)dlsym(handle, "rsScriptSetVarObj"); 1096ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarV = (ScriptSetVarVFnPtr)dlsym(handle, "rsScriptSetVarV"); 1106ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.ScriptSetVarVE = (ScriptSetVarVEFnPtr)dlsym(handle, "rsScriptSetVarVE"); 1116ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.TypeCreate = (TypeCreateFnPtr)dlsym(handle, "rsTypeCreate"); 1126ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dispatchTab.TypeGetNativeData = (TypeGetNativeDataFnPtr)dlsym(handle, "rsaTypeGetNativeData"); 1136ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 1146ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets // Clear error buffer for later operations. 1156ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets dlerror(); 1166ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets 1176ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.AllocationGetType == nullptr) { 1186ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.AllocationGetType"); 1196ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1206ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1216ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.TypeGetNativeData == nullptr) { 1226ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.TypeGetNativeData"); 1236ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1246ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1256ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ElementGetNativeData == nullptr) { 1266ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ElementGetNativeData"); 1276ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1286ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1296ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ElementGetSubElements == nullptr) { 1306ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ElementGetSubElements"); 1316ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1326ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1336ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.DeviceCreate == nullptr) { 1346ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.DeviceCreate"); 1356ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1366ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1376ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.DeviceDestroy == nullptr) { 1386ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.DeviceDestroy"); 1396ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1406ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1416ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.DeviceSetConfig == nullptr) { 1426ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.DeviceSetConfig"); 1436ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1446ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1456ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextCreate == nullptr) { 1466ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextCreate"); 1476ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1486ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1496ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.GetName == nullptr) { 1506ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.GetName"); 1516ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1526ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1536ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextDestroy == nullptr) { 1546ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextDestroy"); 1556ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1566ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1576ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextGetMessage == nullptr) { 1586ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextGetMessage"); 1596ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1606ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1616ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextPeekMessage == nullptr) { 1626ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextPeekMessage"); 1636ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1646ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1656ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextSendMessage == nullptr) { 1666ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextSendMessage"); 1676ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1686ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1696ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextInitToClient == nullptr) { 1706ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextInitToClient"); 1716ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1726ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1736ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.ContextDeinitToClient == nullptr) { 1746ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.ContextDeinitToClient"); 1756ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1766ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1776ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.TypeCreate == nullptr) { 1786ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets LOG_ERR("Couldn't initialize dispatchTab.TypeCreate"); 1796ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets return false; 1806ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets } 1816ca8525782f16bcb4403dc692a1fefd77934aa31Sergey Vasilinets if (dispatchTab.AllocationCreateTyped == nullptr) { 182 LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateTyped"); 183 return false; 184 } 185 if (dispatchTab.AllocationCreateFromBitmap == nullptr) { 186 LOG_ERR("Couldn't initialize dispatchTab.AllocationCreateFromBitmap"); 187 return false; 188 } 189 if (dispatchTab.AllocationCubeCreateFromBitmap == nullptr) { 190 LOG_ERR("Couldn't initialize dispatchTab.AllocationCubeCreateFromBitmap"); 191 return false; 192 } 193 if (dispatchTab.AllocationGetSurface == nullptr) { 194 LOG_ERR("Couldn't initialize dispatchTab.AllocationGetSurface"); 195 return false; 196 } 197 if (dispatchTab.AllocationSetSurface == nullptr) { 198 LOG_ERR("Couldn't initialize dispatchTab.AllocationSetSurface"); 199 return false; 200 } 201 if (dispatchTab.ContextFinish == nullptr) { 202 LOG_ERR("Couldn't initialize dispatchTab.ContextFinish"); 203 return false; 204 } 205 if (dispatchTab.ContextDump == nullptr) { 206 LOG_ERR("Couldn't initialize dispatchTab.ContextDump"); 207 return false; 208 } 209 if (dispatchTab.ContextSetPriority == nullptr) { 210 LOG_ERR("Couldn't initialize dispatchTab.ContextSetPriority"); 211 return false; 212 } 213 if (dispatchTab.AssignName == nullptr) { 214 LOG_ERR("Couldn't initialize dispatchTab.AssignName"); 215 return false; 216 } 217 if (dispatchTab.ObjDestroy == nullptr) { 218 LOG_ERR("Couldn't initialize dispatchTab.ObjDestroy"); 219 return false; 220 } 221 if (dispatchTab.ElementCreate == nullptr) { 222 LOG_ERR("Couldn't initialize dispatchTab.ElementCreate"); 223 return false; 224 } 225 if (dispatchTab.ElementCreate2 == nullptr) { 226 LOG_ERR("Couldn't initialize dispatchTab.ElementCreate2"); 227 return false; 228 } 229 if (dispatchTab.AllocationCopyToBitmap == nullptr) { 230 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopyToBitmap"); 231 return false; 232 } 233 if (dispatchTab.Allocation1DData == nullptr) { 234 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DData"); 235 return false; 236 } 237 if (dispatchTab.Allocation1DElementData == nullptr) { 238 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DElementData"); 239 return false; 240 } 241 if (dispatchTab.Allocation2DData == nullptr) { 242 LOG_ERR("Couldn't initialize dispatchTab.Allocation2DData"); 243 return false; 244 } 245 if (dispatchTab.Allocation3DData == nullptr) { 246 LOG_ERR("Couldn't initialize dispatchTab.Allocation3DData"); 247 return false; 248 } 249 if (dispatchTab.AllocationGenerateMipmaps == nullptr) { 250 LOG_ERR("Couldn't initialize dispatchTab.AllocationGenerateMipmaps"); 251 return false; 252 } 253 if (dispatchTab.AllocationRead == nullptr) { 254 LOG_ERR("Couldn't initialize dispatchTab.AllocationRead"); 255 return false; 256 } 257 if (dispatchTab.Allocation1DRead == nullptr) { 258 LOG_ERR("Couldn't initialize dispatchTab.Allocation1DRead"); 259 return false; 260 } 261 if (dispatchTab.Allocation2DRead == nullptr) { 262 LOG_ERR("Couldn't initialize dispatchTab.Allocation2DRead"); 263 return false; 264 } 265 if (dispatchTab.AllocationSyncAll == nullptr) { 266 LOG_ERR("Couldn't initialize dispatchTab.AllocationSyncAll"); 267 return false; 268 } 269 if (dispatchTab.AllocationResize1D == nullptr) { 270 LOG_ERR("Couldn't initialize dispatchTab.AllocationResize1D"); 271 return false; 272 } 273 if (dispatchTab.AllocationCopy2DRange == nullptr) { 274 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy2DRange"); 275 return false; 276 } 277 if (dispatchTab.AllocationCopy3DRange == nullptr) { 278 LOG_ERR("Couldn't initialize dispatchTab.AllocationCopy3DRange"); 279 return false; 280 } 281 if (dispatchTab.SamplerCreate == nullptr) { 282 LOG_ERR("Couldn't initialize dispatchTab.SamplerCreate"); 283 return false; 284 } 285 if (dispatchTab.ScriptBindAllocation == nullptr) { 286 LOG_ERR("Couldn't initialize dispatchTab.ScriptBindAllocation"); 287 return false; 288 } 289 if (dispatchTab.ScriptSetTimeZone == nullptr) { 290 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetTimeZone"); 291 return false; 292 } 293 if (dispatchTab.ScriptInvoke == nullptr) { 294 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvoke"); 295 return false; 296 } 297 if (dispatchTab.ScriptInvokeV == nullptr) { 298 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeV"); 299 return false; 300 } 301 if (dispatchTab.ScriptForEach == nullptr) { 302 LOG_ERR("Couldn't initialize dispatchTab.ScriptForEach"); 303 return false; 304 } 305 if (dispatchTab.ScriptSetVarI == nullptr) { 306 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarI"); 307 return false; 308 } 309 if (dispatchTab.ScriptSetVarObj == nullptr) { 310 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarObj"); 311 return false; 312 } 313 if (dispatchTab.ScriptSetVarJ == nullptr) { 314 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarJ"); 315 return false; 316 } 317 if (dispatchTab.ScriptSetVarF == nullptr) { 318 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarF"); 319 return false; 320 } 321 if (dispatchTab.ScriptSetVarD == nullptr) { 322 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarD"); 323 return false; 324 } 325 if (dispatchTab.ScriptSetVarV == nullptr) { 326 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarV"); 327 return false; 328 } 329 if (dispatchTab.ScriptGetVarV == nullptr) { 330 LOG_ERR("Couldn't initialize dispatchTab.ScriptGetVarV"); 331 return false; 332 } 333 if (dispatchTab.ScriptSetVarVE == nullptr) { 334 LOG_ERR("Couldn't initialize dispatchTab.ScriptSetVarVE"); 335 return false; 336 } 337 if (dispatchTab.ScriptCCreate == nullptr) { 338 LOG_ERR("Couldn't initialize dispatchTab.ScriptCCreate"); 339 return false; 340 } 341 if (dispatchTab.ScriptIntrinsicCreate == nullptr) { 342 LOG_ERR("Couldn't initialize dispatchTab.ScriptIntrinsicCreate"); 343 return false; 344 } 345 if (dispatchTab.ScriptKernelIDCreate == nullptr) { 346 LOG_ERR("Couldn't initialize dispatchTab.ScriptKernelIDCreate"); 347 return false; 348 } 349 if (dispatchTab.ScriptFieldIDCreate == nullptr) { 350 LOG_ERR("Couldn't initialize dispatchTab.ScriptFieldIDCreate"); 351 return false; 352 } 353 if (dispatchTab.ScriptGroupCreate == nullptr) { 354 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupCreate"); 355 return false; 356 } 357 if (dispatchTab.ScriptGroupSetOutput == nullptr) { 358 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetOutput"); 359 return false; 360 } 361 if (dispatchTab.ScriptGroupSetInput == nullptr) { 362 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupSetInput"); 363 return false; 364 } 365 if (dispatchTab.ScriptGroupExecute == nullptr) { 366 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroupExecute"); 367 return false; 368 } 369 if (dispatchTab.AllocationIoSend == nullptr) { 370 LOG_ERR("Couldn't initialize dispatchTab.AllocationIoSend"); 371 return false; 372 } 373 if (dispatchTab.AllocationIoReceive == nullptr) { 374 LOG_ERR("Couldn't initialize dispatchTab.AllocationIoReceive"); 375 return false; 376 } 377 // API_21 functions 378 if (targetApiLevel >= 21) { 379 if (dispatchTab.AllocationGetPointer == nullptr) { 380 LOG_ERR("Couldn't initialize dispatchTab.AllocationGetPointer"); 381 return false; 382 } 383 } 384 // API_23 functions 385 if (targetApiLevel >= 23) { 386 // ScriptGroup V2 functions 387 if (dispatchTab.ScriptInvokeIDCreate == nullptr) { 388 LOG_ERR("Couldn't initialize dispatchTab.ScriptInvokeIDCreate"); 389 return false; 390 } 391 if (dispatchTab.ClosureCreate == nullptr) { 392 LOG_ERR("Couldn't initialize dispatchTab.ClosureCreate"); 393 return false; 394 } 395 if (dispatchTab.InvokeClosureCreate == nullptr) { 396 LOG_ERR("Couldn't initialize dispatchTab.InvokeClosureCreate"); 397 return false; 398 } 399 if (dispatchTab.ClosureSetArg == nullptr) { 400 LOG_ERR("Couldn't initialize dispatchTab.ClosureSetArg"); 401 return false; 402 } 403 if (dispatchTab.ClosureSetGlobal == nullptr) { 404 LOG_ERR("Couldn't initialize dispatchTab.ClosureSetGlobal"); 405 return false; 406 } 407 if (dispatchTab.ScriptGroup2Create == nullptr) { 408 LOG_ERR("Couldn't initialize dispatchTab.ScriptGroup2Create"); 409 return false; 410 } 411 if (dispatchTab.AllocationElementData == nullptr) { 412 LOG_ERR("Couldn't initialize dispatchTab.AllocationElementData"); 413 return false; 414 } 415 if (dispatchTab.AllocationElementRead == nullptr) { 416 LOG_ERR("Couldn't initialize dispatchTab.AllocationElementRead"); 417 return false; 418 } 419 if (dispatchTab.Allocation3DRead == nullptr) { 420 LOG_ERR("Couldn't initialize dispatchTab.Allocation3DRead"); 421 return false; 422 } 423 if (dispatchTab.ScriptForEachMulti == nullptr) { 424 LOG_ERR("Couldn't initialize dispatchTab.ScriptForEachMulti"); 425 return false; 426 } 427 } 428 429 if (targetApiLevel >= REDUCE_API_LEVEL) { 430 if (dispatchTab.ScriptReduce == nullptr) { 431 LOG_ERR("Couldn't initialize dispatchTab.ScriptReduce"); 432 return false; 433 } 434 } 435 436 return true; 437 438} 439 440 441bool loadIOSuppSyms(void* handleIO, ioSuppDT& ioDispatch){ 442 ioDispatch.sAllocationSetSurface = (sAllocationSetSurfaceFnPtr)dlsym(handleIO, "AllocationSetSurface"); 443 if (ioDispatch.sAllocationSetSurface == nullptr) { 444 LOG_ERR("Couldn't initialize ioDispatch.sAllocationSetSurface"); 445 return false; 446 } 447 return true; 448} 449