Merge change 27364 into eclair

* changes:
  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.
This commit is contained in:
Android (Google) Code Review
2009-09-27 21:04:09 -04:00
16 changed files with 250 additions and 172 deletions

View File

@@ -70,148 +70,169 @@ public class Element extends BaseObj {
}
}
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 @@ public class Element extends BaseObj {
}
}
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 @@ public class Element extends BaseObj {
e.mSize = (bits + 7) >> 3;
}
void init(RenderScript rs) {
mRS = rs;
void init() {
internalCreate(mRS, this);
}
@@ -463,10 +483,9 @@ public class Element extends BaseObj {
}
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;
}
}

View File

@@ -110,7 +110,7 @@ public class ProgramVertex extends BaseObj {
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);

View File

@@ -191,7 +191,25 @@ public class RenderScript {
@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 @@ public class RenderScript {
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() {

View File

@@ -296,7 +296,7 @@ public class SimpleMesh extends BaseObj {
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();

View File

@@ -162,12 +162,19 @@ public class Type extends BaseObj {
}
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);

View File

@@ -152,9 +152,9 @@ public class FilmRS {
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 @@ public class FilmRS {
{
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 @@ public class FilmRS {
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);

View File

@@ -182,7 +182,7 @@ public class RolloRS {
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 @@ public class RolloRS {
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 @@ public class RolloRS {
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 @@ public class RolloRS {
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);

View File

@@ -141,6 +141,7 @@ void Allocation::subData(uint32_t xoff, uint32_t count, const void *data, uint32
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);

View File

@@ -102,4 +102,9 @@ uint32_t Component::getGLType() const
return 0;
}
void Component::dumpLOGV(const char *prefix) const
{
ObjectBase::dumpLOGV(prefix);
LOGV("%s component: %i %i %i %i", prefix, mType, mKind, mIsNormalized, mBits);
}

View File

@@ -56,6 +56,7 @@ public:
const char * getCType() const;
const char * getComponentName() const {return mName.string();}
virtual void dumpLOGV(const char *prefix) const;
protected:

View File

@@ -55,6 +55,8 @@ void Element::setComponent(uint32_t idx, Component *c)
rsAssert(!mComponents[idx].get());
rsAssert(idx < mComponentCount);
mComponents[idx].set(c);
// Fixme: This should probably not be here
c->incUserRef();
}
@@ -179,6 +181,17 @@ uint32_t Element::getGLFormat() const
}
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_ElementBegin(Context *rsc)
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 @@ RsElement rsi_ElementCreate(Context *rsc)
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]);
}

View File

@@ -51,6 +51,9 @@ public:
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();

View File

@@ -41,7 +41,7 @@ ObjectBase::~ObjectBase()
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 @@ bool ObjectBase::checkDelete() const
{
if (!(mSysRefCount | mUserRefCount)) {
if (mRSC && mRSC->props.mLogObjects) {
dumpObj("checkDelete");
dumpLOGV("checkDelete");
}
delete this;
return true;
@@ -188,7 +188,7 @@ void ObjectBase::zeroAllUserRef(Context *rsc)
LOGV("Objects remaining.");
o = rsc->mObjHead;
while (o) {
o->dumpObj(" ");
o->dumpLOGV(" ");
o = o->mNext;
}
}

View File

@@ -50,7 +50,7 @@ public:
static void zeroAllUserRef(Context *rsc);
void dumpObj(const char *op) const;
virtual void dumpLOGV(const char *prefix) const;
protected:
const char *mAllocFile;

View File

@@ -302,6 +302,16 @@ void Type::enableGLVertexBuffer() const
}
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 {

View File

@@ -69,6 +69,7 @@ public:
void enableGLVertexBuffer() const;
void dumpLOGV(const char *prefix) const;
protected:
struct LOD {