From 39ddc950c9064129ead5de04b200106c0659f937 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Fri, 5 Jun 2009 17:35:09 -0700 Subject: [PATCH] Move call to compiler from jni to core library code. --- libs/rs/jni/RenderScript_jni.cpp | 21 ++------------------- libs/rs/rs.spec | 6 +++++- libs/rs/rsScriptC.cpp | 30 +++++++++++++++++++++++++++++- libs/rs/rsScriptC.h | 7 ++++++- 4 files changed, 42 insertions(+), 22 deletions(-) diff --git a/libs/rs/jni/RenderScript_jni.cpp b/libs/rs/jni/RenderScript_jni.cpp index 61866b7482e56..677ce0cbb68d4 100644 --- a/libs/rs/jni/RenderScript_jni.cpp +++ b/libs/rs/jni/RenderScript_jni.cpp @@ -35,8 +35,6 @@ #include "../RenderScript.h" #include "../RenderScriptEnv.h" -#include "acc/acc.h" - //#define LOG_API LOGE #define LOG_API(...) @@ -567,8 +565,6 @@ nScriptCSetScript(JNIEnv *_env, jobject _this, jbyteArray scriptRef, jint remaining; jbyte* script_base = 0; jbyte* script_ptr; - ACCscript* script = 0; - void* scriptEntry = 0; if (!scriptRef) { _exception = 1; //_env->ThrowNew(IAEClass, "script == null"); @@ -594,22 +590,9 @@ nScriptCSetScript(JNIEnv *_env, jobject _this, jbyteArray scriptRef, _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0); script_ptr = script_base + offset; - { - script = accCreateScript(); - const char* scriptSource[] = {(const char*) script_ptr}; - int scriptLength[] = {length} ; - accScriptSource(script, 1, scriptSource, scriptLength); - accCompileScript(script); - accGetScriptLabel(script, "main", (ACCvoid**) &scriptEntry); - } - if (scriptEntry) { - rsScriptCSetScript((void*) script, (void *)scriptEntry); - script = 0; - } + rsScriptCSetText((const char *)script_ptr, length); + exit: - if (script) { - accDeleteScript(script); - } if (script_base) { _env->ReleasePrimitiveArrayCritical(scriptRef, script_base, _exception ? JNI_ABORT: 0); diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec index 090be3219c22e..4ffdfce8431a5 100644 --- a/libs/rs/rs.spec +++ b/libs/rs/rs.spec @@ -286,10 +286,14 @@ ScriptCSetOrtho { } ScriptCSetScript { - param void * accScript param void * codePtr } +ScriptCSetText { + param const char * text + param uint32_t length + } + ScriptCCreate { ret RsScript } diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index 36019abac21eb..be0191b055584 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -28,6 +28,8 @@ ScriptC::ScriptC() { mAccScript = NULL; mScript = NULL; + mScriptText = NULL; + mScriptTextLength = 0; } ScriptC::~ScriptC() @@ -418,6 +420,21 @@ void ScriptCState::clear() mScript = NULL; mIsRoot = false; mIsOrtho = true; + mScriptText = NULL; + mScriptTextLength = 0; +} + +void ScriptCState::runCompiler() +{ + mAccScript = accCreateScript(); + + LOGE("Compiler 1"); + const char* scriptSource[] = {mScriptText}; + int scriptLength[] = {mScriptTextLength} ; + accScriptSource(mAccScript, 1, scriptSource, scriptLength); + accCompileScript(mAccScript); + accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mScript); + LOGE("Compiler 1"); } namespace android { @@ -475,10 +492,20 @@ void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho) ss->mIsOrtho = isOrtho; } +void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) +{ + ScriptCState *ss = &rsc->mScriptC; + ss->mScriptText = text; + ss->mScriptTextLength = len; +} + + RsScript rsi_ScriptCCreate(Context * rsc) { ScriptCState *ss = &rsc->mScriptC; + ss->runCompiler(); + ScriptC *s = new ScriptC(); s->mAccScript = ss->mAccScript; ss->mAccScript = NULL; @@ -491,7 +518,8 @@ RsScript rsi_ScriptCCreate(Context * rsc) s->mClearStencil = ss->mClearStencil; s->mIsRoot = ss->mIsRoot; s->mIsOrtho = ss->mIsOrtho; - + s->mScriptText = ss->mScriptText; + s->mScriptTextLength = ss->mScriptTextLength; return s; } diff --git a/libs/rs/rsScriptC.h b/libs/rs/rsScriptC.h index 283007ef6cab5..664bd6dd4fff6 100644 --- a/libs/rs/rsScriptC.h +++ b/libs/rs/rsScriptC.h @@ -39,6 +39,8 @@ public: virtual bool run(Context *, uint32_t launchID); + const char * mScriptText; + uint32_t mScriptTextLength; ACCscript* mAccScript; rsc_RunScript mScript; @@ -57,7 +59,9 @@ public: ScriptCState(); ~ScriptCState(); - ACCscript* mAccScript; + ACCscript* mAccScript; + const char * mScriptText; + uint32_t mScriptTextLength; rsc_RunScript mScript; float mClearColor[4]; float mClearDepth; @@ -68,6 +72,7 @@ public: Vector mConstantBufferTypes; void clear(); + void runCompiler(); };