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