RenderScript.java revision 02d56d90e01e20db8424de94a14fe59dc94f19c0
160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
2be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines * Copyright (C) 2008-2012 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
19a6f338ca5f0c8359d1952167858851dd025e47e2Jason Samsimport java.io.File;
20fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsimport java.lang.reflect.Field;
216dacf8355a0692b52c49f603f43317772cb36175Tim Murrayimport java.util.concurrent.locks.*;
2236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
236dacf8355a0692b52c49f603f43317772cb36175Tim Murrayimport android.app.ActivityManager;
246b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
254382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.ApplicationInfo;
264382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.PackageManager;
27b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukimport android.content.res.AssetManager;
28b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
30faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
31260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kastenimport android.os.Process;
3236e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
3336e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
3443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
3560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
364382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * Renderscript base master class.  An instance of this class creates native
3927676fe24be7444a174c15df476e49adc5335d03Jason Sams * worker threads for processing commands from this object.  This base class
4027676fe24be7444a174c15df476e49adc5335d03Jason Sams * does not provide any extended capabilities beyond simple data processing.
4127676fe24be7444a174c15df476e49adc5335d03Jason Sams * For extended capabilities use derived classes such as RenderScriptGL.
4227676fe24be7444a174c15df476e49adc5335d03Jason Sams *
433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
443aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
453aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about creating an application that uses Renderscript, read the
46b47fa1699a02a96d5da8e175966e9584c6bd5565Scott Main * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
473aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
48e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
503bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
51bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
52650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
5343a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    static final boolean LOG_ENABLED = false;
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
576b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
61650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
62bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
63bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
65dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
6760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
6860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
69e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
7160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
7260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
73fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            Log.e(LOG_TAG, "Error loading RS jni library: " + e);
74fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            throw new RSRuntimeException("Error loading RS jni library: " + e);
7560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
7660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
7760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
7936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
8036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
81ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
82edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int nContextGetUserMessage(int con, int[] data);
831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
84edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int  nContextPeekMessage(int con, int[] subID);
852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
887d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines    static File mCacheDir;
89a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
90a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     /**
91a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Sets the directory to use as a persistent storage for the
92a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * renderscript object file cache.
93a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     *
94a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @hide
95a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @param cacheDir A directory the current process can write to
96a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
97a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    public static void setupDiskCache(File cacheDir) {
987d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines        // Defer creation of cache path to nScriptCCreate().
997d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines        mCacheDir = cacheDir;
100a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    }
101a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
10202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams    /**
10302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * ContextType specifies the specific type of context to be created.
10402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     *
10502d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     */
106add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public enum ContextType {
10702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
10802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * NORMAL context, this is the default and what shipping apps should
10902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * use.
11002d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
111add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        NORMAL (0),
11202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams
11302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
11402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * DEBUG context, perform extra runtime checks to validate the
11502d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * kernels and APIs are being used as intended.  Get and SetElementAt
11602d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * will be bounds checked in this mode.
11702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
118add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        DEBUG (1),
11902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams
12002d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
12102d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * PROFILE context, Intended to be used once the first time an
12202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * application is run on a new device.  This mode allows the runtime to
12302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * do additional testing and performance tuning.
12402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
125add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        PROFILE (2);
126add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
127add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        int mID;
128add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        ContextType(int id) {
129add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams            mID = id;
130add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        }
131add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
1354382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreateGL(int dev, int ver, int sdkVer,
13611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
13711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
13811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
13911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1402c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
1414382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
14211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
14311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
14411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
14511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1462c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
1474382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
14811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
14911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
1502c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
1512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
152add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    native int  rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
153add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
154add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return rsnContextCreate(dev, ver, sdkVer, contextType);
1552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
158d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
163d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
166faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
167faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
168faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
169faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        rsnContextSetSurfaceTexture(mContext, w, h, sur);
170faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
173d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
178d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
183d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
187455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    native void rsnContextSendMessage(int con, int id, int[] data);
188455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    synchronized void nContextSendMessage(int id, int[] data) {
189455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        validate();
190455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        rsnContextSendMessage(mContext, id, data);
191455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
192455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
195d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
200d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
205d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
210d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
2142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
215d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
2172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
2192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
220d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
2222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
225d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
2272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
2292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
230d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
2322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
236d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
2382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
2402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
241d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
2432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
2452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
246d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
247d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
248d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
249d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
250d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
251d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
2522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
2552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
256d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
25970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
26070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
261d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
26270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
2632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
2652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
266d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
2682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    native void rsnElementGetSubElements(int con, int id,
2707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                         int[] IDs, String[] names, int[] arraySizes);
2717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
272d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
2742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
276b109cc78616abee7291eb42094cd156b5db3355dJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
277b109cc78616abee7291eb42094cd156b5db3355dJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
278d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
279b109cc78616abee7291eb42094cd156b5db3355dJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
2802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
2822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
283d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
287857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
288857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
289d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
290857d0c7017da763a420e825fffa2f260eb982c97Jason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
2912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2925476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2935476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
294d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2955476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
29626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
297a314551d69098537337c970da615a8f8af58e1f1Tim Murray
298a314551d69098537337c970da615a8f8af58e1f1Tim Murray    native int  rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
299a314551d69098537337c970da615a8f8af58e1f1Tim Murray    synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
300a314551d69098537337c970da615a8f8af58e1f1Tim Murray        validate();
301a314551d69098537337c970da615a8f8af58e1f1Tim Murray        return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
302a314551d69098537337c970da615a8f8af58e1f1Tim Murray    }
303a314551d69098537337c970da615a8f8af58e1f1Tim Murray
304a314551d69098537337c970da615a8f8af58e1f1Tim Murray
3055476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
3065476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
307d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3085476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
30967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
3102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
3112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
312d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
3142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3155476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
3165476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
317d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3185476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
3195476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
3205476b450e50939940dcf3f15c92335cee2fc572dJason Sams
3214ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
3224ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
323d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3244ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
3254ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
3264ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3274ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3285476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
3295476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
330d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3315476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
3325476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
33372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    native Surface rsnAllocationGetSurface(int con, int alloc);
33472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    synchronized Surface nAllocationGetSurface(int alloc) {
335615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams        validate();
33672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams        return rsnAllocationGetSurface(mContext, alloc);
337fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    }
338fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
339fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    synchronized void nAllocationSetSurface(int alloc, Surface sur) {
340163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
341fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams        rsnAllocationSetSurface(mContext, alloc, sur);
342163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
343163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoSend(int con, int alloc);
344163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoSend(int alloc) {
345163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
346163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoSend(mContext, alloc);
347163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
348163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoReceive(int con, int alloc);
349163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoReceive(int alloc) {
350163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
351163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoReceive(mContext, alloc);
352163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
353163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
354615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
355f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
356f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
357d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
358f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
359f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
3604ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
3614ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
362d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3634ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
36749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
36849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
369d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
37049a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
37249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
37349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
374d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
37549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
37749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
37849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
379d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
38049a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
38249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
38349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
384d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
38549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
38649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
38749a05d7b82956009f03acbb92a064eed054eb031Jason Sams
38849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
38949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
390d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
39149a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
3922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
394304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    native void rsnAllocationData2D(int con,
395304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstAlloc, int dstXoff, int dstYoff,
396304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstMip, int dstFace,
397304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int width, int height,
398304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcAlloc, int srcXoff, int srcYoff,
399304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcMip, int srcFace);
400304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
401304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int dstMip, int dstFace,
402304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int width, int height,
403304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcAlloc, int srcXoff, int srcYoff,
404304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcMip, int srcFace) {
405304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        validate();
406304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        rsnAllocationData2D(mContext,
407304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstAlloc, dstXoff, dstYoff,
408304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
409304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
410304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcAlloc, srcXoff, srcYoff,
411304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
412304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    }
413304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
414fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
415fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
416d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
417fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
418fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
419fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
420fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
421d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
422fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
423fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
42449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
42549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
426d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
42749a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
42949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
43049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
431d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
43249a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
434fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
435fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
436d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
437fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
438fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
43949a05d7b82956009f03acbb92a064eed054eb031Jason Sams
440b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con,
441b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
442b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstMip,
443b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int width, int height, int depth,
444b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
445b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcMip);
446b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
447b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int dstMip,
448b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int width, int height, int depth,
449b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
450b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcMip) {
451b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
452b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext,
453b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstAlloc, dstXoff, dstYoff, dstZoff,
454b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstMip, width, height, depth,
455b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
456b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
457b05d689653b1bc94836f716f29e9578677c29075Jason Sams
458b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes);
459b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
460b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
461b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
462b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
463b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes);
464b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
465b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
466b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
467b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
468b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes);
469b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
470b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
471b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
472b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
473b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con, int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes);
474b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
475b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
476b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
477b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
478b05d689653b1bc94836f716f29e9578677c29075Jason Sams
479b05d689653b1bc94836f716f29e9578677c29075Jason Sams
480fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
481fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
482d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
483fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
484fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
485fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
486fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
487d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
488fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
489fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
4902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
4912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
492d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
4962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
497d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
5012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
502d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
5042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5065edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
5075edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
508d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5095edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
5105edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
5115edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
5122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
514d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
517b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
518b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
519d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
520b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
521b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
522b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
523b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
524d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
525b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
526b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
5272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
5282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
529d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
5312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
5332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
534d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
5362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
5382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
539d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
543e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
544e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
545d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
5472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
548b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
549b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
550d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
551b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
552b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
553b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
554b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
555d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
556b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
557b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
5582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
5612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
562d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
5642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
5662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
567d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
5692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
5712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
572d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
5742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5756e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
5766e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
577eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
578eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
579dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
580dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
5816e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
5826e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        validate();
5836e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (params == null) {
5846e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout);
5856e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        } else {
5866e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout, params);
5876e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
5886e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
589eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
590eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
591eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                            int xstart, int xend, int ystart, int yend, int zstart, int zend) {
592eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        validate();
593dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        if (params == null) {
594dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
595dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        } else {
596dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
597dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        }
598eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    }
599eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
6002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
6012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
602d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
6042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6057c4caadb939b1563328251c156262c179a685c70Tim Murray
6062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
6072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
608d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
6102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6117c4caadb939b1563328251c156262c179a685c70Tim Murray    native int rsnScriptGetVarI(int con, int id, int slot);
6127c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized int nScriptGetVarI(int id, int slot) {
6137c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6147c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarI(mContext, id, slot);
6157c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6167c4caadb939b1563328251c156262c179a685c70Tim Murray
617031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
618031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
619d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
620031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
621031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
6227c4caadb939b1563328251c156262c179a685c70Tim Murray    native long rsnScriptGetVarJ(int con, int id, int slot);
6237c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized long nScriptGetVarJ(int id, int slot) {
6247c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6257c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarJ(mContext, id, slot);
6267c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6277c4caadb939b1563328251c156262c179a685c70Tim Murray
6282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
6292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
630d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
6322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6337c4caadb939b1563328251c156262c179a685c70Tim Murray    native float rsnScriptGetVarF(int con, int id, int slot);
6347c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized float nScriptGetVarF(int id, int slot) {
6357c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6367c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarF(mContext, id, slot);
6377c4caadb939b1563328251c156262c179a685c70Tim Murray    }
638ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
639ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
640d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
641ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
642ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
6437c4caadb939b1563328251c156262c179a685c70Tim Murray    native double rsnScriptGetVarD(int con, int id, int slot);
6447c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized double nScriptGetVarD(int id, int slot) {
6457c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6467c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarD(mContext, id, slot);
6477c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
6492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
650d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
6522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6537c4caadb939b1563328251c156262c179a685c70Tim Murray    native void rsnScriptGetVarV(int con, int id, int slot, byte[] val);
6547c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized void nScriptGetVarV(int id, int slot, byte[] val) {
6557c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6567c4caadb939b1563328251c156262c179a685c70Tim Murray        rsnScriptGetVarV(mContext, id, slot, val);
6577c4caadb939b1563328251c156262c179a685c70Tim Murray    }
658adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
659adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                  int e, int[] dims);
660adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
661adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                      int e, int[] dims) {
662adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        validate();
663adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
664adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    }
6656f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
6666f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
667d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6686f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
6696f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
6702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
671e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    native int  rsnScriptCCreate(int con, String resName, String cacheDir,
672e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                 byte[] script, int length);
673e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
674d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
675e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
6762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
6786ab97682fd444586ee135912a4210417a1c8781bJason Sams    native int  rsnScriptIntrinsicCreate(int con, int id, int eid);
6796ab97682fd444586ee135912a4210417a1c8781bJason Sams    synchronized int nScriptIntrinsicCreate(int id, int eid) {
6806ab97682fd444586ee135912a4210417a1c8781bJason Sams        validate();
6816ab97682fd444586ee135912a4210417a1c8781bJason Sams        return rsnScriptIntrinsicCreate(mContext, id, eid);
6826ab97682fd444586ee135912a4210417a1c8781bJason Sams    }
6836ab97682fd444586ee135912a4210417a1c8781bJason Sams
68408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
68508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
68608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
68708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
68808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
68908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
69008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptFieldIDCreate(int con, int sid, int slot);
69108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptFieldIDCreate(int sid, int slot) {
69208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
69308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptFieldIDCreate(mContext, sid, slot);
69408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
69508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
69608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
69708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
69808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
69908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
70008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
70108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
70208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
70308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
70408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
70508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetInput(mContext, group, kernel, alloc);
70608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
70708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
70808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
70908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
71008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
71108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
71208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
71308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
71408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupExecute(int con, int group);
71508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupExecute(int group) {
71608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
71708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupExecute(mContext, group);
71808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
71908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
720a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    native int  rsnSamplerCreate(int con, int magFilter, int minFilter,
721a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso);
722a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    synchronized int nSamplerCreate(int magFilter, int minFilter,
723a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso) {
724d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
725a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk        return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
7262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
728331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    native int  rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
729331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      boolean depthMask, boolean dither,
730331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      int srcMode, int dstMode, int depthFunc);
731331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
732331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         boolean depthMask, boolean dither,
733331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         int srcMode, int dstMode, int depthFunc) {
734d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
735bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams        return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
736bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams                                     dstMode, depthFunc);
7372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
73994aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
74094aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
741d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
74294aaed38467c71a6c804f0e18b41346a4013c25bJason Sams        return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
7432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
7452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
7462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
747d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
7492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
7512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
752d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
7542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
7562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
757d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
7592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7602123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
7612123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
762d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7632123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, texNames, params);
7642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7652123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
7662123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
767d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7682123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, texNames, params);
7692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
77125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    native int  rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
77225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
773d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
77425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk        return rsnMeshCreate(mContext, vtx, idx, prim);
7759d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
7762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
7772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
778d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
7802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
7822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
783d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
7852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
7872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
788d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
7902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
7922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
793d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
7952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
797f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
798f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
799f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        validate();
800f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
801f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    }
80260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
803bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
804bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
805650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
806bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
807f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    GCThread mGCThread;
808f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
80960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
8108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
8118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
8128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
8138cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
8148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
8158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
81652d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
817ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
8188cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
81902f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
820f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
8218cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
8228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
8238cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
8248cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
8258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
8268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
8278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
8288cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
8298cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
8308cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
8318cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
8323a2914132146f340511425d7f78540098606b512Stephen Hines    Element mElement_FONT;
833a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
8343c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
8353c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
8363c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
8373c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
8383c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
8393c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
8403c0dfbab807a459622aeade4940daddf482dec66Jason Sams
8418cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
8428cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
8438cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
844836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
845836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_2;
846836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_3;
847836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_4;
848836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
849836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_2;
850836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_3;
8518cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
8527d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
853836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_2;
854836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_3;
855836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_4;
856836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
857836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_2;
858836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_3;
859836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_4;
860836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
861836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_2;
862836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_3;
863836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_4;
864836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
865836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_2;
866836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_3;
867836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_4;
868836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
869836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_2;
870836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_3;
871836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_4;
872836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
873836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_2;
874836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_3;
875836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_4;
876836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
877836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_2;
878836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_3;
879836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_4;
880836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
8811d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
8821d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
8831d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
8841d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
8854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
8864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
8874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
8884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
8894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
8904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
8916b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_NEAREST;
8926b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR;
8936b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
8944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
895d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
896d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
897d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
898d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
899d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
900d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
901d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
902d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
90332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
90460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
90543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
90660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
9079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
90827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
9098cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * coming from their scripts.  When a script calls sendToClient the data
91027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
91127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
91227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
91327676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
91427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
915bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
916516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
917516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
9181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
919516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
920516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
921516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
9229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
92327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
92427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
92527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
92627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
92727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
928bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
929bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
930bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
931bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
932bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
933bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
934bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
935bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
936516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
9379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
93802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * Place a message into the message queue to be sent back to the message
93902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * handler once all previous commands have been executed.
940455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     *
941455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param id
942455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param data
943455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     */
944455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    public void sendMessage(int id, int[] data) {
945455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        nContextSendMessage(id, data);
946455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
947455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
948455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    /**
94927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
95027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
95127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
95227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
95327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
954bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
9551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
9561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
9571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
9581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
9591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
96027676fe24be7444a174c15df476e49adc5335d03Jason Sams
9619c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
96227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
96327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
96427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
96527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
96627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
96727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
968bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
969bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
970bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
971bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
972bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
973bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
974bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
975bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
9761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9779c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
97827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
97927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
98027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
98127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
98227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
9837d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
984260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
985260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        NORMAL (Process.THREAD_PRIORITY_DISPLAY);
9867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
9877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
9887d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
9897d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
9907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
9917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
9927d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
993771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
994771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
995c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
996771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
997771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
998771bebb94054d06f97284379c93a2620613513c3Jason Sams
99927676fe24be7444a174c15df476e49adc5335d03Jason Sams
10009c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
100127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
100227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
100327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
100427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1005bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
10065dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
10077d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
10087d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
10097d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1010bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
1011516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
1012516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
1013bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
10141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1015bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1016bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1017bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1018bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1019bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
1020739c8263a10d34f5acba7fce2052012d1545d10bJason Sams        static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
1021516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1022bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
1023add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
1024516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
1025516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
1026516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
1027516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1028516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
1029516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1030516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
1031516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
1032516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
1033516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
10342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
1035516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
10361d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
1037edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
1038bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
1039bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
10401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
10421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
10431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
10441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
1045edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1046edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        RS_MESSAGE_TO_CLIENT_USER) {
1047edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        throw new RSDriverException("Error processing message from Renderscript.");
1048edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    }
10491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
10511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
10521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
10531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
10541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
10551d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
10561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
1057516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
1058ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
1059516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
10601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
10621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
10631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1064add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
1065add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1066add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
1067add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
10681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
10691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
10701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
10711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
10721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
1073a4b7bc97862e01d38b483524f1d1cf433d29e294Jason Sams                        android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
1074be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // Do not throw here. In these cases, we do not have
1075be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // a fatal error.
10761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
10771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
10781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
10791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1080739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1081739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                    Allocation.sendBufferNotification(subID);
1082739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                    continue;
1083739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                }
1084739c8263a10d34f5acba7fce2052012d1545d10bJason Sams
10851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
10861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
10871c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
10881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
10891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
10901c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
10911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
1092516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
1093516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
10943bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
1095516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
1096516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
1097516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1098f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    static class GCThread extends Thread {
1099f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        RenderScript mRS;
1100f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        boolean mRun = true;
1101f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
11026dacf8355a0692b52c49f603f43317772cb36175Tim Murray        long currentSize = 0;
11036dacf8355a0692b52c49f603f43317772cb36175Tim Murray        long targetSize; // call System.gc after 512MB of allocs
11046dacf8355a0692b52c49f603f43317772cb36175Tim Murray
11056dacf8355a0692b52c49f603f43317772cb36175Tim Murray        final Lock lock = new ReentrantLock();
11066dacf8355a0692b52c49f603f43317772cb36175Tim Murray        final Condition cond = lock.newCondition();
1107f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1108f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        GCThread(RenderScript rs) {
1109f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            super("RSGCThread");
1110f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            mRS = rs;
1111f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1112f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        }
1113f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1114f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        public void run() {
11156dacf8355a0692b52c49f603f43317772cb36175Tim Murray            ActivityManager am = (ActivityManager)mRS.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
11166dacf8355a0692b52c49f603f43317772cb36175Tim Murray            ActivityManager.MemoryInfo meminfo = new ActivityManager.MemoryInfo();
11176dacf8355a0692b52c49f603f43317772cb36175Tim Murray            am.getMemoryInfo(meminfo);
11186dacf8355a0692b52c49f603f43317772cb36175Tim Murray            targetSize = (long)(meminfo.totalMem * .5f);
11196dacf8355a0692b52c49f603f43317772cb36175Tim Murray
1120f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            while(mRun) {
11216dacf8355a0692b52c49f603f43317772cb36175Tim Murray                System.gc();
11226dacf8355a0692b52c49f603f43317772cb36175Tim Murray                lock.lock();
1123f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray                try {
11246dacf8355a0692b52c49f603f43317772cb36175Tim Murray                    cond.awaitUninterruptibly();
11256dacf8355a0692b52c49f603f43317772cb36175Tim Murray                } finally {
11266dacf8355a0692b52c49f603f43317772cb36175Tim Murray                    lock.unlock();
1127f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray                }
1128f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            }
11296dacf8355a0692b52c49f603f43317772cb36175Tim Murray
1130f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            Log.d(LOG_TAG, "GCThread exiting.");
1131f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        }
1132f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
11336dacf8355a0692b52c49f603f43317772cb36175Tim Murray        public synchronized void addAllocSize(long bytes) {
1134f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            currentSize += bytes;
11356dacf8355a0692b52c49f603f43317772cb36175Tim Murray            if (currentSize >= targetSize) {
11366dacf8355a0692b52c49f603f43317772cb36175Tim Murray                lock.lock();
11376dacf8355a0692b52c49f603f43317772cb36175Tim Murray                try {
11386dacf8355a0692b52c49f603f43317772cb36175Tim Murray                    cond.signal();
11396dacf8355a0692b52c49f603f43317772cb36175Tim Murray                } finally {
11406dacf8355a0692b52c49f603f43317772cb36175Tim Murray                    lock.unlock();
11416dacf8355a0692b52c49f603f43317772cb36175Tim Murray                }
11426dacf8355a0692b52c49f603f43317772cb36175Tim Murray            }
1143f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        }
1144f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
11456dacf8355a0692b52c49f603f43317772cb36175Tim Murray        public synchronized void removeAllocSize(long bytes) {
1146f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            currentSize -= bytes;
1147f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        }
1148f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1149f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    }
1150f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1151f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
11526b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
11531a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        if (ctx != null) {
11541a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams            mApplicationContext = ctx.getApplicationContext();
11551a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        }
115660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
115760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
11589c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
11596b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
116027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
11616b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
11626b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
11636b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
11646b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
11656b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
11666b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
11679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1168add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @hide
1169add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1170add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion) {
1171add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, sdkVersion, ContextType.NORMAL);
1172add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1173add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1174f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    void addAllocSizeForGC(int bytes) {
1175f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        mGCThread.addAllocSize(bytes);
1176f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    }
1177f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1178f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    void removeAllocSizeForGC(int bytes) {
1179f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        mGCThread.removeAllocSize(bytes);
1180f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray    }
1181f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1182f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray
1183add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
11846b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Create a basic RenderScript context.
118527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
11861a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @hide
11876b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
118827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
118927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1190add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
11916b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
1192704ff64b099406bb328898a7443921f22dbffd6dJason Sams
1193704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
1194add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
11952698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        if (rs.mContext == 0) {
11962698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams            throw new RSDriverException("Failed to create RS context.");
11972698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        }
1198704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
1199f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        rs.mGCThread = new GCThread(rs);
1200704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
1201f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        rs.mGCThread.start();
1202704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
1203efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
1204efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
12059c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
12061a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * Create a basic RenderScript context.
12071a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     *
12081a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @param ctx The context.
12091a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @return RenderScript
12101a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     */
12111a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    public static RenderScript create(Context ctx) {
1212add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, ContextType.NORMAL);
1213add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1214add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1215add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
1216add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * Create a basic RenderScript context.
1217add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1218add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1219add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @param ctx The context.
122002d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * @param ct The type of context to be created.
1221add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @return RenderScript
1222add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1223add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, ContextType ct) {
12241a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int v = ctx.getApplicationInfo().targetSdkVersion;
1225add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, v, ct);
12261a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    }
12271a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams
12289c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
122927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
123027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
123127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
123227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1233bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
12345dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
1235bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
1236715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
1237715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
12389c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
123927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
124027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
124127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
124227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
124396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
124496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
124596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
124696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
12479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
124827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
124927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
125027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
125127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1252f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
12535dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
12542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
1255516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
1256f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray        mGCThread.mRun = false;
12576dacf8355a0692b52c49f603f43317772cb36175Tim Murray        mGCThread.addAllocSize(0);
1258a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
1259a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
1260f8c033db1edf36a0ab09568c3142054f0be2d1a1Tim Murray            mGCThread.join();
1261a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
1262a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
1263516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
12642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
1265f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
1266f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
1267f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
1268f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
1269f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
127002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1271a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
1272a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
1273a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
1274a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
1275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
12766b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
1277e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            return o.getID(this);
1278d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
12796b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
128060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
128160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
1282