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