1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_SCRIPT_C_H
18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_SCRIPT_C_H
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScript.h"
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "RenderScriptEnv.h"
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
24d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato#include <utils/KeyedVector.h>
25d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
26ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevichstruct ACCscript;
27ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich
28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
29d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android {
30d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript {
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
32ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
34d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass ScriptC : public Script
35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
36d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
37c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams    typedef int (*RunScript_t)(uint32_t launchIndex);
382525a815220652b37e2e390fe8c62394a6d0e574Jason Sams    typedef void (*VoidFunc_t)();
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
40a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    ScriptC(Context *);
41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    virtual ~ScriptC();
42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
433a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    struct Program_t {
44928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams        int mVersionMajor;
45928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams        int mVersionMinor;
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
47c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        RunScript_t mScript;
482525a815220652b37e2e390fe8c62394a6d0e574Jason Sams        VoidFunc_t mInit;
492525a815220652b37e2e390fe8c62394a6d0e574Jason Sams
502525a815220652b37e2e390fe8c62394a6d0e574Jason Sams        void ** mSlotPointers[MAX_SCRIPT_BANKS];
513a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    };
523a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams
533a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    Program_t mProgram;
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
55ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich    ACCscript*    mAccScript;
56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
57e60446b9c1a0f4f48372a36de5b01a2ddb8121e3Jason Sams    virtual void setupScript();
58b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    virtual uint32_t run(Context *, uint32_t launchID);
59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
61ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevichclass ScriptCState
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ScriptCState();
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ~ScriptCState();
66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
67be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    ScriptC *mScript;
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
6943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    ObjectBaseRef<const Type> mConstantBufferTypes[MAX_SCRIPT_BANKS];
70fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    String8 mSlotNames[MAX_SCRIPT_BANKS];
71334ea0c98f051b5a6b85bc616c93304651854298Jason Sams    bool mSlotWritable[MAX_SCRIPT_BANKS];
72be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    String8 mInvokableNames[MAX_SCRIPT_BANKS];
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void clear();
75be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    void runCompiler(Context *rsc, ScriptC *s);
7666b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams    void appendVarDefines(const Context *rsc, String8 *str);
7766b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams    void appendTypes(const Context *rsc, String8 *str);
7854440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams
7954440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    struct SymbolTable_t {
8054440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams        const char * mName;
8154440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams        void * mPtr;
82c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        const char * mRet;
83c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        const char * mParam;
8454440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    };
8554440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    static SymbolTable_t gSyms[];
8654440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    static const SymbolTable_t * lookupSymbol(const char *);
87764205c19420256ccc05df2a1669a7b69c5daaf9Jason Sams    static void appendDecls(String8 *str);
88d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
89d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    KeyedVector<String8,int> mInt32Defines;
90d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    KeyedVector<String8,float> mFloatDefines;
91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
100