Fix YUV allocation table.

Change-Id: Ia6265c7eb2fa60f6789eb43b3e03fdfe8327dd7e
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index 248e7b6..9a40756 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -317,7 +317,13 @@
 
     size_t o = alloc->mHal.drvState.lod[0].stride * rsMax(alloc->mHal.drvState.lod[0].dimY, 1u) *
             rsMax(alloc->mHal.drvState.lod[0].dimZ, 1u);
-    if(alloc->mHal.drvState.lodCount > 1) {
+    if (alloc->mHal.state.yuv) {
+        o += DeriveYUVLayout(alloc->mHal.state.yuv, &alloc->mHal.drvState);
+
+        for (uint32_t ct = 1; ct < alloc->mHal.drvState.lodCount; ct++) {
+            offsets[ct] = (size_t)alloc->mHal.drvState.lod[ct].mallocPtr;
+        }
+    } else if(alloc->mHal.drvState.lodCount > 1) {
         uint32_t tx = alloc->mHal.drvState.lod[0].dimX;
         uint32_t ty = alloc->mHal.drvState.lod[0].dimY;
         uint32_t tz = alloc->mHal.drvState.lod[0].dimZ;
@@ -333,12 +339,6 @@
             if (ty > 1) ty >>= 1;
             if (tz > 1) tz >>= 1;
         }
-    } else if (alloc->mHal.state.yuv) {
-        o += DeriveYUVLayout(alloc->mHal.state.yuv, &alloc->mHal.drvState);
-
-        for (uint32_t ct = 1; ct < alloc->mHal.drvState.lodCount; ct++) {
-            offsets[ct] = (size_t)alloc->mHal.drvState.lod[ct].mallocPtr;
-        }
     }
 
     alloc->mHal.drvState.faceOffset = o;
diff --git a/rsType.cpp b/rsType.cpp
index d1a84ea..31d6ce8 100644
--- a/rsType.cpp
+++ b/rsType.cpp
@@ -79,7 +79,11 @@
         mHal.state.lodCount = rsMax(l2x, l2y);
         mHal.state.lodCount = rsMax(mHal.state.lodCount, l2z);
     } else {
-        mHal.state.lodCount = 1;
+        if (mHal.state.dimYuv) {
+            mHal.state.lodCount = 3;
+        } else {
+            mHal.state.lodCount = 1;
+        }
     }
     if (mHal.state.lodCount != oldLODCount) {
         if (oldLODCount) {
@@ -96,14 +100,16 @@
     uint32_t ty = mHal.state.dimY;
     uint32_t tz = mHal.state.dimZ;
     mCellCount = 0;
-    for (uint32_t lod=0; lod < mHal.state.lodCount; lod++) {
-        mHal.state.lodDimX[lod] = tx;
-        mHal.state.lodDimY[lod] = ty;
-        mHal.state.lodDimZ[lod]  = tz;
-        mCellCount += tx * rsMax(ty, 1u) * rsMax(tz, 1u);
-        if (tx > 1) tx >>= 1;
-        if (ty > 1) ty >>= 1;
-        if (tz > 1) tz >>= 1;
+    if (!mHal.state.dimYuv) {
+        for (uint32_t lod=0; lod < mHal.state.lodCount; lod++) {
+            mHal.state.lodDimX[lod] = tx;
+            mHal.state.lodDimY[lod] = ty;
+            mHal.state.lodDimZ[lod]  = tz;
+            mCellCount += tx * rsMax(ty, 1u) * rsMax(tz, 1u);
+            if (tx > 1) tx >>= 1;
+            if (ty > 1) ty >>= 1;
+            if (tz > 1) tz >>= 1;
+        }
     }
 
     if (mHal.state.faces) {
@@ -117,6 +123,7 @@
         mHal.state.lodDimY[1] = mHal.state.lodDimY[0] / 2;
         mHal.state.lodDimX[2] = mHal.state.lodDimX[0] / 2;
         mHal.state.lodDimY[2] = mHal.state.lodDimY[0] / 2;
+        mCellCount += mHal.state.lodDimX[0] * mHal.state.lodDimY[0];
         mCellCount += mHal.state.lodDimX[1] * mHal.state.lodDimY[1];
         mCellCount += mHal.state.lodDimX[2] * mHal.state.lodDimY[2];