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 201ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#include "rsScriptGroupBase.h" 21dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 221ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#include <vector> 23dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 24dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams// --------------------------------------------------------------------------- 25dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsnamespace android { 26dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsnamespace renderscript { 27dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 281ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Allocation; 291ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Context; 30dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ProgramVertex; 31dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ProgramFragment; 32dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ProgramRaster; 33dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsclass ProgramStore; 341ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Script; 351ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptFieldID; 361ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptKernelID; 371ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Type; 38dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 391ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptGroup : public ScriptGroupBase { 40dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samspublic: 411ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni virtual SG_API_Version getApiVersion() const { return SG_V1; } 421ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni virtual void execute(Context *rsc); 431ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 44b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<ObjectBaseRef<ScriptKernelID> > mKernels; 45dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 46dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class Link { 47dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams public: 48dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<const ScriptKernelID> mSource; 49dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<const ScriptKernelID> mDstKernel; 50dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<const ScriptFieldID> mDstField; 51dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<const Type> mType; 52dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<Allocation> mAlloc; 53dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Link(); 54dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ~Link(); 55dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams }; 56dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 57dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class Node { 58dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams public: 59dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Node(Script *); 60dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 61b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<const ScriptKernelID *> mKernels; 62b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<Link *> mOutputs; 63b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<Link *> mInputs; 64dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mSeen; 65dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams int mOrder; 66dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Script *mScript; 67dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams }; 68dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 69dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class IO { 70dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams public: 71dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams IO(const ScriptKernelID *); 72dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 73dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const ScriptKernelID *mKernel; 74dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ObjectBaseRef<Allocation> mAlloc; 75dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams }; 76dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 77b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<Link *> mLinks; 78b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<Node *> mNodes; 79b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<IO *> mInputs; 80b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<IO *> mOutputs; 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 void setInput(Context *rsc, ScriptKernelID *kid, Allocation *a); 90dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void setOutput(Context *rsc, ScriptKernelID *kid, Allocation *a); 91dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 92dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsprotected: 93dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams virtual ~ScriptGroup(); 94dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mInitialized; 95dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 96dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 97dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsprivate: 98dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool calcOrderRecurse(Node *n, int depth); 99dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool calcOrder(); 100dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Node * findNode(Script *s) const; 1015f6f16fe612e1c30732becc66205500994889ac9Yang Ni // Check if input/output Allocations are correctly set for a ScriptGroup. 1025f6f16fe612e1c30732becc66205500994889ac9Yang Ni // Send any error back to the client (app). Called before the ScriptGroup 1035f6f16fe612e1c30732becc66205500994889ac9Yang Ni // executes. Skips the exeuction if validation fails. 1045f6f16fe612e1c30732becc66205500994889ac9Yang Ni bool validateInputAndOutput(Context *); 105dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 106dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ScriptGroup(Context *); 107dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 108dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 109dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 110dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} 111dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} 112dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams#endif 113b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 114