Loading graphics/java/android/renderscript/Allocation.java +32 −8 Original line number Diff line number Diff line Loading @@ -162,12 +162,7 @@ public class Allocation extends BaseObj { copy1DRangeFrom(0, mType.getCount(), i); } private void validateBitmap(Bitmap b) { mRS.validate(); if(mType.getX() != b.getWidth() || mType.getY() != b.getHeight()) { throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch"); } private void validateBitmapFormat(Bitmap b) { Bitmap.Config bc = b.getConfig(); switch (bc) { case ALPHA_8: Loading Loading @@ -213,6 +208,13 @@ public class Allocation extends BaseObj { } } private void validateBitmapSize(Bitmap b) { if(mType.getX() != b.getWidth() || mType.getY() != b.getHeight()) { throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch"); } } public void copyFrom(int[] d) { mRS.validate(); copy1DRangeFrom(0, mType.getCount(), d); Loading @@ -230,7 +232,9 @@ public class Allocation extends BaseObj { copy1DRangeFrom(0, mType.getCount(), d); } public void copyFrom(Bitmap b) { validateBitmap(b); mRS.validate(); validateBitmapSize(b); validateBitmapFormat(b); mRS.nAllocationCopyFromBitmap(getID(), b); } Loading Loading @@ -338,6 +342,18 @@ public class Allocation extends BaseObj { mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize); } private void validate2DRange(int xoff, int yoff, int w, int h) { if (xoff < 0 || yoff < 0) { throw new RSIllegalArgumentException("Offset cannot be negative."); } if (h < 0 || w < 0) { throw new RSIllegalArgumentException("Height or width cannot be negative."); } if ((xoff + w) > mType.mDimX || (yoff + h) > mType.mDimY) { throw new RSIllegalArgumentException("Updated region larger than allocation."); } } /** * Copy a rectanglular region from the array into the Loading @@ -352,21 +368,25 @@ public class Allocation extends BaseObj { */ public void copy2DRangeFrom(int xoff, int yoff, int w, int h, byte[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, short[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 2); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, int[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 4); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, float[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 4); } Loading @@ -381,12 +401,16 @@ public class Allocation extends BaseObj { */ public void copy2DRangeFrom(int xoff, int yoff, Bitmap data) { mRS.validate(); validateBitmapFormat(data); validate2DRange(xoff, yoff, data.getWidth(), data.getHeight()); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, data); } public void copyTo(Bitmap b) { validateBitmap(b); mRS.validate(); validateBitmapFormat(b); validateBitmapSize(b); mRS.nAllocationCopyToBitmap(getID(), b); } Loading graphics/jni/android_renderscript_RenderScript.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,28 @@ nAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jshortArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes); _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jbyteArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes); _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jintArray data, int sizeBytes) Loading Loading @@ -566,6 +588,26 @@ nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintAr _env->ReleaseIntArrayElements(data, ptr, 0); } static void nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data) { jint len = _env->GetArrayLength(data); LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocationRead(con, (RsAllocation)alloc, ptr); _env->ReleaseShortArrayElements(data, ptr, 0); } static void nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data) { jint len = _env->GetArrayLength(data); LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocationRead(con, (RsAllocation)alloc, ptr); _env->ReleaseByteArrayElements(data, ptr, 0); } static void nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data) { Loading Loading @@ -1216,8 +1258,12 @@ static JNINativeMethod methods[] = { {"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f }, {"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D }, {"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i }, {"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s }, {"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b }, {"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f }, {"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 }, Loading libs/rs/rsAllocation.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -202,6 +202,17 @@ void Allocation::uploadToTexture(const Context *rsc) { rsc->checkError("Allocation::uploadToTexture"); } void Allocation::update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h) { GLenum type = mType->getElement()->getComponent().getGLType(); GLenum format = mType->getElement()->getComponent().getGLFormat(); GLenum target = (GLenum)getGLTarget(); glBindTexture(target, mTextureID); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_2D, lod, xoff, yoff, w, h, format, type, ptr); } void Allocation::upload2DTexture(bool isFirstUpload, const void *ptr) { GLenum type = mType->getElement()->getComponent().getGLType(); GLenum format = mType->getElement()->getComponent().getGLFormat(); Loading Loading @@ -368,11 +379,12 @@ void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t lod, sendDirty(); mUploadDefered = true; } else { upload2DTexture(false, data); update2DTexture(data, xoff, yoff, lod, face, w, h); } } void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, RsAllocationCubemapFace face, void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes) { } Loading libs/rs/rsAllocation.h +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ public: } void upload2DTexture(bool isFirstUpload, const void *ptr); void update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h); protected: ObjectBaseRef<const Type> mType; Loading Loading
graphics/java/android/renderscript/Allocation.java +32 −8 Original line number Diff line number Diff line Loading @@ -162,12 +162,7 @@ public class Allocation extends BaseObj { copy1DRangeFrom(0, mType.getCount(), i); } private void validateBitmap(Bitmap b) { mRS.validate(); if(mType.getX() != b.getWidth() || mType.getY() != b.getHeight()) { throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch"); } private void validateBitmapFormat(Bitmap b) { Bitmap.Config bc = b.getConfig(); switch (bc) { case ALPHA_8: Loading Loading @@ -213,6 +208,13 @@ public class Allocation extends BaseObj { } } private void validateBitmapSize(Bitmap b) { if(mType.getX() != b.getWidth() || mType.getY() != b.getHeight()) { throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch"); } } public void copyFrom(int[] d) { mRS.validate(); copy1DRangeFrom(0, mType.getCount(), d); Loading @@ -230,7 +232,9 @@ public class Allocation extends BaseObj { copy1DRangeFrom(0, mType.getCount(), d); } public void copyFrom(Bitmap b) { validateBitmap(b); mRS.validate(); validateBitmapSize(b); validateBitmapFormat(b); mRS.nAllocationCopyFromBitmap(getID(), b); } Loading Loading @@ -338,6 +342,18 @@ public class Allocation extends BaseObj { mRS.nAllocationData1D(getID(), off, 0, count, d, dataSize); } private void validate2DRange(int xoff, int yoff, int w, int h) { if (xoff < 0 || yoff < 0) { throw new RSIllegalArgumentException("Offset cannot be negative."); } if (h < 0 || w < 0) { throw new RSIllegalArgumentException("Height or width cannot be negative."); } if ((xoff + w) > mType.mDimX || (yoff + h) > mType.mDimY) { throw new RSIllegalArgumentException("Updated region larger than allocation."); } } /** * Copy a rectanglular region from the array into the Loading @@ -352,21 +368,25 @@ public class Allocation extends BaseObj { */ public void copy2DRangeFrom(int xoff, int yoff, int w, int h, byte[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, short[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 2); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, int[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 4); } public void copy2DRangeFrom(int xoff, int yoff, int w, int h, float[] data) { mRS.validate(); validate2DRange(xoff, yoff, w, h); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, w, h, data, data.length * 4); } Loading @@ -381,12 +401,16 @@ public class Allocation extends BaseObj { */ public void copy2DRangeFrom(int xoff, int yoff, Bitmap data) { mRS.validate(); validateBitmapFormat(data); validate2DRange(xoff, yoff, data.getWidth(), data.getHeight()); mRS.nAllocationData2D(getID(), xoff, yoff, 0, 0, data); } public void copyTo(Bitmap b) { validateBitmap(b); mRS.validate(); validateBitmapFormat(b); validateBitmapSize(b); mRS.nAllocationCopyToBitmap(getID(), b); } Loading
graphics/jni/android_renderscript_RenderScript.cpp +46 −0 Original line number Diff line number Diff line Loading @@ -534,6 +534,28 @@ nAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jshortArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes); _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jbyteArray data, int sizeBytes) { jint len = _env->GetArrayLength(data); LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes); _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT); } static void nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face, jint w, jint h, jintArray data, int sizeBytes) Loading Loading @@ -566,6 +588,26 @@ nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintAr _env->ReleaseIntArrayElements(data, ptr, 0); } static void nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data) { jint len = _env->GetArrayLength(data); LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len); jshort *ptr = _env->GetShortArrayElements(data, NULL); rsAllocationRead(con, (RsAllocation)alloc, ptr); _env->ReleaseShortArrayElements(data, ptr, 0); } static void nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data) { jint len = _env->GetArrayLength(data); LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len); jbyte *ptr = _env->GetByteArrayElements(data, NULL); rsAllocationRead(con, (RsAllocation)alloc, ptr); _env->ReleaseByteArrayElements(data, ptr, 0); } static void nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data) { Loading Loading @@ -1216,8 +1258,12 @@ static JNINativeMethod methods[] = { {"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f }, {"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D }, {"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i }, {"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s }, {"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b }, {"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f }, {"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 }, Loading
libs/rs/rsAllocation.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -202,6 +202,17 @@ void Allocation::uploadToTexture(const Context *rsc) { rsc->checkError("Allocation::uploadToTexture"); } void Allocation::update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h) { GLenum type = mType->getElement()->getComponent().getGLType(); GLenum format = mType->getElement()->getComponent().getGLFormat(); GLenum target = (GLenum)getGLTarget(); glBindTexture(target, mTextureID); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_2D, lod, xoff, yoff, w, h, format, type, ptr); } void Allocation::upload2DTexture(bool isFirstUpload, const void *ptr) { GLenum type = mType->getElement()->getComponent().getGLType(); GLenum format = mType->getElement()->getComponent().getGLFormat(); Loading Loading @@ -368,11 +379,12 @@ void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t lod, sendDirty(); mUploadDefered = true; } else { upload2DTexture(false, data); update2DTexture(data, xoff, yoff, lod, face, w, h); } } void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, RsAllocationCubemapFace face, void Allocation::data(Context *rsc, uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes) { } Loading
libs/rs/rsAllocation.h +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ public: } void upload2DTexture(bool isFirstUpload, const void *ptr); void update2DTexture(const void *ptr, uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, uint32_t w, uint32_t h); protected: ObjectBaseRef<const Type> mType; Loading