diff --git a/driver/rsdBcc.cpp b/driver/rsdBcc.cpp
index 9789cab..d9b5212 100644
--- a/driver/rsdBcc.cpp
+++ b/driver/rsdBcc.cpp
@@ -24,6 +24,7 @@
 #include <bcc/RenderScript/RSInfo.h>
 
 #include "rsContext.h"
+#include "rsElement.h"
 #include "rsScriptC.h"
 
 #include "utils/Vector.h"
@@ -432,6 +433,47 @@
     memcpy(destPtr, data, dataLength);
 }
 
+void rsdScriptSetGlobalVarWithElemDims(
+        const android::renderscript::Context *dc,
+        const android::renderscript::Script *script,
+        uint32_t slot, void *data, size_t dataLength,
+        const android::renderscript::Element *elem,
+        const size_t *dims, size_t dimLength) {
+    DrvScript *drv = (DrvScript *)script->mHal.drv;
+
+    int32_t *destPtr = reinterpret_cast<int32_t *>(
+                          drv->mExecutable->getExportVarAddrs()[slot]);
+    if (!destPtr) {
+        //ALOGV("Calling setVar on slot = %i which is null", slot);
+        return;
+    }
+
+    // We want to look at dimension in terms of integer components,
+    // but dimLength is given in terms of bytes.
+    dimLength /= sizeof(int);
+
+    // Only a single dimension is currently supported.
+    rsAssert(dimLength == 1);
+    if (dimLength == 1) {
+        // First do the increment loop.
+        size_t stride = elem->getSizeBytes();
+        char *cVal = reinterpret_cast<char *>(data);
+        for (size_t i = 0; i < dims[0]; i++) {
+            elem->incRefs(cVal);
+            cVal += stride;
+        }
+
+        // Decrement loop comes after (to prevent race conditions).
+        char *oldVal = reinterpret_cast<char *>(destPtr);
+        for (size_t i = 0; i < dims[0]; i++) {
+            elem->decRefs(oldVal);
+            oldVal += stride;
+        }
+    }
+
+    memcpy(destPtr, data, dataLength);
+}
+
 void rsdScriptSetGlobalBind(const Context *dc, const Script *script, uint32_t slot, void *data) {
     DrvScript *drv = (DrvScript *)script->mHal.drv;
     //rsAssert(!script->mFieldIsObject[slot]);
diff --git a/driver/rsdBcc.h b/driver/rsdBcc.h
index 5f83ed2..7a4b138 100644
--- a/driver/rsdBcc.h
+++ b/driver/rsdBcc.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2011-2012 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -49,6 +49,13 @@
 void rsdScriptSetGlobalVar(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,
+                                       size_t dataLength,
+                                       const android::renderscript::Element *,
+                                       const size_t *dims,
+                                       size_t dimLength);
 void rsdScriptSetGlobalBind(const android::renderscript::Context *,
                             const android::renderscript::Script *,
                             uint32_t slot, void *data);
diff --git a/driver/rsdCore.cpp b/driver/rsdCore.cpp
index 016e441..64b4807 100644
--- a/driver/rsdCore.cpp
+++ b/driver/rsdCore.cpp
@@ -60,6 +60,7 @@
         rsdScriptInvokeInit,
         rsdScriptInvokeFreeChildren,
         rsdScriptSetGlobalVar,
+        rsdScriptSetGlobalVarWithElemDims,
         rsdScriptSetGlobalBind,
         rsdScriptSetGlobalObj,
         rsdScriptDestroy
diff --git a/rs.spec b/rs.spec
index b373056..f32443f 100644
--- a/rs.spec
+++ b/rs.spec
@@ -330,6 +330,14 @@
     param const void * data
     }
 
+ScriptSetVarVE {
+    param RsScript s
+    param uint32_t slot
+    param const void * data
+    param RsElement e
+    param const size_t * dims
+    }
+
 
 ScriptCCreate {
         param const char * resName
diff --git a/rsScript.cpp b/rsScript.cpp
index 6a3bd4b..d39fb5e 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -64,6 +64,16 @@
     mRSC->mHal.funcs.script.setGlobalVar(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) {
+        ALOGE("Script::setVar unable to set allocation, invalid slot index");
+        return;
+    }
+    mRSC->mHal.funcs.script.setGlobalVarWithElemDims(mRSC, this, slot,
+            (void *)val, len, e, dims, dimLen);
+}
+
 void Script::setVarObj(uint32_t slot, ObjectBase *val) {
     //ALOGE("setVarObj %i %p", slot, val);
     if (slot >= mHal.info.exportedVariableCount) {
@@ -166,6 +176,14 @@
     s->setVar(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) {
+    Script *s = static_cast<Script *>(vs);
+    Element *e = static_cast<Element *>(ve);
+    s->setVar(slot, data, len, e, dims, dimLen);
+}
+
 }
 }
 
diff --git a/rsScript.h b/rsScript.h
index 7879ea6..acd6afb 100644
--- a/rsScript.h
+++ b/rsScript.h
@@ -69,6 +69,8 @@
 
     void setSlot(uint32_t slot, Allocation *a);
     void setVar(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);
 
     virtual bool freeChildren();
diff --git a/rs_hal.h b/rs_hal.h
index e4bf17f..b4da744 100644
--- a/rs_hal.h
+++ b/rs_hal.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2011-2012 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -99,6 +99,13 @@
                              uint32_t slot,
                              void *data,
                              size_t dataLength);
+        void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s,
+                                         uint32_t slot,
+                                         void *data,
+                                         size_t dataLength,
+                                         const Element *e,
+                                         const size_t *dims,
+                                         size_t dimLength);
         void (*setGlobalBind)(const Context *rsc, const Script *s,
                               uint32_t slot,
                               void *data);
