rsScript.h revision eb9aa675754c49f613c6ad71d41472b30f38b007
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" 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2247935ac8e3dd619f758abd576605a564e33bb59cTobias Grosser#include <utility> 23a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2893eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB 29a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramVertex; 30a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramFragment; 31a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Samsclass ProgramRaster; 32ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsclass ProgramStore; 3393eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 35eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass IDBase : public ObjectBase { 36dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samspublic: 37eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni IDBase(Context *rsc, Script *s, int slot) : 38eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ObjectBase(rsc), mScript(s), mSlot(slot) {} 39eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~IDBase() {} 40dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 41eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual void serialize(Context *rsc, OStream *stream) const {} 42dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams virtual RsA3DClassID getClassId() const; 43dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 44dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams Script *mScript; 45dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams int mSlot; 46eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni}; 47eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 48eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptKernelID : public IDBase { 49eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 50eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptKernelID(Context *rsc, Script *s, int slot, int sig); 51eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptKernelID() {} 52eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 53eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual RsA3DClassID getClassId() const; 54eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 55dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mHasKernelInput; 56dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bool mHasKernelOutput; 57dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 58dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 59eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptInvokeID : public IDBase { 60dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samspublic: 61eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptInvokeID(Context *rsc, Script *s, int slot); 62eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptInvokeID() {} 63dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 64dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams virtual RsA3DClassID getClassId() const; 65eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni}; 66dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 67eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niclass ScriptFieldID : public IDBase { 68eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 69eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptFieldID(Context *rsc, Script *s, int slot); 70eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~ScriptFieldID() {} 71eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 72eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual RsA3DClassID getClassId() const; 73dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 74dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 75afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Script : public ObjectBase { 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 77dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct Hal { 79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void * drv; 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct DriverInfo { 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int mVersionMajor; 83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int mVersionMinor; 84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedVariableCount; 86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedFunctionCount; 87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t exportedPragmaCount; 88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams char const **exportedPragmaKeyList; 89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams char const **exportedPragmaValueList; 9047935ac8e3dd619f758abd576605a564e33bb59cTobias Grosser const std::pair<const char *, uint32_t> *exportedForeachFuncList; 91bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 92bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams int (* root)(); 93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams }; 94bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams DriverInfo info; 95bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams }; 96bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams Hal mHal; 97bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 988c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams typedef void (* InvokeFunc_t)(void); 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 100e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams Script(Context *); 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams virtual ~Script(); 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 103928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams struct Enviroment_t { 104ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams int64_t mStartTimeMillis; 105709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mutable int64_t mLastDtTime; 10698e10fd7438f2e925e7fb5c2ec97c1f8cc583634Romain Guy 10793eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB 108a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 109a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 110b681c8af69ef6938c80dd5cc5fc920db94ee9f43Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 111ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mFragmentStore; 11293eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif 113928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams }; 114928b734b2fbba0800567c8b7e686bcf5f45483ccJason Sams Enviroment_t mEnviroment; 115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 116700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk void setSlot(uint32_t slot, Allocation *a); 117b81a0eb8180791e4eaab1253b59fa8bd562b046bAlex Sakhartchouk void setVar(uint32_t slot, const void *val, size_t len); 1189c64239ebbfa4170190ede812e69150035e008e0Tim Murray void getVar(uint32_t slot, const void *val, size_t len); 1192980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines void setVar(uint32_t slot, const void *val, size_t len, Element *e, 120f0a5078aaf6426e5524a847a0b17d09570fc00b8Stephen Hines const uint32_t *dims, size_t dimLen); 121a5eb6e17c08426deeedf989d6be280d89662ee82Jason Sams void setVarObj(uint32_t slot, ObjectBase *val); 1228c6bc6930d4996b897de8e5113da4a4efae2310cJason Sams 1234ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines virtual bool freeChildren(); 1244ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines 1254b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes virtual void runForEach(Context* rsc, 1264b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes uint32_t slot, 127f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const Allocation ** ains, 1284b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t inLen, 1294b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes Allocation* aout, 1304b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes const void* usr, 1314b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes size_t usrBytes, 13244bef6fba6244292b751387f3d6c31cca96c28adChris Wailes const RsScriptCall *sc = nullptr) = 0; 1334b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 134b81a0eb8180791e4eaab1253b59fa8bd562b046bAlex Sakhartchouk virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0; 135c61346b91434307c5003029017b54ce9c49112beJason Sams virtual void setupScript(Context *rsc) = 0; 136c61346b91434307c5003029017b54ce9c49112beJason Sams virtual uint32_t run(Context *) = 0; 137da0f069871343119251d6b0586be356dc2146a62Yang Ni virtual bool isIntrinsic() const { return false; } 138c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines 139c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines bool hasObjectSlots() const { 140c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines return mHasObjectSlots; 141c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines } 142a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams virtual void callUpdateCacheObject(const Context *rsc, void *dstObj) const; 143a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams 144700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchoukprotected: 14577020c5248ca0921d7d24fb60dec5105ba39026cJason Sams bool mInitialized; 146c78839b5bbcffae7d64a5a1c9aa60c9a4c5d3918Stephen Hines bool mHasObjectSlots; 147700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk ObjectBaseRef<Allocation> *mSlots; 148700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk ObjectBaseRef<const Type> *mTypes; 149700ba38f022208686523ab4280c4fc9f102aa273Alex Sakhartchouk 150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 156