1a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian/*
2a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * Copyright (C) 2013 The Android Open Source Project
3a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian *
4a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * you may not use this file except in compliance with the License.
6a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * You may obtain a copy of the License at
7a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian *
8a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian *
10a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * Unless required by applicable law or agreed to in writing, software
11a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * See the License for the specific language governing permissions and
14a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian * limitations under the License.
15a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian */
16a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian
172965b26022f95051f65b09d7eac47cbe923855c9Mathias Agopianpackage android.support.v8.renderscript;
182965b26022f95051f65b09d7eac47cbe923855c9Mathias Agopian
195880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hallimport android.content.Context;
2030bcc61431d8e3bef779472dd52a7b156dcaba09Mathias Agopianimport android.content.res.Resources;
215880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hallimport android.util.Log;
22a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian
23f1352df47fe20aed23c216a78923c7d248f2bb91Mathias Agopianimport java.io.File;
24f1352df47fe20aed23c216a78923c7d248f2bb91Mathias Agopianimport java.io.IOException;
25f1352df47fe20aed23c216a78923c7d248f2bb91Mathias Agopianimport java.io.InputStream;
26a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopianimport java.util.Map.Entry;
27a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopianimport java.util.HashMap;
28a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian
29da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopianimport java.lang.reflect.Field;
308372785879d329f592f6883620b5a32d80d74691Mathias Agopianimport java.lang.reflect.Modifier;
313eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian
322965b26022f95051f65b09d7eac47cbe923855c9Mathias Agopian/**
3322da60c3e64cd57535cbba063c07127814a2b52fMathias Agopian *
34a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian **/
35921e6ac4b7610a178285898d191eb0e3afe906c0Mathias Agopianclass ScriptCThunker extends android.renderscript.ScriptC {
36921e6ac4b7610a178285898d191eb0e3afe906c0Mathias Agopian    private static final String TAG = "ScriptC";
37a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian
383eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian    protected ScriptCThunker(RenderScriptThunker rs, Resources resources, int resourceID) {
39a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        super(rs.mN, resources, resourceID);
40a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian    }
41e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian
42a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian    android.renderscript.Script.KernelID thunkCreateKernelID(
43921e6ac4b7610a178285898d191eb0e3afe906c0Mathias Agopian            int slot, int sig, Element ein, Element eout) {
44a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian
45c7d14e247117392fbd44aa454622778a25c076aeMathias Agopian        android.renderscript.Element nein = null;
46da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian        android.renderscript.Element neout = null;
47a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        if (ein != null) {
48a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian            nein = ((ElementThunker)ein).mN;
495880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hall        }
507296051995fbaea919480a6cc2dabb729dabc95bJesse Hall        if (eout != null) {
519eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall            neout = ((ElementThunker)eout).mN;
52afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall        }
53afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall        try {
54afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall            android.renderscript.Script.KernelID kid = createKernelID(slot, sig, nein, neout);
559eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall            return kid;
569eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall        } catch (android.renderscript.RSRuntimeException e) {
579eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall            throw ExceptionThunker.convertException(e);
589eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall        }
599eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall    }
609eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall
619eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall
629eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall    void thunkInvoke(int slot) {
639eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall        try {
649eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall            invoke(slot);
659eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall        } catch (android.renderscript.RSRuntimeException e) {
669eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall            throw ExceptionThunker.convertException(e);
679eb1eb5bb55740982ceae9966fc536824edc302aJesse Hall        }
68bbd164a3c790a0649dffd2f015e6f47692c72e1cJesse Hall    }
69bbd164a3c790a0649dffd2f015e6f47692c72e1cJesse Hall
70a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian    void thunkBindAllocation(Allocation va, int slot) {
71a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        android.renderscript.Allocation nva = null;
723e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        if (va != null) {
733e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian            nva = ((AllocationThunker)va).mN;
743e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        }
753e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        try {
763e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian            bindAllocation(nva, slot);
773e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
783e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian            throw ExceptionThunker.convertException(e);
793e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        }
803e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian    }
813e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian
823e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian    void thunkSetTimeZone(String timeZone) {
833e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian        try {
843e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian            setTimeZone(timeZone);
853eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
863eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian            throw ExceptionThunker.convertException(e);
87b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
88c7d14e247117392fbd44aa454622778a25c076aeMathias Agopian    }
89b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
903e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian    void thunkInvoke(int slot, FieldPacker v) {
91e60b0687c8d49871d0c8786cabe6851f7a7783b5Mathias Agopian        try {
92e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian            android.renderscript.FieldPacker nfp =
93a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian                new android.renderscript.FieldPacker(v.getData());
94e60b0687c8d49871d0c8786cabe6851f7a7783b5Mathias Agopian            invoke(slot, nfp);
95e60b0687c8d49871d0c8786cabe6851f7a7783b5Mathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
96e60b0687c8d49871d0c8786cabe6851f7a7783b5Mathias Agopian            throw ExceptionThunker.convertException(e);
97b685c542836b93c99cd85053e07696406ea37adbJesse Hall        }
98e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian    }
99e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian
100e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian    void thunkForEach(int slot, Allocation ain, Allocation aout, FieldPacker v) {
101e2c4f4ec23b735dd2a03f4ea8b08b288a1bb04e8Mathias Agopian        android.renderscript.Allocation nin = null;
102028508cad5ef63ef9fbd42c14e76658e4fd9ebf2Mathias Agopian        android.renderscript.Allocation nout = null;
1035880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hall        android.renderscript.FieldPacker nfp = null;
104b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        if (ain != null) {
105ef64b75a936ffd194673dbce6766995f86b42ba9Jesse Hall            nin = ((AllocationThunker)ain).mN;
106b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
107bbd164a3c790a0649dffd2f015e6f47692c72e1cJesse Hall        if (aout != null) {
108da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian            nout = ((AllocationThunker)aout).mN;
109da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian        }
110da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian        try {
111da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian            if (v != null) {
112da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian                nfp = new android.renderscript.FieldPacker(v.getData());
113da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian            }
114da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian            forEach(slot, nin, nout, nfp);
115da27af9832a0170f1fc40ef3f21371c4d30d21b3Mathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
116babba1868773eba5edf8a8e335b8e109a32292e0Andy McFadden            throw ExceptionThunker.convertException(e);
117babba1868773eba5edf8a8e335b8e109a32292e0Andy McFadden        }
118babba1868773eba5edf8a8e335b8e109a32292e0Andy McFadden    }
119ef64b75a936ffd194673dbce6766995f86b42ba9Jesse Hall
120ef64b75a936ffd194673dbce6766995f86b42ba9Jesse Hall    void thunkForEach(int slot, Allocation ain, Allocation aout, FieldPacker v,
12143601a2dc320a271ff8c3765ff61414a07221635Andy McFadden                      android.support.v8.renderscript.Script.LaunchOptions sc) {
12243601a2dc320a271ff8c3765ff61414a07221635Andy McFadden        try {
12343601a2dc320a271ff8c3765ff61414a07221635Andy McFadden            android.renderscript.Script.LaunchOptions lo = null;
124620685c2e684082c82657732d1e35cefd0c79006Andy McFadden            if (sc != null) {
125afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall                lo = new android.renderscript.Script.LaunchOptions();
126620685c2e684082c82657732d1e35cefd0c79006Andy McFadden                if (sc.getXEnd() > 0) lo.setX(sc.getXStart(), sc.getXEnd());
127620685c2e684082c82657732d1e35cefd0c79006Andy McFadden                if (sc.getYEnd() > 0) lo.setY(sc.getYStart(), sc.getYEnd());
128620685c2e684082c82657732d1e35cefd0c79006Andy McFadden                if (sc.getZEnd() > 0) lo.setZ(sc.getZStart(), sc.getZEnd());
129b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            }
130b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
131b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            android.renderscript.Allocation nin = null;
132b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            android.renderscript.Allocation nout = null;
133b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            android.renderscript.FieldPacker nfp = null;
134b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            if (ain != null) {
135b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden                nin = ((AllocationThunker)ain).mN;
136b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            }
137b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            if (aout != null) {
138b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden                nout = ((AllocationThunker)aout).mN;
139b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            }
140b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            if (v != null) {
141b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden                nfp = new android.renderscript.FieldPacker(v.getData());
142b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            }
143b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            forEach(slot, nin, nout, nfp, lo);
144b685c542836b93c99cd85053e07696406ea37adbJesse Hall        } catch (android.renderscript.RSRuntimeException e) {
145b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            throw ExceptionThunker.convertException(e);
146b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
147b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    }
14881cd5d3b94d21253a0be925f4ae58cc7f4afeef7Mathias Agopian
1498f971ff6661c875e7adb3f14731e1579c3c80c62Jesse Hall    void thunkSetVar(int index, float v) {
150b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        try {
151b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            setVar(index, v);
152b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        } catch (android.renderscript.RSRuntimeException e) {
153b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            throw ExceptionThunker.convertException(e);
154b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
155b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    }
156b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    void thunkSetVar(int index, double v) {
157afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall        try {
158b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            setVar(index, v);
159b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        } catch (android.renderscript.RSRuntimeException e) {
160c7d14e247117392fbd44aa454622778a25c076aeMathias Agopian            throw ExceptionThunker.convertException(e);
1613a77871383bc1a03cc866686d81628493d14de7cMathias Agopian        }
1623a77871383bc1a03cc866686d81628493d14de7cMathias Agopian    }
163b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    void thunkSetVar(int index, int v) {
1641bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall        try {
1651bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall            setVar(index, v);
1661bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall        } catch (android.renderscript.RSRuntimeException e) {
167f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian            throw ExceptionThunker.convertException(e);
16838e623bc5c2d7224ebd5b82efaea401bc8e5367aMathias Agopian        }
169db27621e22559a1b16414f890677ef04242fbc3bJesse Hall    }
170db27621e22559a1b16414f890677ef04242fbc3bJesse Hall    void thunkSetVar(int index, long v) {
171b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        try {
172b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            setVar(index, v);
173b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        } catch (android.renderscript.RSRuntimeException e) {
174f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian            throw ExceptionThunker.convertException(e);
175b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
176f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian    }
177f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian    void thunkSetVar(int index, boolean v) {
178f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian        try {
179f435863467ab407f2a482604beed5fa6f0144c62Mathias Agopian            setVar(index, v);
1801bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall        } catch (android.renderscript.RSRuntimeException e) {
1811bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall            throw ExceptionThunker.convertException(e);
182888c822c4cb6976aab9256c58bae9e17e3e55c5cMathias Agopian        }
1831bd20e0f9ecd27cc5ad2bdf08b01837ecc10c357Jesse Hall    }
1841604f777d11c40daae8ec91d8ea75625996bfbacMathias Agopian
185afaf14b9fbfe8943d845e2f01e8a401ad7a4d854Jesse Hall    void thunkSetVar(int index, BaseObj o) {
1861604f777d11c40daae8ec91d8ea75625996bfbacMathias Agopian        if (o == null) {
1871604f777d11c40daae8ec91d8ea75625996bfbacMathias Agopian            try {
188888c822c4cb6976aab9256c58bae9e17e3e55c5cMathias Agopian                setVar(index, 0);
189888c822c4cb6976aab9256c58bae9e17e3e55c5cMathias Agopian            } catch (android.renderscript.RSRuntimeException e) {
1903a77871383bc1a03cc866686d81628493d14de7cMathias Agopian                throw ExceptionThunker.convertException(e);
1913a77871383bc1a03cc866686d81628493d14de7cMathias Agopian            }
1923a77871383bc1a03cc866686d81628493d14de7cMathias Agopian            return;
193a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        }
194a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        try {
195a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian            setVar(index, o.getNObj());
196a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
197babba1868773eba5edf8a8e335b8e109a32292e0Andy McFadden            throw ExceptionThunker.convertException(e);
19881cd5d3b94d21253a0be925f4ae58cc7f4afeef7Mathias Agopian        }
199babba1868773eba5edf8a8e335b8e109a32292e0Andy McFadden    }
2003eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian    void thunkSetVar(int index, FieldPacker v) {
2013eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian        try {
2023eb38cb33e41ce40dd1094bdec850f0fca9f8a53Mathias Agopian            android.renderscript.FieldPacker nfp =
203a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian                new android.renderscript.FieldPacker(v.getData());
2045880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hall            setVar(index, nfp);
205a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        } catch (android.renderscript.RSRuntimeException e) {
206b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            throw ExceptionThunker.convertException(e);
207b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
208b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    }
2093e8b853d67c737abdb363f9c978e7d83eac4d888Mathias Agopian
210a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian    void thunkSetVar(int index, FieldPacker v, Element e, int[] dims) {
211a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian        try {
212b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            android.renderscript.FieldPacker nfp =
213b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden                new android.renderscript.FieldPacker(v.getData());
214b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            ElementThunker et = (ElementThunker)e;
215b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            setVar(index, nfp, et.mN, dims);
216b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        } catch (android.renderscript.RSRuntimeException exc) {
217b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            throw ExceptionThunker.convertException(exc);
218b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
219b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    }
220b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
221b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    android.renderscript.Script.FieldID thunkCreateFieldID(int slot, Element e) {
222b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        try {
223b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            ElementThunker et = (ElementThunker) e;
224b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            return createFieldID(slot, et.getNObj());
225b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        } catch (android.renderscript.RSRuntimeException exc) {
226b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden            throw ExceptionThunker.convertException(exc);
227b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden        }
228b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden    }
229b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden
230b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden}
231b0d1dd36f104c0b581674adc7f830cbf44b7db06Andy McFadden