Merge "Various fixes in setting globals in a script group"

This commit is contained in:
Yang Ni
2015-11-13 21:11:25 +00:00
committed by Gerrit Code Review
2 changed files with 10 additions and 26 deletions

View File

@@ -278,6 +278,8 @@ public final class ScriptGroup extends BaseObj {
public ValueAndSize(RenderScript rs, Object obj) { public ValueAndSize(RenderScript rs, Object obj) {
if (obj instanceof Allocation) { if (obj instanceof Allocation) {
value = ((Allocation)obj).getID(rs); value = ((Allocation)obj).getID(rs);
// Special value for size to tell the runtime and driver that
// the value is an Allocation
size = -1; size = -1;
} else if (obj instanceof Boolean) { } else if (obj instanceof Boolean) {
value = ((Boolean)obj).booleanValue() ? 1 : 0; value = ((Boolean)obj).booleanValue() ? 1 : 0;
@@ -289,10 +291,10 @@ public final class ScriptGroup extends BaseObj {
value = ((Long)obj).longValue(); value = ((Long)obj).longValue();
size = 8; size = 8;
} else if (obj instanceof Float) { } else if (obj instanceof Float) {
value = ((Float)obj).longValue(); value = Float.floatToRawIntBits(((Float)obj).floatValue());
size = 4; size = 4;
} else if (obj instanceof Double) { } else if (obj instanceof Double) {
value = ((Double)obj).longValue(); value = Double.doubleToRawLongBits(((Double)obj).doubleValue());
size = 8; size = 8;
} }
} }

View File

@@ -393,7 +393,6 @@ nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
size_t numValues, numDependencies; size_t numValues, numDependencies;
RsScriptFieldID* fieldIDs; RsScriptFieldID* fieldIDs;
uintptr_t* values;
RsClosure* depClosures; RsClosure* depClosures;
RsScriptFieldID* depFieldIDs; RsScriptFieldID* depFieldIDs;
@@ -430,15 +429,6 @@ nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
} }
values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
if (values == nullptr) {
goto exit;
}
for (size_t i = 0; i < numValues; i++) {
values[i] = (uintptr_t)jValues[i];
}
depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies); depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies);
if (depClosures == nullptr) { if (depClosures == nullptr) {
goto exit; goto exit;
@@ -459,7 +449,7 @@ nClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong kernelID,
ret = (jlong)(uintptr_t)rsClosureCreate( ret = (jlong)(uintptr_t)rsClosureCreate(
(RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue, (RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
fieldIDs, numValues, values, numValues, fieldIDs, numValues, jValues, numValues,
(int*)jSizes, numValues, (int*)jSizes, numValues,
depClosures, numDependencies, depClosures, numDependencies,
depFieldIDs, numDependencies); depFieldIDs, numDependencies);
@@ -511,7 +501,6 @@ nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
size_t numValues; size_t numValues;
RsScriptFieldID* fieldIDs; RsScriptFieldID* fieldIDs;
uintptr_t* values;
if (fieldIDs_length != values_length || values_length != sizes_length) { if (fieldIDs_length != values_length || values_length != sizes_length) {
ALOGE("Unmatched field IDs, values, and sizes in closure creation."); ALOGE("Unmatched field IDs, values, and sizes in closure creation.");
@@ -534,18 +523,9 @@ nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i]; fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
} }
values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
if (values == nullptr) {
goto exit;
}
for (size_t i = 0; i < numValues; i++) {
values[i] = (uintptr_t)jValues[i];
}
ret = (jlong)(uintptr_t)rsInvokeClosureCreate( ret = (jlong)(uintptr_t)rsInvokeClosureCreate(
(RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength, (RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
fieldIDs, numValues, values, numValues, fieldIDs, numValues, jValues, numValues,
(int*)jSizes, numValues); (int*)jSizes, numValues);
exit: exit:
@@ -561,15 +541,17 @@ exit:
static void static void
nClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID, nClosureSetArg(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
jint index, jlong value, jint size) { jint index, jlong value, jint size) {
// Size is signed with -1 indicating the value is an Allocation
rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index, rsClosureSetArg((RsContext)con, (RsClosure)closureID, (uint32_t)index,
(uintptr_t)value, (size_t)size); (uintptr_t)value, size);
} }
static void static void
nClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID, nClosureSetGlobal(JNIEnv *_env, jobject _this, jlong con, jlong closureID,
jlong fieldID, jlong value, jint size) { jlong fieldID, jlong value, jint size) {
// Size is signed with -1 indicating the value is an Allocation
rsClosureSetGlobal((RsContext)con, (RsClosure)closureID, rsClosureSetGlobal((RsContext)con, (RsClosure)closureID,
(RsScriptFieldID)fieldID, (uintptr_t)value, (size_t)size); (RsScriptFieldID)fieldID, (int64_t)value, size);
} }
static long static long