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];