rsCppStructs.h revision 2acce99bd7d6bb97d8a4d4778107968aa09d6e02
184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray/* 289daad6bae798779e57f252e9da4fe4e62337124Tim Murray * Copyright (C) 2013 The Android Open Source Project 384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * 484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * Licensed under the Apache License, Version 2.0 (the "License"); 584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * you may not use this file except in compliance with the License. 684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * You may obtain a copy of the License at 784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * 884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * http://www.apache.org/licenses/LICENSE-2.0 984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * 1084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * Unless required by applicable law or agreed to in writing, software 1184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * distributed under the License is distributed on an "AS IS" BASIS, 1284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * See the License for the specific language governing permissions and 1484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * limitations under the License. 1584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray */ 1684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 1784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#ifndef ANDROID_RSCPPSTRUCTS_H 1884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#define ANDROID_RSCPPSTRUCTS_H 1984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2089daad6bae798779e57f252e9da4fe4e62337124Tim Murray#include "rsDefines.h" 21f9e077a531c6a83e978d55f427b5d8ff6d2c943fJason Sams#include "rsCppUtils.h" 2289daad6bae798779e57f252e9da4fe4e62337124Tim Murray#include "util/RefBase.h" 23a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray#include "rsDispatch.h" 24a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray 2589daad6bae798779e57f252e9da4fe4e62337124Tim Murray#include <vector> 26ab71636b50db242cead6a3787620d6340156684cTim Murray#include <string> 2789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 2896267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray// Every row in an RS allocation is guaranteed to be aligned by this amount 2996267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray// Every row in a user-backed allocation must be aligned by this amount 3096267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray#define RS_CPU_ALLOCATION_ALIGNMENT 16 3196267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray 3284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraynamespace android { 339eb7f4b90120ebe4be74343856e86b46495f72dfTim Murraynamespace RSC { 3484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 3584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraytypedef void (*ErrorHandlerFunc_t)(uint32_t errorNum, const char *errorText); 3684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraytypedef void (*MessageHandlerFunc_t)(uint32_t msgNum, const void *msgData, size_t msgLen); 3784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 3884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass RS; 3984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass BaseObj; 4084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Element; 4184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Type; 4284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Allocation; 4384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Script; 4484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass ScriptC; 45729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murrayclass Sampler; 4684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray enum RSError { 4821fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray RS_SUCCESS = 0, 4921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray RS_ERROR_INVALID_PARAMETER = 1, 5021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray RS_ERROR_RUNTIME_ERROR = 2, 5110913a5c37ba119bef335320d3e8be25212c05adTim Murray RS_ERROR_INVALID_ELEMENT = 3, 5221fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray RS_ERROR_MAX = 9999 5321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 5421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray }; 5521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 56eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray enum RSYuvFormat { 57eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RS_YUV_NONE = 0, 58eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RS_YUV_YV12 = 1, 59eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RS_YUV_NV21 = 2, 60eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RS_YUV_MAX = 3 61eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray }; 62eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 6389daad6bae798779e57f252e9da4fe4e62337124Tim Murray class RS : public android::RSC::LightRefBase<RS> { 6484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 6584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 6684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RS(); 6784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual ~RS(); 6884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 694d252d6e807b89764dad123ac845df298c52ca97Tim Murray bool init(bool forceCpu = false, bool synchronous = false); 7084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setErrorHandler(ErrorHandlerFunc_t func); 7284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ErrorHandlerFunc_t getErrorHandler() { return mErrorFunc; } 7384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setMessageHandler(MessageHandlerFunc_t func); 7584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray MessageHandlerFunc_t getMessageHandler() { return mMessageFunc; } 7684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray void throwError(RSError error, const char *errMsg); 7810913a5c37ba119bef335320d3e8be25212c05adTim Murray RSError getError(); 7984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 8084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsContext getContext() { return mContext; } 8184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 82baca6c3c3d79a324c7976ba873afdded0b6bcfb5Tim Murray void finish(); 83baca6c3c3d79a324c7976ba873afdded0b6bcfb5Tim Murray 84a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray static dispatchTable* dispatch; 85a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray 8684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray private: 874a92d1268983edaf329f73c8a5b8860cdbb11596Tim Murray static bool usingNative; 88a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray static bool initDispatch(int targetApi); 89a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray 904d252d6e807b89764dad123ac845df298c52ca97Tim Murray bool init(int targetApi, bool forceCpu, bool synchronous); 9184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static void * threadProc(void *); 9284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 9384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static bool gInitialized; 9484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static pthread_mutex_t gInitMutex; 9584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 9684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray pthread_t mMessageThreadId; 9784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray pid_t mNativeMessageThreadId; 9884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mMessageRun; 9984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 10084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDevice mDev; 10184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsContext mContext; 10221fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray RSError mCurrentError; 10384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 10484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ErrorHandlerFunc_t mErrorFunc; 10584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray MessageHandlerFunc_t mMessageFunc; 106a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray bool mInit; 10784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 10884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray struct { 10989daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> U8; 110eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U8_2; 111eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U8_3; 112eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U8_4; 11389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> I8; 114eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I8_2; 115eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I8_3; 116eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I8_4; 11789daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> U16; 118eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U16_2; 119eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U16_3; 120eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U16_4; 12189daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> I16; 122eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I16_2; 123eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I16_3; 124eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I16_4; 12589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> U32; 126eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U32_2; 127eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U32_3; 128eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U32_4; 12989daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> I32; 130eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I32_2; 131eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I32_3; 132eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I32_4; 13389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> U64; 134eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U64_2; 135eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U64_3; 136eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> U64_4; 13789daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> I64; 138eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I64_2; 139eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I64_3; 140eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> I64_4; 14189daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> F32; 142eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F32_2; 143eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F32_3; 144eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F32_4; 14589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> F64; 146eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F64_2; 147eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F64_3; 148eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> F64_4; 14989daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> BOOLEAN; 15089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 15189daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> ELEMENT; 15289daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> TYPE; 15389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> ALLOCATION; 15489daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> SAMPLER; 15589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> SCRIPT; 15689daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> MESH; 15789daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> PROGRAM_FRAGMENT; 15889daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> PROGRAM_VERTEX; 15989daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> PROGRAM_RASTER; 16089daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> PROGRAM_STORE; 16189daad6bae798779e57f252e9da4fe4e62337124Tim Murray 16289daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> A_8; 16389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> RGB_565; 16489daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> RGB_888; 16589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> RGBA_5551; 16689daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> RGBA_4444; 16789daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> RGBA_8888; 16889daad6bae798779e57f252e9da4fe4e62337124Tim Murray 169eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray sp<const Element> YUV; 17089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 17189daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> MATRIX_4X4; 17289daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> MATRIX_3X3; 17389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Element> MATRIX_2X2; 17484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } mElements; 17584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 176729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray struct { 17789daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> CLAMP_NEAREST; 17889daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> CLAMP_LINEAR; 17989daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> CLAMP_LINEAR_MIP_LINEAR; 18089daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> WRAP_NEAREST; 18189daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> WRAP_LINEAR; 18289daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> WRAP_LINEAR_MIP_LINEAR; 18389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> MIRRORED_REPEAT_NEAREST; 18489daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> MIRRORED_REPEAT_LINEAR; 18589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Sampler> MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 186729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray } mSamplers; 187729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray friend class Sampler; 188729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray friend class Element; 18984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 19084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 19189daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass BaseObj : public android::RSC::LightRefBase<BaseObj> { 19289daad6bae798779e57f252e9da4fe4e62337124Tim Murraypublic: 19389daad6bae798779e57f252e9da4fe4e62337124Tim Murray void * getID() const; 19489daad6bae798779e57f252e9da4fe4e62337124Tim Murray virtual ~BaseObj(); 19589daad6bae798779e57f252e9da4fe4e62337124Tim Murray virtual void updateFromNative(); 19689daad6bae798779e57f252e9da4fe4e62337124Tim Murray virtual bool equals(sp<const BaseObj> obj); 19789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 19884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 19984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void *mID; 20084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 201ab71636b50db242cead6a3787620d6340156684cTim Murray std::string mName; 20284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray BaseObj(void *id, sp<RS> rs); 20484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void checkValid(); 20584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static void * getObjID(sp<const BaseObj> o); 20784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 20984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Allocation : public BaseObj { 21284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 21389daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<const Type> mType; 21484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mUsage; 21589daad6bae798779e57f252e9da4fe4e62337124Tim Murray sp<Allocation> mAdaptedAllocation; 21684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedLOD; 21884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedFace; 21984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedY; 22084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedZ; 22184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mReadAllowed; 22284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mWriteAllowed; 22384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedY; 22484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedZ; 22584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedLOD; 22684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationCubemapFace mSelectedFace; 22784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 22884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimX; 22984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimY; 23084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimZ; 23184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentCount; 23284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 23384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void * getIDSafe() const; 23484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateCacheInfo(sp<const Type> t); 23584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 23684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Allocation(void *id, sp<RS> rs, sp<const Type> t, uint32_t usage); 23784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 23884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt32(); 23984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt16(); 24084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt8(); 24184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsFloat32(); 24284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsObject(); 24384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual void updateFromNative(); 24584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h); 24784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 249a180b7d58ac6da9d6da866e43aa8c1fa83923dc5Stephen Hines sp<const Type> getType() const { 25084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mType; 25184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 25284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 25384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void syncAll(RsAllocationUsageType srcLocation); 25484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void ioSendOutput(); 25584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void ioGetInput(); 25684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 25784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void generateMipmaps(); 258509ea5c832a865bc9083d53f1f058377a689bab3Tim Murray 2590b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DRangeFrom(uint32_t off, size_t count, const void *data); 260a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray void copy1DRangeFrom(uint32_t off, size_t count, sp<const Allocation> data, uint32_t dataOff); 26184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2620b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DRangeTo(uint32_t off, size_t count, void *data); 263a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray 2640b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DFrom(const void* data); 2650b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DTo(void* data); 2660b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray 2670b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2680b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray const void *data); 2697b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray 2707b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray void copy2DRangeTo(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2717b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray void *data); 2727b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray 27384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2740b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray sp<const Allocation> data, uint32_t dataXoff, uint32_t dataYoff); 27584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 276358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void copy2DStridedFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 277358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray const void *data, size_t stride); 278358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void copy2DStridedFrom(const void *data, size_t stride); 279358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 280358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void copy2DStridedTo(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 281358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void *data, size_t stride); 282358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray void copy2DStridedTo(void *data, size_t stride); 283358747a3118301c5faeee73c98dd5f839bbfb54aTim Murray 28484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void resize(int dimX); 28584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void resize(int dimX, int dimY); 28684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 28784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 28884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationMipmapControl mips, uint32_t usage); 28984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 29084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationMipmapControl mips, uint32_t usage, void * pointer); 29184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 29284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 29384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 29484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createSized(sp<RS> rs, sp<const Element> e, size_t count, 29584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 296684726cbbd177ee4ee9000e9422058547acd237fTim Murray static sp<Allocation> createSized2D(sp<RS> rs, sp<const Element> e, 297684726cbbd177ee4ee9000e9422058547acd237fTim Murray size_t x, size_t y, 298684726cbbd177ee4ee9000e9422058547acd237fTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 299684726cbbd177ee4ee9000e9422058547acd237fTim Murray 30084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 30184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 30284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 30384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Element : public BaseObj { 30484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 30584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool isComplex(); 30684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSubElementCount() { 30784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mVisibleElementMap.size(); 30884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 30984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 31084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getSubElement(uint32_t index); 31184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char * getSubElementName(uint32_t index); 31284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSubElementArraySize(uint32_t index); 31384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getSubElementOffsetBytes(uint32_t index); 31484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataType getDataType() const { 31584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mType; 31684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 31784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 31884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataKind getDataKind() const { 31984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mKind; 32084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 32184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 32284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSizeBytes() const { 32384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mSizeBytes; 32484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 32584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 32610913a5c37ba119bef335320d3e8be25212c05adTim Murray uint32_t getVectorSize() const { 32710913a5c37ba119bef335320d3e8be25212c05adTim Murray return mVectorSize; 32810913a5c37ba119bef335320d3e8be25212c05adTim Murray } 32910913a5c37ba119bef335320d3e8be25212c05adTim Murray 33084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> BOOLEAN(sp<RS> rs); 33184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8(sp<RS> rs); 33284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8(sp<RS> rs); 33384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16(sp<RS> rs); 33484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16(sp<RS> rs); 33584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32(sp<RS> rs); 33684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32(sp<RS> rs); 33784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64(sp<RS> rs); 33884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64(sp<RS> rs); 33984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32(sp<RS> rs); 34084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64(sp<RS> rs); 34184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> ELEMENT(sp<RS> rs); 34284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> TYPE(sp<RS> rs); 34384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> ALLOCATION(sp<RS> rs); 34484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> SAMPLER(sp<RS> rs); 34584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> SCRIPT(sp<RS> rs); 34684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MESH(sp<RS> rs); 34784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_FRAGMENT(sp<RS> rs); 34884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_VERTEX(sp<RS> rs); 34984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_RASTER(sp<RS> rs); 35084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_STORE(sp<RS> rs); 35184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 35284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> A_8(sp<RS> rs); 35384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGB_565(sp<RS> rs); 35484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGB_888(sp<RS> rs); 35584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_5551(sp<RS> rs); 35684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_4444(sp<RS> rs); 35784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_8888(sp<RS> rs); 35884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 35984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_2(sp<RS> rs); 36084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_3(sp<RS> rs); 36184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_4(sp<RS> rs); 36284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_2(sp<RS> rs); 36384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_3(sp<RS> rs); 36484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_4(sp<RS> rs); 36584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_2(sp<RS> rs); 36684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_3(sp<RS> rs); 36784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_4(sp<RS> rs); 36884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_2(sp<RS> rs); 36984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_3(sp<RS> rs); 37084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_4(sp<RS> rs); 37184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_2(sp<RS> rs); 37284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_3(sp<RS> rs); 37384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_4(sp<RS> rs); 37484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_2(sp<RS> rs); 37584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_3(sp<RS> rs); 37684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_4(sp<RS> rs); 37784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_2(sp<RS> rs); 37884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_3(sp<RS> rs); 37984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_4(sp<RS> rs); 38084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_2(sp<RS> rs); 38184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_3(sp<RS> rs); 38284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_4(sp<RS> rs); 38384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_2(sp<RS> rs); 38484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_3(sp<RS> rs); 38584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_4(sp<RS> rs); 38684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_2(sp<RS> rs); 38784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_3(sp<RS> rs); 38884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_4(sp<RS> rs); 389eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray static sp<const Element> YUV(sp<RS> rs); 39084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_4X4(sp<RS> rs); 39184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_3X3(sp<RS> rs); 39284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_2X2(sp<RS> rs); 39384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 39484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateFromNative(); 39584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createUser(sp<RS> rs, RsDataType dt); 39684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createVector(sp<RS> rs, RsDataType dt, uint32_t size); 39784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createPixel(sp<RS> rs, RsDataType dt, RsDataKind dk); 39810913a5c37ba119bef335320d3e8be25212c05adTim Murray bool isCompatible(sp<const Element>e) const; 39984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 40084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class Builder { 40184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray private: 40284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 40389daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<sp<Element> > mElements; 404ab71636b50db242cead6a3787620d6340156684cTim Murray std::vector<std::string> mElementNames; 40589daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<uint32_t> mArraySizes; 40684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mSkipPadding; 40784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 40884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 40984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Builder(sp<RS> rs); 41084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ~Builder(); 411ab71636b50db242cead6a3787620d6340156684cTim Murray void add(sp<Element> e, std::string &name, uint32_t arraySize = 1); 41284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> create(); 41384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 41484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4157d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hinesprotected: 4167d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines Element(void *id, sp<RS> rs, 4177d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines std::vector<sp<Element> > &elements, 4187d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines std::vector<std::string> &elementNames, 4197d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines std::vector<uint32_t> &arraySizes); 4207d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines Element(void *id, sp<RS> rs, RsDataType dt, RsDataKind dk, bool norm, uint32_t size); 4217d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines Element(sp<RS> rs); 4227d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines virtual ~Element(); 4237d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines 42484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprivate: 42584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateVisibleSubElements(); 42684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 42789daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<sp<Element> > mElements; 428ab71636b50db242cead6a3787620d6340156684cTim Murray std::vector<std::string> mElementNames; 42989daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<uint32_t> mArraySizes; 43089daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<uint32_t> mVisibleElementMap; 43189daad6bae798779e57f252e9da4fe4e62337124Tim Murray std::vector<uint32_t> mOffsetInBytes; 43284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 43384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataType mType; 43484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataKind mKind; 43584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mNormalized; 43684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mSizeBytes; 43784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mVectorSize; 43884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 43984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4402c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinesclass FieldPacker { 4412c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinesprotected: 4422c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines unsigned char* mData; 4432c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t mPos; 4442c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t mLen; 4452c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4462c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinespublic: 4472c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines FieldPacker(size_t len) 44889daad6bae798779e57f252e9da4fe4e62337124Tim Murray : mPos(0), mLen(len) { 44989daad6bae798779e57f252e9da4fe4e62337124Tim Murray mData = new unsigned char[len]; 45089daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 4512c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4522c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines virtual ~FieldPacker() { 4532c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines delete [] mData; 4542c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4552c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4562c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void align(size_t v) { 4572c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if ((v & (v - 1)) != 0) { 458ab71636b50db242cead6a3787620d6340156684cTim Murray // ALOGE("Non-power-of-two alignment: %zu", v); 4592c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4602c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4612c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4622c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines while ((mPos & (v - 1)) != 0) { 4632c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mData[mPos++] = 0; 4642c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4652c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4662c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4672c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void reset() { 4682c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = 0; 4692c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4702c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4712c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void reset(size_t i) { 4722c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (i >= mLen) { 473ab71636b50db242cead6a3787620d6340156684cTim Murray // ALOGE("Out of bounds: i (%zu) >= len (%zu)", i, mLen); 4742c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4752c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4762c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = i; 4772c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4782c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4792c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void skip(size_t i) { 4802c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t res = mPos + i; 4812c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (res > mLen) { 482ab71636b50db242cead6a3787620d6340156684cTim Murray // ALOGE("Exceeded buffer length: i (%zu) > len (%zu)", i, mLen); 4832c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4842c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4852c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = res; 4862c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4872c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4882c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void* getData() const { 4892c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return mData; 4902c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4912c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4922c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t getLength() const { 4932c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return mLen; 4942c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4952c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4962c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines template <typename T> 49789daad6bae798779e57f252e9da4fe4e62337124Tim Murray void add(T t) { 4982c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines align(sizeof(t)); 4992c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (mPos + sizeof(t) <= mLen) { 5002c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines memcpy(&mData[mPos], &t, sizeof(t)); 5012c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos += sizeof(t); 5022c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 5032c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 50443514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines 50543514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines /* 50689daad6bae798779e57f252e9da4fe4e62337124Tim Murray void add(rs_matrix4x4 m) { 50789daad6bae798779e57f252e9da4fe4e62337124Tim Murray for (size_t i = 0; i < 16; i++) { 50889daad6bae798779e57f252e9da4fe4e62337124Tim Murray add(m.m[i]); 50989daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 51089daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 51189daad6bae798779e57f252e9da4fe4e62337124Tim Murray 51289daad6bae798779e57f252e9da4fe4e62337124Tim Murray void add(rs_matrix3x3 m) { 51389daad6bae798779e57f252e9da4fe4e62337124Tim Murray for (size_t i = 0; i < 9; i++) { 51489daad6bae798779e57f252e9da4fe4e62337124Tim Murray add(m.m[i]); 51589daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 51689daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 51789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 51889daad6bae798779e57f252e9da4fe4e62337124Tim Murray void add(rs_matrix2x2 m) { 51989daad6bae798779e57f252e9da4fe4e62337124Tim Murray for (size_t i = 0; i < 4; i++) { 52089daad6bae798779e57f252e9da4fe4e62337124Tim Murray add(m.m[i]); 52189daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 52289daad6bae798779e57f252e9da4fe4e62337124Tim Murray } 52343514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines */ 52443514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines 52589daad6bae798779e57f252e9da4fe4e62337124Tim Murray void add(sp<BaseObj> obj) { 52643514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines if (obj != NULL) { 52743514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines add((uint32_t) (uintptr_t) obj->getID()); 52843514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines } else { 52943514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines add((uint32_t) 0); 53043514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines } 53143514cde7e9b4869ffba6ba759d1e31f22d936f7Stephen Hines } 5322c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines}; 5332c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 53489daad6bae798779e57f252e9da4fe4e62337124Tim Murray 53584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Type : public BaseObj { 53684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 53784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray friend class Allocation; 53884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 53984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimX; 54084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimY; 54184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimZ; 542eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RSYuvFormat mYuvFormat; 54384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimMipmaps; 54484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimFaces; 54584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mElementCount; 54684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 54784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 5487d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines Type(void *id, sp<RS> rs); 5497d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines 55084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void calcElementCount(); 55184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual void updateFromNative(); 55284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 55384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 55484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 555eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RSYuvFormat getYuvFormat() const { 556eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray return mYuvFormat; 557eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray } 558eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 55984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getElement() const { 56084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElement; 56184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 56284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 56384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getX() const { 56484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimX; 56584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 56684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 56784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getY() const { 56884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimY; 56984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 57084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getZ() const { 57284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimZ; 57384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 57484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool hasMipmaps() const { 57684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimMipmaps; 57784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 57884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool hasFaces() const { 58084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimFaces; 58184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 58284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 58384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getCount() const { 58484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElementCount; 58584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 58684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 58784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSizeBytes() const { 58884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElementCount * mElement->getSizeBytes(); 58984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 59084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 59196267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray static sp<const Type> create(sp<RS> rs, sp<const Element> e, uint32_t dimX, uint32_t dimY, uint32_t dimZ); 59284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 59384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class Builder { 59484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray protected: 59584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 59684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimX; 59784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimY; 59884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimZ; 599eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray RSYuvFormat mYuvFormat; 60084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimMipmaps; 60184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimFaces; 60284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 60384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 60484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 60584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Builder(sp<RS> rs, sp<const Element> e); 60684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 60784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setX(uint32_t value); 6087d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hines void setY(uint32_t value); 609eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray void setZ(uint32_t value); 610eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray void setYuvFormat(RSYuvFormat format); 61184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setMipmaps(bool value); 61284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setFaces(bool value); 61384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Type> create(); 61484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 61584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 61684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 61784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 61884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Script : public BaseObj { 61984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprivate: 62084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 62184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 62284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Script(void *id, sp<RS> rs); 62384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void forEach(uint32_t slot, sp<const Allocation> in, sp<const Allocation> out, 62484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const void *v, size_t) const; 62584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void bindAllocation(sp<Allocation> va, uint32_t slot) const; 62684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, const void *, size_t len) const; 62784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, sp<const BaseObj> o) const; 62884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void invoke(uint32_t slot, const void *v, size_t len) const; 62984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 63084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 63184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void invoke(uint32_t slot) const { 63284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray invoke(slot, NULL, 0); 63384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 63484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, float v) const { 63584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 63684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 63784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, double v) const { 63884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 63984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 64084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, int32_t v) const { 64184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 64284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 64384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, int64_t v) const { 64484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 64584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 64684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, bool v) const { 64784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 64884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 64984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 65084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 65184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class FieldBase { 65284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray protected: 65384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 65484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<Allocation> mAllocation; 65584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 65684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void init(sp<RS> rs, uint32_t dimx, uint32_t usages = 0); 65784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 65884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 65984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getElement() { 66084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElement; 66184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 66284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 66384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Type> getType() { 66484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mAllocation->getType(); 66584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 66684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 66784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Allocation> getAllocation() { 66884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mAllocation; 66984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 67084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 67184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray //void updateAllocation(); 67284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 67384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 67484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 67584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass ScriptC : public Script { 67684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 67784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ScriptC(sp<RS> rs, 67884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const void *codeTxt, size_t codeLength, 67984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char *cachedName, size_t cachedNameLength, 68084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char *cacheDir, size_t cacheDirLength); 68184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 68284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 68384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 6847f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayclass ScriptIntrinsic : public Script { 6857f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray protected: 68610913a5c37ba119bef335320d3e8be25212c05adTim Murray sp<const Element> mElement; 6873cd44af22622898d3000b2b3c4c408cede294152Tim Murray ScriptIntrinsic(sp<RS> rs, int id, sp<const Element> e); 688b27b18130d0772203799ba0f2d27783b640dc891Tim Murray virtual ~ScriptIntrinsic(); 6897f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}; 6907f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 69189daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass ScriptIntrinsic3DLUT : public ScriptIntrinsic { 69221fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 69389daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsic3DLUT(sp<RS> rs, sp<const Element> e); 69421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 69521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsic3DLUT> create(sp<RS> rs, sp<const Element> e); 69689daad6bae798779e57f252e9da4fe4e62337124Tim Murray void forEach(sp<Allocation> ain, sp<Allocation> aout); 69789daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setLUT(sp<Allocation> lut); 69889daad6bae798779e57f252e9da4fe4e62337124Tim Murray}; 69989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 7007f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayclass ScriptIntrinsicBlend : public ScriptIntrinsic { 70121fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 70289daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsicBlend(sp<RS> rs, sp<const Element> e); 70321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 70421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicBlend> create(sp<RS> rs, sp<const Element> e); 7057f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendClear(sp<Allocation> in, sp<Allocation> out); 7067f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrc(sp<Allocation> in, sp<Allocation> out); 7077f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDst(sp<Allocation> in, sp<Allocation> out); 7087f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcOver(sp<Allocation> in, sp<Allocation> out); 7097f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstOver(sp<Allocation> in, sp<Allocation> out); 7107f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcIn(sp<Allocation> in, sp<Allocation> out); 7117f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstIn(sp<Allocation> in, sp<Allocation> out); 7127f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcOut(sp<Allocation> in, sp<Allocation> out); 7137f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstOut(sp<Allocation> in, sp<Allocation> out); 7147f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcAtop(sp<Allocation> in, sp<Allocation> out); 7157f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstAtop(sp<Allocation> in, sp<Allocation> out); 7167f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendXor(sp<Allocation> in, sp<Allocation> out); 7177f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendMultiply(sp<Allocation> in, sp<Allocation> out); 7187f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendAdd(sp<Allocation> in, sp<Allocation> out); 7197f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSubtract(sp<Allocation> in, sp<Allocation> out); 7207f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}; 72184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7228f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murrayclass ScriptIntrinsicBlur : public ScriptIntrinsic { 72321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 72489daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsicBlur(sp<RS> rs, sp<const Element> e); 72521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 72621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicBlur> create(sp<RS> rs, sp<const Element> e); 72721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray void setInput(sp<Allocation> in); 72821fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray void forEach(sp<Allocation> out); 7298f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray void setRadius(float radius); 7308f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray}; 7318f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray 73289daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass ScriptIntrinsicColorMatrix : public ScriptIntrinsic { 73321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 73489daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e); 73521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 73621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicColorMatrix> create(sp<RS> rs, sp<const Element> e); 73789daad6bae798779e57f252e9da4fe4e62337124Tim Murray void forEach(sp<Allocation> in, sp<Allocation> out); 73810913a5c37ba119bef335320d3e8be25212c05adTim Murray void setAdd(float* add); 73989daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setColorMatrix3(float* m); 74089daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setColorMatrix4(float* m); 74189daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setGreyscale(); 74289daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setRGBtoYUV(); 74389daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setYUVtoRGB(); 74489daad6bae798779e57f252e9da4fe4e62337124Tim Murray}; 74589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 74689daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass ScriptIntrinsicConvolve3x3 : public ScriptIntrinsic { 74721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 74889daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsicConvolve3x3(sp<RS> rs, sp<const Element> e); 74921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 75021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicConvolve3x3> create(sp<RS> rs, sp<const Element> e); 75189daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setInput(sp<Allocation> in); 75289daad6bae798779e57f252e9da4fe4e62337124Tim Murray void forEach(sp<Allocation> out); 75389daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setCoefficients(float* v); 75489daad6bae798779e57f252e9da4fe4e62337124Tim Murray}; 75589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 75689daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass ScriptIntrinsicConvolve5x5 : public ScriptIntrinsic { 75721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 75889daad6bae798779e57f252e9da4fe4e62337124Tim Murray ScriptIntrinsicConvolve5x5(sp<RS> rs, sp<const Element> e); 75921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 76021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicConvolve5x5> create(sp<RS> rs, sp<const Element> e); 76189daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setInput(sp<Allocation> in); 76289daad6bae798779e57f252e9da4fe4e62337124Tim Murray void forEach(sp<Allocation> out); 76389daad6bae798779e57f252e9da4fe4e62337124Tim Murray void setCoefficients(float* v); 76489daad6bae798779e57f252e9da4fe4e62337124Tim Murray}; 76589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 766b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayclass ScriptIntrinsicHistogram : public ScriptIntrinsic { 76721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 768b27b18130d0772203799ba0f2d27783b640dc891Tim Murray ScriptIntrinsicHistogram(sp<RS> rs, sp<const Element> e); 76910913a5c37ba119bef335320d3e8be25212c05adTim Murray sp<Allocation> mOut; 77021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 77110913a5c37ba119bef335320d3e8be25212c05adTim Murray static sp<ScriptIntrinsicHistogram> create(sp<RS> rs); 772b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void setOutput(sp<Allocation> aout); 773b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void setDotCoefficients(float r, float g, float b, float a); 774b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void forEach(sp<Allocation> ain); 775b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void forEach_dot(sp<Allocation> ain); 776b27b18130d0772203799ba0f2d27783b640dc891Tim Murray}; 777b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 778b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayclass ScriptIntrinsicLUT : public ScriptIntrinsic { 779b27b18130d0772203799ba0f2d27783b640dc891Tim Murray private: 780b27b18130d0772203799ba0f2d27783b640dc891Tim Murray sp<Allocation> LUT; 781b27b18130d0772203799ba0f2d27783b640dc891Tim Murray bool mDirty; 782b27b18130d0772203799ba0f2d27783b640dc891Tim Murray unsigned char mCache[1024]; 7832acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray void setTable(unsigned int offset, unsigned char base, unsigned int length, unsigned char* lutValues); 78421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray ScriptIntrinsicLUT(sp<RS> rs, sp<const Element> e); 785b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 78689daad6bae798779e57f252e9da4fe4e62337124Tim Murray public: 78721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicLUT> create(sp<RS> rs, sp<const Element> e); 78889daad6bae798779e57f252e9da4fe4e62337124Tim Murray void forEach(sp<Allocation> ain, sp<Allocation> aout); 7892acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray void setRed(unsigned char base, unsigned int length, unsigned char* lutValues); 7902acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray void setGreen(unsigned char base, unsigned int length, unsigned char* lutValues); 7912acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray void setBlue(unsigned char base, unsigned int length, unsigned char* lutValues); 7922acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray void setAlpha(unsigned char base, unsigned int length, unsigned char* lutValues); 793b27b18130d0772203799ba0f2d27783b640dc891Tim Murray virtual ~ScriptIntrinsicLUT(); 794b27b18130d0772203799ba0f2d27783b640dc891Tim Murray}; 795b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 79689daad6bae798779e57f252e9da4fe4e62337124Tim Murrayclass ScriptIntrinsicYuvToRGB : public ScriptIntrinsic { 79721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray private: 798b27b18130d0772203799ba0f2d27783b640dc891Tim Murray ScriptIntrinsicYuvToRGB(sp<RS> rs, sp<const Element> e); 79921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray public: 80021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray static sp<ScriptIntrinsicYuvToRGB> create(sp<RS> rs, sp<const Element> e); 801b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void setInput(sp<Allocation> in); 802b27b18130d0772203799ba0f2d27783b640dc891Tim Murray void forEach(sp<Allocation> out); 80389daad6bae798779e57f252e9da4fe4e62337124Tim Murray 80489daad6bae798779e57f252e9da4fe4e62337124Tim Murray}; 805b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 80689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 807729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray class Sampler : public BaseObj { 808729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray private: 809729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray Sampler(sp<RS> rs, void* id); 810729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMin; 811729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mMag; 812729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapS; 813729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapT; 814729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue mWrapR; 815729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray float mAniso; 816729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 817729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray public: 818729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray static sp<Sampler> create(sp<RS> rs, RsSamplerValue min, RsSamplerValue mag, RsSamplerValue wrapS, RsSamplerValue wrapT, float anisotropy); 819729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 820729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue getMinification(); 821729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue getMagnification(); 822729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue getWrapS(); 823729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray RsSamplerValue getWrapT(); 824729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray float getAnisotropy(); 825729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 826729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> CLAMP_NEAREST(sp<RS> rs); 827729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> CLAMP_LINEAR(sp<RS> rs); 828729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> CLAMP_LINEAR_MIP_LINEAR(sp<RS> rs); 829729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> WRAP_NEAREST(sp<RS> rs); 830729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> WRAP_LINEAR(sp<RS> rs); 831729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> WRAP_LINEAR_MIP_LINEAR(sp<RS> rs); 832729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> MIRRORED_REPEAT_NEAREST(sp<RS> rs); 833729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> MIRRORED_REPEAT_LINEAR(sp<RS> rs); 834729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray sp<const Sampler> MIRRORED_REPEAT_LINEAR_MIP_LINEAR(sp<RS> rs); 835729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 836729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray}; 837729b6fe58aff47c4f666b22bbb7a6d6114ddefa9Tim Murray 83884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray} 8397f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 84084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray} 84184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 84284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#endif 843