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

Commit 3b9c52ab authored by Jason Sams's avatar Jason Sams
Browse files

Async type creation.

Change-Id: I4d98446fabbf7e8a98c97f85b573a58c8a0c58c2
parent c65217e4
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