diff --git a/cpp/rsDispatch.h b/cpp/rsDispatch.h
index ca708ad..614f5a4 100644
--- a/cpp/rsDispatch.h
+++ b/cpp/rsDispatch.h
@@ -74,7 +74,7 @@
 typedef void (*ScriptSetVarDFnPtr) (RsContext, RsScript, uint32_t, double);
 typedef void (*ScriptSetVarVFnPtr) (RsContext, RsScript, uint32_t, const void*, size_t);
 typedef void (*ScriptGetVarVFnPtr) (RsContext, RsScript, uint32_t, void*, size_t);
-typedef void (*ScriptSetVarVEFnPtr) (RsContext, RsScript, uint32_t, const void*, size_t, RsElement, const size_t*, size_t);
+typedef void (*ScriptSetVarVEFnPtr) (RsContext, RsScript, uint32_t, const void*, size_t, RsElement, const uint32_t*, size_t);
 typedef RsScript (*ScriptCCreateFnPtr) (RsContext, const char*, size_t, const char*, size_t, const char*, size_t);
 typedef RsScript (*ScriptIntrinsicCreateFnPtr) (RsContext, uint32_t id, RsElement);
 typedef RsScriptKernelID (*ScriptKernelIDCreateFnPtr) (RsContext, RsScript, int, int);
diff --git a/cpu_ref/rsCpuIntrinsic.cpp b/cpu_ref/rsCpuIntrinsic.cpp
index cda40f0..7195714 100644
--- a/cpu_ref/rsCpuIntrinsic.cpp
+++ b/cpu_ref/rsCpuIntrinsic.cpp
@@ -54,7 +54,7 @@
 
 void RsdCpuScriptIntrinsic::setGlobalVarWithElemDims(uint32_t slot, const void *data,
                                                      size_t dataLength, const Element *e,
-                                                     const size_t *dims, size_t dimLength) {
+                                                     const uint32_t *dims, size_t dimLength) {
     mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER,
                                  "Unexpected RsdCpuScriptIntrinsic::setGlobalVarWithElemDims");
 }
diff --git a/cpu_ref/rsCpuIntrinsic.h b/cpu_ref/rsCpuIntrinsic.h
index 917b235..1cf889c 100644
--- a/cpu_ref/rsCpuIntrinsic.h
+++ b/cpu_ref/rsCpuIntrinsic.h
@@ -49,7 +49,7 @@
 
     virtual void setGlobalVar(uint32_t slot, const 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);
+                                  const Element *e, const uint32_t *dims, size_t dimLength);
     virtual void setGlobalBind(uint32_t slot, Allocation *data);
     virtual void setGlobalObj(uint32_t slot, ObjectBase *data);
 
diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index 29b1bf8..81e70f0 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -992,7 +992,7 @@
 
 void RsdCpuScriptImpl::setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength,
                                                 const Element *elem,
-                                                const size_t *dims, size_t dimLength) {
+                                                const uint32_t *dims, size_t dimLength) {
 
 #ifndef RS_COMPATIBILITY_LIB
     int32_t *destPtr = reinterpret_cast<int32_t *>(
@@ -1015,14 +1015,14 @@
         // First do the increment loop.
         size_t stride = elem->getSizeBytes();
         const char *cVal = reinterpret_cast<const char *>(data);
-        for (size_t i = 0; i < dims[0]; i++) {
+        for (uint32_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++) {
+        for (uint32_t i = 0; i < dims[0]; i++) {
             elem->decRefs(oldVal);
             oldVal += stride;
         }
diff --git a/cpu_ref/rsCpuScript.h b/cpu_ref/rsCpuScript.h
index 151120d..7531a86 100644
--- a/cpu_ref/rsCpuScript.h
+++ b/cpu_ref/rsCpuScript.h
@@ -82,7 +82,7 @@
     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);
+                                  const Element *e, const uint32_t *dims, size_t dimLength);
     virtual void setGlobalBind(uint32_t slot, Allocation *data);
     virtual void setGlobalObj(uint32_t slot, ObjectBase *data);
 
diff --git a/cpu_ref/rsd_cpu.h b/cpu_ref/rsd_cpu.h
index ac4cf31..675bb97 100644
--- a/cpu_ref/rsd_cpu.h
+++ b/cpu_ref/rsd_cpu.h
@@ -81,7 +81,7 @@
         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;
+                                      const Element *e, const uint32_t *dims, size_t dimLength) = 0;
         virtual void setGlobalBind(uint32_t slot, Allocation *data) = 0;
         virtual void setGlobalObj(uint32_t slot, ObjectBase *obj) = 0;
 
diff --git a/driver/rsdBcc.cpp b/driver/rsdBcc.cpp
index 212184e..60532df 100644
--- a/driver/rsdBcc.cpp
+++ b/driver/rsdBcc.cpp
@@ -117,7 +117,7 @@
 void rsdScriptSetGlobalVarWithElemDims(const Context *dc, const Script *s,
                                        uint32_t slot, void *data, size_t dataLength,
                                        const android::renderscript::Element *elem,
-                                       const size_t *dims, size_t dimLength) {
+                                       const uint32_t *dims, size_t dimLength) {
     RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
     cs->setGlobalVarWithElemDims(slot, data, dataLength, elem, dims, dimLength);
 }
diff --git a/driver/rsdBcc.h b/driver/rsdBcc.h
index 9a194cb..2917bce 100644
--- a/driver/rsdBcc.h
+++ b/driver/rsdBcc.h
@@ -61,7 +61,7 @@
                                        uint32_t slot, void *data,
                                        size_t dataLength,
                                        const android::renderscript::Element *,
-                                       const size_t *dims,
+                                       const uint32_t *dims,
                                        size_t dimLength);
 void rsdScriptSetGlobalBind(const android::renderscript::Context *,
                             const android::renderscript::Script *,
diff --git a/rs.spec b/rs.spec
index 62a3646..24c06ed 100644
--- a/rs.spec
+++ b/rs.spec
@@ -343,7 +343,7 @@
     param uint32_t slot
     param const void * data
     param RsElement e
-    param const size_t * dims
+    param const uint32_t * dims
     }
 
 
diff --git a/rsScript.cpp b/rsScript.cpp
index 835ded1..327e7d9 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -252,7 +252,7 @@
 
 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) {
+                        const uint32_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/rs_hal.h b/rs_hal.h
index 9ecbf3a..4c740ae 100644
--- a/rs_hal.h
+++ b/rs_hal.h
@@ -130,7 +130,7 @@
                                          void *data,
                                          size_t dataLength,
                                          const Element *e,
-                                         const size_t *dims,
+                                         const uint32_t *dims,
                                          size_t dimLength);
         void (*setGlobalBind)(const Context *rsc, const Script *s,
                               uint32_t slot,
