Merge "Generic object based data copy."
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user