diff options
-rw-r--r-- | rs/java/android/renderscript/Allocation.java | 62 | ||||
-rw-r--r-- | rs/java/android/renderscript/RenderScript.java | 7 | ||||
-rw-r--r-- | rs/jni/android_renderscript_RenderScript.cpp | 22 |
3 files changed, 25 insertions, 66 deletions
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java index 1164651..c6afa2c 100644 --- a/rs/java/android/renderscript/Allocation.java +++ b/rs/java/android/renderscript/Allocation.java @@ -797,6 +797,7 @@ public class Allocation extends BaseObj { copy1DRangeFromUnchecked(xoff, count, data); } + /** * This is only intended to be used by auto-generated code reflected from * the RenderScript script files. @@ -816,20 +817,6 @@ public class Allocation extends BaseObj { * * @param xoff * @param yoff - * @param component_number - * @param fp - */ - public void setFromFieldPacker(int xoff, int yoff, int component_number, FieldPacker fp) { - setFromFieldPacker(xoff, yoff, 0, component_number, fp); - } - - /** - * @hide - * This is only intended to be used by auto-generated code reflected from - * the RenderScript script files. - * - * @param xoff - * @param yoff * @param zoff * @param component_number * @param fp @@ -1427,35 +1414,8 @@ public class Allocation extends BaseObj { /** * @hide - * Copy subelement from the Allocation into an object array. - * This is intended to be used with user defined structs - * - * @param xoff - * @param component_number - * @param array - */ - public void copyElementTo(int xoff, int component_number, Object array) { - copyElementTo(xoff, 0, 0, component_number, array); - } - - /** - * @hide - * Copy subelement from the Allocation into an object array. - * This is intended to be used with user defined structs - * - * @param xoff - * @param yoff - * @param component_number - * @param array - */ - public void copyElementTo(int xoff, int yoff, int component_number, Object array) { - copyElementTo(xoff, yoff, 0, component_number, array); - } - - /** - * @hide - * Copy subelement from the Allocation into an object array. - * This is intended to be used with user defined structs + * This is only intended to be used by auto-generated code reflected from + * the RenderScript script files and should not be used by developers. * * @param xoff * @param yoff @@ -1463,8 +1423,7 @@ public class Allocation extends BaseObj { * @param component_number * @param array */ - public void copyElementTo(int xoff, int yoff, int zoff, int component_number, Object array) { - Trace.traceBegin(RenderScript.TRACE_TAG, "copyElementTo"); + public void copyToFieldPacker(int xoff, int yoff, int zoff, int component_number, FieldPacker fp) { mRS.validate(); if (component_number >= mType.mElement.mElements.length) { throw new RSIllegalArgumentException("Component_number " + component_number + " out of range."); @@ -1479,19 +1438,18 @@ public class Allocation extends BaseObj { throw new RSIllegalArgumentException("Offset z must be >= 0."); } - Element.DataType dt = validateObjectIsPrimitiveArray(array, false); - int array_size = java.lang.reflect.Array.getLength(array) * dt.mSize; + final byte[] data = fp.getData(); + int data_length = fp.getPos(); int eSize = mType.mElement.mElements[component_number].getBytesSize(); eSize *= mType.mElement.mArraySizes[component_number]; - if (array_size < eSize) { - throw new RSIllegalArgumentException("Array Size (bytes)" + array_size + - " is smaller than component size " + eSize + "."); + if (data_length != eSize) { + throw new RSIllegalArgumentException("Field packer sizelength " + data_length + + " does not match component size " + eSize + "."); } mRS.nAllocationElementRead(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, - component_number, array, eSize, dt); - Trace.traceEnd(RenderScript.TRACE_TAG); + component_number, data, data_length); } /** * Resize a 1D allocation. The contents of the allocation are preserved. diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java index 6c32238..3d6d07f 100644 --- a/rs/java/android/renderscript/RenderScript.java +++ b/rs/java/android/renderscript/RenderScript.java @@ -578,12 +578,11 @@ public class RenderScript { } native void rsnAllocationElementRead(long con,long id, int xoff, int yoff, int zoff, - int mip, int compIdx, Object d, int sizeBytes, int dt); + int mip, int compIdx, byte[] d, int sizeBytes); synchronized void nAllocationElementRead(long id, int xoff, int yoff, int zoff, - int mip, int compIdx, Object d, int sizeBytes, - Element.DataType dt) { + int mip, int compIdx, byte[] d, int sizeBytes) { validate(); - rsnAllocationElementRead(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes, dt.mID); + rsnAllocationElementRead(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes); } native void rsnAllocationRead2D(long con, long id, int xoff, int yoff, int mip, int face, diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp index c139df7..8483507 100644 --- a/rs/jni/android_renderscript_RenderScript.cpp +++ b/rs/jni/android_renderscript_RenderScript.cpp @@ -1297,19 +1297,21 @@ nAllocationRead1D(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, jint off // Copies from the Element in the Allocation pointed to by _alloc into the Java array data. static void -nAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong _alloc, +nAllocationElementRead(JNIEnv *_env, jobject _this, jlong con, jlong alloc, jint xoff, jint yoff, jint zoff, - jint lod, jint compIdx, jobject data, jint sizeBytes, int dataType) + jint lod, jint compIdx, jbyteArray data, jint sizeBytes) { - RsAllocation *alloc = (RsAllocation *)_alloc; + jint len = _env->GetArrayLength(data); if (kLogApi) { - ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), " - "sizeBytes(%i)", (RsContext)con, alloc, xoff, yoff, zoff, compIdx, sizeBytes); + ALOGD("nAllocationElementRead, con(%p), alloc(%p), xoff(%i), yoff(%i), zoff(%i), comp(%i), len(%i), " + "sizeBytes(%i)", (RsContext)con, (RsAllocation)alloc, xoff, yoff, zoff, compIdx, len, + sizeBytes); } - int mSize = sizeBytes; - int count = 0; - PER_ARRAY_TYPE(0, rsAllocationElementRead, false, (RsContext)con, alloc, - xoff, yoff, zoff, lod, ptr, sizeBytes, compIdx); + jbyte *ptr = _env->GetByteArrayElements(data, nullptr); + rsAllocationElementRead((RsContext)con, (RsAllocation)alloc, + xoff, yoff, zoff, + lod, ptr, sizeBytes, compIdx); + _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } // Copies from the Allocation pointed to by _alloc into the Java object data. @@ -2372,7 +2374,7 @@ static JNINativeMethod methods[] = { {"rsnAllocationData3D", "(JJIIIIIIIJIIII)V", (void*)nAllocationData3D_alloc }, {"rsnAllocationRead", "(JJLjava/lang/Object;IIZ)V", (void*)nAllocationRead }, {"rsnAllocationRead1D", "(JJIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead1D }, -{"rsnAllocationElementRead", "(JJIIIIILjava/lang/Object;II)V", (void*)nAllocationElementRead }, +{"rsnAllocationElementRead", "(JJIIIII[BI)V", (void*)nAllocationElementRead }, {"rsnAllocationRead2D", "(JJIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead2D }, {"rsnAllocationRead3D", "(JJIIIIIIILjava/lang/Object;IIIZ)V", (void*)nAllocationRead3D }, {"rsnAllocationGetType", "(JJ)J", (void*)nAllocationGetType}, |