Add support for Float64 (double) to RenderScript.

Change-Id: Iad1c4adadf657a46aa38a3fad7813927e643e29d
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 1312036..159e070 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -358,6 +358,10 @@
     synchronized void nScriptSetVarF(int id, int slot, float val) {
         rsnScriptSetVarF(mContext, id, slot, val);
     }
+    native void rsnScriptSetVarD(int con, int id, int slot, double val);
+    synchronized void nScriptSetVarD(int id, int slot, double val) {
+        rsnScriptSetVarD(mContext, id, slot, val);
+    }
     native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
     synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
         rsnScriptSetVarV(mContext, id, slot, val);
diff --git a/graphics/java/android/renderscript/Script.java b/graphics/java/android/renderscript/Script.java
index 19c444c..8772c4c 100644
--- a/graphics/java/android/renderscript/Script.java
+++ b/graphics/java/android/renderscript/Script.java
@@ -72,6 +72,10 @@
         mRS.nScriptSetVarF(mID, index, v);
     }
 
+    public void setVar(int index, double v) {
+        mRS.nScriptSetVarD(mID, index, v);
+    }
+
     public void setVar(int index, int v) {
         mRS.nScriptSetVarI(mID, index, v);
     }
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index f386537..ee2080e 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -791,11 +791,18 @@
 static void
 nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
 {
-    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
+    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
     rsScriptSetVarF(con, (RsScript)script, slot, val);
 }
 
 static void
+nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
+{
+    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
+    rsScriptSetVarD(con, (RsScript)script, slot, val);
+}
+
+static void
 nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
 {
     LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
@@ -1281,6 +1288,7 @@
 {"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
 {"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
 {"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
+{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
 {"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
 
 {"rsnScriptCBegin",                  "(I)V",                                  (void*)nScriptCBegin },
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index c7fb2af..31d70c7 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -338,6 +338,12 @@
 	param float value
 	}
 
+ScriptSetVarD {
+	param RsScript s
+	param uint32_t slot
+	param double value
+	}
+
 ScriptSetVarV {
 	param RsScript s
 	param uint32_t slot
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index fc22fc3..43bb09e 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -101,6 +101,12 @@
     s->setVar(slot, &value, sizeof(value));
 }
 
+void rsi_ScriptSetVarD(Context *rsc, RsScript vs, uint32_t slot, double value)
+{
+    Script *s = static_cast<Script *>(vs);
+    s->setVar(slot, &value, sizeof(value));
+}
+
 void rsi_ScriptSetVarV(Context *rsc, RsScript vs, uint32_t slot, const void *data, uint32_t len)
 {
     const float *fp = (const float *)data;