diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index ff1fd14..b182efb 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -658,6 +658,24 @@
     memcpy(destPtr, data, dataLength);
 }
 
+void RsdCpuScriptImpl::getGlobalVar(uint32_t slot, void *data, size_t dataLength) {
+    //rsAssert(!script->mFieldIsObject[slot]);
+    //ALOGE("getGlobalVar %p %p %i %p %i", dc, script, slot, data, dataLength);
+
+#ifndef RS_COMPATIBILITY_LIB
+    int32_t *srcPtr = reinterpret_cast<int32_t *>(
+                          mExecutable->getExportVarAddrs()[slot]);
+#else
+    int32_t *srcPtr = reinterpret_cast<int32_t *>(mFieldAddress[slot]);
+#endif
+    if (!srcPtr) {
+        //ALOGV("Calling setVar on slot = %i which is null", slot);
+        return;
+    }
+    memcpy(data, srcPtr, dataLength);
+}
+
+
 void RsdCpuScriptImpl::setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength,
                                                 const Element *elem,
                                                 const size_t *dims, size_t dimLength) {
diff --git a/cpu_ref/rsCpuScript.h b/cpu_ref/rsCpuScript.h
index b9973c9..7d52507 100644
--- a/cpu_ref/rsCpuScript.h
+++ b/cpu_ref/rsCpuScript.h
@@ -62,6 +62,7 @@
     virtual void invokeFreeChildren();
 
     virtual void setGlobalVar(uint32_t slot, const void *data, size_t dataLength);
+    virtual void getGlobalVar(uint32_t slot, void *data, size_t dataLength);
     virtual void setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength,
                                   const Element *e, const size_t *dims, size_t dimLength);
     virtual void setGlobalBind(uint32_t slot, Allocation *data);
diff --git a/cpu_ref/rsd_cpu.h b/cpu_ref/rsd_cpu.h
index 47984d9..d5642aa 100644
--- a/cpu_ref/rsd_cpu.h
+++ b/cpu_ref/rsd_cpu.h
@@ -75,6 +75,7 @@
         virtual void invokeFreeChildren() = 0;
 
         virtual void setGlobalVar(uint32_t slot, const void *data, size_t dataLength) = 0;
+        virtual void getGlobalVar(uint32_t slot, void *data, size_t dataLength) = 0;
         virtual void setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength,
                                       const Element *e, const size_t *dims, size_t dimLength) = 0;
         virtual void setGlobalBind(uint32_t slot, Allocation *data) = 0;
diff --git a/driver/rsdBcc.cpp b/driver/rsdBcc.cpp
index 709d181..9252dbf 100644
--- a/driver/rsdBcc.cpp
+++ b/driver/rsdBcc.cpp
@@ -107,6 +107,13 @@
     cs->setGlobalVar(slot, data, dataLength);
 }
 
+void rsdScriptGetGlobalVar(const Context *dc, const Script *s,
+                           uint32_t slot, void *data, size_t dataLength) {
+    RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
+    cs->getGlobalVar(slot, data, dataLength);
+}
+
+
 void rsdScriptSetGlobalVarWithElemDims(const Context *dc, const Script *s,
                                        uint32_t slot, void *data, size_t dataLength,
                                        const android::renderscript::Element *elem,
diff --git a/driver/rsdBcc.h b/driver/rsdBcc.h
index 7b1b06c..9a194cb 100644
--- a/driver/rsdBcc.h
+++ b/driver/rsdBcc.h
@@ -53,6 +53,9 @@
 void rsdScriptSetGlobalVar(const android::renderscript::Context *,
                            const android::renderscript::Script *,
                            uint32_t slot, void *data, size_t dataLen);
+void rsdScriptGetGlobalVar(const android::renderscript::Context *,
+                           const android::renderscript::Script *,
+                           uint32_t slot, void *data, size_t dataLen);
 void rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *,
                                        const android::renderscript::Script *,
                                        uint32_t slot, void *data,
diff --git a/driver/rsdCore.cpp b/driver/rsdCore.cpp
index 9e55524..d69255b 100644
--- a/driver/rsdCore.cpp
+++ b/driver/rsdCore.cpp
@@ -78,6 +78,7 @@
         rsdScriptInvokeInit,
         rsdScriptInvokeFreeChildren,
         rsdScriptSetGlobalVar,
+        rsdScriptGetGlobalVar,
         rsdScriptSetGlobalVarWithElemDims,
         rsdScriptSetGlobalBind,
         rsdScriptSetGlobalObj,
diff --git a/rs.spec b/rs.spec
index 4836762..385622f 100644
--- a/rs.spec
+++ b/rs.spec
@@ -331,6 +331,13 @@
     param const void * data
     }
 
+ScriptGetVarV {
+    param RsScript s
+    param uint32_t slot
+    param void * data
+    sync
+    }
+
 ScriptSetVarVE {
     param RsScript s
     param uint32_t slot
diff --git a/rsScript.cpp b/rsScript.cpp
index a12505c..4e8ba1e 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -60,6 +60,15 @@
     mRSC->mHal.funcs.script.setGlobalVar(mRSC, this, slot, (void *)val, len);
 }
 
+void Script::getVar(uint32_t slot, const void *val, size_t len) {
+    //ALOGE("getVar %i %p %i", slot, val, len);
+    if (slot >= mHal.info.exportedVariableCount) {
+        ALOGE("Script::getVar unable to set allocation, invalid slot index");
+        return;
+    }
+    mRSC->mHal.funcs.script.getGlobalVar(mRSC, this, slot, (void *)val, len);
+}
+
 void Script::setVar(uint32_t slot, const void *val, size_t len, Element *e,
                     const size_t *dims, size_t dimLen) {
     if (slot >= mHal.info.exportedVariableCount) {
@@ -230,6 +239,11 @@
     s->setVar(slot, data, len);
 }
 
+void rsi_ScriptGetVarV(Context *rsc, RsScript vs, uint32_t slot, void *data, size_t len) {
+    Script *s = static_cast<Script *>(vs);
+    s->getVar(slot, data, len);
+}
+
 void rsi_ScriptSetVarVE(Context *rsc, RsScript vs, uint32_t slot,
                         const void *data, size_t len, RsElement ve,
                         const size_t *dims, size_t dimLen) {
diff --git a/rsScript.h b/rsScript.h
index b6173bb..a1360b5 100644
--- a/rsScript.h
+++ b/rsScript.h
@@ -99,6 +99,7 @@
 
     void setSlot(uint32_t slot, Allocation *a);
     void setVar(uint32_t slot, const void *val, size_t len);
+    void getVar(uint32_t slot, const void *val, size_t len);
     void setVar(uint32_t slot, const void *val, size_t len, Element *e,
                 const size_t *dims, size_t dimLen);
     void setVarObj(uint32_t slot, ObjectBase *val);
diff --git a/rs_hal.h b/rs_hal.h
index 1949a15..1ed26dc 100644
--- a/rs_hal.h
+++ b/rs_hal.h
@@ -121,6 +121,10 @@
                              uint32_t slot,
                              void *data,
                              size_t dataLength);
+        void (*getGlobalVar)(const Context *rsc, const Script *s,
+                             uint32_t slot,
+                             void *data,
+                             size_t dataLength);
         void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s,
                                          uint32_t slot,
                                          void *data,
