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

Commit 6307f028 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 20586

* changes:
  Let java put #defines into renderscript
parents 42431bc3 d7b3774d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ public class RenderScript {
    native void nContextBindProgramFragmentStore(int pfs);
    native void nContextBindProgramFragment(int pf);
    native void nContextBindProgramVertex(int pf);
    native void nContextAddDefineI32(String name, int value);
    native void nContextAddDefineF(String name, float value);

    native void nAssignName(int obj, byte[] name);
    native int  nFileOpen(byte[] name);
@@ -139,6 +141,8 @@ public class RenderScript {
    native void nScriptCSetRoot(boolean isRoot);
    native void nScriptCSetScript(byte[] script, int offset, int length);
    native int  nScriptCCreate();
    native void nScriptCAddDefineI32(String name, int value);
    native void nScriptCAddDefineF(String name, float value);

    native void nSamplerDestroy(int sampler);
    native void nSamplerBegin();
+24 −9
Original line number Diff line number Diff line
@@ -16,11 +16,13 @@

package android.renderscript;

import java.io.IOException;
import java.io.InputStream;

import android.content.res.Resources;
import android.util.Log;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map.Entry;
import java.util.HashMap;

/**
 * @hide
@@ -30,12 +32,11 @@ public class ScriptC extends Script {
        super(id, rs);
    }




    public static class Builder extends Script.Builder {
        byte[] mProgram;
        int mProgramLength;
        HashMap<String,Integer> mIntDefines = new HashMap();
        HashMap<String,Float> mFloatDefines = new HashMap();

        public Builder(RenderScript rs) {
            super(rs);
@@ -88,19 +89,33 @@ public class ScriptC extends Script {
            b.mRS.nScriptCBegin();
            b.transferCreate();

            b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength);
            for (Entry<String,Integer> e: b.mIntDefines.entrySet()) {
                b.mRS.nScriptCAddDefineI32(e.getKey(), e.getValue().intValue());
            }
            for (Entry<String,Float> e: b.mFloatDefines.entrySet()) {
                b.mRS.nScriptCAddDefineF(e.getKey(), e.getValue().floatValue());
            }

            b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength);

            int id = b.mRS.nScriptCCreate();
            ScriptC obj = new ScriptC(id, b.mRS);
            b.transferObject(obj);

            return obj;
        }

        public void addDefine(String name, int value) {
            mIntDefines.put(name, value);
        }

        public void addDefine(String name, float value) {
            mFloatDefines.put(name, value);
        }

        public ScriptC create() {
            return internalCreate(this);
        }
    }

}
+43 −0
Original line number Diff line number Diff line
@@ -765,6 +765,26 @@ nScriptCCreate(JNIEnv *_env, jobject _this)
    return (jint)rsScriptCCreate();
}

static void
nScriptCAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
{
    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
    const char* n = _env->GetStringUTFChars(name, NULL);
    LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
    rsScriptCSetDefineI32(n, value);
    _env->ReleaseStringUTFChars(name, n);
}

static void
nScriptCAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
{
    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
    const char* n = _env->GetStringUTFChars(name, NULL);
    LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
    rsScriptCSetDefineF(n, value);
    _env->ReleaseStringUTFChars(name, n);
}

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

static void
@@ -985,6 +1005,27 @@ nContextBindProgramVertex(JNIEnv *_env, jobject _this, jint pf)
    rsContextBindProgramVertex((RsProgramVertex)pf);
}

static void
nContextAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
{
    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
    const char* n = _env->GetStringUTFChars(name, NULL);
    LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
    rsContextSetDefineI32(n, value);
    _env->ReleaseStringUTFChars(name, n);
}

static void
nContextAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
{
    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
    const char* n = _env->GetStringUTFChars(name, NULL);
    LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
    rsContextSetDefineF(n, value);
    _env->ReleaseStringUTFChars(name, n);
}


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

static void
@@ -1197,6 +1238,8 @@ static JNINativeMethod methods[] = {
{"nScriptCSetRoot",                "(Z)V",                                 (void*)nScriptCSetRoot },
{"nScriptCSetScript",              "([BII)V",                              (void*)nScriptCSetScript },
{"nScriptCCreate",                 "()I",                                  (void*)nScriptCCreate },
{"nScriptCAddDefineI32",           "(Ljava/lang/String;I)V",               (void*)nScriptCAddDefineI32 },
{"nScriptCAddDefineF",             "(Ljava/lang/String;F)V",               (void*)nScriptCAddDefineF },

{"nProgramFragmentStoreBegin",     "(II)V",                                (void*)nProgramFragmentStoreBegin },
{"nProgramFragmentStoreDepthFunc", "(I)V",                                 (void*)nProgramFragmentStoreDepthFunc },
+19 −0
Original line number Diff line number Diff line
@@ -16,6 +16,16 @@ ContextBindProgramVertex {
	param RsProgramVertex pgm
	}

ContextSetDefineF {
    param const char* name
    param float value
    }

ContextSetDefineI32 {
    param const char* name
    param int32_t value
    }

AssignName {
	param void *obj
	param const char *name
@@ -318,6 +328,15 @@ ScriptCCreate {
	ret RsScript
	}

ScriptCSetDefineF {
    param const char* name
    param float value
    }

ScriptCSetDefineI32 {
    param const char* name
    param int32_t value
    }

ProgramFragmentStoreBegin {
	param RsElement in
+29 −0
Original line number Diff line number Diff line
@@ -331,6 +331,26 @@ void Context::appendNameDefines(String8 *str) const
    }
}

void Context::appendVarDefines(String8 *str) const
{
    char buf[256];
    for (size_t ct=0; ct < mInt32Defines.size(); ct++) {
        str->append("#define ");
        str->append(mInt32Defines.keyAt(ct));
        str->append(" ");
        sprintf(buf, "%i\n", (int)mInt32Defines.valueAt(ct));
        str->append(buf);

    }
    for (size_t ct=0; ct < mFloatDefines.size(); ct++) {
        str->append("#define ");
        str->append(mFloatDefines.keyAt(ct));
        str->append(" ");
        sprintf(buf, "%ff\n", mFloatDefines.valueAt(ct));
        str->append(buf);
    }
}


///////////////////////////////////////////////////////////////////////////////////////////
//
@@ -381,6 +401,15 @@ void rsi_AssignName(Context *rsc, void * obj, const char *name, uint32_t len)
    rsc->assignName(ob, name, len);
}

void rsi_ContextSetDefineF(Context *rsc, const char* name, float value)
{
    rsc->addInt32Define(name, value);
}

void rsi_ContextSetDefineI32(Context *rsc, const char* name, int32_t value)
{
    rsc->addFloatDefine(name, value);
}

}
}
Loading