RenderScript.java revision 857d0c7017da763a420e825fffa2f260eb982c97
160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Copyright (C) 2008 The Android Open Source Project
360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License");
560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * you may not use this file except in compliance with the License.
660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * You may obtain a copy of the License at
760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *      http://www.apache.org/licenses/LICENSE-2.0
960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
1060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Unless required by applicable law or agreed to in writing, software
1160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS,
1260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * See the License for the specific language governing permissions and
1460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * limitations under the License.
1560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */
1660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samspackage android.renderscript;
1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field;
2036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
216b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
224382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.ApplicationInfo;
234382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.PackageManager;
24b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukimport android.content.res.AssetManager;
25b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
26650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
27faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
28260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kastenimport android.os.Process;
2936e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
3036e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
3143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
3260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
334382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
34e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams/**
3527676fe24be7444a174c15df476e49adc5335d03Jason Sams * RenderScript base master class.  An instance of this class creates native
3627676fe24be7444a174c15df476e49adc5335d03Jason Sams * worker threads for processing commands from this object.  This base class
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams * does not provide any extended capabilities beyond simple data processing.
3827676fe24be7444a174c15df476e49adc5335d03Jason Sams * For extended capabilities use derived classes such as RenderScriptGL.
3927676fe24be7444a174c15df476e49adc5335d03Jason Sams *
4027676fe24be7444a174c15df476e49adc5335d03Jason Sams *
4127676fe24be7444a174c15df476e49adc5335d03Jason Sams *
42e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
4360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
443bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
45bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
46650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
4743a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    static final boolean LOG_ENABLED = false;
4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
496b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
516b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
55650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
56bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
57bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
63e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
67fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            Log.e(LOG_TAG, "Error loading RS jni library: " + e);
68fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            throw new RSRuntimeException("Error loading RS jni library: " + e);
6960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
7160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
7336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
7436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
75ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
76edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int nContextGetUserMessage(int con, int[] data);
771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
78edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int  nContextPeekMessage(int con, int[] subID);
792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
854382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreateGL(int dev, int ver, int sdkVer,
8611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
8711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
8811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
8911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
902c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
914382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
9211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
9311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
9411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
9511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
962c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
974382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
9811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
9911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
1002c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
1012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1024382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreate(int dev, int ver, int sdkVer);
1034382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreate(int dev, int ver, int sdkVer) {
1044382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreate(dev, ver, sdkVer);
1052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
108d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
113d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
116faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
117faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
118faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
119faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        rsnContextSetSurfaceTexture(mContext, w, h, sur);
120faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
1212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
123d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
128d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
133d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
139d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
144d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
1462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
1482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
149d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
1512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
1532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
154d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
1562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
1582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
159d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
1612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
1632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
164d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
1662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
1682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
169d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
1732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
174d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
1762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
180d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
1822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
185d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
1872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
190d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
191d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
192d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
193d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
194d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
195d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
1962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
200d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
20370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
20470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
205d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
20670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
210d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2137d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    native void rsnElementGetSubElements(int con, int id,
2147d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                         int[] IDs, String[] names, int[] arraySizes);
2157d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
216d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2177d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
220bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
221bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
222d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
223bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
227d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
2292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
231857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
232857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
233d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
234857d0c7017da763a420e825fffa2f260eb982c97Jason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2365476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2375476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
238d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2395476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
24026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
2415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
243d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2445476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
24567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
2462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
2472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
248d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
2502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2515476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
2525476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
253d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2545476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
2555476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
2565476b450e50939940dcf3f15c92335cee2fc572dJason Sams
2574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
2584ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
259d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2604ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
2614ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
2624ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2634ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2645476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
2655476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
266d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2675476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
2685476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
269f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
270f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
271d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
272f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
273f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
2744ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
2754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
276d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
2782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
28149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
28249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
283d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
28449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
28649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
28749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
288d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
28949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
29149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
29249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
293d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
29449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
29649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
29749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
298d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
29949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
30049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
30149a05d7b82956009f03acbb92a064eed054eb031Jason Sams
30249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
30349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
304d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
30549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
3062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
308304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    native void rsnAllocationData2D(int con,
309304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstAlloc, int dstXoff, int dstYoff,
310304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstMip, int dstFace,
311304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int width, int height,
312304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcAlloc, int srcXoff, int srcYoff,
313304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcMip, int srcFace);
314304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
315304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int dstMip, int dstFace,
316304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int width, int height,
317304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcAlloc, int srcXoff, int srcYoff,
318304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcMip, int srcFace) {
319304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        validate();
320304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        rsnAllocationData2D(mContext,
321304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstAlloc, dstXoff, dstYoff,
322304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
323304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
324304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcAlloc, srcXoff, srcYoff,
325304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
326304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    }
327304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
328fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
329fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
330d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
331fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
332fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
333fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
334fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
335d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
336fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
337fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
33849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
33949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
340d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
34149a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
34349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
34449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
345d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
34649a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
348fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
349fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
350d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
351fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
352fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
35349a05d7b82956009f03acbb92a064eed054eb031Jason Sams
354fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
355fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
356d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
357fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
358fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
359fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
360fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
361d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
362fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
363fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
3652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
366d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
3682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
3702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
371d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
3732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
3752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
376d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
3782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3805edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
3815edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
382d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3835edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
3845edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
3855edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
3865edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
387d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3885edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize2D(mContext, id, dimX, dimY);
3895edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
3905edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
3912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
3922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
393d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
3952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
396b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
397b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
398d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
399b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
400b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
401b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
402b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
403d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
404b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
405b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
4062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
4072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
408d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
4102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
4122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
413d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
4152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
4172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
418d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
4202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
422e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
423e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
424d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
4262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
427b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
428b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
429d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
430b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
431b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
432b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
433b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
434d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
435b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
436b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
4372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
4402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
441d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
4432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
4452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
446d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
4482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
4502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
451d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
4532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4546e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
4556e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
4566e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
4576e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        validate();
4586e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (params == null) {
4596e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout);
4606e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        } else {
4616e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout, params);
4626e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
4636e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
4642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
4652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
466d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
4682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
4702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
471d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
4732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
474031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
475031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
476d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
477031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
478031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
4792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
4802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
481d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
4832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
484ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
485ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
486d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
487ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
488ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
4892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
4902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
491d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
4932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4946f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
4956f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
496d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4976f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
4986f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
4992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
500e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    native int  rsnScriptCCreate(int con, String resName, String cacheDir,
501e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                 byte[] script, int length);
502e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
503d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
504e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
5052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
507a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    native int  rsnSamplerCreate(int con, int magFilter, int minFilter,
508a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso);
509a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    synchronized int nSamplerCreate(int magFilter, int minFilter,
510a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso) {
511d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
512a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk        return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
515331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    native int  rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
516331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      boolean depthMask, boolean dither,
517331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      int srcMode, int dstMode, int depthFunc);
518331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
519331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         boolean depthMask, boolean dither,
520331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         int srcMode, int dstMode, int depthFunc) {
521d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
522bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams        return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
523bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams                                     dstMode, depthFunc);
5242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
52694aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
52794aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
528d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
52994aaed38467c71a6c804f0e18b41346a4013c25bJason Sams        return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
5332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
534d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
5362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
5382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
539d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
5432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
544d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
547b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, int[] params);
548b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, int[] params) {
549d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
550b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, params);
5512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
552b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, int[] params);
553b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, int[] params) {
554d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
555b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, params);
5562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
55825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    native int  rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
55925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
560d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
56125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk        return rsnMeshCreate(mContext, vtx, idx, prim);
5629d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
5632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
5642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
565d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
5672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
5692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
570d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
5722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
5742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
575d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
5772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
5792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
580d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
5822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
584f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
585f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
586f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        validate();
587f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
588f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    }
58960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
590bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
591bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
592650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
593bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
59460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
5958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
5968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
5978cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
5988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
5998cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
6008cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
60152d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
602ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
6038cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
60402f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
605f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
6068cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
6078cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
6088cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
6098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
6108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
6118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
6128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
6138cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
6148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
6158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
6168cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
617a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
6183c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
6193c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
6203c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
6213c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
6223c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
6233c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
6243c0dfbab807a459622aeade4940daddf482dec66Jason Sams
6258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
6268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
6278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
628836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
629836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_2;
630836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_3;
631836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_4;
632836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
633836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_2;
634836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_3;
6358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
6367d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
637836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_2;
638836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_3;
639836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_4;
640836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
641836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_2;
642836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_3;
643836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_4;
644836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
645836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_2;
646836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_3;
647836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_4;
648836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
649836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_2;
650836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_3;
651836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_4;
652836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
653836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_2;
654836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_3;
655836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_4;
656836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
657836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_2;
658836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_3;
659836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_4;
660836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
661836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_2;
662836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_3;
663836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_4;
664836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
6651d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
6661d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
6671d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
6681d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
6694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
6704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
6714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
6724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
6734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
6744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
6754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
676d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
677d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
678d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
679d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
680d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
681d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
682d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
683d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
68432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
68560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
68643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
68760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
68827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
68927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
6908cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * coming from their scripts.  When a script calls sendToClient the data
69127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
69227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
69327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
69427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
69527676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
696bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
697516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
698516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
6991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
700516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
701516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
702516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
70327676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
70427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
70527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
70627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
70727676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
70827676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
709bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
710bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
711bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
712bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
713bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
714bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
715bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
716bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
717516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
71827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
71927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
72027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
72127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
72227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
72327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
724bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
7251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
7261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
7271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
7281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
7291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
73027676fe24be7444a174c15df476e49adc5335d03Jason Sams
73127676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
73227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
73327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
73427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
73527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
73627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
73727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
738bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
739bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
740bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
741bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
742bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
743bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
744bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
745bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
7461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
74727676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
74827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
74927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
75027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
75127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
75227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
7537d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
754260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
755260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        NORMAL (Process.THREAD_PRIORITY_DISPLAY);
7567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
7577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
7587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
7597d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
7607d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
7617d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
7627d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
763771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
764771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
765c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
766771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
767771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
768771bebb94054d06f97284379c93a2620613513c3Jason Sams
76927676fe24be7444a174c15df476e49adc5335d03Jason Sams
77027676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
77127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
77227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
77327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
77427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
775bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
7765dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
7777d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
7787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
7797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
780bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
781516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
782516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
783bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
7841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
785bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
786bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
787bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
788bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
789bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
790516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
791bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
792add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
793516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
794516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
795516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
796516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
797516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
798516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
799516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
800516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
801516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
802516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
8032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
804516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
8051d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
806edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
807bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
808bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
8091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
8111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
8121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
8131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
814edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
815edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        RS_MESSAGE_TO_CLIENT_USER) {
816edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        throw new RSDriverException("Error processing message from Renderscript.");
817edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    }
8181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
8201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
8211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
8221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
8231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
8241d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
8251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
826516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
827ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
828516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
8291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
8311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
8321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
833add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
834add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
835add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
836add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
8371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
8381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
8391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
8401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
8411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
8421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
8431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
8441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
8451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
8461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
8481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
8491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
8501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
8511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
8521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
8531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
854516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
855516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
8563bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
857516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
858516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
859516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
8606b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
8616b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        mApplicationContext = ctx.getApplicationContext();
86260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
86360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
86427676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
8656b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
86627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
8676b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
8686b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
8696b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
8706b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
8716b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
8726b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
8734382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    static int getTargetSdkVersion(Context ctx) {
87485397d8dcbcbe098c805b90fe7779206125e2399Jason Sams        return ctx.getApplicationInfo().targetSdkVersion;
8754382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    }
8764382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
8776b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /**
8786b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Create a basic RenderScript context.
87927676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
8806b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
88127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
88227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
8836b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public static RenderScript create(Context ctx) {
8846b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
885704ff64b099406bb328898a7443921f22dbffd6dJason Sams
8864382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        int sdkVersion = getTargetSdkVersion(ctx);
8874382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
888704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
8894382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
8902698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        if (rs.mContext == 0) {
8912698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams            throw new RSDriverException("Failed to create RS context.");
8922698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        }
893704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
894704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
895704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
896efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
897efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
89827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
89927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
90027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
90127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
90227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
903bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
9045dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
905bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
906715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
907715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
90827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
90927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
91027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
91127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
91227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
91396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
91496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
91596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
91696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
91727676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
91827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
91927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
92027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
92127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
922f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
9235dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
9242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
925516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
926a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
927a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
928a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
929a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
930516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
9312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
932f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
933f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
934f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
935f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
936f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
93702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
938a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
939a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
940a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
941a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
942bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
9436b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
94406d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams            return o.getID();
945d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
9466b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
94760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
94860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
949