Move call to compiler from jni to core library code.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -286,10 +286,14 @@ ScriptCSetOrtho {
|
||||
}
|
||||
|
||||
ScriptCSetScript {
|
||||
param void * accScript
|
||||
param void * codePtr
|
||||
}
|
||||
|
||||
ScriptCSetText {
|
||||
param const char * text
|
||||
param uint32_t length
|
||||
}
|
||||
|
||||
ScriptCCreate {
|
||||
ret RsScript
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<const Type *> mConstantBufferTypes;
|
||||
|
||||
void clear();
|
||||
void runCompiler();
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user