diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index f58fe1a..2e13e9d 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -41,13 +41,42 @@
 };
 
 
+GLenum rsdTypeToGLType(RsDataType t) {
+    switch (t) {
+    case RS_TYPE_UNSIGNED_5_6_5:    return GL_UNSIGNED_SHORT_5_6_5;
+    case RS_TYPE_UNSIGNED_5_5_5_1:  return GL_UNSIGNED_SHORT_5_5_5_1;
+    case RS_TYPE_UNSIGNED_4_4_4_4:  return GL_UNSIGNED_SHORT_4_4_4_4;
+
+    //case RS_TYPE_FLOAT_16:      return GL_HALF_FLOAT;
+    case RS_TYPE_FLOAT_32:      return GL_FLOAT;
+    case RS_TYPE_UNSIGNED_8:    return GL_UNSIGNED_BYTE;
+    case RS_TYPE_UNSIGNED_16:   return GL_UNSIGNED_SHORT;
+    case RS_TYPE_SIGNED_8:      return GL_BYTE;
+    case RS_TYPE_SIGNED_16:     return GL_SHORT;
+    default:    break;
+    }
+    return 0;
+}
+
+GLenum rsdKindToGLFormat(RsDataKind k) {
+    switch (k) {
+    case RS_KIND_PIXEL_L: return GL_LUMINANCE;
+    case RS_KIND_PIXEL_A: return GL_ALPHA;
+    case RS_KIND_PIXEL_LA: return GL_LUMINANCE_ALPHA;
+    case RS_KIND_PIXEL_RGB: return GL_RGB;
+    case RS_KIND_PIXEL_RGBA: return GL_RGBA;
+    case RS_KIND_PIXEL_DEPTH: return GL_DEPTH_COMPONENT16;
+    default: break;
+    }
+    return 0;
+}
+
+
 static void Update2DTexture(const Allocation *alloc, const void *ptr, uint32_t xoff, uint32_t yoff,
                      uint32_t lod, RsAllocationCubemapFace face,
                      uint32_t w, uint32_t h) {
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
-    const GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
-    const GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
     rsAssert(drv->textureID);
     glBindTexture(drv->glTarget, drv->textureID);
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@@ -55,16 +84,13 @@
     if (alloc->mHal.state.hasFaces) {
         t = gFaceOrder[face];
     }
-    glTexSubImage2D(t, lod, xoff, yoff, w, h, format, type, ptr);
+    glTexSubImage2D(t, lod, xoff, yoff, w, h, drv->glFormat, drv->glType, ptr);
 }
 
 
 static void Upload2DTexture(const Context *rsc, const Allocation *alloc, bool isFirstUpload) {
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
-    GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
-    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
-
     glBindTexture(drv->glTarget, drv->textureID);
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 
@@ -85,15 +111,15 @@
             }
 
             if (isFirstUpload) {
-                glTexImage2D(t, lod, format,
+                glTexImage2D(t, lod, drv->glFormat,
                              alloc->mHal.state.type->getLODDimX(lod),
                              alloc->mHal.state.type->getLODDimY(lod),
-                             0, format, type, p);
+                             0, drv->glFormat, drv->glType, p);
             } else {
                 glTexSubImage2D(t, lod, 0, 0,
                                 alloc->mHal.state.type->getLODDimX(lod),
                                 alloc->mHal.state.type->getLODDimY(lod),
-                                format, type, p);
+                                drv->glFormat, drv->glType, p);
             }
         }
     }
@@ -107,10 +133,7 @@
 static void UploadToTexture(const Context *rsc, const Allocation *alloc) {
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
-    GLenum type = alloc->mHal.state.type->getElement()->getComponent().getGLType();
-    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
-
-    if (!type || !format) {
+    if (!drv->glType || !drv->glFormat) {
         return;
     }
 
@@ -139,8 +162,7 @@
 static void AllocateRenderTarget(const Context *rsc, const Allocation *alloc) {
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
-    GLenum format = alloc->mHal.state.type->getElement()->getComponent().getGLFormat();
-    if (!format) {
+    if (!drv->glFormat) {
         return;
     }
 
@@ -154,7 +176,7 @@
             return;
         }
         glBindRenderbuffer(GL_RENDERBUFFER, drv->renderTargetID);
-        glRenderbufferStorage(GL_RENDERBUFFER, format,
+        glRenderbufferStorage(GL_RENDERBUFFER, drv->glFormat,
                               alloc->mHal.state.dimensionX, alloc->mHal.state.dimensionY);
     }
     rsdGLCheckError(rsc, "AllocateRenderTarget");
@@ -208,6 +230,10 @@
         }
     }
 
+    drv->glType = rsdTypeToGLType(alloc->mHal.state.type->getElement()->getComponent().getType());
+    drv->glFormat = rsdKindToGLFormat(alloc->mHal.state.type->getElement()->getComponent().getKind());
+
+
     alloc->mHal.drvState.mallocPtr = ptr;
     drv->mallocPtr = (uint8_t *)ptr;
     alloc->mHal.drv = drv;
diff --git a/driver/rsdAllocation.h b/driver/rsdAllocation.h
index 45a538b..d7385ce 100644
--- a/driver/rsdAllocation.h
+++ b/driver/rsdAllocation.h
@@ -39,10 +39,17 @@
     uint8_t * mallocPtr;
 
     GLenum glTarget;
+    GLenum glType;
+    GLenum glFormat;
+
 
     bool uploadDeferred;
 };
 
+GLenum rsdTypeToGLType(RsDataType t);
+GLenum rsdKindToGLFormat(RsDataKind k);
+
+
 bool rsdAllocationInit(const android::renderscript::Context *rsc,
                        android::renderscript::Allocation *alloc,
                        bool forceZero);
diff --git a/driver/rsdMeshObj.cpp b/driver/rsdMeshObj.cpp
index 260595c..c220ac1 100644
--- a/driver/rsdMeshObj.cpp
+++ b/driver/rsdMeshObj.cpp
@@ -114,7 +114,7 @@
 
             mAttribs[userNum].size = c.getVectorSize();
             mAttribs[userNum].offset = elem->getFieldOffsetBytes(fieldI);
-            mAttribs[userNum].type = c.getGLType();
+            mAttribs[userNum].type = rsdTypeToGLType(c.getType());
             mAttribs[userNum].normalized = c.getType() != RS_TYPE_FLOAT_32;//c.getIsNormalized();
             mAttribs[userNum].stride = stride;
             String8 tmp(RS_SHADER_ATTR);
