Remove more pieces of setRoot.  Add pointer to allocation lookup for scripts.

Change-Id: I2c3075d2056f02bb834bfad403dc72da991f3156
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 6796505..92ac573 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -138,7 +138,6 @@
     native void nScriptSetClearDepth(int script, float depth);
     native void nScriptSetClearStencil(int script, int stencil);
     native void nScriptSetTimeZone(int script, byte[] timeZone);
-    native void nScriptSetRoot(boolean isRoot);
     native void nScriptInvoke(int id, int slot);
     native void nScriptInvokeData(int id, int slot);
     native void nScriptInvokeV(int id, int slot, byte[] params);
diff --git a/graphics/java/android/renderscript/ScriptC.java b/graphics/java/android/renderscript/ScriptC.java
index c1ba000..5959be4 100644
--- a/graphics/java/android/renderscript/ScriptC.java
+++ b/graphics/java/android/renderscript/ScriptC.java
@@ -39,11 +39,11 @@
 
     protected ScriptC(RenderScript rs, Resources resources, int resourceID, boolean isRoot) {
         super(0, rs);
-        mID = internalCreate(rs, resources, resourceID, isRoot);
+        mID = internalCreate(rs, resources, resourceID);
     }
 
 
-    private static synchronized int internalCreate(RenderScript rs, Resources resources, int resourceID, boolean isRoot) {
+    private static synchronized int internalCreate(RenderScript rs, Resources resources, int resourceID) {
         byte[] pgm;
         int pgmLength;
         InputStream is = resources.openRawResource(resourceID);
@@ -74,7 +74,6 @@
 
         rs.nScriptCBegin();
         rs.nScriptCSetScript(pgm, 0, pgmLength);
-        rs.nScriptSetRoot(isRoot);
         return rs.nScriptCCreate();
     }
 
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 65a6e6d..7170e5a 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -949,13 +949,6 @@
     _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
 }
 
-static void
-nScriptSetRoot(JNIEnv *_env, jobject _this, jboolean isRoot)
-{
-    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
-    LOG_API("nScriptCSetRoot, con(%p), isRoot(%i)", con, isRoot);
-    rsScriptSetRoot(con, isRoot);
-}
 
 // -----------------------------------
 
@@ -1421,7 +1414,6 @@
 {"nScriptSetClearDepth",           "(IF)V",                                (void*)nScriptSetClearDepth },
 {"nScriptSetClearStencil",         "(II)V",                                (void*)nScriptSetClearStencil },
 {"nScriptSetTimeZone",             "(I[B)V",                               (void*)nScriptSetTimeZone },
-{"nScriptSetRoot",                 "(Z)V",                                 (void*)nScriptSetRoot },
 {"nScriptInvoke",                  "(II)V",                                (void*)nScriptInvoke },
 {"nScriptInvokeData",              "(II)V",                                (void*)nScriptInvokeData },
 {"nScriptInvokeV",                 "(II[B)V",                              (void*)nScriptInvokeV },
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index e2daabe..e26b051 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -217,7 +217,6 @@
 
         ScriptC.Builder sb = new ScriptC.Builder(mRS);
         sb.setScript(mRes, R.raw.filmstrip);
-        //sb.setRoot(true);
         //sb.setType(mStripPositionType, "Pos", 1);
         mScriptStrip = sb.create();
         mScriptStrip.setClearColor(0.0f, 0.0f, 0.0f, 1.0f);
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 2aa12da..4ad25ae 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -293,10 +293,6 @@
 	togglePlay
 	}
 
-ScriptSetRoot {
-	param bool isRoot
-	}
-
 ScriptSetVarI {
 	param RsScript s
 	param uint32_t slot
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index 1dd9554f..b0bbb22 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -97,12 +97,6 @@
     LOGE("rsi_ScriptSetType");
 }
 
-void rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot)
-{
-    LOGE("rsi_ScriptSetInvoke");
-}
-
-
 void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot)
 {
     //LOGE("rsi_ScriptInvoke %i", slot);
@@ -177,11 +171,6 @@
 
 }
 
-void rsi_ScriptSetRoot(Context * rsc, bool isRoot)
-{
-    LOGE("rsi_ScriptSetRoot");
-}
-
 void rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value)
 {
     Script *s = static_cast<Script *>(vs);
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index e9ba226..8a60d1e 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -71,6 +71,22 @@
     }
 }
 
+const Allocation *ScriptC::ptrToAllocation(const void *ptr) const
+{
+    if (!ptr) {
+        return NULL;
+    }
+    for (uint32_t ct=0; ct < mEnviroment.mFieldCount; ct++) {
+        if (!mSlots[ct].get())
+            continue;
+        if (mSlots[ct]->getPtr() == ptr) {
+            return mSlots[ct].get();
+        }
+    }
+    LOGE("ScriptC::ptrToAllocation, failed to find %p", ptr);
+    return NULL;
+}
+
 
 uint32_t ScriptC::run(Context *rsc, uint32_t launchIndex)
 {
diff --git a/libs/rs/rsScriptC.h b/libs/rs/rsScriptC.h
index c23fb73..3cb9a0b 100644
--- a/libs/rs/rsScriptC.h
+++ b/libs/rs/rsScriptC.h
@@ -52,6 +52,8 @@
 
     BCCscript*    mBccScript;
 
+    const Allocation *ptrToAllocation(const void *) const;
+
     virtual void setupScript();
     virtual uint32_t run(Context *, uint32_t launchID);
 };
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index 0e09474..19dfaff 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -1113,6 +1113,14 @@
     return a / b;
 }
 
+int SC_getAllocation(const void *ptr)
+{
+    GET_TLS();
+    const Allocation *alloc = sc->ptrToAllocation(ptr);
+    return (int)alloc;
+}
+
+
 //////////////////////////////////////////////////////////////////////////////
 // Class implementation
 //////////////////////////////////////////////////////////////////////////////
@@ -1368,6 +1376,8 @@
     { "debugPi", (void *)&SC_debugPi },
 
     { "scriptCall", (void *)&SC_scriptCall },
+    { "rsGetAllocation", (void *)&SC_getAllocation },
+
 
     { NULL, NULL }
 };
diff --git a/libs/rs/scriptc/rs_math.rsh b/libs/rs/scriptc/rs_math.rsh
index 48ab066..1d2f1e4 100644
--- a/libs/rs/scriptc/rs_math.rsh
+++ b/libs/rs/scriptc/rs_math.rsh
@@ -650,4 +650,5 @@
 extern void matrixScale(void *mat, float x, float y, float z);
 extern void matrixTranslate(void *mat, float x, float y, float z);
 
+extern rs_allocation rsGetAllocation(const void *);