RenderScript.h revision 69cccdf0659a193d6a75420ec745421fb5c436e6
1221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams/* 269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams * Copyright (C) 2012 The Android Open Source Project 3221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 4221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * you may not use this file except in compliance with the License. 6221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * You may obtain a copy of the License at 7221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 8221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 10221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Unless required by applicable law or agreed to in writing, software 11221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * See the License for the specific language governing permissions and 14221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * limitations under the License. 15221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams */ 16221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 17221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#ifndef ANDROID_RENDERSCRIPT_H 18221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#define ANDROID_RENDERSCRIPT_H 19221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 20221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 21221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <pthread.h> 22221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <utils/String8.h> 23221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <utils/Vector.h> 24221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 25e23d239828a229eb7d4d33c9630070f0a87833e1Alex Sakhartchouk#include "rsDefines.h" 26221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 2769cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace android { 2869cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace renderscriptCpp { 2969cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams 30221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsclass Element; 31221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsclass Type; 32221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsclass Allocation; 33221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 34221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsclass RenderScript { 35221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams friend class BaseObj; 36221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams friend class Allocation; 37221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams friend class Element; 38221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams friend class Type; 39b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams friend class Script; 40b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams friend class ScriptC; 41221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 42221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samspublic: 43221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams RenderScript(); 44221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams virtual ~RenderScript(); 45221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 46221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams typedef void (*ErrorHandlerFunc_t)(uint32_t errorNum, const char *errorText); 47221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams typedef void (*MessageHandlerFunc_t)(uint32_t msgNum, const void *msgData, size_t msgLen); 48221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 49221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 50221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams void setErrorHandler(ErrorHandlerFunc_t func); 51221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ErrorHandlerFunc_t getErrorHandler() {return mErrorFunc;} 52221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 53221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams void setMessageHandler(MessageHandlerFunc_t func); 54221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams MessageHandlerFunc_t getMessageHandler() {return mMessageFunc;} 55221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 56221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams bool init(int targetApi); 57221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams void contextDump(); 58221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams void finish(); 59221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 60221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsprivate: 61221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams static bool gInitialized; 62221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams static pthread_mutex_t gInitMutex; 63221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 64221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams pthread_t mMessageThreadId; 65221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams pid_t mNativeMessageThreadId; 66221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams bool mMessageRun; 67221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 68221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams RsDevice mDev; 69221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams RsContext mContext; 70221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 71221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ErrorHandlerFunc_t mErrorFunc; 72221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams MessageHandlerFunc_t mMessageFunc; 73221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 74221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams struct { 75221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *U8; 76221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *I8; 77221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *U16; 78221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *I16; 79221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *U32; 80221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *I32; 81221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *U64; 82221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *I64; 83221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *F32; 84221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *F64; 85221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *BOOLEAN; 86221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 87221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *ELEMENT; 88221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *TYPE; 89221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *ALLOCATION; 90221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *SAMPLER; 91221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *SCRIPT; 92221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *MESH; 93221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *PROGRAM_FRAGMENT; 94221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *PROGRAM_VERTEX; 95221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *PROGRAM_RASTER; 96221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *PROGRAM_STORE; 97221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 98221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *A_8; 99221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *RGB_565; 100221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *RGB_888; 101221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *RGBA_5551; 102221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *RGBA_4444; 103221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *RGBA_8888; 104221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 105221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *FLOAT_2; 106221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *FLOAT_3; 107221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *FLOAT_4; 108221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 109221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *DOUBLE_2; 110221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *DOUBLE_3; 111221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *DOUBLE_4; 112221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 113221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UCHAR_2; 114221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UCHAR_3; 115221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UCHAR_4; 116221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 117221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *CHAR_2; 118221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *CHAR_3; 119221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *CHAR_4; 120221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 121221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *USHORT_2; 122221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *USHORT_3; 123221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *USHORT_4; 124221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 125221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *SHORT_2; 126221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *SHORT_3; 127221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *SHORT_4; 128221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 129221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UINT_2; 130221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UINT_3; 131221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *UINT_4; 132221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 133221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *INT_2; 134221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *INT_3; 135221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *INT_4; 136221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 137221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *ULONG_2; 138221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *ULONG_3; 139221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *ULONG_4; 140221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 141221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *LONG_2; 142221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *LONG_3; 143221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *LONG_4; 144221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 145221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *MATRIX_4X4; 146221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *MATRIX_3X3; 147221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Element *MATRIX_2X2; 148221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } mElements; 149221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 150221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 151221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 152b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams void throwError(const char *err) const; 153221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 154221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams static void * threadProc(void *); 155221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 156221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams}; 157221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 15869cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams} 15969cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams} 160221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#endif 161221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 162