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

Commit 7087c0ea authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 3386

* changes:
  Move call to compiler from jni to core library code.
parents d2544db0 39ddc950
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();
};