Merge "New Script Group API for support library."
diff --git a/v8/renderscript/jni/android_renderscript_RenderScript.cpp b/v8/renderscript/jni/android_renderscript_RenderScript.cpp
index 9d1017f..536cbcb 100644
--- a/v8/renderscript/jni/android_renderscript_RenderScript.cpp
+++ b/v8/renderscript/jni/android_renderscript_RenderScript.cpp
@@ -135,6 +135,86 @@
dispatchTab.ContextFinish(con);
}
+static jlong
+nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
+ jlong returnValue, jlongArray fieldIDArray,
+ jlongArray valueArray, jintArray sizeArray,
+ jlongArray depClosureArray, jlongArray depFieldIDArray) {
+ LOG_API("nClosureCreate: con(%p)", con);
+ jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
+ jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
+ RsScriptFieldID* fieldIDs =
+ (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
+ for (int i = 0; i< fieldIDs_length; i++) {
+ fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
+ }
+
+ jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
+ jsize values_length = _env->GetArrayLength(valueArray);
+ uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
+ for (int i = 0; i < values_length; i++) {
+ values[i] = (uintptr_t)jValues[i];
+ }
+
+ jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
+ jsize sizes_length = _env->GetArrayLength(sizeArray);
+
+ jlong* jDepClosures =
+ _env->GetLongArrayElements(depClosureArray, nullptr);
+ jsize depClosures_length = _env->GetArrayLength(depClosureArray);
+ RsClosure* depClosures =
+ (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
+ for (int i = 0; i < depClosures_length; i++) {
+ depClosures[i] = (RsClosure)jDepClosures[i];
+ }
+
+ jlong* jDepFieldIDs =
+ _env->GetLongArrayElements(depFieldIDArray, nullptr);
+ jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
+ RsScriptFieldID* depFieldIDs =
+ (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
+ for (int i = 0; i < depClosures_length; i++) {
+ depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
+ }
+
+ return (jlong)(uintptr_t)dispatchTab.ClosureCreate(
+ (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
+ fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
+ (size_t*)sizes, (size_t)sizes_length,
+ depClosures, (size_t)depClosures_length,
+ depFieldIDs, (size_t)depFieldIDs_length);
+}
+
+static void
+nClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
+ jint index, jlong value, jint size) {
+ dispatchTab.ClosureSetArg((RsContext)con, (RsClosure)closureID,
+ (uint32_t)index, (uintptr_t)value, (size_t)size);
+}
+
+static void
+nClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
+ jlong fieldID, jlong value, jint size) {
+ dispatchTab.ClosureSetGlobal((RsContext)con, (RsClosure)closureID,
+ (RsScriptFieldID)fieldID, (uintptr_t)value,
+ (size_t)size);
+}
+
+static long
+nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
+ jlongArray closureArray) {
+ jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
+ jsize numClosures = _env->GetArrayLength(closureArray);
+ RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
+ for (int i = 0; i < numClosures; i++) {
+ closures[i] = (RsClosure)jClosures[i];
+ }
+
+ return (jlong)(uintptr_t)dispatchTab.ScriptGroup2Create((RsContext)con,
+ closures,
+ numClosures);
+}
+
static void
nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
{
@@ -1061,6 +1141,9 @@
{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
{"rsnContextDump", "(II)V", (void*)nContextDump },
{"rsnContextSendMessage", "(II[I)V", (void*)nContextSendMessage },
+{"rsnClosureCreate", "(JJJ[J[J[I[J[J)J", (void*)nClosureCreate },
+{"rsnClosureSetArg", "(JJIJI)V", (void*)nClosureSetArg },
+{"rsnClosureSetGlobal", "(JJJJI)V", (void*)nClosureSetGlobal },
{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
@@ -1124,10 +1207,10 @@
{"rsnScriptKernelIDCreate", "(IIII)I", (void*)nScriptKernelIDCreate },
{"rsnScriptFieldIDCreate", "(III)I", (void*)nScriptFieldIDCreate },
{"rsnScriptGroupCreate", "(I[I[I[I[I[I)I", (void*)nScriptGroupCreate },
+{"rsnScriptGroup2Create", "(J[J)J", (void*)nScriptGroup2Create },
{"rsnScriptGroupSetInput", "(IIII)V", (void*)nScriptGroupSetInput },
{"rsnScriptGroupSetOutput", "(IIII)V", (void*)nScriptGroupSetOutput },
{"rsnScriptGroupExecute", "(II)V", (void*)nScriptGroupExecute },
-
{"rsnSamplerCreate", "(IIIIIIF)I", (void*)nSamplerCreate },
};
diff --git a/v8/renderscript/rs_support/Android.mk b/v8/renderscript/rs_support/Android.mk
index 2c990a3..1cff15d 100644
--- a/v8/renderscript/rs_support/Android.mk
+++ b/v8/renderscript/rs_support/Android.mk
@@ -85,6 +85,7 @@
LOCAL_SRC_FILES:= \
rsAdapter.cpp \
rsAllocation.cpp \
+ rsClosure.cpp \
rsCompatibilityLib.cpp \
rsComponent.cpp \
rsContext.cpp \
@@ -102,6 +103,7 @@
rsScriptC.cpp \
rsScriptC_Lib.cpp \
rsScriptGroup.cpp \
+ rsScriptGroup2.cpp \
rsScriptIntrinsic.cpp \
rsSignal.cpp \
rsStream.cpp \
@@ -120,6 +122,7 @@
cpu_ref/rsCpuRuntimeMath.cpp \
cpu_ref/rsCpuRuntimeStubs.cpp \
cpu_ref/rsCpuScriptGroup.cpp \
+ cpu_ref/rsCpuScriptGroup2.cpp \
cpu_ref/rsCpuIntrinsic.cpp \
cpu_ref/rsCpuIntrinsic3DLUT.cpp \
cpu_ref/rsCpuIntrinsicBlend.cpp \