10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009-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 ANDROID_RS_SCRIPT_C_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_SCRIPT_C_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsScript.h" 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsEnv.h" 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// --------------------------------------------------------------------------- 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ScriptC : public Script { 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic: 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines typedef int (*RunScript_t)(); 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines typedef void (*VoidFunc_t)(); 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ScriptC(Context *); 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual ~ScriptC(); 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len); 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual uint32_t run(Context *); 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void runForEach(Context *rsc, 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const Allocation * ain, 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation * aout, 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void * usr, 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t usrBytes, 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsScriptCall *sc = NULL); 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual void serialize(Context *rsc, OStream *stream) const { } 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_SCRIPT_C; } 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines static Type *createFromStream(Context *rsc, IStream *stream) { return NULL; } 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool runCompiler(Context *rsc, const char *resName, const char *cacheDir, 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const uint8_t *bitcode, size_t bitcodeLen); 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines//protected: 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setupScript(Context *); 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void setupGLState(Context *); 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Script * setTLS(Script *); 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass ScriptCState { 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic: 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ScriptCState(); 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines ~ScriptCState(); 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char * mScriptText; 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t mScriptLen; 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines struct SymbolTable_t { 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const char * mName; 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void * mPtr; 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines bool threadable; 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines }; 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines static const SymbolTable_t * lookupSymbol(const char *); 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines static const SymbolTable_t * lookupSymbolCL(const char *); 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines static const SymbolTable_t * lookupSymbolGL(const char *); 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}; 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 84