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.Field;
20ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
21ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.util.Log;
22ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
23ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayclass ElementThunker extends Element {
24ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    android.renderscript.Element mN;
25ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
26ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    android.renderscript.Element getNObj() {
27ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return mN;
28ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
29ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
30ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public int getBytesSize() {
31d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
32d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getBytesSize();
33d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
34d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
35d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
36ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
37ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
38ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public int getVectorSize() {
39d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
40d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getVectorSize();
41d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
42d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
43d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
44ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
45ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
46ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    static android.renderscript.Element.DataKind convertKind(DataKind cdk) {
47ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        switch(cdk) {
48ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case USER:
49ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.USER;
50ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case PIXEL_L:
51ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.PIXEL_L;
52ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case PIXEL_A:
53ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.PIXEL_A;
54ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case PIXEL_LA:
55ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.PIXEL_LA;
56ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case PIXEL_RGB:
57ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.PIXEL_RGB;
58ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case PIXEL_RGBA:
59ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataKind.PIXEL_RGBA;
60ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
61ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return null;
62ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
63ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
64ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    static android.renderscript.Element.DataType convertType(DataType cdt) {
65ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        switch(cdt) {
66ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case NONE:
67ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.NONE;
68ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            //case DataType.FLOAT_16:
69ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case FLOAT_32:
70ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.FLOAT_32;
71ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case FLOAT_64:
72ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.FLOAT_64;
73ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case SIGNED_8:
74ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.SIGNED_8;
75ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case SIGNED_16:
76ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.SIGNED_16;
77ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case SIGNED_32:
78ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.SIGNED_32;
79ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case SIGNED_64:
80ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.SIGNED_64;
81ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case UNSIGNED_8:
82ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.UNSIGNED_8;
83ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case UNSIGNED_16:
84ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.UNSIGNED_16;
85ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case UNSIGNED_32:
86ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.UNSIGNED_32;
87ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case UNSIGNED_64:
88ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.UNSIGNED_64;
89ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
90ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case BOOLEAN:
91ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.BOOLEAN;
92ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
93ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case MATRIX_4X4:
94ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.MATRIX_4X4;
95ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case MATRIX_3X3:
96ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.MATRIX_3X3;
97ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case MATRIX_2X2:
98ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.MATRIX_2X2;
99ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
100ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case RS_ELEMENT:
101ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.RS_ELEMENT;
102ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case RS_TYPE:
103ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.RS_TYPE;
104ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case RS_ALLOCATION:
105ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.RS_ALLOCATION;
106ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case RS_SAMPLER:
107ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.RS_SAMPLER;
108ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        case RS_SCRIPT:
109ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            return android.renderscript.Element.DataType.RS_SCRIPT;
110ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
111ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return null;
112ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
113ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
114ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public boolean isComplex() {
115d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
116d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.isComplex();
117d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
118d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
119d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
120ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
121ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
122ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public int getSubElementCount() {
123d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
124d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getSubElementCount();
125d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
126d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
127d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
128ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
129ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
130ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public Element getSubElement(int index) {
131d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
132d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return new ElementThunker(mRS, mN.getSubElement(index));
133d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
134d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
135d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
136ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
137ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
138ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public String getSubElementName(int index) {
139d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
140d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getSubElementName(index);
141d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
142d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
143d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
144ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
145ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
146ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public int getSubElementArraySize(int index) {
147d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
148d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getSubElementArraySize(index);
149d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
150d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
151d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
152ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
153ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
154ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public int getSubElementOffsetBytes(int index) {
155d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
156d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return mN.getSubElementOffsetBytes(index);
157d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
158d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
159d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
160ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
161ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
162ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public DataType getDataType() {
163ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return mType;
164ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
165ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
166ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public DataKind getDataKind() {
167ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return mKind;
168ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
169ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
170ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
171ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    ElementThunker(RenderScript rs, android.renderscript.Element e) {
172ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        super(0, rs);
173ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        mN = e;
174ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
175ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
176ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
177ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    static Element create(RenderScript rs, DataType dt) {
178ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        RenderScriptThunker rst = (RenderScriptThunker)rs;
179d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
180d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            android.renderscript.Element e = null;
181d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            switch(dt) {
182d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case FLOAT_32:
183d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.F32(rst.mN);
184d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
185d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case FLOAT_64:
186d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.F64(rst.mN);
187d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
188d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case SIGNED_8:
189d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.I8(rst.mN);
190d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
191d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case SIGNED_16:
192d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.I16(rst.mN);
193d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
194d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case SIGNED_32:
195d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.I32(rst.mN);
196d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
197d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case SIGNED_64:
198d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.I64(rst.mN);
199d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
200d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case UNSIGNED_8:
201d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.U8(rst.mN);
202d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
203d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case UNSIGNED_16:
204d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.U16(rst.mN);
205d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
206d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case UNSIGNED_32:
207d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.U32(rst.mN);
208d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
209d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case UNSIGNED_64:
210d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.U64(rst.mN);
211d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
212ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
213d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case BOOLEAN:
214d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.BOOLEAN(rst.mN);
215d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
216ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
217d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case MATRIX_4X4:
218d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.MATRIX_4X4(rst.mN);
219d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
220d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case MATRIX_3X3:
221d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.MATRIX_3X3(rst.mN);
222d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
223d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case MATRIX_2X2:
224d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.MATRIX_2X2(rst.mN);
225ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray                break;
226ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
227d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case RS_ELEMENT:
228d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.ELEMENT(rst.mN);
229d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
230d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case RS_TYPE:
231d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.TYPE(rst.mN);
232d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
233d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case RS_ALLOCATION:
234d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.ALLOCATION(rst.mN);
235d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
236d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case RS_SAMPLER:
237d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.SAMPLER(rst.mN);
238d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
239d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            case RS_SCRIPT:
240d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                e = android.renderscript.Element.SCRIPT(rst.mN);
241d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                break;
242d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
243ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
244d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return new ElementThunker(rs, e);
245d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException e) {
246d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(e);
247d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
248ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
249ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
250ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public static Element createVector(RenderScript rs, DataType dt, int size) {
251ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        RenderScriptThunker rst = (RenderScriptThunker)rs;
252ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        android.renderscript.Element e;
253d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
254d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            e = android.renderscript.Element.createVector(rst.mN, convertType(dt), size);
255d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return new ElementThunker(rs, e);
256d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException exc) {
257d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(exc);
258d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
259ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
260ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
261ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) {
262ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        RenderScriptThunker rst = (RenderScriptThunker)rs;
263ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        android.renderscript.Element e;
264d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
265d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            e = android.renderscript.Element.createPixel(rst.mN, convertType(dt), convertKind(dk));
266ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        return new ElementThunker(rs, e);
267d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException exc) {
268d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(exc);
269d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
270ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
271ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
272ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    public boolean isCompatible(Element e) {
273ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        ElementThunker et = (ElementThunker)e;
274d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        try {
275d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            return et.mN.isCompatible(mN);
276d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        } catch (android.renderscript.RSRuntimeException exc) {
277d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            throw ExceptionThunker.convertException(exc);
278d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray        }
279ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
280ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
281ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    static class BuilderThunker {
282ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        android.renderscript.Element.Builder mN;
283ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
284ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public BuilderThunker(RenderScript rs) {
285ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            RenderScriptThunker rst = (RenderScriptThunker)rs;
286d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
287d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                mN = new android.renderscript.Element.Builder(rst.mN);
288d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException e) {
289d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(e);
290d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
291ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
292ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
293ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public void add(Element e, String name, int arraySize) {
294ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray            ElementThunker et = (ElementThunker)e;
295d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
296d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                mN.add(et.mN, name, arraySize);
297d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException exc) {
298d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(exc);
299d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
300ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
301ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
302ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        public Element create(RenderScript rs) {
303d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            try {
304d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                android.renderscript.Element e = mN.create();
305d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                return new ElementThunker(rs, e);
306d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            } catch (android.renderscript.RSRuntimeException exc) {
307d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray                throw ExceptionThunker.convertException(exc);
308d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray            }
309ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray        }
310ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray    }
311ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray}
312ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray
313d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray
314