10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef RSD_CORE_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define RSD_CORE_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <rs_hal.h> 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsMutex.h" 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsSignal.h" 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef void (* InvokeFunc_t)(void); 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef void (* ForEachFunc_t)(void); 27b54fe7cb6c2932c38021b899b0485cd2e25e623fStephen Hinestypedef int (* RootFunc_t)(void); 28b54fe7cb6c2932c38021b899b0485cd2e25e623fStephen Hines 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef void (*WorkerCallback_t)(void *usr, uint32_t idx); 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct RsdSymbolTableRec { 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char * mName; 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void * mPtr; 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool threadable; 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} RsdSymbolTable; 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct ScriptTLSStructRec { 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Context * mContext; 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script * mScript; 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} ScriptTLSStruct; 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct RsdHalRec { 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t version_major; 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t version_minor; 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mHasGraphics; 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mInForEach; 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct Workers { 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines volatile int mRunningCount; 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines volatile int mLaunchCount; 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t mCount; 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines pthread_t *mThreadId; 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines pid_t *mNativeThreadId; 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Signal mCompleteSignal; 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Signal *mLaunchSignals; 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines WorkerCallback_t mLaunchCallback; 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *mLaunchData; 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines }; 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Workers mWorkers; 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool mExit; 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ScriptTLSStruct mTlsStruct; 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 6533b0a9fe4f0fc7bd26378420af259d24036caa22Stephen Hines //RsdGL gl; 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} RsdHal; 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern pthread_key_t rsdgThreadTLSKey; 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern uint32_t rsdgThreadTLSKeyCount; 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern pthread_mutex_t rsdgInitMutex; 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdLaunchThreads(android::renderscript::Context *rsc, WorkerCallback_t cbk, void *data); 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 77