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

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

Merge "Async type creation."

parents 9ba60833 3b9c52ab
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -178,17 +178,9 @@ public class RenderScript {
        rsnElementGetSubElements(mContext, id, IDs, names);
    }

    native void rsnTypeBegin(int con, int elementID);
    synchronized void nTypeBegin(int elementID) {
        rsnTypeBegin(mContext, elementID);
    }
    native void rsnTypeAdd(int con, int dim, int val);
    synchronized void nTypeAdd(int dim, int val) {
        rsnTypeAdd(mContext, dim, val);
    }
    native int  rsnTypeCreate(int con);
    synchronized int nTypeCreate() {
        return rsnTypeCreate(mContext);
    native int rsnTypeCreate(int con, int eid, int[] dims, int[] vals);
    synchronized int nTypeCreate(int eid, int[] dims, int[] vals) {
        return rsnTypeCreate(mContext, eid, dims, vals);
    }
    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
    synchronized void nTypeGetNativeData(int id, int[] typeData) {
+30 −29
Original line number Diff line number Diff line
@@ -132,7 +132,8 @@ public class Type extends BaseObj {

    public static class Builder {
        RenderScript mRS;
        Entry[] mEntries;
        Dimension[] mDimensions;
        int[] mDimensionValues;
        int mEntryCount;
        Element mElement;

@@ -147,7 +148,8 @@ public class Type extends BaseObj {
            }

            mRS = rs;
            mEntries = new Entry[4];
            mDimensions = new Dimension[4];
            mDimensionValues = new int[4];
            mElement = e;
        }

@@ -155,46 +157,45 @@ public class Type extends BaseObj {
            if(value < 1) {
                throw new IllegalArgumentException("Values of less than 1 for Dimensions are not valid.");
            }
            if(mEntries.length >= mEntryCount) {
                Entry[] en = new Entry[mEntryCount + 8];
                System.arraycopy(mEntries, 0, en, 0, mEntries.length);
                mEntries = en;
            if(mDimensions.length >= mEntryCount) {
                Dimension[] dn = new Dimension[mEntryCount + 8];
                System.arraycopy(mDimensions, 0, dn, 0, mEntryCount);
                mDimensions = dn;

                int[] in = new int[mEntryCount + 8];
                System.arraycopy(mDimensionValues, 0, in, 0, mEntryCount);
                mDimensionValues = in;
            }
            mEntries[mEntryCount] = new Entry();
            mEntries[mEntryCount].mDim = d;
            mEntries[mEntryCount].mValue = value;
            mDimensions[mEntryCount] = d;
            mDimensionValues[mEntryCount] = value;
            mEntryCount++;
        }

        static synchronized Type internalCreate(RenderScript rs, Builder b) {
            rs.nTypeBegin(b.mElement.mID);
            for (int ct=0; ct < b.mEntryCount; ct++) {
                Entry en = b.mEntries[ct];
                rs.nTypeAdd(en.mDim.mID, en.mValue);
            }
            int id = rs.nTypeCreate();
            return new Type(id, rs);
        public Type create() {
            int dims[] = new int[mEntryCount];
            for (int ct=0; ct < mEntryCount; ct++) {
                dims[ct] = mDimensions[ct].mID;
            }

        public Type create() {
            Type t = internalCreate(mRS, this);
            int id = mRS.nTypeCreate(mElement.getID(), dims, mDimensionValues);
            Type t = new Type(id, mRS);
            t.mElement = mElement;

            for(int ct=0; ct < mEntryCount; ct++) {
                if(mEntries[ct].mDim == Dimension.X) {
                    t.mDimX = mEntries[ct].mValue;
                if(mDimensions[ct] == Dimension.X) {
                    t.mDimX = mDimensionValues[ct];
                }
                if(mEntries[ct].mDim == Dimension.Y) {
                    t.mDimY = mEntries[ct].mValue;
                if(mDimensions[ct] == Dimension.Y) {
                    t.mDimY = mDimensionValues[ct];
                }
                if(mEntries[ct].mDim == Dimension.Z) {
                    t.mDimZ = mEntries[ct].mValue;
                if(mDimensions[ct] == Dimension.Z) {
                    t.mDimZ = mDimensionValues[ct];
                }
                if(mEntries[ct].mDim == Dimension.LOD) {
                    t.mDimLOD = mEntries[ct].mValue != 0;
                if(mDimensions[ct] == Dimension.LOD) {
                    t.mDimLOD = mDimensionValues[ct] != 0;
                }
                if(mEntries[ct].mDim == Dimension.FACE) {
                    t.mDimFaces = mEntries[ct].mValue != 0;
                if(mDimensions[ct] == Dimension.FACE) {
                    t.mDimFaces = mDimensionValues[ct] != 0;
                }
            }
            t.calcElementCount();
+14 −20
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ static void
nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
{
    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
    rsObjDestroy(con, (void *)obj);
    rsObjDestroy(con, (uint32_t)obj);
}


@@ -336,25 +336,21 @@ nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jint

// -----------------------------------

static void
nTypeBegin(JNIEnv *_env, jobject _this, RsContext con, jint eID)
static int
nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
{
    LOG_API("nTypeBegin, con(%p) e(%p)", con, (RsElement)eID);
    rsTypeBegin(con, (RsElement)eID);
}
    int count = _env->GetArrayLength(_dims);
    LOG_API("nTypeCreate, con(%p)", con);

static void
nTypeAdd(JNIEnv *_env, jobject _this, RsContext con, jint dim, jint val)
{
    LOG_API("nTypeAdd, con(%p) dim(%i), val(%i)", con, dim, val);
    rsTypeAdd(con, (RsDimension)dim, val);
}
    jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
    jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);

static jint
nTypeCreate(JNIEnv *_env, jobject _this, RsContext con)
{
    LOG_API("nTypeCreate, con(%p)", con);
    return (jint)rsTypeCreate(con);
    jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
                                  (RsDimension *)dimPtr, (uint32_t *)dimValPtr);

    _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
    _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
    return (jint)id;
}

static void
@@ -1261,9 +1257,7 @@ static JNINativeMethod methods[] = {
{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;)V",            (void*)nElementGetSubElements },

{"rsnTypeBegin",                     "(II)V",                                 (void*)nTypeBegin },
{"rsnTypeAdd",                       "(III)V",                                (void*)nTypeAdd },
{"rsnTypeCreate",                    "(I)I",                                  (void*)nTypeCreate },
{"rsnTypeCreate",                    "(II[I[I)I",                             (void*)nTypeCreate },
{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },

{"rsnAllocationCreateTyped",         "(II)I",                                 (void*)nAllocationCreateTyped },
+7 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ extern "C" {
//////////////////////////////////////////////////////
//

typedef void * RsAsyncVoidPtr;

typedef void * RsAdapter1D;
typedef void * RsAdapter2D;
typedef void * RsAllocation;
@@ -285,6 +287,11 @@ typedef struct {
} RsScriptCall;


// Async commands for returning new IDS
void * rsaTypeCreate(RsContext, RsElement, uint32_t dimCount,
                     const RsDimension *dims, const uint32_t *vals);


#ifndef NO_RS_FUNCS
#include "rsgApiFuncDecl.h"
#endif
+3 −15
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ GetName {
	}

ObjDestroy {
	param void *obj
	param RsAsyncVoidPtr objPtr
	}

ElementCreate {
@@ -97,18 +97,6 @@ ElementGetSubElements {
	param uint32_t dataSize
	}

TypeBegin {
	param RsElement type
	}

TypeAdd {
	param RsDimension dim
	param size_t value
	}

TypeCreate {
	ret RsType
	}

TypeGetNativeData {
	param RsType type
@@ -135,8 +123,8 @@ AllocationUpdateFromBitmap {

AllocationCreateBitmapRef {
	param RsType type
	param void * bmpPtr
	param void * callbackData
	param RsAsyncVoidPtr bmpPtr
	param RsAsyncVoidPtr callbackData
	param RsBitmapCallback_t callback
	ret RsAllocation
	}
Loading