diff options
author | Yang Ni <yangni@google.com> | 2015-03-11 16:25:37 -0700 |
---|---|---|
committer | Yang Ni <yangni@google.com> | 2015-03-19 14:38:20 -0700 |
commit | 8ff2980f31c0e21660606932eb65676e5107d624 (patch) | |
tree | 2a4513dd9a1dfda8980da4cc12cf5dd550d08d0b /rs/java/android/renderscript/ScriptGroup2.java | |
parent | c077ee316e0f6f50ade552f51ae657a08e423eaa (diff) | |
download | frameworks_base-8ff2980f31c0e21660606932eb65676e5107d624.zip frameworks_base-8ff2980f31c0e21660606932eb65676e5107d624.tar.gz frameworks_base-8ff2980f31c0e21660606932eb65676e5107d624.tar.bz2 |
New API methods for Script Group
Use a single vararg Object array for both kernel/invoke arguments
and global bindings. The assumption is that global bindings are in
the end after the kernel/invoke arguments.
This simplifies the api to add a kernel or invoke to a script group.
Change-Id: I7efb1035c5967e2cadd15e6fe27f20c80ba197a2
Diffstat (limited to 'rs/java/android/renderscript/ScriptGroup2.java')
-rw-r--r-- | rs/java/android/renderscript/ScriptGroup2.java | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/rs/java/android/renderscript/ScriptGroup2.java b/rs/java/android/renderscript/ScriptGroup2.java index 2e171b6..4a56572 100644 --- a/rs/java/android/renderscript/ScriptGroup2.java +++ b/rs/java/android/renderscript/ScriptGroup2.java @@ -345,11 +345,22 @@ public class ScriptGroup2 extends BaseObj { /** @hide Pending Android public API approval. */ + public static final class Binding { + public Script.FieldID mField; + public Object mValue; + public Binding(Script.FieldID field, Object value) { + mField = field; + mValue = value; + } + } + + /** + @hide Pending Android public API approval. + */ public static final class Builder { RenderScript mRS; List<Closure> mClosures; List<UnboundValue> mInputs; - private static final String TAG = "ScriptGroup2.Builder"; public Builder(RenderScript rs) { @@ -378,10 +389,50 @@ public class ScriptGroup2 extends BaseObj { return unbound; } + public Closure addKernel(Script.KernelID k, Type returnType, Object... argsAndBindings) { + ArrayList<Object> args = new ArrayList<Object>(); + Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>(); + if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) { + return null; + } + return addKernel(k, returnType, args.toArray(), bindingMap); + } + + public Closure addInvoke(Script.InvokeID invoke, Object... argsAndBindings) { + ArrayList<Object> args = new ArrayList<Object>(); + Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>(); + if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) { + return null; + } + return addInvoke(invoke, args.toArray(), bindingMap); + } + public ScriptGroup2 create(Future... outputs) { ScriptGroup2 ret = new ScriptGroup2(mRS, mClosures, mInputs, outputs); return ret; } + private boolean seperateArgsAndBindings(Object[] argsAndBindings, + ArrayList<Object> args, + Map<Script.FieldID, Object> bindingMap) { + int i; + for (i = 0; i < argsAndBindings.length; i++) { + if (argsAndBindings[i] instanceof Binding) { + break; + } + args.add(argsAndBindings[i]); + } + + for (; i < argsAndBindings.length; i++) { + if (!(argsAndBindings[i] instanceof Binding)) { + return false; + } + Binding b = (Binding)argsAndBindings[i]; + bindingMap.put(b.mField, b.mValue); + } + + return true; + } + } } |