Fix isObject when in 64bit mode.

This also cleans up the passing of args to SetObject and ClearObject.
Fix related issues in 64bit teardown.

Change-Id: I90d1b93c45ff5bc84957d5441ab48a4e2f6feb20
diff --git a/rsScriptC_Lib.cpp b/rsScriptC_Lib.cpp
index 26d8fb0..096122e 100644
--- a/rsScriptC_Lib.cpp
+++ b/rsScriptC_Lib.cpp
@@ -146,6 +146,7 @@
     }
 }
 
+// Legacy, remove when drivers are updated
 void rsrSetObject(const Context *rsc, void *dst, ObjectBase *src) {
     ObjectBase **odst = (ObjectBase **)dst;
     //ALOGE("rsrSetObject (base) %p,%p  %p", dst, *odst, src);
@@ -155,7 +156,16 @@
     }
 }
 
+void rsrSetObject(const Context *rsc, rs_object_base *dst, const ObjectBase *src) {
+    ObjectBase **odst = (ObjectBase **)dst;
+    //ALOGE("rsrSetObject (base) %p,%p  %p", dst, *odst, src);
+    SetObjectRef(rsc, odst[0], src);
+    if (src != NULL) {
+        src->callUpdateCacheObject(rsc, dst);
+    }
+}
 
+// Legacy, remove when drivers are updated
 void rsrClearObject(const Context *rsc, void *dst) {
     ObjectBase **odst = (ObjectBase **)dst;
     //ALOGE("rsrClearObject  %p,%p", odst, *odst);
@@ -166,8 +176,23 @@
     *odst = NULL;
 }
 
-bool rsrIsObject(const Context *rsc, const ObjectBase *src) {
-    return src != NULL;
+void rsrClearObject(const Context *rsc, rs_object_base *dst) {
+    //ALOGE("rsrClearObject  %p,%p", odst, *odst);
+    if (dst->p) {
+        CHECK_OBJ(dst->p);
+        dst->p->decSysRef();
+    }
+    dst->p = NULL;
+}
+
+// Legacy, remove when drivers are updated
+bool rsrIsObject(const Context *rsc, const void *src) {
+    ObjectBase **osrc = (ObjectBase **)src;
+    return osrc != NULL;
+}
+
+bool rsrIsObject(const Context *rsc, rs_object_base o) {
+    return o.p != NULL;
 }