rsCpuExecutable.h revision 6c1876bbef1b2c89975dce91230a168bd2d2ce4c
12abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni/* 22abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * Copyright (C) 2015 The Android Open Source Project 32abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * 42abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 52abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * you may not use this file except in compliance with the License. 62abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * You may obtain a copy of the License at 72abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * 82abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * http://www.apache.org/licenses/LICENSE-2.0 92abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * 102abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * Unless required by applicable law or agreed to in writing, software 112abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 122abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * See the License for the specific language governing permissions and 142abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni * limitations under the License. 152abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni */ 162abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 172abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#ifndef ANDROID_RENDERSCRIPT_EXECUTABLE_H 182abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#define ANDROID_RENDERSCRIPT_EXECUTABLE_H 192abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 202abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#include <stdlib.h> 212abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 222abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#include "rsCpuScript.h" 232abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 242abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ninamespace android { 252abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ninamespace renderscript { 262abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 272abfcc6d129fe3defddef4540aa95cc445c03a7aYang Niclass Context; 282abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 292abfcc6d129fe3defddef4540aa95cc445c03a7aYang Niclass SharedLibraryUtils { 302abfcc6d129fe3defddef4540aa95cc445c03a7aYang Nipublic: 312abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#ifndef RS_COMPATIBILITY_LIB 324c368af7e705f0bcb77fa99495b2e33ef20d2699Stephen Hines static bool createSharedLibrary(const char* driverName, 334c368af7e705f0bcb77fa99495b2e33ef20d2699Stephen Hines const char* cacheDir, 344c368af7e705f0bcb77fa99495b2e33ef20d2699Stephen Hines const char* resName); 352abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#endif 362abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 372abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // Load the shared library referred to by cacheDir and resName. If we have 382abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // already loaded this library, we instead create a new copy (in the 392abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // cache dir) and then load that. We then immediately destroy the copy. 402abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // This is required behavior to implement script instancing for the support 412abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // library, since shared objects are loaded and de-duped by name only. 422abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 432abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // For 64bit RS Support Lib, the shared lib path cannot be constructed from 442abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // cacheDir, so nativeLibDir is needed to load shared libs. 452abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni static void* loadSharedLibrary(const char *cacheDir, const char *resName, 461efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni const char *nativeLibDir = nullptr, 471efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni bool *alreadyLoaded = nullptr); 481efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni 491efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni // Create a len length string containing random characters from [A-Za-z0-9]. 501efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni static String8 getRandomString(size_t len); 512abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 522abfcc6d129fe3defddef4540aa95cc445c03a7aYang Niprivate: 532abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // Attempt to load the shared library from origName, but then fall back to 542abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // creating a copy of the shared library if necessary (to ensure instancing). 552abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni // This function returns the dlopen()-ed handle if successful. 562abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni static void *loadSOHelper(const char *origName, const char *cacheDir, 571efae29f4bbe6c165caf6dfc4b89cf8a5f8c469bYang Ni const char *resName, bool* alreadyLoaded = nullptr); 582abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 592abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni static const char* LD_EXE_PATH; 602abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni static const char* RS_CACHE_DIR; 612abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni}; 622abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 632abfcc6d129fe3defddef4540aa95cc445c03a7aYang Niclass ScriptExecutable { 642abfcc6d129fe3defddef4540aa95cc445c03a7aYang Nipublic: 652abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni ScriptExecutable(Context* RSContext, 66062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void** fieldAddress, bool* fieldIsObject, 67062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni const char* const * fieldName, size_t varCount, 682abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni InvokeFunc_t* invokeFunctions, size_t funcCount, 692abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni ForEachFunc_t* forEachFunctions, uint32_t* forEachSignatures, 702abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t forEachCount, 7114ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala ReduceFunc_t* reduceFunctions, size_t reduceCount, 726c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross ReduceNewDescription *reduceNewDescriptions, size_t reduceNewCount, 73062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni const char** pragmaKeys, const char** pragmaValues, 742abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t pragmaCount, 758409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const char **globalNames, const void **globalAddresses, 765aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines const size_t *globalSizes, 775aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines const uint32_t *globalProperties, size_t globalEntries, 78cb17015fed6b11a5028f31cc804a3847e379945dYang Ni bool isThreadable, uint32_t buildChecksum) : 792abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni mFieldAddress(fieldAddress), mFieldIsObject(fieldIsObject), 80062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mFieldName(fieldName), mExportedVarCount(varCount), 81062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mInvokeFunctions(invokeFunctions), mFuncCount(funcCount), 82062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mForEachFunctions(forEachFunctions), mForEachSignatures(forEachSignatures), 83062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mForEachCount(forEachCount), 8414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala mReduceFunctions(reduceFunctions), mReduceCount(reduceCount), 856c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross mReduceNewDescriptions(reduceNewDescriptions), mReduceNewCount(reduceNewCount), 86062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mPragmaKeys(pragmaKeys), mPragmaValues(pragmaValues), 878409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines mPragmaCount(pragmaCount), mGlobalNames(globalNames), 888409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines mGlobalAddresses(globalAddresses), mGlobalSizes(globalSizes), 895aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines mGlobalProperties(globalProperties), mGlobalEntries(globalEntries), 905aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines mIsThreadable(isThreadable), mBuildChecksum(buildChecksum), 915aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines mRS(RSContext) { 922abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 932abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 942abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni ~ScriptExecutable() { 952abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni for (size_t i = 0; i < mExportedVarCount; ++i) { 962abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni if (mFieldIsObject[i]) { 972abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni if (mFieldAddress[i] != nullptr) { 982abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni rs_object_base *obj_addr = 992abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni reinterpret_cast<rs_object_base *>(mFieldAddress[i]); 1002abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni rsrClearObject(mRS, obj_addr); 1012abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 1022abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 1032abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 1042abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 1052abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni for (size_t i = 0; i < mPragmaCount; ++i) { 1062abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete [] mPragmaKeys[i]; 1072abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete [] mPragmaValues[i]; 1082abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 1092abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mPragmaValues; 1102abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mPragmaKeys; 111062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 11214ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala delete[] mReduceFunctions; 11314ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala 1146c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross delete[] mReduceNewDescriptions; 1156c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross 1162abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mForEachSignatures; 1172abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mForEachFunctions; 118062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 1192abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mInvokeFunctions; 120062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 121062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni for (size_t i = 0; i < mExportedVarCount; i++) { 122062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni delete[] mFieldName[i]; 123062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni } 124062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni delete[] mFieldName; 1252abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mFieldIsObject; 1262abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni delete[] mFieldAddress; 1272abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni } 1282abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 129cb17015fed6b11a5028f31cc804a3847e379945dYang Ni // Create an ScriptExecutable object from a shared object. 130cb17015fed6b11a5028f31cc804a3847e379945dYang Ni // If expectedChecksum is not zero, it will be compared to the checksum 131cb17015fed6b11a5028f31cc804a3847e379945dYang Ni // embedded in the shared object. A mismatch will cause a failure. 132cb17015fed6b11a5028f31cc804a3847e379945dYang Ni // If succeeded, returns the new object. Otherwise, returns nullptr. 1332abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni static ScriptExecutable* 134cb17015fed6b11a5028f31cc804a3847e379945dYang Ni createFromSharedObject(Context* RSContext, void* sharedObj, 135cb17015fed6b11a5028f31cc804a3847e379945dYang Ni uint32_t expectedChecksum = 0); 1362abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 1372abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t getExportedVariableCount() const { return mExportedVarCount; } 1382abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t getExportedFunctionCount() const { return mFuncCount; } 1392abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t getExportedForEachCount() const { return mForEachCount; } 14014ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala size_t getExportedReduceCount() const { return mReduceCount; } 1416c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross size_t getExportedReduceNewCount() const { return mReduceNewCount; } 1422abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t getPragmaCount() const { return mPragmaCount; } 1432abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 1442abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni void* getFieldAddress(int slot) const { return mFieldAddress[slot]; } 145062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void* getFieldAddress(const char* name) const; 1462abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni bool getFieldIsObject(int slot) const { return mFieldIsObject[slot]; } 147062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni const char* getFieldName(int slot) const { return mFieldName[slot]; } 148062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 1492abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni InvokeFunc_t getInvokeFunction(int slot) const { return mInvokeFunctions[slot]; } 150062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 1512abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni ForEachFunc_t getForEachFunction(int slot) const { return mForEachFunctions[slot]; } 1522abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni uint32_t getForEachSignature(int slot) const { return mForEachSignatures[slot]; } 1532abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 15414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala ReduceFunc_t getReduceFunction(int slot) const { return mReduceFunctions[slot]; } 15514ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala 1566c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross const ReduceNewDescription* getReduceNewDescription(int slot) const { 1576c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross return &mReduceNewDescriptions[slot]; 1586c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross } 1596c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross 1602abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni const char ** getPragmaKeys() const { return mPragmaKeys; } 1612abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni const char ** getPragmaValues() const { return mPragmaValues; } 1622abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 1638409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const char* getGlobalName(int i) const { 1648409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines if (i < mGlobalEntries) { 1658409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return mGlobalNames[i]; 1668409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } else { 1678409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return nullptr; 1688409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1698409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1708409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const void* getGlobalAddress(int i) const { 1718409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines if (i < mGlobalEntries) { 1728409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return mGlobalAddresses[i]; 1738409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } else { 1748409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return nullptr; 1758409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1768409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1778409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines size_t getGlobalSize(int i) const { 1788409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines if (i < mGlobalEntries) { 1798409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return mGlobalSizes[i]; 1808409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } else { 1818409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines return 0; 1828409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1838409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines } 1845aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines uint32_t getGlobalProperties(int i) const { 1855aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines if (i < mGlobalEntries) { 1865aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines return mGlobalProperties[i]; 1875aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines } else { 1885aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines return 0; 1895aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines } 1905aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines } 1918409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines int getGlobalEntries() const { return mGlobalEntries; } 1928409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines 1932abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni bool getThreadable() const { return mIsThreadable; } 1942abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 195cb17015fed6b11a5028f31cc804a3847e379945dYang Ni uint32_t getBuildChecksum() const { return mBuildChecksum; } 196aa6757ffc1b23d771566439c3179fdbc1e5ba569Pirama Arumuga Nainar 1978409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines bool dumpGlobalInfo() const; 1988409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines 1992abfcc6d129fe3defddef4540aa95cc445c03a7aYang Niprivate: 2002abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni void** mFieldAddress; 2012abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni bool* mFieldIsObject; 202062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni const char* const * mFieldName; 2032abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t mExportedVarCount; 2042abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2052abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni InvokeFunc_t* mInvokeFunctions; 2062abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t mFuncCount; 2072abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2082abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni ForEachFunc_t* mForEachFunctions; 2092abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni uint32_t* mForEachSignatures; 2102abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t mForEachCount; 2112abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 21214ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala ReduceFunc_t* mReduceFunctions; 21314ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala size_t mReduceCount; 21414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala 2156c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross ReduceNewDescription* mReduceNewDescriptions; 2166c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross size_t mReduceNewCount; 2176c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross 2182abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni const char ** mPragmaKeys; 2192abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni const char ** mPragmaValues; 2202abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni size_t mPragmaCount; 2212abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2228409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const char ** mGlobalNames; 2238409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const void ** mGlobalAddresses; 2248409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines const size_t * mGlobalSizes; 2255aa018cc36e589b07674957714d27ae3d1fa1c4eStephen Hines const uint32_t * mGlobalProperties; 2268409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines int mGlobalEntries; 2278409d6414dd4a42aa59779fcfe9fce18648cb135Stephen Hines 2282abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni bool mIsThreadable; 229cb17015fed6b11a5028f31cc804a3847e379945dYang Ni uint32_t mBuildChecksum; 2302abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2312abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni Context* mRS; 2322abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni}; 2332abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2342abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni} // namespace renderscript 2352abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni} // namespace android 2362abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni 2372abfcc6d129fe3defddef4540aa95cc445c03a7aYang Ni#endif // ANDROID_RENDERSCRIPT_EXECUTABLE_H 238