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_H 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_SCRIPT_H 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 273eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramVertex; 283eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramFragment; 293eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramRaster; 3054db59c3594e887a412a24713fc3daa1c2404593Jason Samsclass ProgramStore; 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 32ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass Script : public ObjectBase { 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 34e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams struct Hal { 35e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams void * drv; 36e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 37e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams struct DriverInfo { 38e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams int mVersionMajor; 39e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams int mVersionMinor; 40e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 41e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams size_t exportedVariableCount; 42e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams size_t exportedFunctionCount; 43e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams size_t exportedPragmaCount; 44e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams char const **exportedPragmaKeyList; 45e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams char const **exportedPragmaValueList; 46e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 47e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams int (* root)(); 48e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams bool isThreadable; 49e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams }; 50e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams DriverInfo info; 51e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams }; 52e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams Hal mHal; 53e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 54be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams typedef void (* InvokeFunc_t)(void); 55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 56a9e7a05b84470257637c97d65f6562aa832c66efJason Sams Script(Context *); 57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams virtual ~Script(); 58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 59928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams struct Enviroment_t { 6017966517a1ecbe38b276235967dbc03b58628bbcJason Sams int64_t mStartTimeMillis; 6117966517a1ecbe38b276235967dbc03b58628bbcJason Sams int64_t mLastDtTime; 62584a375df68ed7d62b38389078c6804edf228f9cRomain Guy const char* mTimeZone; 63584a375df68ed7d62b38389078c6804edf228f9cRomain Guy 643eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams ObjectBaseRef<ProgramVertex> mVertex; 653eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams ObjectBaseRef<ProgramFragment> mFragment; 665235cf3f41cfcfe39c7072fddf1ead52db31292dJason Sams ObjectBaseRef<ProgramRaster> mRaster; 6754db59c3594e887a412a24713fc3daa1c2404593Jason Sams ObjectBaseRef<ProgramStore> mFragmentStore; 68928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams }; 69928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams Enviroment_t mEnviroment; 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 716f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk void initSlots(); 726f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk void setSlot(uint32_t slot, Allocation *a); 7317a8a1939d4cbc74de54954c67f3dd61882420aaAlex Sakhartchouk void setVar(uint32_t slot, const void *val, size_t len); 746f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams void setVarObj(uint32_t slot, ObjectBase *val); 75be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams 76514f9790fdf180ca3c58e508cbd36c520fa7be08Stephen Hines virtual bool freeChildren(); 77514f9790fdf180ca3c58e508cbd36c520fa7be08Stephen Hines 788f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams virtual void runForEach(Context *rsc, 798f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams const Allocation * ain, 808f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams Allocation * aout, 818f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams const void * usr, 82fcf7231249822ff4dae852f1de1f799756689f91Jason Sams size_t usrBytes, 838f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams const RsScriptCall *sc = NULL) = 0; 84f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams 8517a8a1939d4cbc74de54954c67f3dd61882420aaAlex Sakhartchouk virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0; 86f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams virtual void setupScript(Context *rsc) = 0; 87f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams virtual uint32_t run(Context *) = 0; 886f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchoukprotected: 896f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk ObjectBaseRef<Allocation> *mSlots; 906f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk ObjectBaseRef<const Type> *mTypes; 916f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk 92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 99