summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-08-12 12:44:02 -0700
committerJason Sams <rjsams@android.com>2010-08-12 12:47:04 -0700
commitee73498ddf896f6ed003e9ce1fab87aefda90173 (patch)
treee7695920638136e1cbdfbeade8cfb78b4fe8bfce
parent5320b326a48a473f58d0e99a81d75f277254b958 (diff)
downloadframeworks_base-ee73498ddf896f6ed003e9ce1fab87aefda90173.zip
frameworks_base-ee73498ddf896f6ed003e9ce1fab87aefda90173.tar.gz
frameworks_base-ee73498ddf896f6ed003e9ce1fab87aefda90173.tar.bz2
Fix field packer bug for U32 data.
Fix initial refcounts in allocations. Support null references in allocations. Change-Id: Ifba6406ba750e69737bd77fa7df5d7fb8e27a5b4
-rw-r--r--graphics/java/android/renderscript/FieldPacker.java6
-rw-r--r--libs/rs/rsAllocation.cpp3
-rw-r--r--libs/rs/rsElement.cpp4
3 files changed, 10 insertions, 3 deletions
diff --git a/graphics/java/android/renderscript/FieldPacker.java b/graphics/java/android/renderscript/FieldPacker.java
index f03b51c..24f0409 100644
--- a/graphics/java/android/renderscript/FieldPacker.java
+++ b/graphics/java/android/renderscript/FieldPacker.java
@@ -76,6 +76,7 @@ public class FieldPacker {
public void addU8(short v) {
if ((v < 0) || (v > 0xff)) {
+ android.util.Log.e("rs", "FieldPacker.addU8( " + v + " )");
throw new IllegalArgumentException("Saving value out of range for type");
}
mData[mPos++] = (byte)v;
@@ -83,6 +84,7 @@ public class FieldPacker {
public void addU16(int v) {
if ((v < 0) || (v > 0xffff)) {
+ android.util.Log.e("rs", "FieldPacker.addU16( " + v + " )");
throw new IllegalArgumentException("Saving value out of range for type");
}
align(2);
@@ -91,7 +93,8 @@ public class FieldPacker {
}
public void addU32(long v) {
- if ((v < 0) || (v > 0xffffffff)) {
+ if ((v < 0) || (v > 0xffffffffL)) {
+ android.util.Log.e("rs", "FieldPacker.addU32( " + v + " )");
throw new IllegalArgumentException("Saving value out of range for type");
}
align(4);
@@ -103,6 +106,7 @@ public class FieldPacker {
public void addU64(long v) {
if (v < 0) {
+ android.util.Log.e("rs", "FieldPacker.addU64( " + v + " )");
throw new IllegalArgumentException("Saving value out of range for type");
}
align(8);
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index 7d31bd6..7e44fea 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -34,6 +34,9 @@ Allocation::Allocation(Context *rsc, const Type *type) : ObjectBase(rsc)
init(rsc, type);
mPtr = malloc(mType->getSizeBytes());
+ if (mType->getElement()->getHasReferences()) {
+ memset(mPtr, 0, mType->getSizeBytes());
+ }
if (!mPtr) {
LOGE("Allocation::Allocation, alloc failure");
}
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index 5dee1fb..2602dd4 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -266,7 +266,7 @@ void Element::incRefs(const void *ptr) const
if (mComponent.isReference()) {
ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
ObjectBase *ob = obp[0];
- ob->incSysRef();
+ if (ob) ob->incSysRef();
}
return;
}
@@ -285,7 +285,7 @@ void Element::decRefs(const void *ptr) const
if (mComponent.isReference()) {
ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
ObjectBase *ob = obp[0];
- ob->decSysRef();
+ if (ob) ob->decSysRef();
}
return;
}