10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009-2012 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_RS_SCRIPT_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_SCRIPT_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsAllocation.h" 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// --------------------------------------------------------------------------- 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptKernelID : public ObjectBase { 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic: 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptKernelID(Context *rsc, Script *s, int slot, int sig); 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual ~ScriptKernelID(); 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual RsA3DClassID getClassId() const; 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Script *mScript; 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mSlot; 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool mHasKernelInput; 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool mHasKernelOutput; 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptFieldID : public ObjectBase { 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic: 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptFieldID(Context *rsc, Script *s, int slot); 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual ~ScriptFieldID(); 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual RsA3DClassID getClassId() const; 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Script *mScript; 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mSlot; 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Script : public ObjectBase { 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic: 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct Hal { 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void * drv; 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct DriverInfo { 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int mVersionMajor; 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int mVersionMinor; 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t exportedVariableCount; 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t exportedFunctionCount; 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t exportedPragmaCount; 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char const **exportedPragmaKeyList; 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char const **exportedPragmaValueList; 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int (* root)(); 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool isThreadable; 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines }; 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines DriverInfo info; 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines }; 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Hal mHal; 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines typedef void (* InvokeFunc_t)(void); 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script(Context *); 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual ~Script(); 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct Enviroment_t { 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int64_t mStartTimeMillis; 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines int64_t mLastDtTime; 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines }; 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Enviroment_t mEnviroment; 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setSlot(uint32_t slot, Allocation *a); 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setVar(uint32_t slot, const void *val, size_t len); 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setVar(uint32_t slot, const void *val, size_t len, Element *e, 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *dims, size_t dimLen); 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setVarObj(uint32_t slot, ObjectBase *val); 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual bool freeChildren(); 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void runForEach(Context *rsc, 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation * ain, 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation * aout, 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void * usr, 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t usrBytes, 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsScriptCall *sc = NULL) = 0; 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0; 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void setupScript(Context *rsc) = 0; 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual uint32_t run(Context *) = 0; 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesprotected: 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mInitialized; 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ObjectBaseRef<Allocation> *mSlots; 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ObjectBaseRef<const Type> *mTypes; 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 118