Loading api/current.txt +1 −2 Original line number Diff line number Diff line Loading @@ -19661,8 +19661,7 @@ package android.renderscript { method public int getUsage(); method public void ioReceive(); method public void ioSend(); method public synchronized void resize(int); method public synchronized void resize(int, int); method public deprecated synchronized void resize(int); method public void setFromFieldPacker(int, android.renderscript.FieldPacker); method public void setFromFieldPacker(int, int, android.renderscript.FieldPacker); method public void setSurface(android.view.Surface); graphics/java/android/renderscript/Allocation.java +158 −40 Original line number Diff line number Diff line Loading @@ -492,7 +492,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(int[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -507,7 +509,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(short[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -522,7 +526,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(byte[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -537,7 +543,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(float[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -553,7 +561,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(int[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -569,7 +579,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(short[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -585,7 +597,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(byte[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -601,7 +615,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(float[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading Loading @@ -967,12 +983,144 @@ public class Allocation extends BaseObj { Canvas c = new Canvas(newBitmap); c.drawBitmap(data, 0, 0, null); copy2DRangeFrom(xoff, yoff, newBitmap); return; } validateBitmapFormat(data); validate2DRange(xoff, yoff, data.getWidth(), data.getHeight()); mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, data); } private void validate3DRange(int xoff, int yoff, int zoff, int w, int h, int d) { if (mAdaptedAllocation != null) { } else { if (xoff < 0 || yoff < 0 || zoff < 0) { throw new RSIllegalArgumentException("Offset cannot be negative."); } if (h < 0 || w < 0 || d < 0) { throw new RSIllegalArgumentException("Height or width cannot be negative."); } if (((xoff + w) > mCurrentDimX) || ((yoff + h) > mCurrentDimY) || ((zoff + d) > mCurrentDimZ)) { throw new RSIllegalArgumentException("Updated region larger than allocation."); } } } /** * @hide * */ void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, byte[] data) { mRS.validate(); validate3DRange(xoff, yoff, zoff, w, h, d); mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d, data, data.length); } /** * @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); } /** * @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); } /** * @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); } /** * @hide * Copy a rectangular region from the array into the allocation. * The incoming array is assumed to be tightly packed. * * @param xoff X offset of the region to update * @param yoff Y offset of the region to update * @param zoff Z offset of the region to update * @param w Width of the incoming region to update * @param h Height of the incoming region to update * @param d Depth of the incoming 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); } /** * @hide * Copy a rectangular region into the allocation from another * allocation. * * @param xoff X offset of the region to update. * @param yoff Y offset of the region to update. * @param w Width of the incoming region to update. * @param h Height of the incoming region to update. * @param d Depth of the incoming region to update. * @param data source allocation. * @param dataXoff X offset in data of the region to update. * @param dataYoff Y offset in data of the region to update. * @param dataZoff Z offset in data of the region to update */ public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, Allocation data, int dataXoff, int dataYoff, int dataZoff) { mRS.validate(); validate3DRange(xoff, yoff, zoff, w, h, d); mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d, data.getID(mRS), dataXoff, dataYoff, dataZoff, data.mSelectedLOD); } /** * Copy from the Allocation into a Bitmap. The bitmap must Loading Loading @@ -1050,6 +1198,8 @@ public class Allocation extends BaseObj { * A new type will be created with the new dimension. * * @param dimX The new size of the allocation. * * @deprecated */ public synchronized void resize(int dimX) { if ((mType.getY() > 0)|| (mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) { Loading @@ -1064,38 +1214,6 @@ public class Allocation extends BaseObj { updateCacheInfo(mType); } /** * Resize a 2D allocation. The contents of the allocation are * preserved. If new elements are allocated objects are created * with null contents and the new region is otherwise undefined. * * If the new region is smaller the references of any objects * outside the new region will be released. * * A new type will be created with the new dimension. * * @param dimX The new size of the allocation. * @param dimY The new size of the allocation. */ public synchronized void resize(int dimX, int dimY) { if ((mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) { throw new RSInvalidStateException( "Resize only support for 2D allocations at this time."); } if (mType.getY() == 0) { throw new RSInvalidStateException( "Resize only support for 2D allocations at this time."); } mRS.nAllocationResize2D(getID(mRS), dimX, dimY); mRS.finish(); // Necessary because resize is fifoed and update is async. int typeID = mRS.nAllocationGetType(getID(mRS)); mType = new Type(typeID, mRS); mType.updateFromNative(); updateCacheInfo(mType); } // creation Loading graphics/java/android/renderscript/RenderScript.java +40 −5 Original line number Diff line number Diff line Loading @@ -420,6 +420,46 @@ public class RenderScript { rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b); } native void rsnAllocationData3D(int con, int dstAlloc, int dstXoff, int dstYoff, int dstZoff, int dstMip, int width, int height, int depth, int srcAlloc, int srcXoff, int srcYoff, int srcZoff, int srcMip); synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff, int dstMip, int width, int height, int depth, int srcAlloc, int srcXoff, int srcYoff, int srcZoff, int srcMip) { validate(); rsnAllocationData3D(mContext, dstAlloc, dstXoff, dstYoff, dstZoff, dstMip, width, height, depth, srcAlloc, srcXoff, srcYoff, srcZoff, srcMip); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationRead(int con, int id, byte[] d); synchronized void nAllocationRead(int id, byte[] d) { validate(); Loading Loading @@ -451,11 +491,6 @@ public class RenderScript { validate(); rsnAllocationResize1D(mContext, id, dimX); } native void rsnAllocationResize2D(int con, int id, int dimX, int dimY); synchronized void nAllocationResize2D(int id, int dimX, int dimY) { validate(); rsnAllocationResize2D(mContext, id, dimX, dimY); } native int rsnFileA3DCreateFromAssetStream(int con, int assetStream); synchronized int nFileA3DCreateFromAssetStream(int assetStream) { Loading graphics/jni/android_renderscript_RenderScript.cpp +71 −8 Original line number Diff line number Diff line Loading @@ -724,6 +724,72 @@ nAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con, srcMip, srcFace); } static void nAllocationData3D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jshortArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jbyteArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jintArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jint *ptr = _env->GetIntArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jfloatArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jfloat *ptr = _env->GetFloatArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_alloc(JNIEnv *_env, jobject _this, RsContext con, jint dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, jint dstMip, jint width, jint height, jint depth, jint srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, jint srcMip) { LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," " dstMip(%i), width(%i), height(%i)," " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); rsAllocationCopy3DRange(con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstZoff, dstMip, width, height, depth, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcZoff, srcMip); } static void nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data) { Loading Loading @@ -782,13 +848,6 @@ nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint rsAllocationResize1D(con, (RsAllocation)alloc, dimX); } static void nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY) { LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY); rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY); } // ----------------------------------- static int Loading Loading @@ -1519,13 +1578,17 @@ static JNINativeMethod methods[] = { {"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b }, {"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f }, {"rsnAllocationData2D", "(IIIIIIIIIIIII)V", (void*)nAllocationData2D_alloc }, {"rsnAllocationData3D", "(IIIIIIIII[II)V", (void*)nAllocationData3D_i }, {"rsnAllocationData3D", "(IIIIIIIII[SI)V", (void*)nAllocationData3D_s }, {"rsnAllocationData3D", "(IIIIIIIII[BI)V", (void*)nAllocationData3D_b }, {"rsnAllocationData3D", "(IIIIIIIII[FI)V", (void*)nAllocationData3D_f }, {"rsnAllocationData3D", "(IIIIIIIIIIIIII)V", (void*)nAllocationData3D_alloc }, {"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i }, {"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s }, {"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b }, {"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f }, {"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType}, {"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D }, {"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D }, {"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps }, {"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation }, Loading Loading
api/current.txt +1 −2 Original line number Diff line number Diff line Loading @@ -19661,8 +19661,7 @@ package android.renderscript { method public int getUsage(); method public void ioReceive(); method public void ioSend(); method public synchronized void resize(int); method public synchronized void resize(int, int); method public deprecated synchronized void resize(int); method public void setFromFieldPacker(int, android.renderscript.FieldPacker); method public void setFromFieldPacker(int, int, android.renderscript.FieldPacker); method public void setSurface(android.view.Surface);
graphics/java/android/renderscript/Allocation.java +158 −40 Original line number Diff line number Diff line Loading @@ -492,7 +492,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(int[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -507,7 +509,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(short[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -522,7 +526,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(byte[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -537,7 +543,9 @@ public class Allocation extends BaseObj { */ public void copyFromUnchecked(float[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -553,7 +561,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(int[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -569,7 +579,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(short[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -585,7 +597,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(byte[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading @@ -601,7 +615,9 @@ public class Allocation extends BaseObj { */ public void copyFrom(float[] d) { mRS.validate(); if (mCurrentDimY > 0) { 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); Loading Loading @@ -967,12 +983,144 @@ public class Allocation extends BaseObj { Canvas c = new Canvas(newBitmap); c.drawBitmap(data, 0, 0, null); copy2DRangeFrom(xoff, yoff, newBitmap); return; } validateBitmapFormat(data); validate2DRange(xoff, yoff, data.getWidth(), data.getHeight()); mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, data); } private void validate3DRange(int xoff, int yoff, int zoff, int w, int h, int d) { if (mAdaptedAllocation != null) { } else { if (xoff < 0 || yoff < 0 || zoff < 0) { throw new RSIllegalArgumentException("Offset cannot be negative."); } if (h < 0 || w < 0 || d < 0) { throw new RSIllegalArgumentException("Height or width cannot be negative."); } if (((xoff + w) > mCurrentDimX) || ((yoff + h) > mCurrentDimY) || ((zoff + d) > mCurrentDimZ)) { throw new RSIllegalArgumentException("Updated region larger than allocation."); } } } /** * @hide * */ void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d, byte[] data) { mRS.validate(); validate3DRange(xoff, yoff, zoff, w, h, d); mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d, data, data.length); } /** * @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); } /** * @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); } /** * @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); } /** * @hide * Copy a rectangular region from the array into the allocation. * The incoming array is assumed to be tightly packed. * * @param xoff X offset of the region to update * @param yoff Y offset of the region to update * @param zoff Z offset of the region to update * @param w Width of the incoming region to update * @param h Height of the incoming region to update * @param d Depth of the incoming 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); } /** * @hide * Copy a rectangular region into the allocation from another * allocation. * * @param xoff X offset of the region to update. * @param yoff Y offset of the region to update. * @param w Width of the incoming region to update. * @param h Height of the incoming region to update. * @param d Depth of the incoming region to update. * @param data source allocation. * @param dataXoff X offset in data of the region to update. * @param dataYoff Y offset in data of the region to update. * @param dataZoff Z offset in data of the region to update */ public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, Allocation data, int dataXoff, int dataYoff, int dataZoff) { mRS.validate(); validate3DRange(xoff, yoff, zoff, w, h, d); mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d, data.getID(mRS), dataXoff, dataYoff, dataZoff, data.mSelectedLOD); } /** * Copy from the Allocation into a Bitmap. The bitmap must Loading Loading @@ -1050,6 +1198,8 @@ public class Allocation extends BaseObj { * A new type will be created with the new dimension. * * @param dimX The new size of the allocation. * * @deprecated */ public synchronized void resize(int dimX) { if ((mType.getY() > 0)|| (mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) { Loading @@ -1064,38 +1214,6 @@ public class Allocation extends BaseObj { updateCacheInfo(mType); } /** * Resize a 2D allocation. The contents of the allocation are * preserved. If new elements are allocated objects are created * with null contents and the new region is otherwise undefined. * * If the new region is smaller the references of any objects * outside the new region will be released. * * A new type will be created with the new dimension. * * @param dimX The new size of the allocation. * @param dimY The new size of the allocation. */ public synchronized void resize(int dimX, int dimY) { if ((mType.getZ() > 0) || mType.hasFaces() || mType.hasMipmaps()) { throw new RSInvalidStateException( "Resize only support for 2D allocations at this time."); } if (mType.getY() == 0) { throw new RSInvalidStateException( "Resize only support for 2D allocations at this time."); } mRS.nAllocationResize2D(getID(mRS), dimX, dimY); mRS.finish(); // Necessary because resize is fifoed and update is async. int typeID = mRS.nAllocationGetType(getID(mRS)); mType = new Type(typeID, mRS); mType.updateFromNative(); updateCacheInfo(mType); } // creation Loading
graphics/java/android/renderscript/RenderScript.java +40 −5 Original line number Diff line number Diff line Loading @@ -420,6 +420,46 @@ public class RenderScript { rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b); } native void rsnAllocationData3D(int con, int dstAlloc, int dstXoff, int dstYoff, int dstZoff, int dstMip, int width, int height, int depth, int srcAlloc, int srcXoff, int srcYoff, int srcZoff, int srcMip); synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff, int dstMip, int width, int height, int depth, int srcAlloc, int srcXoff, int srcYoff, int srcZoff, int srcMip) { validate(); rsnAllocationData3D(mContext, dstAlloc, dstXoff, dstYoff, dstZoff, dstMip, width, height, depth, srcAlloc, srcXoff, srcYoff, srcZoff, srcMip); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes); synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) { validate(); rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes); } native void rsnAllocationRead(int con, int id, byte[] d); synchronized void nAllocationRead(int id, byte[] d) { validate(); Loading Loading @@ -451,11 +491,6 @@ public class RenderScript { validate(); rsnAllocationResize1D(mContext, id, dimX); } native void rsnAllocationResize2D(int con, int id, int dimX, int dimY); synchronized void nAllocationResize2D(int id, int dimX, int dimY) { validate(); rsnAllocationResize2D(mContext, id, dimX, dimY); } native int rsnFileA3DCreateFromAssetStream(int con, int assetStream); synchronized int nFileA3DCreateFromAssetStream(int assetStream) { Loading
graphics/jni/android_renderscript_RenderScript.cpp +71 −8 Original line number Diff line number Diff line Loading @@ -724,6 +724,72 @@ nAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con, srcMip, srcFace); } static void nAllocationData3D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jshortArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jbyteArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jintArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jint *ptr = _env->GetIntArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint zoff, jint lod, jint w, jint h, jint d, jfloatArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation3DData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, zoff, w, h, d, len); jfloat *ptr = _env->GetFloatArrayElements(data, NULL); rsAllocation3DData(con, (RsAllocation)alloc, xoff, yoff, zoff, lod, w, h, d, ptr, sizeBytes, 0); _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData3D_alloc(JNIEnv *_env, jobject _this, RsContext con, jint dstAlloc, jint dstXoff, jint dstYoff, jint dstZoff, jint dstMip, jint width, jint height, jint depth, jint srcAlloc, jint srcXoff, jint srcYoff, jint srcZoff, jint srcMip) { LOG_API("nAllocationData3D_alloc, con(%p), dstAlloc(%p), dstXoff(%i), dstYoff(%i)," " dstMip(%i), width(%i), height(%i)," " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i)", con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace, width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace); rsAllocationCopy3DRange(con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstZoff, dstMip, width, height, depth, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcZoff, srcMip); } static void nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data) { Loading Loading @@ -782,13 +848,6 @@ nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint rsAllocationResize1D(con, (RsAllocation)alloc, dimX); } static void nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY) { LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY); rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY); } // ----------------------------------- static int Loading Loading @@ -1519,13 +1578,17 @@ static JNINativeMethod methods[] = { {"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b }, {"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f }, {"rsnAllocationData2D", "(IIIIIIIIIIIII)V", (void*)nAllocationData2D_alloc }, {"rsnAllocationData3D", "(IIIIIIIII[II)V", (void*)nAllocationData3D_i }, {"rsnAllocationData3D", "(IIIIIIIII[SI)V", (void*)nAllocationData3D_s }, {"rsnAllocationData3D", "(IIIIIIIII[BI)V", (void*)nAllocationData3D_b }, {"rsnAllocationData3D", "(IIIIIIIII[FI)V", (void*)nAllocationData3D_f }, {"rsnAllocationData3D", "(IIIIIIIIIIIIII)V", (void*)nAllocationData3D_alloc }, {"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i }, {"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s }, {"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b }, {"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f }, {"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType}, {"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D }, {"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D }, {"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps }, {"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation }, Loading