Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39ddc950 authored by Jason Sams's avatar Jason Sams
Browse files

Move call to compiler from jni to core library code.

parent bb8505e7
Loading
Loading
Loading
Loading
+2 −19
Original line number Diff line number Diff line
@@ -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);
+5 −1
Original line number Diff line number Diff line
@@ -286,10 +286,14 @@ ScriptCSetOrtho {
	}

ScriptCSetScript {
	param void * accScript
	param void * codePtr
	}

ScriptCSetText {
	param const char * text
	param uint32_t length
	}

ScriptCCreate {
	ret RsScript
	}
+29 −1
Original line number Diff line number Diff line
@@ -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;
}

+6 −1
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ public:

    virtual bool run(Context *, uint32_t launchID);

    const char * mScriptText;
    uint32_t mScriptTextLength;

    ACCscript*    mAccScript;
    rsc_RunScript mScript;
@@ -58,6 +60,8 @@ public:
    ~ScriptCState();

    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();
};