1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#ifndef ANDROID_RS_SCRIPT_GROUP_H 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#define ANDROID_RS_SCRIPT_GROUP_H 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsAllocation.h" 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#include "rsScript.h" 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams// --------------------------------------------------------------------------- 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsnamespace android { 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsnamespace renderscript { 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ProgramVertex; 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ProgramFragment; 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ProgramRaster; 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ProgramStore; 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptGroup : public ObjectBase { 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic: 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<ObjectBaseRef<ScriptKernelID> > mKernels; 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams class Link { 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public: 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<const ScriptKernelID> mSource; 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<const ScriptKernelID> mDstKernel; 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<const ScriptFieldID> mDstField; 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<const Type> mType; 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<Allocation> mAlloc; 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Link(); 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ~Link(); 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams }; 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams class Node { 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public: 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Node(Script *); 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<const ScriptKernelID *> mKernels; 53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<Link *> mOutputs; 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<Link *> mInputs; 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool mSeen; 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int mOrder; 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Script *mScript; 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams }; 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams class IO { 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public: 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams IO(const ScriptKernelID *); 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const ScriptKernelID *mKernel; 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ObjectBaseRef<Allocation> mAlloc; 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams }; 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<Link *> mLinks; 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<Node *> mNodes; 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<IO *> mInputs; 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Vector<IO *> mOutputs; 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams struct Hal { 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * drv; 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams struct DriverInfo { 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams }; 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams DriverInfo info; 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams }; 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Hal mHal; 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams static ScriptGroup * create(Context *rsc, 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptKernelID ** kernels, size_t kernelsSize, 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptKernelID ** src, size_t srcSize, 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptKernelID ** dstK, size_t dstKSize, 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptFieldID ** dstF, size_t dstFSize, 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const Type ** type, size_t typeSize); 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual RsA3DClassID getClassId() const; 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void execute(Context *rsc); 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void setInput(Context *rsc, ScriptKernelID *kid, Allocation *a); 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void setOutput(Context *rsc, ScriptKernelID *kid, Allocation *a); 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsprotected: 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams virtual ~ScriptGroup(); 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool mInitialized; 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsprivate: 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool calcOrderRecurse(Node *n, int depth); 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool calcOrder(); 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams Node * findNode(Script *s) const; 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptGroup(Context *); 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams#endif 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 115