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

Commit 206b8319 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 2658

* changes:
  Delete the acc script when deleting the Renderscript rsScriptC object.
parents fb1bf92c ec5a20bf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ LOCAL_SRC_FILES:= \
	rsType.cpp \
	rsTriangleMesh.cpp

LOCAL_SHARED_LIBRARIES += libcutils libutils libEGL libGLESv1_CM libui 
LOCAL_SHARED_LIBRARIES += libcutils libutils libEGL libGLESv1_CM libui libacc
LOCAL_LDLIBS := -lpthread -ldl
LOCAL_MODULE:= libRS

+7 −4
Original line number Diff line number Diff line
@@ -533,6 +533,7 @@ 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;
@@ -560,19 +561,21 @@ nScriptCSetScript(JNIEnv *_env, jobject _this, jbyteArray scriptRef,
    script_ptr = script_base + offset;

    {
        ACCscript* script = accCreateScript();
        script = accCreateScript();
        const char* scriptSource[] = {(const char*) script_ptr};
        int scriptLength[] = {length} ;
        accScriptSource(script, 1, scriptSource, scriptLength);
        accCompileScript(script);
        accGetScriptLabel(script, "main", (ACCvoid**) &scriptEntry);
        // TBD: We currently leak the script object. We can't delete it until
        // we are done with the scriptEntry.
    }
    if (scriptEntry) {
        rsScriptCSetScript((void *)scriptEntry);
        rsScriptCSetScript((void*) script, (void *)scriptEntry);
        script = 0;
    }
exit:
    if (script) {
        accDeleteScript(script);
    }
    if (script_base) {
        _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
                _exception ? JNI_ABORT: 0);
+2 −1
Original line number Diff line number Diff line
@@ -288,7 +288,8 @@ ScriptCSetOrtho {
	}

ScriptCSetScript {
	param void * ptr
	param void * accScript
	param void * codePtr
	}

ScriptCCreate {
+14 −1
Original line number Diff line number Diff line
@@ -18,17 +18,23 @@
#include "rsScriptC.h"
#include "rsMatrix.h"

#include "acc/acc.h"

using namespace android;
using namespace android::renderscript;


ScriptC::ScriptC()
{
    mAccScript = NULL;
    mScript = NULL;
}

ScriptC::~ScriptC()
{
    if (mAccScript) {
        accDeleteScript(mAccScript);
    }
}

extern "C" void matrixLoadIdentity(void *con, rsc_Matrix *mat)
@@ -394,6 +400,9 @@ ScriptCState::ScriptCState()

ScriptCState::~ScriptCState()
{
    if (mAccScript) {
        accDeleteScript(mAccScript);
    }
}

void ScriptCState::clear()
@@ -405,6 +414,7 @@ void ScriptCState::clear()
    mClearColor[3] = 1;
    mClearDepth = 1;
    mClearStencil = 0;
    mAccScript = NULL;
    mScript = NULL;
    mIsRoot = false;
    mIsOrtho = true;
@@ -446,9 +456,10 @@ void rsi_ScriptCAddType(Context * rsc, RsType vt)
    ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
}

void rsi_ScriptCSetScript(Context * rsc, void *vp)
void rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
{
    ScriptCState *ss = &rsc->mScriptC;
    ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
    ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
}

@@ -469,6 +480,8 @@ RsScript rsi_ScriptCCreate(Context * rsc)
    ScriptCState *ss = &rsc->mScriptC;

    ScriptC *s = new ScriptC();
    s->mAccScript = ss->mAccScript;
    ss->mAccScript = NULL;
    s->mScript = ss->mScript;
    s->mClearColor[0] = ss->mClearColor[0];
    s->mClearColor[1] = ss->mClearColor[1];
+6 −3
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@

#include "RenderScriptEnv.h"

struct ACCscript;

// ---------------------------------------------------------------------------
namespace android {
namespace renderscript {
@@ -38,6 +40,7 @@ public:
    virtual void run(Context *, uint32_t launchID);


    ACCscript*    mAccScript;
    rsc_RunScript mScript;


@@ -54,7 +57,7 @@ public:
    ScriptCState();
    ~ScriptCState();


    ACCscript*    mAccScript;
    rsc_RunScript mScript;
    float mClearColor[4];
    float mClearDepth;