1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_SCRIPT_C_H 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_SCRIPT_C_H 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScript.h" 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "RenderScriptEnv.h" 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato#include <utils/KeyedVector.h> 25d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 26ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevichstruct ACCscript; 27ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 32ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass ScriptC : public Script 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 37c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams typedef int (*RunScript_t)(uint32_t launchIndex); 382525a815220652b37e2e390fe8c62394a6d0e574Jason Sams typedef void (*VoidFunc_t)(); 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 40a9e7a05b84470257637c97d65f6562aa832c66efJason Sams ScriptC(Context *); 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams virtual ~ScriptC(); 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 433a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams struct Program_t { 44928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams int mVersionMajor; 45928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams int mVersionMinor; 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 47c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams RunScript_t mScript; 482525a815220652b37e2e390fe8c62394a6d0e574Jason Sams VoidFunc_t mInit; 492525a815220652b37e2e390fe8c62394a6d0e574Jason Sams 502525a815220652b37e2e390fe8c62394a6d0e574Jason Sams void ** mSlotPointers[MAX_SCRIPT_BANKS]; 513a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams }; 523a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams 533a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams Program_t mProgram; 54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 55ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich ACCscript* mAccScript; 56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 57e60446b9c1a0f4f48372a36de5b01a2ddb8121e3Jason Sams virtual void setupScript(); 58b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams virtual uint32_t run(Context *, uint32_t launchID); 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 61ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevichclass ScriptCState 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ScriptCState(); 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~ScriptCState(); 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 67be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams ScriptC *mScript; 68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 6943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams ObjectBaseRef<const Type> mConstantBufferTypes[MAX_SCRIPT_BANKS]; 70fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams String8 mSlotNames[MAX_SCRIPT_BANKS]; 71334ea0c98f051b5a6b85bc616c93304651854298Jason Sams bool mSlotWritable[MAX_SCRIPT_BANKS]; 72be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams String8 mInvokableNames[MAX_SCRIPT_BANKS]; 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void clear(); 75be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams void runCompiler(Context *rsc, ScriptC *s); 7666b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams void appendVarDefines(const Context *rsc, String8 *str); 7766b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams void appendTypes(const Context *rsc, String8 *str); 7854440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams 7954440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams struct SymbolTable_t { 8054440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams const char * mName; 8154440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams void * mPtr; 82c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams const char * mRet; 83c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams const char * mParam; 8454440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams }; 8554440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams static SymbolTable_t gSyms[]; 8654440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams static const SymbolTable_t * lookupSymbol(const char *); 87764205c19420256ccc05df2a1669a7b69c5daaf9Jason Sams static void appendDecls(String8 *str); 88d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato 89d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato KeyedVector<String8,int> mInt32Defines; 90d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato KeyedVector<String8,float> mFloatDefines; 91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 100