Add dalvik code for forEach.

Change-Id: I26533fc553315b99b8f177ab62d9735a177b26b0
This commit is contained in:
Jason Sams
2011-04-27 16:33:11 -07:00
parent a08526ac42
commit 6e494d3ab6
3 changed files with 59 additions and 0 deletions

View File

@@ -420,6 +420,16 @@ public class RenderScript {
validate();
rsnScriptInvoke(mContext, id, slot);
}
native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
validate();
if (params == null) {
rsnScriptForEach(mContext, id, slot, ain, aout);
} else {
rsnScriptForEach(mContext, id, slot, ain, aout, params);
}
}
native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
validate();

View File

@@ -43,6 +43,35 @@ public class Script extends BaseObj {
}
}
/**
* @hide
* Only intended for use by generated reflected code.
*
* @param slot
* @param ain
* @param aout
* @param v
*/
protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
if (ain == null && aout == null) {
throw new RSIllegalArgumentException(
"At least one of ain or aout is required to be non-null.");
}
int in_id = 0;
if (ain != null) {
in_id = ain.getID();
}
int out_id = 0;
if (aout != null) {
out_id = aout.getID();
}
byte[] params = null;
if (v != null) {
params = v.getData();
}
mRS.nScriptForEach(getID(), slot, in_id, out_id, params);
}
Script(int id, RenderScript rs) {
super(id, rs);

View File

@@ -866,6 +866,24 @@ nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slo
_env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
}
static void
nScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
jint script, jint slot, jint ain, jint aout)
{
LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
}
static void
nScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
jint script, jint slot, jint ain, jint aout, jbyteArray params)
{
LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
jint len = _env->GetArrayLength(params);
jbyte *ptr = _env->GetByteArrayElements(params, NULL);
rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
_env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
}
// -----------------------------------
@@ -1235,6 +1253,8 @@ static JNINativeMethod methods[] = {
{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
{"rsnScriptForEach", "(IIIII)V", (void*)nScriptForEach },
{"rsnScriptForEach", "(IIIII[B)V", (void*)nScriptForEachV },
{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },