Improve logging code to dump more detaild rs object info. Fix bug with predefined elements not being recreated for contexts after one was destroyed. Add stricter type enforcement.
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 0a586c4..73d8266 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -70,148 +70,169 @@
}
}
- public static final Element USER_U8 = new Element();
- public static final Element USER_I8 = new Element();
- public static final Element USER_U16 = new Element();
- public static final Element USER_I16 = new Element();
- public static final Element USER_U32 = new Element();
- public static final Element USER_I32 = new Element();
- public static final Element USER_FLOAT = new Element();
-
- public static final Element A_8 = new Element();
- public static final Element RGB_565 = new Element();
- public static final Element RGB_888 = new Element();
- public static final Element RGBA_5551 = new Element();
- public static final Element RGBA_4444 = new Element();
- public static final Element RGBA_8888 = new Element();
-
- public static final Element INDEX_16 = new Element();
- public static final Element XY_F32 = new Element();
- public static final Element XYZ_F32 = new Element();
- public static final Element ST_XY_F32 = new Element();
- public static final Element ST_XYZ_F32 = new Element();
- public static final Element NORM_XYZ_F32 = new Element();
- public static final Element NORM_ST_XYZ_F32 = new Element();
-
- static void initPredefined(RenderScript rs) {
- USER_U8.mEntries = new Entry[1];
- USER_U8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 8, null);
- USER_U8.init(rs);
-
- USER_I8.mEntries = new Entry[1];
- USER_I8.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 8, null);
- USER_I8.init(rs);
-
- USER_U16.mEntries = new Entry[1];
- USER_U16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 16, null);
- USER_U16.init(rs);
-
- USER_I16.mEntries = new Entry[1];
- USER_I16.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 16, null);
- USER_I16.init(rs);
-
- USER_U32.mEntries = new Entry[1];
- USER_U32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 32, null);
- USER_U32.init(rs);
-
- USER_I32.mEntries = new Entry[1];
- USER_I32.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 32, null);
- USER_I32.init(rs);
-
- USER_FLOAT.mEntries = new Entry[1];
- USER_FLOAT.mEntries[0] = new Entry(DataType.FLOAT, DataKind.USER, false, 32, null);
- USER_FLOAT.init(rs);
-
- A_8.mEntries = new Entry[1];
- A_8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
- A_8.init(rs);
-
- RGB_565.mEntries = new Entry[3];
- RGB_565.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
- RGB_565.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 6, "g");
- RGB_565.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
- RGB_565.init(rs);
-
- RGB_888.mEntries = new Entry[3];
- RGB_888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
- RGB_888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
- RGB_888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
- RGB_888.init(rs);
-
- RGBA_5551.mEntries = new Entry[4];
- RGBA_5551.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
- RGBA_5551.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 5, "g");
- RGBA_5551.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
- RGBA_5551.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 1, "a");
- RGBA_5551.init(rs);
-
- RGBA_4444.mEntries = new Entry[4];
- RGBA_4444.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 4, "r");
- RGBA_4444.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 4, "g");
- RGBA_4444.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 4, "b");
- RGBA_4444.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 4, "a");
- RGBA_4444.init(rs);
-
- RGBA_8888.mEntries = new Entry[4];
- RGBA_8888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
- RGBA_8888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
- RGBA_8888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
- RGBA_8888.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
- RGBA_8888.init(rs);
-
- INDEX_16.mEntries = new Entry[1];
- INDEX_16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.INDEX, false, 16, "index");
- INDEX_16.init(rs);
-
- XY_F32.mEntries = new Entry[2];
- XY_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- XY_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- XY_F32.init(rs);
-
- XYZ_F32.mEntries = new Entry[3];
- XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z");
- XYZ_F32.init(rs);
-
- ST_XY_F32.mEntries = new Entry[4];
- ST_XY_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s");
- ST_XY_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t");
- ST_XY_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- ST_XY_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- ST_XY_F32.init(rs);
-
- ST_XYZ_F32.mEntries = new Entry[5];
- ST_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s");
- ST_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t");
- ST_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- ST_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- ST_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z");
- ST_XYZ_F32.init(rs);
-
- NORM_XYZ_F32.mEntries = new Entry[6];
- NORM_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.NX, false, 32, "nx");
- NORM_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.NY, false, 32, "ny");
- NORM_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.NZ, false, 32, "nz");
- NORM_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- NORM_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- NORM_XYZ_F32.mEntries[5] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z");
- NORM_XYZ_F32.init(rs);
-
- NORM_ST_XYZ_F32.mEntries = new Entry[8];
- NORM_ST_XYZ_F32.mEntries[0] = new Entry(DataType.FLOAT, DataKind.NX, false, 32, "nx");
- NORM_ST_XYZ_F32.mEntries[1] = new Entry(DataType.FLOAT, DataKind.NY, false, 32, "ny");
- NORM_ST_XYZ_F32.mEntries[2] = new Entry(DataType.FLOAT, DataKind.NZ, false, 32, "nz");
- NORM_ST_XYZ_F32.mEntries[3] = new Entry(DataType.FLOAT, DataKind.S, false, 32, "s");
- NORM_ST_XYZ_F32.mEntries[4] = new Entry(DataType.FLOAT, DataKind.T, false, 32, "t");
- NORM_ST_XYZ_F32.mEntries[5] = new Entry(DataType.FLOAT, DataKind.X, false, 32, "x");
- NORM_ST_XYZ_F32.mEntries[6] = new Entry(DataType.FLOAT, DataKind.Y, false, 32, "y");
- NORM_ST_XYZ_F32.mEntries[7] = new Entry(DataType.FLOAT, DataKind.Z, false, 32, "z");
- NORM_ST_XYZ_F32.init(rs);
-
- rs.nInitElements(A_8.mID, RGBA_4444.mID, RGBA_8888.mID, RGB_565.mID);
+ public static Element USER_U8(RenderScript rs) {
+ if(rs.mElement_USER_U8 == null) {
+ rs.mElement_USER_U8 = new Element(rs, 1);
+ rs.mElement_USER_U8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 8, null);
+ rs.mElement_USER_U8.init();
+ }
+ return rs.mElement_USER_U8;
}
+ public static Element USER_I8(RenderScript rs) {
+ if(rs.mElement_USER_I8 == null) {
+ rs.mElement_USER_I8 = new Element(rs, 1);
+ rs.mElement_USER_I8.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 8, null);
+ rs.mElement_USER_I8.init();
+ }
+ return rs.mElement_USER_I8;
+ }
+
+ public static Element USER_U16(RenderScript rs) {
+ if(rs.mElement_USER_U16 == null) {
+ rs.mElement_USER_U16 = new Element(rs, 1);
+ rs.mElement_USER_U16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 16, null);
+ rs.mElement_USER_U16.init();
+ }
+ return rs.mElement_USER_U16;
+ }
+
+ public static Element USER_I16(RenderScript rs) {
+ if(rs.mElement_USER_I16 == null) {
+ rs.mElement_USER_I16 = new Element(rs, 1);
+ rs.mElement_USER_I16.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 16, null);
+ rs.mElement_USER_I16.init();
+ }
+ return rs.mElement_USER_I16;
+ }
+
+ public static Element USER_U32(RenderScript rs) {
+ if(rs.mElement_USER_U32 == null) {
+ rs.mElement_USER_U32 = new Element(rs, 1);
+ rs.mElement_USER_U32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 32, null);
+ rs.mElement_USER_U32.init();
+ }
+ return rs.mElement_USER_U32;
+ }
+
+ public static Element USER_I32(RenderScript rs) {
+ if(rs.mElement_USER_I32 == null) {
+ rs.mElement_USER_I32 = new Element(rs, 1);
+ rs.mElement_USER_I32.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 32, null);
+ rs.mElement_USER_I32.init();
+ }
+ return rs.mElement_USER_I32;
+ }
+
+ public static Element USER_F32(RenderScript rs) {
+ if(rs.mElement_USER_FLOAT == null) {
+ rs.mElement_USER_FLOAT = new Element(rs, 1);
+ rs.mElement_USER_FLOAT.mEntries[0] = new Entry(DataType.FLOAT, DataKind.USER, false, 32, null);
+ rs.mElement_USER_FLOAT.init();
+ }
+ return rs.mElement_USER_FLOAT;
+ }
+
+ public static Element A_8(RenderScript rs) {
+ if(rs.mElement_A_8 == null) {
+ rs.mElement_A_8 = new Element(rs, 1);
+ rs.mElement_A_8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
+ rs.mElement_A_8.init();
+ }
+ return rs.mElement_A_8;
+ }
+
+ public static Element RGB_565(RenderScript rs) {
+ if(rs.mElement_RGB_565 == null) {
+ rs.mElement_RGB_565 = new Element(rs, 3);
+ rs.mElement_RGB_565.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
+ rs.mElement_RGB_565.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 6, "g");
+ rs.mElement_RGB_565.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
+ rs.mElement_RGB_565.init();
+ }
+ return rs.mElement_RGB_565;
+ }
+
+ public static Element RGB_888(RenderScript rs) {
+ if(rs.mElement_RGB_888 == null) {
+ rs.mElement_RGB_888 = new Element(rs, 3);
+ rs.mElement_RGB_888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
+ rs.mElement_RGB_888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
+ rs.mElement_RGB_888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
+ rs.mElement_RGB_888.init();
+ }
+ return rs.mElement_RGB_888;
+ }
+
+ public static Element RGBA_5551(RenderScript rs) {
+ if(rs.mElement_RGBA_5551 == null) {
+ rs.mElement_RGBA_5551 = new Element(rs, 4);
+ rs.mElement_RGBA_5551.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
+ rs.mElement_RGBA_5551.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 5, "g");
+ rs.mElement_RGBA_5551.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
+ rs.mElement_RGBA_5551.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 1, "a");
+ rs.mElement_RGBA_5551.init();
+ }
+ return rs.mElement_RGBA_5551;
+ }
+
+ public static Element RGBA_4444(RenderScript rs) {
+ if(rs.mElement_RGBA_4444 == null) {
+ rs.mElement_RGBA_4444 = new Element(rs, 4);
+ rs.mElement_RGBA_4444.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 4, "r");
+ rs.mElement_RGBA_4444.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 4, "g");
+ rs.mElement_RGBA_4444.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 4, "b");
+ rs.mElement_RGBA_4444.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 4, "a");
+ rs.mElement_RGBA_4444.init();
+ }
+ return rs.mElement_RGBA_4444;
+ }
+
+ public static Element RGBA_8888(RenderScript rs) {
+ if(rs.mElement_RGBA_8888 == null) {
+ rs.mElement_RGBA_8888 = new Element(rs, 4);
+ rs.mElement_RGBA_8888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
+ rs.mElement_RGBA_8888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
+ rs.mElement_RGBA_8888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
+ rs.mElement_RGBA_8888.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
+ rs.mElement_RGBA_8888.init();
+ }
+ return rs.mElement_RGBA_8888;
+ }
+
+ public static Element INDEX_16(RenderScript rs) {
+ if(rs.mElement_INDEX_16 == null) {
+ rs.mElement_INDEX_16 = new Element(rs, 1);
+ rs.mElement_INDEX_16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.INDEX, false, 16, "index");
+ rs.mElement_INDEX_16.init();
+ }
+ return rs.mElement_INDEX_16;
+ }
+
+ public static Element XY_F32(RenderScript rs) {
+ if(rs.mElement_XY_F32 == null) {
+ rs.mElement_XY_F32 = new Element(rs, 2);
+ rs.mElement_XY_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x");
+ rs.mElement_XY_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y");
+ rs.mElement_XY_F32.init();
+ }
+ return rs.mElement_XY_F32;
+ }
+
+ public static Element XYZ_F32(RenderScript rs) {
+ if(rs.mElement_XYZ_F32 == null) {
+ rs.mElement_XYZ_F32 = new Element(rs, 3);
+ rs.mElement_XYZ_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x");
+ rs.mElement_XYZ_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y");
+ rs.mElement_XYZ_F32.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.Z, false, 32, "z");
+ rs.mElement_XYZ_F32.init();
+ }
+ return rs.mElement_XYZ_F32;
+ }
+
+ static void initPredefined(RenderScript rs) {
+ rs.nInitElements(A_8(rs).mID, RGBA_4444(rs).mID, RGBA_8888(rs).mID, RGB_565(rs).mID);
+ }
public enum DataType {
FLOAT (0),
@@ -252,10 +273,10 @@
}
}
- Element() {
- super(null);
- mID = 0;
+ Element(RenderScript rs, int count) {
+ super(rs);
mSize = 0;
+ mEntries = new Entry[count];
}
public void destroy() throws IllegalStateException {
@@ -300,8 +321,7 @@
e.mSize = (bits + 7) >> 3;
}
- void init(RenderScript rs) {
- mRS = rs;
+ void init() {
internalCreate(mRS, this);
}
@@ -463,10 +483,9 @@
}
public Element create() {
- Element e = new Element();
- e.mEntries = new Entry[mEntryCount];
+ Element e = new Element(mRS, mEntryCount);
java.lang.System.arraycopy(mEntries, 0, e.mEntries, 0, mEntryCount);
- e.init(mRS);
+ e.init();
return e;
}
}
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index 2a11bfb..ddb23ac 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -110,7 +110,7 @@
mProjection = new Matrix();
mTexture = new Matrix();
- mAlloc = Allocation.createSized(rs, Element.USER_FLOAT, 48);
+ mAlloc = Allocation.createSized(rs, Element.USER_F32(rs), 48);
mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat);
mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat);
mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat);
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index ed61691..6b0b696 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -191,7 +191,25 @@
@SuppressWarnings({"FieldCanBeLocal"})
private Surface mSurface;
- private static boolean mElementsInitialized = false;
+
+ Element mElement_USER_U8;
+ Element mElement_USER_I8;
+ Element mElement_USER_U16;
+ Element mElement_USER_I16;
+ Element mElement_USER_U32;
+ Element mElement_USER_I32;
+ Element mElement_USER_FLOAT;
+
+ Element mElement_A_8;
+ Element mElement_RGB_565;
+ Element mElement_RGB_888;
+ Element mElement_RGBA_5551;
+ Element mElement_RGBA_4444;
+ Element mElement_RGBA_8888;
+
+ Element mElement_INDEX_16;
+ Element mElement_XY_F32;
+ Element mElement_XYZ_F32;
///////////////////////////////////////////////////////////////////////////////////
//
@@ -203,12 +221,7 @@
nDeviceSetConfig(mDev, 0, 1);
}
mContext = nContextCreate(mDev, mSurface, 0, useDepth);
-
- // TODO: This should be protected by a lock
- if(!mElementsInitialized) {
- Element.initPredefined(this);
- mElementsInitialized = true;
- }
+ Element.initPredefined(this);
}
public void destroy() {
diff --git a/graphics/java/android/renderscript/SimpleMesh.java b/graphics/java/android/renderscript/SimpleMesh.java
index dc74c61..987ec44 100644
--- a/graphics/java/android/renderscript/SimpleMesh.java
+++ b/graphics/java/android/renderscript/SimpleMesh.java
@@ -296,7 +296,7 @@
Builder smb = new Builder(mRS);
smb.addVertexType(mElement, mVtxCount / floatCount);
- smb.setIndexType(Element.INDEX_16, mIndexCount);
+ smb.setIndexType(Element.INDEX_16(mRS), mIndexCount);
smb.setPrimitive(Primitive.TRIANGLE);
SimpleMesh sm = smb.create();
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index df60990..ad4cf6b 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -162,12 +162,19 @@
}
public Builder(RenderScript rs, Element e) {
+ if(e.mID == 0) {
+ throw new IllegalArgumentException("Invalid element.");
+ }
+
mRS = rs;
mEntries = new Entry[4];
mElement = e;
}
public void add(Dimension d, int value) {
+ if(value < 1) {
+ throw new IllegalArgumentException("Values of less than 1 for Dimensions are not valid.");
+ }
if(mEntries.length >= mEntryCount) {
Entry[] en = new Entry[mEntryCount + 8];
System.arraycopy(mEntries, 0, en, 0, mEntries.length);
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index cee827b..b5b6723 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -152,9 +152,9 @@
mBufferIDs = new int[13];
mImages = new Allocation[13];
mAllocIDs = Allocation.createSized(mRS,
- Element.USER_FLOAT, mBufferIDs.length);
+ Element.USER_F32(mRS), mBufferIDs.length);
- Element ie = Element.RGB_565;
+ Element ie = Element.RGB_565(mRS);
mImages[0] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p01, ie, true);
mImages[1] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p02, ie, true);
mImages[2] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p03, ie, true);
@@ -195,7 +195,7 @@
{
mBufferState = new int[10];
mAllocState = Allocation.createSized(mRS,
- Element.USER_FLOAT, mBufferState.length);
+ Element.USER_F32(mRS), mBufferState.length);
mBufferState[STATE_LAST_FOCUS] = -1;
mAllocState.data(mBufferState);
}
@@ -238,12 +238,12 @@
mAllocOffsets = Allocation.createSized(mRS,
- Element.USER_I32, mFSM.mTriangleOffsets.length);
+ Element.USER_I32(mRS), mFSM.mTriangleOffsets.length);
mAllocOffsets.data(mFSM.mTriangleOffsets);
mScriptStrip.bindAllocation(mAllocOffsets, 4);
mAllocOffsetsTex = Allocation.createSized(mRS,
- Element.USER_FLOAT, mFSM.mTriangleOffsetsTex.length);
+ Element.USER_F32(mRS), mFSM.mTriangleOffsetsTex.length);
mAllocOffsetsTex.data(mFSM.mTriangleOffsetsTex);
mScriptStrip.bindAllocation(mAllocOffsetsTex, 5);
diff --git a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java
index ba74b58..ff89bc3 100644
--- a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java
+++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java
@@ -182,7 +182,7 @@
mAllocScratchBuf = new int[32];
mAllocScratch = Allocation.createSized(mRS,
- Element.USER_I32, mAllocScratchBuf.length);
+ Element.USER_I32(mRS), mAllocScratchBuf.length);
mAllocScratch.data(mAllocScratchBuf);
Log.e("rs", "Done loading named");
@@ -193,14 +193,14 @@
mIcons = new Allocation[29];
mAllocIconIDBuf = new int[mIcons.length];
mAllocIconID = Allocation.createSized(mRS,
- Element.USER_I32, mAllocIconIDBuf.length);
+ Element.USER_I32(mRS), mAllocIconIDBuf.length);
mLabels = new Allocation[29];
mAllocLabelIDBuf = new int[mLabels.length];
mAllocLabelID = Allocation.createSized(mRS,
- Element.USER_I32, mLabels.length);
+ Element.USER_I32(mRS), mLabels.length);
- Element ie8888 = Element.RGBA_8888;
+ Element ie8888 = Element.RGBA_8888(mRS);
mIcons[0] = Allocation.createFromBitmapResource(mRS, mRes, R.raw.browser, ie8888, true);
mIcons[1] = Allocation.createFromBitmapResource(mRS, mRes, R.raw.market, ie8888, true);
@@ -284,7 +284,7 @@
p.setTextSize(20);
p.setColor(0xffffffff);
c.drawText(t, 2, 26, p);
- return Allocation.createFromBitmap(mRS, b, Element.RGBA_8888, true);
+ return Allocation.createFromBitmap(mRS, b, Element.RGBA_8888(mRS), true);
}
@@ -298,7 +298,7 @@
mAllocStateBuf = new int[] {0, 0, 0, 8, 0, 0, -1, 0, mAllocIconIDBuf.length, 0, 0};
mAllocState = Allocation.createSized(mRS,
- Element.USER_I32, mAllocStateBuf.length);
+ Element.USER_I32(mRS), mAllocStateBuf.length);
mScript.bindAllocation(mAllocState, 0);
mScript.bindAllocation(mAllocIconID, 1);
mScript.bindAllocation(mAllocScratch, 2);
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp
index 8ee6e5a..8ac9c26 100644
--- a/libs/rs/rsAllocation.cpp
+++ b/libs/rs/rsAllocation.cpp
@@ -141,6 +141,7 @@
if (size != sizeBytes) {
LOGE("Allocation::subData called with mismatched size expected %i, got %i", size, sizeBytes);
+ mType->dumpLOGV("type info");
return;
}
memcpy(ptr, data, size);
diff --git a/libs/rs/rsComponent.cpp b/libs/rs/rsComponent.cpp
index 42e2e4f..de074c8 100644
--- a/libs/rs/rsComponent.cpp
+++ b/libs/rs/rsComponent.cpp
@@ -102,4 +102,9 @@
return 0;
}
+void Component::dumpLOGV(const char *prefix) const
+{
+ ObjectBase::dumpLOGV(prefix);
+ LOGV("%s component: %i %i %i %i", prefix, mType, mKind, mIsNormalized, mBits);
+}
diff --git a/libs/rs/rsComponent.h b/libs/rs/rsComponent.h
index 290cd57..5366cc4 100644
--- a/libs/rs/rsComponent.h
+++ b/libs/rs/rsComponent.h
@@ -56,6 +56,7 @@
const char * getCType() const;
const char * getComponentName() const {return mName.string();}
+ virtual void dumpLOGV(const char *prefix) const;
protected:
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index a00fb52..67e4f14 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -55,6 +55,8 @@
rsAssert(!mComponents[idx].get());
rsAssert(idx < mComponentCount);
mComponents[idx].set(c);
+
+// Fixme: This should probably not be here
c->incUserRef();
}
@@ -179,6 +181,17 @@
}
+void Element::dumpLOGV(const char *prefix) const
+{
+ ObjectBase::dumpLOGV(prefix);
+ LOGV("%s Element: components %i, size %i", prefix, mComponentCount, getSizeBytes());
+ for (uint32_t ct = 0; ct < mComponentCount; ct++) {
+ char buf[1024];
+ sprintf(buf, "%s component %i: ", prefix, ct);
+ mComponents[ct]->dumpLOGV(buf);
+ }
+}
+
ElementState::ElementState()
{
}
@@ -201,6 +214,9 @@
void rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name)
{
ElementState * sec = &rsc->mStateElement;
+
+ rsAssert(bits > 0);
+
Component *c = new Component(rsc,
static_cast<Component::DataKind>(dk),
static_cast<Component::DataType>(dt),
@@ -215,6 +231,8 @@
ElementState * sec = &rsc->mStateElement;
Element *se = new Element(rsc, sec->mComponentBuildList.size());
+ rsAssert(se->getComponentCount() > 0);
+
for (size_t ct = 0; ct < se->getComponentCount(); ct++) {
se->setComponent(ct, sec->mComponentBuildList[ct]);
}
diff --git a/libs/rs/rsElement.h b/libs/rs/rsElement.h
index 82da441..b41c552 100644
--- a/libs/rs/rsElement.h
+++ b/libs/rs/rsElement.h
@@ -51,6 +51,9 @@
uint32_t getComponentCount() const {return mComponentCount;}
Component * getComponent(uint32_t idx) const {return mComponents[idx].get();}
+
+ void dumpLOGV(const char *prefix) const;
+
protected:
// deallocate any components that are part of this element.
void clear();
diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp
index 720e8fc..0008ea4 100644
--- a/libs/rs/rsObjectBase.cpp
+++ b/libs/rs/rsObjectBase.cpp
@@ -41,7 +41,7 @@
remove();
}
-void ObjectBase::dumpObj(const char *op) const
+void ObjectBase::dumpLOGV(const char *op) const
{
if (mName) {
LOGV("%s RSobj %p, name %s, refs %i,%i from %s,%i links %p,%p,%p",
@@ -79,7 +79,7 @@
{
if (!(mSysRefCount | mUserRefCount)) {
if (mRSC && mRSC->props.mLogObjects) {
- dumpObj("checkDelete");
+ dumpLOGV("checkDelete");
}
delete this;
return true;
@@ -188,7 +188,7 @@
LOGV("Objects remaining.");
o = rsc->mObjHead;
while (o) {
- o->dumpObj(" ");
+ o->dumpLOGV(" ");
o = o->mNext;
}
}
diff --git a/libs/rs/rsObjectBase.h b/libs/rs/rsObjectBase.h
index ea5e37cc..dc85ac7 100644
--- a/libs/rs/rsObjectBase.h
+++ b/libs/rs/rsObjectBase.h
@@ -50,7 +50,7 @@
static void zeroAllUserRef(Context *rsc);
- void dumpObj(const char *op) const;
+ virtual void dumpLOGV(const char *prefix) const;
protected:
const char *mAllocFile;
diff --git a/libs/rs/rsType.cpp b/libs/rs/rsType.cpp
index 5ce9ca2..ddaa2f0 100644
--- a/libs/rs/rsType.cpp
+++ b/libs/rs/rsType.cpp
@@ -302,6 +302,16 @@
}
+void Type::dumpLOGV(const char *prefix) const
+{
+ char buf[1024];
+ ObjectBase::dumpLOGV(prefix);
+ LOGV("%s Type: x=%i y=%i z=%i mip=%i face=%i", prefix, mDimX, mDimY, mDimZ, mDimLOD, mFaces);
+ sprintf(buf, "%s element: ", prefix);
+ mElement->dumpLOGV(buf);
+}
+
+
//////////////////////////////////////////////////
//
namespace android {
diff --git a/libs/rs/rsType.h b/libs/rs/rsType.h
index 116f1c7..2c43405 100644
--- a/libs/rs/rsType.h
+++ b/libs/rs/rsType.h
@@ -69,6 +69,7 @@
void enableGLVertexBuffer() const;
+ void dumpLOGV(const char *prefix) const;
protected:
struct LOD {