1ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray/*
2ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Copyright (C) 2013 The Android Open Source Project
3ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray *
4ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Licensed under the Apache License, Version 2.0 (the "License");
5ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * you may not use this file except in compliance with the License.
6ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * You may obtain a copy of the License at
7ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray *
8ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray *      http://www.apache.org/licenses/LICENSE-2.0
9ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray *
10ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Unless required by applicable law or agreed to in writing, software
11ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * distributed under the License is distributed on an "AS IS" BASIS,
12ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * See the License for the specific language governing permissions and
14ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * limitations under the License.
15ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray */
16ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
17ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murraypackage android.support.v8.renderscript;
18ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
19ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport java.lang.reflect.Method;
20ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport java.util.ArrayList;
21ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
22ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayclass ScriptGroupThunker extends ScriptGroup {
23ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    android.renderscript.ScriptGroup mN;
24ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
25ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    android.renderscript.ScriptGroup getNObj() {
26ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return mN;
27ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
28ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
29ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    ScriptGroupThunker(int id, RenderScript rs) {
30ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        super(id, rs);
31ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
32ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
33ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public void setInput(Script.KernelID s, Allocation a) {
34ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        AllocationThunker at = (AllocationThunker) a;
35d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
36d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            mN.setInput(s.mN, at.getNObj());
37d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
38d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
39d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
40ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
41ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
42ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public void setOutput(Script.KernelID s, Allocation a) {
43ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        AllocationThunker at = (AllocationThunker) a;
44d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
45d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            mN.setOutput(s.mN, at.getNObj());
46d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
47d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
48d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
49ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
50ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
51ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public void execute() {
52d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
53d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            mN.execute();
54d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
55d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
56d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
57ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
58ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
59ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
60ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public static final class Builder {
61ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
62ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        android.renderscript.ScriptGroup.Builder bN;
63ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        RenderScript mRS;
64ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
65ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        Builder(RenderScript rs) {
66ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            RenderScriptThunker rst = (RenderScriptThunker) rs;
67ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            mRS = rs;
68d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
69d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                bN = new android.renderscript.ScriptGroup.Builder(rst.mN);
70d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
71d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
72d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
73ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
74ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
75ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public Builder addKernel(Script.KernelID k) {
76d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
77d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                bN.addKernel(k.mN);
78d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
79d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
80d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
81ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return this;
82ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
83ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
84ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public Builder addConnection(Type t, Script.KernelID from, Script.FieldID to) {
85ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            TypeThunker tt = (TypeThunker) t;
86d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
87d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                bN.addConnection(tt.getNObj(), from.mN, to.mN);
88d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
89d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
90d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
91ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return this;
92ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
93ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
94ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public Builder addConnection(Type t, Script.KernelID from, Script.KernelID to) {
95ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            TypeThunker tt = (TypeThunker) t;
96d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
97d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                bN.addConnection(tt.getNObj(), from.mN, to.mN);
98d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
99d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
100d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
101ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return this;
102ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
103ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
104ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
105ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
106ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public ScriptGroupThunker create() {
107ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            ScriptGroupThunker sg = new ScriptGroupThunker(0, mRS);
108d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
109d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                sg.mN = bN.create();
110d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
111d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
112d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
113ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return sg;
114ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
115ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
116ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
117ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
118ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray}
119ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
120ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
121