Merge "Various fixes in setting globals in a script group"
am: c011ffd842
* commit 'c011ffd84296700df4c28b9fc9fa84da9081de41':
Various fixes in setting globals in a script group
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user