Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 431b4359 authored by Jason Sams's avatar Jason Sams Committed by Android (Google) Code Review
Browse files

Merge "Add long/double read support."

parents b530aeb0 21659ac4
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1262,7 +1262,7 @@ public class Allocation extends BaseObj {
        Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
        validateIsInt8();
        mRS.validate();
        mRS.nAllocationRead(getID(mRS), d);
        mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_8);
        Trace.traceEnd(RenderScript.TRACE_TAG);
    }

@@ -1277,7 +1277,7 @@ public class Allocation extends BaseObj {
        Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
        validateIsInt16();
        mRS.validate();
        mRS.nAllocationRead(getID(mRS), d);
        mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_16);
        Trace.traceEnd(RenderScript.TRACE_TAG);
    }

@@ -1292,7 +1292,7 @@ public class Allocation extends BaseObj {
        Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
        validateIsInt32();
        mRS.validate();
        mRS.nAllocationRead(getID(mRS), d);
        mRS.nAllocationRead(getID(mRS), d, Element.DataType.SIGNED_32);
        Trace.traceEnd(RenderScript.TRACE_TAG);
    }

@@ -1307,7 +1307,7 @@ public class Allocation extends BaseObj {
        Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
        validateIsFloat32();
        mRS.validate();
        mRS.nAllocationRead(getID(mRS), d);
        mRS.nAllocationRead(getID(mRS), d, Element.DataType.FLOAT_32);
        Trace.traceEnd(RenderScript.TRACE_TAG);
    }

+17 −14
Original line number Diff line number Diff line
@@ -425,6 +425,7 @@ public class RenderScript {
        validate();
        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
    }

    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
        validate();
@@ -457,26 +458,28 @@ public class RenderScript {
        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID);
    }

    native void rsnAllocationRead(int con, int id, byte[] d);
    synchronized void nAllocationRead(int id, byte[] d) {
        validate();
        rsnAllocationRead(mContext, id, d);
    }
    native void rsnAllocationRead(int con, int id, short[] d);
    synchronized void nAllocationRead(int id, short[] d) {
    native void rsnAllocationRead(int con, int id, Object d, int dt);
    synchronized void nAllocationRead(int id, Object d, Element.DataType dt) {
        validate();
        rsnAllocationRead(mContext, id, d);
        rsnAllocationRead(mContext, id, d, dt.mID);
    }
    native void rsnAllocationRead(int con, int id, int[] d);
    synchronized void nAllocationRead(int id, int[] d) {

    native void rsnAllocationRead1D(int con, int id, int off, int mip, int count, Object d,
                                    int sizeBytes, int dt);
    synchronized void nAllocationRead1D(int id, int off, int mip, int count, Object d,
                                        int sizeBytes, Element.DataType dt) {
        validate();
        rsnAllocationRead(mContext, id, d);
        rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID);
    }
    native void rsnAllocationRead(int con, int id, float[] d);
    synchronized void nAllocationRead(int id, float[] d) {

    native void rsnAllocationRead2D(int con, int id, int xoff, int yoff, int mip, int face,
                                    int w, int h, Object d, int sizeBytes, int dt);
    synchronized void nAllocationRead2D(int id, int xoff, int yoff, int mip, int face,
                                        int w, int h, Object d, int sizeBytes, Element.DataType dt) {
        validate();
        rsnAllocationRead(mContext, id, d);
        rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
    }

    native int  rsnAllocationGetType(int con, int id);
    synchronized int nAllocationGetType(int id) {
        validate();
+27 −35
Original line number Diff line number Diff line
@@ -53,16 +53,19 @@ using namespace android;
#define PER_ARRAY_TYPE(flag, fnc, ...) {                                                \
    jint len = 0;                                                                       \
    void *ptr = NULL;                                                                   \
    size_t typeBytes = 0;                                                               \
    switch(dataType) {                                                                  \
    case RS_TYPE_FLOAT_32:                                                              \
        len = _env->GetArrayLength((jfloatArray)data);                                  \
        ptr = _env->GetFloatArrayElements((jfloatArray)data, flag);                     \
        typeBytes = 4;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseFloatArrayElements((jfloatArray)data, (jfloat *)ptr, JNI_ABORT);   \
        return;                                                                         \
    case RS_TYPE_FLOAT_64:                                                              \
        len = _env->GetArrayLength((jdoubleArray)data);                                 \
        ptr = _env->GetDoubleArrayElements((jdoubleArray)data, flag);                   \
        typeBytes = 8;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseDoubleArrayElements((jdoubleArray)data, (jdouble *)ptr, JNI_ABORT);\
        return;                                                                         \
@@ -70,6 +73,7 @@ using namespace android;
    case RS_TYPE_UNSIGNED_8:                                                            \
        len = _env->GetArrayLength((jbyteArray)data);                                   \
        ptr = _env->GetByteArrayElements((jbyteArray)data, flag);                       \
        typeBytes = 1;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseByteArrayElements((jbyteArray)data, (jbyte*)ptr, JNI_ABORT);       \
        return;                                                                         \
@@ -77,6 +81,7 @@ using namespace android;
    case RS_TYPE_UNSIGNED_16:                                                           \
        len = _env->GetArrayLength((jshortArray)data);                                  \
        ptr = _env->GetShortArrayElements((jshortArray)data, flag);                     \
        typeBytes = 2;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseShortArrayElements((jshortArray)data, (jshort *)ptr, JNI_ABORT);   \
        return;                                                                         \
@@ -84,6 +89,7 @@ using namespace android;
    case RS_TYPE_UNSIGNED_32:                                                           \
        len = _env->GetArrayLength((jintArray)data);                                    \
        ptr = _env->GetIntArrayElements((jintArray)data, flag);                         \
        typeBytes = 4;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseIntArrayElements((jintArray)data, (jint *)ptr, JNI_ABORT);         \
        return;                                                                         \
@@ -91,6 +97,7 @@ using namespace android;
    case RS_TYPE_UNSIGNED_64:                                                           \
        len = _env->GetArrayLength((jlongArray)data);                                   \
        ptr = _env->GetLongArrayElements((jlongArray)data, flag);                       \
        typeBytes = 8;                                                                  \
        fnc(__VA_ARGS__);                                                               \
        _env->ReleaseLongArrayElements((jlongArray)data, (jlong *)ptr, JNI_ABORT);      \
        return;                                                                         \
@@ -742,48 +749,34 @@ nAllocationData3D_alloc(JNIEnv *_env, jobject _this, RsContext con,
                            srcXoff, srcYoff, srcZoff, srcMip);
}

static void
nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
{
    jint len = _env->GetArrayLength(data);
    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
    jint *ptr = _env->GetIntArrayElements(data, NULL);
    jsize length = _env->GetArrayLength(data);
    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(int));
    _env->ReleaseIntArrayElements(data, ptr, 0);
}

static void
nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
nAllocationRead(JNIEnv *_env, jobject _this, RsContext con, jint _alloc, jobject data, int dataType)
{
    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);
    jsize length = _env->GetArrayLength(data);
    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(short));
    _env->ReleaseShortArrayElements(data, ptr, 0);
    RsAllocation *alloc = (RsAllocation *)_alloc;
    LOG_API("nAllocationRead, con(%p), alloc(%p)", con, (RsAllocation)alloc);
    PER_ARRAY_TYPE(0, rsAllocationRead, con, alloc, ptr, len * typeBytes);
}

static void
nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
nAllocationRead1D(JNIEnv *_env, jobject _this, RsContext con, jint _alloc, jint offset, jint lod,
                  jint count, jobject data, int sizeBytes, int dataType)
{
    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);
    jsize length = _env->GetArrayLength(data);
    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(char));
    _env->ReleaseByteArrayElements(data, ptr, 0);
    RsAllocation *alloc = (RsAllocation *)_alloc;
    LOG_API("nAllocation1DRead, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i), dataType(%i)",
            con, alloc, offset, count, len, sizeBytes, dataType);
    PER_ARRAY_TYPE(0, rsAllocation1DRead, con, alloc, offset, lod, count, ptr, sizeBytes);
}

static void
nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
nAllocationRead2D(JNIEnv *_env, jobject _this, RsContext con, jint _alloc, jint xoff, jint yoff, jint lod, jint _face,
                  jint w, jint h, jobject data, int sizeBytes, int dataType)
{
    jint len = _env->GetArrayLength(data);
    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
    jsize length = _env->GetArrayLength(data);
    rsAllocationRead(con, (RsAllocation)alloc, ptr, length * sizeof(float));
    _env->ReleaseFloatArrayElements(data, ptr, 0);
    RsAllocation *alloc = (RsAllocation *)_alloc;
    RsAllocationCubemapFace face = (RsAllocationCubemapFace)_face;
    LOG_API("nAllocation2DRead, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i) type(%i)",
            con, alloc, xoff, yoff, w, h, sizeBytes, dataType);
    PER_ARRAY_TYPE(0, rsAllocation2DRead, con, alloc, xoff, yoff, lod, face, w, h, ptr, sizeBytes, 0);
}

static jint
@@ -1572,10 +1565,9 @@ static JNINativeMethod methods[] = {
{"rsnAllocationData2D",              "(IIIIIIIIIIIII)V",                      (void*)nAllocationData2D_alloc },
{"rsnAllocationData3D",              "(IIIIIIIIILjava/lang/Object;II)V",      (void*)nAllocationData3D },
{"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 },
{"rsnAllocationRead",                "(IILjava/lang/Object;I)V",              (void*)nAllocationRead },
{"rsnAllocationRead1D",              "(IIIIILjava/lang/Object;II)V",          (void*)nAllocationRead1D },
{"rsnAllocationRead2D",              "(IIIIIIIILjava/lang/Object;II)V",       (void*)nAllocationRead2D },
{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },