1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 24419977d78018a9933c7f455fe001f644f2d638bStephen Hines * Copyright (C) 2009-2012 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_SCRIPT_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_SCRIPT_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsAllocation.h" 21c31585b8ca865bf2b35abc79c8a8ee42de27bee8Yang Ni#include "rsMap.h" 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2347935ac8e3dd619f758abd576605a564e33bb59cTobias Grosser#include <utility> 24a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2959f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 30a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramVertex; 31a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramFragment; 32a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramRaster; 33ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsclass ProgramStore; 3493eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 36eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass IDBase : public ObjectBase { 37dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samspublic: 38eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni IDBase(Context *rsc, Script *s, int slot) : 39eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ObjectBase(rsc), mScript(s), mSlot(slot) {} 40eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~IDBase() {} 41dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 42eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual void serialize(Context *rsc, OStream *stream) const {} 43dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams virtual RsA3DClassID getClassId() const; 44dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 45dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Script *mScript; 46dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams int mSlot; 47eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni}; 48eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 49eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptKernelID : public IDBase { 50eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 51eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptKernelID(Context *rsc, Script *s, int slot, int sig); 52eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptKernelID() {} 53eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 54eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual RsA3DClassID getClassId() const; 55eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 56dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mHasKernelInput; 57dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mHasKernelOutput; 58dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 59dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 60eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptInvokeID : public IDBase { 61dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samspublic: 62eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptInvokeID(Context *rsc, Script *s, int slot); 63eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptInvokeID() {} 64dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 65dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams virtual RsA3DClassID getClassId() const; 66eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni}; 67dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 68eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptFieldID : public IDBase { 69eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 70eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptFieldID(Context *rsc, Script *s, int slot); 71eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptFieldID() {} 72eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 73eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual RsA3DClassID getClassId() const; 74dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 75dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 76afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Script : public ObjectBase { 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 78dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct Hal { 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void * drv; 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct DriverInfo { 83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int mVersionMajor; 84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int mVersionMinor; 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedVariableCount; 8714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala size_t exportedForEachCount; 8814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala size_t exportedReduceCount; 89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedFunctionCount; 90bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedPragmaCount; 91bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams char const **exportedPragmaKeyList; 92bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams char const **exportedPragmaValueList; 93c31585b8ca865bf2b35abc79c8a8ee42de27bee8Yang Ni const Pair<const char *, uint32_t> *exportedForeachFuncList; 94bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 95bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int (* root)(); 96bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams }; 97bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams DriverInfo info; 98bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams }; 99bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams Hal mHal; 100bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 10110ab8bb0fa510bdb577adce5e67b6bf35882a9ddChih-Hung Hsieh explicit Script(Context *); 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams virtual ~Script(); 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams struct Enviroment_t { 105ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams int64_t mStartTimeMillis; 106709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mutable int64_t mLastDtTime; 10798e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 10859f6142d7657e43b4d21e077a28387431db02edfMiao Wang#if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 109a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 110a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 111b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 112ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mFragmentStore; 11393eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif 114928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams }; 115928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams Enviroment_t mEnviroment; 116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 117700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk void setSlot(uint32_t slot, Allocation *a); 118b81a0eb8180791e4eaab1253b59fa8bd562b046bAlex Sakhartchouk void setVar(uint32_t slot, const void *val, size_t len); 1199c64239ebbfa4170190ede812e69150035e008e0Tim Murray void getVar(uint32_t slot, const void *val, size_t len); 1202980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void setVar(uint32_t slot, const void *val, size_t len, Element *e, 121f0a5078aaf6426e5524a847a0b17d09570fc00b8Stephen Hines const uint32_t *dims, size_t dimLen); 122a5eb6e17c08426deeedf989d6be280d89662ee82Jason Sams void setVarObj(uint32_t slot, ObjectBase *val); 1238c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams 1244ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines virtual bool freeChildren(); 1254ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines 1264b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes virtual void runForEach(Context* rsc, 1274b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes uint32_t slot, 128f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const Allocation ** ains, 1294b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t inLen, 1304b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Allocation* aout, 1314b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const void* usr, 1324b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t usrBytes, 13344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes const RsScriptCall *sc = nullptr) = 0; 1344b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 135fc7ab793ea2db91f330272d9470433bbb1a505ceDavid Gross virtual void runReduce(Context *rsc, uint32_t slot, 136fc7ab793ea2db91f330272d9470433bbb1a505ceDavid Gross const Allocation **ains, size_t inLen, 13714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala Allocation *aout, const RsScriptCall *sc) = 0; 13814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala 139b81a0eb8180791e4eaab1253b59fa8bd562b046bAlex Sakhartchouk virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0; 140c61346b91434307c5003029017b54ce9c49112beJason Sams virtual void setupScript(Context *rsc) = 0; 141c61346b91434307c5003029017b54ce9c49112beJason Sams virtual uint32_t run(Context *) = 0; 142da0f069871343119251d6b0586be356dc2146a62Yang Ni virtual bool isIntrinsic() const { return false; } 143c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines 144c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines bool hasObjectSlots() const { 145c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines return mHasObjectSlots; 146c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines } 147a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams virtual void callUpdateCacheObject(const Context *rsc, void *dstObj) const; 148a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 1495d95a78ab5758c2625949d78bb67eb3c5d9701ccStephen Hines uint32_t getApiLevel() const { 1505d95a78ab5758c2625949d78bb67eb3c5d9701ccStephen Hines return mApiLevel; 1515d95a78ab5758c2625949d78bb67eb3c5d9701ccStephen Hines } 1525d95a78ab5758c2625949d78bb67eb3c5d9701ccStephen Hines 153700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchoukprotected: 15477020c5248ca0921d7d24fb60dec5105ba39026cJason Sams bool mInitialized; 155c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines bool mHasObjectSlots; 1565d95a78ab5758c2625949d78bb67eb3c5d9701ccStephen Hines uint32_t mApiLevel; 157700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk ObjectBaseRef<Allocation> *mSlots; 158700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk ObjectBaseRef<const Type> *mTypes; 159700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk 160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1637974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript 1647974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android 165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 166