rsScriptC.h revision 334ea0c98f051b5a6b85bc616c93304651854298
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);
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ScriptC();
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    virtual ~ScriptC();
41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
423a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    struct Program_t {
433a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams        const char * mScriptText;
443a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams        uint32_t mScriptTextLength;
45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
463a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams
47928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams        int mVersionMajor;
48928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams        int mVersionMinor;
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        RunScript_t mScript;
513a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    };
523a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams
533a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    Program_t mProgram;
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
55ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevich    ACCscript*    mAccScript;
56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
573a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    virtual bool run(Context *, uint32_t launchID);
58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
60ec5a20bf2b9f563f9f6a4bde4d8cbbe13598fd25Jack Palevichclass ScriptCState
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ScriptCState();
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ~ScriptCState();
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
6639ddc950c9064129ead5de04b200106c0659f937Jason Sams    ACCscript* mAccScript;
673a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams
683a833d8e0f5e1f09a9e276d0f8faf18f7ab86e27Jason Sams    ScriptC::Program_t mProgram;
69da423d8479a2cefb456a03d7dc550e74e473acf4Jason Sams    Script::Enviroment_t mEnviroment;
70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    ObjectBaseRef<const Type> mConstantBufferTypes[MAX_SCRIPT_BANKS];
72fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    String8 mSlotNames[MAX_SCRIPT_BANKS];
73334ea0c98f051b5a6b85bc616c93304651854298Jason Sams    bool mSlotWritable[MAX_SCRIPT_BANKS];
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
75d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void clear();
763eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    void runCompiler(Context *rsc);
77d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    void appendVarDefines(String8 *str);
7843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    void appendTypes(String8 *str);
7954440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams
8054440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    struct SymbolTable_t {
8154440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams        const char * mName;
8254440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams        void * mPtr;
83c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        const char * mRet;
84c97bb8844f9887d915d3c9e4b3582bd761357f98Jason Sams        const char * mParam;
8554440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    };
8654440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    static SymbolTable_t gSyms[];
8754440a01a97144efb6a3106fc8e63152f47e97f9Jason Sams    static const SymbolTable_t * lookupSymbol(const char *);
88764205c19420256ccc05df2a1669a7b69c5daaf9Jason Sams    static void appendDecls(String8 *str);
89d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
90d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    KeyedVector<String8,int> mInt32Defines;
91d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    KeyedVector<String8,float> mFloatDefines;
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
100d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
101