am eaf82374: am 38d799fc: Merge "Generic object based data copy."

* commit 'eaf82374186bd7084826f1cd258c82a3c6a4bf29':
  Generic object based data copy.
This commit is contained in:
Tim Murray
2014-02-10 23:34:54 +00:00
committed by Android Git Automerger

View File

@@ -81,6 +81,65 @@ public class Allocation extends BaseObj {
new HashMap<Long, Allocation>();
OnBufferAvailableListener mBufferNotifier;
private Element.DataType validateObjectIsPrimitiveArray(Object d, boolean checkType) {
final Class c = d.getClass();
if (!c.isArray()) {
throw new RSIllegalArgumentException("Object passed is not an array of primitives.");
}
final Class cmp = c.getComponentType();
if (!cmp.isPrimitive()) {
throw new RSIllegalArgumentException("Object passed is not an Array of primitives.");
}
if (cmp == Long.TYPE) {
if (checkType) {
validateIsInt64();
return mType.mElement.mType;
}
return Element.DataType.SIGNED_64;
}
if (cmp == Integer.TYPE) {
if (checkType) {
validateIsInt32();
return mType.mElement.mType;
}
return Element.DataType.SIGNED_32;
}
if (cmp == Short.TYPE) {
if (checkType) {
validateIsInt16();
return mType.mElement.mType;
}
return Element.DataType.SIGNED_16;
}
if (cmp == Byte.TYPE) {
if (checkType) {
validateIsInt8();
return mType.mElement.mType;
}
return Element.DataType.SIGNED_8;
}
if (cmp == Float.TYPE) {
if (checkType) {
validateIsFloat32();
}
return Element.DataType.FLOAT_32;
}
if (cmp == Double.TYPE) {
if (checkType) {
validateIsFloat64();
}
return Element.DataType.FLOAT_64;
}
return null;
}
/**
* The usage of the Allocation. These signal to RenderScript where to place
* the Allocation in memory.
@@ -292,6 +351,15 @@ public class Allocation extends BaseObj {
super.finalize();
}
private void validateIsInt64() {
if ((mType.mElement.mType == Element.DataType.SIGNED_64) ||
(mType.mElement.mType == Element.DataType.UNSIGNED_64)) {
return;
}
throw new RSIllegalArgumentException(
"64 bit integer source does not match allocation type " + mType.mElement.mType);
}
private void validateIsInt32() {
if ((mType.mElement.mType == Element.DataType.SIGNED_32) ||
(mType.mElement.mType == Element.DataType.UNSIGNED_32)) {
@@ -327,6 +395,14 @@ public class Allocation extends BaseObj {
"32 bit float source does not match allocation type " + mType.mElement.mType);
}
private void validateIsFloat64() {
if (mType.mElement.mType == Element.DataType.FLOAT_64) {
return;
}
throw new RSIllegalArgumentException(
"64 bit float source does not match allocation type " + mType.mElement.mType);
}
private void validateIsObject() {
if ((mType.mElement.mType == Element.DataType.RS_ELEMENT) ||
(mType.mElement.mType == Element.DataType.RS_TYPE) ||
@@ -507,6 +583,34 @@ public class Allocation extends BaseObj {
}
}
private void copyFromUnchecked(Object array, Element.DataType dt, int arrayLen) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, array, dt, arrayLen);
} else if (mCurrentDimY > 0) {
copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, array, dt, arrayLen);
} else {
copy1DRangeFromUnchecked(0, mCurrentCount, array, dt, arrayLen);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* Copy into this Allocation from an array. This method does not guarantee
* that the Allocation is compatible with the input buffer; it copies memory
* without reinterpretation.
*
* @param array The source data array
* @hide
*/
public void copyFromUnchecked(Object array) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, false),
java.lang.reflect.Array.getLength(array));
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* Copy into this Allocation from an array. This method does not guarantee
* that the Allocation is compatible with the input buffer; it copies memory
@@ -515,16 +619,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFromUnchecked(int[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFromUnchecked(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
copyFromUnchecked(d, Element.DataType.SIGNED_32, d.length);
}
/**
@@ -535,16 +630,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFromUnchecked(short[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFromUnchecked(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
copyFromUnchecked(d, Element.DataType.SIGNED_16, d.length);
}
/**
@@ -555,16 +641,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFromUnchecked(byte[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFromUnchecked(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
copyFromUnchecked(d, Element.DataType.SIGNED_8, d.length);
}
/**
@@ -575,19 +652,26 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFromUnchecked(float[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFromUnchecked(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
copyFromUnchecked(d, Element.DataType.FLOAT_32, d.length);
}
/**
* Copy into this Allocation from an array. This variant is type checked
* and will generate exceptions if the Allocation's {@link
* android.renderscript.Element} does not match the array's
* primitive type.
*
* @param d the source data array
* @hide
*/
public void copyFrom(Object array) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, true),
java.lang.reflect.Array.getLength(array));
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* Copy into this Allocation from an array. This variant is type checked
* and will generate exceptions if the Allocation's {@link
@@ -596,16 +680,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFrom(int[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFrom(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFrom(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
validateIsInt32();
copyFromUnchecked(d, Element.DataType.SIGNED_32, d.length);
}
/**
@@ -616,16 +692,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFrom(short[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFrom(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFrom(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
validateIsInt16();
copyFromUnchecked(d, Element.DataType.SIGNED_16, d.length);
}
/**
@@ -636,16 +704,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFrom(byte[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFrom(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFrom(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
validateIsInt8();
copyFromUnchecked(d, Element.DataType.SIGNED_8, d.length);
}
/**
@@ -656,16 +716,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copyFrom(float[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
mRS.validate();
if (mCurrentDimZ > 0) {
copy3DRangeFrom(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, d);
} else if (mCurrentDimY > 0) {
copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, d);
} else {
copy1DRangeFrom(0, mCurrentCount, d);
}
Trace.traceEnd(RenderScript.TRACE_TAG);
validateIsFloat32();
copyFromUnchecked(d, Element.DataType.FLOAT_32, d.length);
}
/**
@@ -794,6 +846,30 @@ public class Allocation extends BaseObj {
mRS.nAllocationGenerateMipmaps(getID(mRS));
}
private void copy1DRangeFromUnchecked(int off, int count, Object array,
Element.DataType dt, int arrayLen) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
final int dataSize = mType.mElement.getBytesSize() * count;
data1DChecks(off, count, arrayLen * dt.mSize, dataSize);
mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* Copy an array into part of this Allocation. This method does not
* guarantee that the Allocation is compatible with the input buffer.
*
* @param off The offset of the first element to be copied.
* @param count The number of elements to be copied.
* @param array The source data array
* @hide
*/
public void copy1DRangeFromUnchecked(int off, int count, Object array) {
copy1DRangeFromUnchecked(off, count, array,
validateObjectIsPrimitiveArray(array, false),
java.lang.reflect.Array.getLength(array));
}
/**
* Copy an array into part of this Allocation. This method does not
* guarantee that the Allocation is compatible with the input buffer.
@@ -803,11 +879,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFromUnchecked(int off, int count, int[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
int dataSize = mType.mElement.getBytesSize() * count;
data1DChecks(off, count, d.length * 4, dataSize);
mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, d, dataSize, Element.DataType.SIGNED_32);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_32, d.length);
}
/**
@@ -819,11 +891,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFromUnchecked(int off, int count, short[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
int dataSize = mType.mElement.getBytesSize() * count;
data1DChecks(off, count, d.length * 2, dataSize);
mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, d, dataSize, Element.DataType.SIGNED_16);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_16, d.length);
}
/**
@@ -835,11 +903,7 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFromUnchecked(int off, int count, byte[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
int dataSize = mType.mElement.getBytesSize() * count;
data1DChecks(off, count, d.length, dataSize);
mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, d, dataSize, Element.DataType.SIGNED_8);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.SIGNED_8, d.length);
}
/**
@@ -851,11 +915,24 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFromUnchecked(int off, int count, float[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
int dataSize = mType.mElement.getBytesSize() * count;
data1DChecks(off, count, d.length * 4, dataSize);
mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, d, dataSize, Element.DataType.FLOAT_32);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, (Object)d, Element.DataType.FLOAT_32, d.length);
}
/**
* Copy an array into part of this Allocation. This variant is type checked
* and will generate exceptions if the Allocation type does not
* match the component type of the array passed in.
*
* @param off The offset of the first element to be copied.
* @param count The number of elements to be copied.
* @param array The source data array.
* @hide
*/
public void copy1DRangeFrom(int off, int count, Object array) {
copy1DRangeFromUnchecked(off, count, array,
validateObjectIsPrimitiveArray(array, true),
java.lang.reflect.Array.getLength(array));
}
/**
@@ -868,10 +945,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFrom(int off, int count, int[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFrom");
validateIsInt32();
copy1DRangeFromUnchecked(off, count, d);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_32, d.length);
}
/**
@@ -884,10 +959,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFrom(int off, int count, short[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFrom");
validateIsInt16();
copy1DRangeFromUnchecked(off, count, d);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_16, d.length);
}
/**
@@ -900,10 +973,8 @@ public class Allocation extends BaseObj {
* @param d the source data array
*/
public void copy1DRangeFrom(int off, int count, byte[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFrom");
validateIsInt8();
copy1DRangeFromUnchecked(off, count, d);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, d, Element.DataType.SIGNED_8, d.length);
}
/**
@@ -916,11 +987,10 @@ public class Allocation extends BaseObj {
* @param d the source data array.
*/
public void copy1DRangeFrom(int off, int count, float[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFrom");
validateIsFloat32();
copy1DRangeFromUnchecked(off, count, d);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy1DRangeFromUnchecked(off, count, d, Element.DataType.FLOAT_32, d.length);
}
/**
* Copy part of an Allocation into this Allocation.
*
@@ -955,39 +1025,32 @@ public class Allocation extends BaseObj {
}
}
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, byte[] data) {
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, Object array,
Element.DataType dt, int arrayLen) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
mRS.validate();
validate2DRange(xoff, yoff, w, h);
mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID,
w, h, data, data.length, Element.DataType.SIGNED_8);
mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
array, arrayLen * dt.mSize, dt);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, short[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
mRS.validate();
validate2DRange(xoff, yoff, w, h);
mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID,
w, h, data, data.length * 2, Element.DataType.SIGNED_16);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, int[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
mRS.validate();
validate2DRange(xoff, yoff, w, h);
mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID,
w, h, data, data.length * 4, Element.DataType.SIGNED_32);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, float[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
mRS.validate();
validate2DRange(xoff, yoff, w, h);
mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID,
w, h, data, data.length * 4, Element.DataType.FLOAT_32);
/**
* Copy from an array into a rectangular region in this Allocation. The
* array is assumed to be tightly packed.
*
* @param xoff X offset of the region to update in this Allocation
* @param yoff Y offset of the region to update in this Allocation
* @param w Width of the region to update
* @param h Height of the region to update
* @param data to be placed into the Allocation
* @hide
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, Object array) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
copy2DRangeFromUnchecked(xoff, yoff, w, h, array,
validateObjectIsPrimitiveArray(array, true),
java.lang.reflect.Array.getLength(array));
Trace.traceEnd(RenderScript.TRACE_TAG);
}
@@ -1002,10 +1065,9 @@ public class Allocation extends BaseObj {
* @param data to be placed into the Allocation
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, byte[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
validateIsInt8();
copy2DRangeFromUnchecked(xoff, yoff, w, h, data);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
Element.DataType.SIGNED_8, data.length);
}
/**
@@ -1019,10 +1081,9 @@ public class Allocation extends BaseObj {
* @param data to be placed into the Allocation
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, short[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
validateIsInt16();
copy2DRangeFromUnchecked(xoff, yoff, w, h, data);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
Element.DataType.SIGNED_16, data.length);
}
/**
@@ -1036,10 +1097,9 @@ public class Allocation extends BaseObj {
* @param data to be placed into the Allocation
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, int[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
validateIsInt32();
copy2DRangeFromUnchecked(xoff, yoff, w, h, data);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
Element.DataType.SIGNED_32, data.length);
}
/**
@@ -1053,10 +1113,9 @@ public class Allocation extends BaseObj {
* @param data to be placed into the Allocation
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, float[] data) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
validateIsFloat32();
copy2DRangeFromUnchecked(xoff, yoff, w, h, data);
Trace.traceEnd(RenderScript.TRACE_TAG);
copy2DRangeFromUnchecked(xoff, yoff, w, h, data,
Element.DataType.FLOAT_32, data.length);
}
/**
@@ -1129,47 +1188,16 @@ public class Allocation extends BaseObj {
* @hide
*
*/
void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, byte[] data) {
private void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d,
Object array, Element.DataType dt, int arrayLen) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFromUnchecked");
mRS.validate();
validate3DRange(xoff, yoff, zoff, w, h, d);
mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
w, h, d, data, data.length, Element.DataType.SIGNED_8);
mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
array, arrayLen * dt.mSize, dt);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* @hide
*
*/
void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, short[] data) {
mRS.validate();
validate3DRange(xoff, yoff, zoff, w, h, d);
mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
w, h, d, data, data.length * 2, Element.DataType.SIGNED_16);
}
/**
* @hide
*
*/
void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, int[] data) {
mRS.validate();
validate3DRange(xoff, yoff, zoff, w, h, d);
mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
w, h, d, data, data.length * 4, Element.DataType.SIGNED_32);
}
/**
* @hide
*
*/
void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, float[] data) {
mRS.validate();
validate3DRange(xoff, yoff, zoff, w, h, d);
mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD,
w, h, d, data, data.length * 4, Element.DataType.FLOAT_32);
}
/**
* @hide
* Copy a rectangular region from the array into the allocation.
@@ -1183,36 +1211,12 @@ public class Allocation extends BaseObj {
* @param d Depth of the region to update
* @param data to be placed into the allocation
*/
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, byte[] data) {
validateIsInt8();
copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, data);
}
/**
* @hide
*
*/
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, short[] data) {
validateIsInt16();
copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, data);
}
/**
* @hide
*
*/
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, int[] data) {
validateIsInt32();
copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, data);
}
/**
* @hide
*
*/
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, float[] data) {
validateIsFloat32();
copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, data);
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, Object array) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFrom");
copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, array,
validateObjectIsPrimitiveArray(array, true),
java.lang.reflect.Array.getLength(array));
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1256,6 +1260,27 @@ public class Allocation extends BaseObj {
Trace.traceEnd(RenderScript.TRACE_TAG);
}
private void copyTo(Object array, Element.DataType dt, int arrayLen) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
mRS.validate();
mRS.nAllocationRead(getID(mRS), array, dt);
Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
* Copy from the Allocation into an array. The array must be at
* least as large as the Allocation. The
* {@link android.renderscript.Element} must match the component
* type of the array passed in.
*
* @param array The array to be set from the Allocation.
* @hide
*/
public void copyTo(Object array) {
copyTo(array, validateObjectIsPrimitiveArray(array, true),
java.lang.reflect.Array.getLength(array));
}
/**
* Copy from the Allocation into a byte array. The array must be at least
* as large as the Allocation. The allocation must be of an 8 bit integer
@@ -1264,11 +1289,8 @@ public class Allocation extends BaseObj {
* @param d The array to be set from the Allocation.
*/
public void copyTo(byte[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
validateIsInt8();
mRS.validate();
mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_8);
Trace.traceEnd(RenderScript.TRACE_TAG);
copyTo(d, Element.DataType.SIGNED_8, d.length);
}
/**
@@ -1279,11 +1301,8 @@ public class Allocation extends BaseObj {
* @param d The array to be set from the Allocation.
*/
public void copyTo(short[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
validateIsInt16();
mRS.validate();
mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_16);
Trace.traceEnd(RenderScript.TRACE_TAG);
copyTo(d, Element.DataType.SIGNED_16, d.length);
}
/**
@@ -1294,11 +1313,8 @@ public class Allocation extends BaseObj {
* @param d The array to be set from the Allocation.
*/
public void copyTo(int[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
validateIsInt32();
mRS.validate();
mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_32);
Trace.traceEnd(RenderScript.TRACE_TAG);
copyTo(d, Element.DataType.SIGNED_32, d.length);
}
/**
@@ -1309,11 +1325,8 @@ public class Allocation extends BaseObj {
* @param d The array to be set from the Allocation.
*/
public void copyTo(float[] d) {
Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
validateIsFloat32();
mRS.validate();
mRS.nAllocationRead(getID(mRS), d, Element.DataType.FLOAT_32);
Trace.traceEnd(RenderScript.TRACE_TAG);
copyTo(d, Element.DataType.FLOAT_32, d.length);
}
/**