rsCppStructs.h revision 7b3e3093f745134345dadf89498ad16e1f9c0e71
184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray/* 284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray * Copyright (C) 2012 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 2084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#include <utils/String8.h> 2184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#include <utils/Vector.h> 2284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#include "utils/RefBase.h" 2384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#include <rs.h> 2584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraynamespace android { 279eb7f4b90120ebe4be74343856e86b46495f72dfTim Murraynamespace RSC { 2884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraytypedef void (*ErrorHandlerFunc_t)(uint32_t errorNum, const char *errorText); 3084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraytypedef void (*MessageHandlerFunc_t)(uint32_t msgNum, const void *msgData, size_t msgLen); 3184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 3284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass RS; 3384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass BaseObj; 3484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Element; 3584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Type; 3684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Allocation; 3784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Script; 3884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass ScriptC; 3984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass RS : public android::LightRefBase<RS> { 4184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 4384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RS(); 4484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual ~RS(); 4584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 467e0acabf072cda5bdff63e502c1e8e4c2727676bTim Murray bool init() { return init(false); } 477e0acabf072cda5bdff63e502c1e8e4c2727676bTim Murray bool init(bool forceCpu); 4884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 4984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setErrorHandler(ErrorHandlerFunc_t func); 5084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ErrorHandlerFunc_t getErrorHandler() { return mErrorFunc; } 5184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 5284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setMessageHandler(MessageHandlerFunc_t func); 5384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray MessageHandlerFunc_t getMessageHandler() { return mMessageFunc; } 5484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 5584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void throwError(const char *err) const; 5684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 5784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsContext getContext() { return mContext; } 5884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 59baca6c3c3d79a324c7976ba873afdded0b6bcfb5Tim Murray void finish(); 60baca6c3c3d79a324c7976ba873afdded0b6bcfb5Tim Murray 6184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray private: 627e0acabf072cda5bdff63e502c1e8e4c2727676bTim Murray bool init(int targetApi, bool forceCpu); 6384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static void * threadProc(void *); 6484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 6584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static bool gInitialized; 6684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static pthread_mutex_t gInitMutex; 6784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 6884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray pthread_t mMessageThreadId; 6984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray pid_t mNativeMessageThreadId; 7084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mMessageRun; 7184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDevice mDev; 7384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsContext mContext; 7484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ErrorHandlerFunc_t mErrorFunc; 7684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray MessageHandlerFunc_t mMessageFunc; 7784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 7884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray struct { 7984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *U8; 8084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *I8; 8184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *U16; 8284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *I16; 8384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *U32; 8484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *I32; 8584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *U64; 8684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *I64; 8784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *F32; 8884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *F64; 8984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *BOOLEAN; 9084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 9184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *ELEMENT; 9284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *TYPE; 9384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *ALLOCATION; 9484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *SAMPLER; 9584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *SCRIPT; 9684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *MESH; 9784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *PROGRAM_FRAGMENT; 9884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *PROGRAM_VERTEX; 9984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *PROGRAM_RASTER; 10084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *PROGRAM_STORE; 10184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 10284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *A_8; 10384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *RGB_565; 10484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *RGB_888; 10584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *RGBA_5551; 10684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *RGBA_4444; 10784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *RGBA_8888; 10884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 10984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *FLOAT_2; 11084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *FLOAT_3; 11184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *FLOAT_4; 11284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 11384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *DOUBLE_2; 11484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *DOUBLE_3; 11584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *DOUBLE_4; 11684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 11784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UCHAR_2; 11884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UCHAR_3; 11984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UCHAR_4; 12084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 12184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *CHAR_2; 12284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *CHAR_3; 12384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *CHAR_4; 12484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 12584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *USHORT_2; 12684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *USHORT_3; 12784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *USHORT_4; 12884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 12984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *SHORT_2; 13084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *SHORT_3; 13184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *SHORT_4; 13284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 13384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UINT_2; 13484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UINT_3; 13584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *UINT_4; 13684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 13784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *INT_2; 13884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *INT_3; 13984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *INT_4; 14084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 14184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *ULONG_2; 14284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *ULONG_3; 14384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *ULONG_4; 14484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 14584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *LONG_2; 14684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *LONG_3; 14784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *LONG_4; 14884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 14984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *MATRIX_4X4; 15084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *MATRIX_3X3; 15184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element *MATRIX_2X2; 15284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } mElements; 15384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 15484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 15584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 15684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass BaseObj : public android::LightRefBase<BaseObj> { 15784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 15884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void *mID; 15984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 16084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray String8 mName; 16184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 16284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray BaseObj(void *id, sp<RS> rs); 16384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void checkValid(); 16484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 16584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static void * getObjID(sp<const BaseObj> o); 16684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 16784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 16884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 16984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void * getID() const; 17084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual ~BaseObj(); 17184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual void updateFromNative(); 17284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual bool equals(const BaseObj *obj); 17384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 17484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 17584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 17684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Allocation : public BaseObj { 17784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 17884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::sp<const Type> mType; 17984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mUsage; 18084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::sp<Allocation> mAdaptedAllocation; 18184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 18284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedLOD; 18384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedFace; 18484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedY; 18584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mConstrainedZ; 18684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mReadAllowed; 18784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mWriteAllowed; 18884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedY; 18984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedZ; 19084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mSelectedLOD; 19184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationCubemapFace mSelectedFace; 19284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 19384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimX; 19484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimY; 19584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentDimZ; 19684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mCurrentCount; 19784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 19884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void * getIDSafe() const; 19984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateCacheInfo(sp<const Type> t); 20084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Allocation(void *id, sp<RS> rs, sp<const Type> t, uint32_t usage); 20284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt32(); 20484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt16(); 20584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsInt8(); 20684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsFloat32(); 20784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validateIsObject(); 20884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 20984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual void updateFromNative(); 21084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h); 21284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 21484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::sp<const Type> getType() { 21584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mType; 21684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 21784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 21884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void syncAll(RsAllocationUsageType srcLocation); 21984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void ioSendOutput(); 22084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void ioGetInput(); 22184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 22284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void generateMipmaps(); 223509ea5c832a865bc9083d53f1f058377a689bab3Tim Murray 2240b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DRangeFrom(uint32_t off, size_t count, const void *data); 225a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray void copy1DRangeFrom(uint32_t off, size_t count, sp<const Allocation> data, uint32_t dataOff); 22684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 2270b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DRangeTo(uint32_t off, size_t count, void *data); 228a4cbc2b0cf0f6fbdb21e84a3e17585eda1885e3eTim Murray 2290b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DFrom(const void* data); 2300b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy1DTo(void* data); 2310b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray 2320b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2330b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray const void *data); 2347b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray 2357b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray void copy2DRangeTo(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2367b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray void *data); 2377b3e3093f745134345dadf89498ad16e1f9c0e71Tim Murray 23884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 2390b93e30c8c64fb2f985218adfaceff777f62a42fTim Murray sp<const Allocation> data, uint32_t dataXoff, uint32_t dataYoff); 24084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void resize(int dimX); 24284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void resize(int dimX, int dimY); 24384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 24584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationMipmapControl mips, uint32_t usage); 24684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 24784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsAllocationMipmapControl mips, uint32_t usage, void * pointer); 24884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 24984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createTyped(sp<RS> rs, sp<const Type> type, 25084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 25184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<Allocation> createSized(sp<RS> rs, sp<const Element> e, size_t count, 25284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 253684726cbbd177ee4ee9000e9422058547acd237fTim Murray static sp<Allocation> createSized2D(sp<RS> rs, sp<const Element> e, 254684726cbbd177ee4ee9000e9422058547acd237fTim Murray size_t x, size_t y, 255684726cbbd177ee4ee9000e9422058547acd237fTim Murray uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 256684726cbbd177ee4ee9000e9422058547acd237fTim Murray 25784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 25884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 25984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 26084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Element : public BaseObj { 26184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 26284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool isComplex(); 26384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSubElementCount() { 26484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mVisibleElementMap.size(); 26584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 26684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 26784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getSubElement(uint32_t index); 26884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char * getSubElementName(uint32_t index); 26984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSubElementArraySize(uint32_t index); 27084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getSubElementOffsetBytes(uint32_t index); 27184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataType getDataType() const { 27284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mType; 27384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 27484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 27584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataKind getDataKind() const { 27684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mKind; 27784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 27884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 27984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSizeBytes() const { 28084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mSizeBytes; 28184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 28284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 28384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> BOOLEAN(sp<RS> rs); 28484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8(sp<RS> rs); 28584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8(sp<RS> rs); 28684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16(sp<RS> rs); 28784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16(sp<RS> rs); 28884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32(sp<RS> rs); 28984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32(sp<RS> rs); 29084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64(sp<RS> rs); 29184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64(sp<RS> rs); 29284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32(sp<RS> rs); 29384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64(sp<RS> rs); 29484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> ELEMENT(sp<RS> rs); 29584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> TYPE(sp<RS> rs); 29684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> ALLOCATION(sp<RS> rs); 29784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> SAMPLER(sp<RS> rs); 29884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> SCRIPT(sp<RS> rs); 29984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MESH(sp<RS> rs); 30084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_FRAGMENT(sp<RS> rs); 30184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_VERTEX(sp<RS> rs); 30284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_RASTER(sp<RS> rs); 30384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> PROGRAM_STORE(sp<RS> rs); 30484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 30584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> A_8(sp<RS> rs); 30684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGB_565(sp<RS> rs); 30784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGB_888(sp<RS> rs); 30884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_5551(sp<RS> rs); 30984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_4444(sp<RS> rs); 31084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> RGBA_8888(sp<RS> rs); 31184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 31284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_2(sp<RS> rs); 31384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_3(sp<RS> rs); 31484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F32_4(sp<RS> rs); 31584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_2(sp<RS> rs); 31684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_3(sp<RS> rs); 31784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> F64_4(sp<RS> rs); 31884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_2(sp<RS> rs); 31984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_3(sp<RS> rs); 32084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U8_4(sp<RS> rs); 32184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_2(sp<RS> rs); 32284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_3(sp<RS> rs); 32384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I8_4(sp<RS> rs); 32484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_2(sp<RS> rs); 32584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_3(sp<RS> rs); 32684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U16_4(sp<RS> rs); 32784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_2(sp<RS> rs); 32884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_3(sp<RS> rs); 32984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I16_4(sp<RS> rs); 33084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_2(sp<RS> rs); 33184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_3(sp<RS> rs); 33284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U32_4(sp<RS> rs); 33384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_2(sp<RS> rs); 33484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_3(sp<RS> rs); 33584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I32_4(sp<RS> rs); 33684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_2(sp<RS> rs); 33784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_3(sp<RS> rs); 33884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> U64_4(sp<RS> rs); 33984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_2(sp<RS> rs); 34084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_3(sp<RS> rs); 34184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> I64_4(sp<RS> rs); 34284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_4X4(sp<RS> rs); 34384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_3X3(sp<RS> rs); 34484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> MATRIX_2X2(sp<RS> rs); 34584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 34684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element(void *id, sp<RS> rs, 34784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<sp<Element> > &elements, 34884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<android::String8> &elementNames, 34984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<uint32_t> &arraySizes); 35084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element(void *id, sp<RS> rs, RsDataType dt, RsDataKind dk, bool norm, uint32_t size); 35184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Element(sp<RS> rs); 35284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual ~Element(); 35384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 35484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateFromNative(); 35584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createUser(sp<RS> rs, RsDataType dt); 35684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createVector(sp<RS> rs, RsDataType dt, uint32_t size); 35784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray static sp<const Element> createPixel(sp<RS> rs, RsDataType dt, RsDataKind dk); 35884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool isCompatible(sp<const Element>e); 35984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 36084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class Builder { 36184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray private: 36284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 36384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<sp<Element> > mElements; 36484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<android::String8> mElementNames; 36584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<uint32_t> mArraySizes; 36684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mSkipPadding; 36784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 36884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 36984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Builder(sp<RS> rs); 37084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ~Builder(); 37184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void add(sp<Element>, android::String8 &name, uint32_t arraySize = 1); 37284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> create(); 37384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 37484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 37584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprivate: 37684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void updateVisibleSubElements(); 37784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 37884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<sp</*const*/ Element> > mElements; 37984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<android::String8> mElementNames; 38084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<uint32_t> mArraySizes; 38184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<uint32_t> mVisibleElementMap; 38284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray android::Vector<uint32_t> mOffsetInBytes; 38384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 38484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataType mType; 38584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray RsDataKind mKind; 38684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mNormalized; 38784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mSizeBytes; 38884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mVectorSize; 38984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 39084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 3912c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinesclass FieldPacker { 3922c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinesprotected: 3932c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines unsigned char* mData; 3942c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t mPos; 3952c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t mLen; 3962c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 3972c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hinespublic: 3982c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines FieldPacker(size_t len) 3992c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines : mPos(0), 4002c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mLen(len) { 4012c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mData = new unsigned char[len]; 4022c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4032c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4042c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines virtual ~FieldPacker() { 4052c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines delete [] mData; 4062c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4072c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4082c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void align(size_t v) { 4092c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if ((v & (v - 1)) != 0) { 4102c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines ALOGE("Non-power-of-two alignment: %zu", v); 4112c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4122c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4132c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4142c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines while ((mPos & (v - 1)) != 0) { 4152c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mData[mPos++] = 0; 4162c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4172c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4182c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4192c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void reset() { 4202c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = 0; 4212c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4222c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4232c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void reset(size_t i) { 4242c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (i >= mLen) { 4252c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines ALOGE("Out of bounds: i (%zu) >= len (%zu)", i, mLen); 4262c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4272c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4282c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = i; 4292c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4302c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4312c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void skip(size_t i) { 4322c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t res = mPos + i; 4332c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (res > mLen) { 4342c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines ALOGE("Exceeded buffer length: i (%zu) > len (%zu)", i, mLen); 4352c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return; 4362c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4372c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos = res; 4382c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4392c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4402c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void* getData() const { 4412c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return mData; 4422c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4432c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4442c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines size_t getLength() const { 4452c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines return mLen; 4462c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4472c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 4482c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines template <typename T> 4492c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines void add(T t) { 4502c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines align(sizeof(t)); 4512c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines if (mPos + sizeof(t) <= mLen) { 4522c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines memcpy(&mData[mPos], &t, sizeof(t)); 4532c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines mPos += sizeof(t); 4542c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4552c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines } 4562c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines}; 4572c7206e7e19c23fdaa2dd5843f0597624a5e7341Stephen Hines 45884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Type : public BaseObj { 45984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 46084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray friend class Allocation; 46184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 46284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimX; 46384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimY; 46484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimZ; 46584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimMipmaps; 46684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimFaces; 46784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t mElementCount; 46884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 46984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 47084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void calcElementCount(); 47184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray virtual void updateFromNative(); 47284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 47384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 47484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 47584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getElement() const { 47684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElement; 47784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 47884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 47984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getX() const { 48084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimX; 48184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 48284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 48384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getY() const { 48484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimY; 48584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 48684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 48784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t getZ() const { 48884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimZ; 48984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 49084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 49184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool hasMipmaps() const { 49284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimMipmaps; 49384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 49484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 49584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool hasFaces() const { 49684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mDimFaces; 49784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 49884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 49984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getCount() const { 50084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElementCount; 50184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 50284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 50384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray size_t getSizeBytes() const { 50484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElementCount * mElement->getSizeBytes(); 50584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 50684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 50784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Type(void *id, sp<RS> rs); 50884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 50984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 51084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class Builder { 51184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray protected: 51284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<RS> mRS; 51384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimX; 51484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimY; 51584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray uint32_t mDimZ; 51684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimMipmaps; 51784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray bool mDimFaces; 51884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 51984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 52084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 52184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Builder(sp<RS> rs, sp<const Element> e); 52284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 52384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setX(uint32_t value); 52484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setY(int value); 52584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setMipmaps(bool value); 52684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setFaces(bool value); 52784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Type> create(); 52884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 52984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 53084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 53184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 53284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass Script : public BaseObj { 53384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprivate: 53484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 53584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 53684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray Script(void *id, sp<RS> rs); 53784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void forEach(uint32_t slot, sp<const Allocation> in, sp<const Allocation> out, 53884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const void *v, size_t) const; 53984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void bindAllocation(sp<Allocation> va, uint32_t slot) const; 54084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, const void *, size_t len) const; 54184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, sp<const BaseObj> o) const; 54284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void invoke(uint32_t slot, const void *v, size_t len) const; 54384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 54484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 54584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void invoke(uint32_t slot) const { 54684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray invoke(slot, NULL, 0); 54784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 54884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, float v) const { 54984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 55084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 55184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, double v) const { 55284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 55384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 55484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, int32_t v) const { 55584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 55684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 55784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, int64_t v) const { 55884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 55984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 56084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void setVar(uint32_t index, bool v) const { 56184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray setVar(index, &v, sizeof(v)); 56284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 56384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 56484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murraypublic: 56584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray class FieldBase { 56684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray protected: 56784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> mElement; 56884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<Allocation> mAllocation; 56984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray void init(sp<RS> rs, uint32_t dimx, uint32_t usages = 0); 57184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray public: 57384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Element> getElement() { 57484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mElement; 57584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 57684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 57784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Type> getType() { 57884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mAllocation->getType(); 57984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 58084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 58184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray sp<const Allocation> getAllocation() { 58284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray return mAllocation; 58384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray } 58484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 58584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray //void updateAllocation(); 58684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray }; 58784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 58884bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 58984bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayclass ScriptC : public Script { 59084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murrayprotected: 59184bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray ScriptC(sp<RS> rs, 59284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const void *codeTxt, size_t codeLength, 59384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char *cachedName, size_t cachedNameLength, 59484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray const char *cacheDir, size_t cacheDirLength); 59584bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 59684bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray}; 59784bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 5987f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayclass ScriptIntrinsic : public Script { 5997f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray protected: 6003cd44af22622898d3000b2b3c4c408cede294152Tim Murray ScriptIntrinsic(sp<RS> rs, int id, sp<const Element> e); 6017f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}; 6027f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 6037f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayclass ScriptIntrinsicBlend : public ScriptIntrinsic { 6047f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray public: 6053cd44af22622898d3000b2b3c4c408cede294152Tim Murray ScriptIntrinsicBlend(sp<RS> rs, sp <const Element> e); 6067f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendClear(sp<Allocation> in, sp<Allocation> out); 6077f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrc(sp<Allocation> in, sp<Allocation> out); 6087f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDst(sp<Allocation> in, sp<Allocation> out); 6097f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcOver(sp<Allocation> in, sp<Allocation> out); 6107f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstOver(sp<Allocation> in, sp<Allocation> out); 6117f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcIn(sp<Allocation> in, sp<Allocation> out); 6127f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstIn(sp<Allocation> in, sp<Allocation> out); 6137f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcOut(sp<Allocation> in, sp<Allocation> out); 6147f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstOut(sp<Allocation> in, sp<Allocation> out); 6157f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSrcAtop(sp<Allocation> in, sp<Allocation> out); 6167f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendDstAtop(sp<Allocation> in, sp<Allocation> out); 6177f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendXor(sp<Allocation> in, sp<Allocation> out); 6187f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendMultiply(sp<Allocation> in, sp<Allocation> out); 6197f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendAdd(sp<Allocation> in, sp<Allocation> out); 6207f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray void blendSubtract(sp<Allocation> in, sp<Allocation> out); 6217f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}; 62284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 6238f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murrayclass ScriptIntrinsicBlur : public ScriptIntrinsic { 6248f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray public: 6253cd44af22622898d3000b2b3c4c408cede294152Tim Murray ScriptIntrinsicBlur(sp<RS> rs, sp <const Element> e); 6268f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray void blur(sp<Allocation> in, sp<Allocation> out); 6278f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray void setRadius(float radius); 6288f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray}; 6298f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray 63084bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray} 6317f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 63284bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray} 63384bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray 63484bf2b877024aaa154b66e0f2338d54bdabd855aTim Murray#endif 635