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