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;
212f2472c42be8e80f00019594036744d902e09dcbTim Murrayimport java.lang.reflect.Method;
22ff7256e757502279b1777127a12eba235be679aeJason Samsimport java.util.concurrent.locks.ReentrantReadWriteLock;
2336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
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;
34e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrillimport android.os.SystemProperties;
356d7a53cbddbffba30f7e9f82ced9c1ab46214f5aTim Murrayimport android.os.Trace;
364382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
38c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * This class provides access to a RenderScript context, which controls RenderScript
39c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * initialization, resource management, and teardown. An instance of the RenderScript
40c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * class must be created before any other RS objects can be created.
4127676fe24be7444a174c15df476e49adc5335d03Jason Sams *
423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
44c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the
45c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
463aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
47e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
496d7a53cbddbffba30f7e9f82ced9c1ab46214f5aTim Murray    static final long TRACE_TAG = Trace.TRACE_TAG_RS;
506d7a53cbddbffba30f7e9f82ced9c1ab46214f5aTim Murray
513bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
52bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
53650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
5443a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    static final boolean LOG_ENABLED = false;
5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
566b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
586b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
62e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // TODO: now used locally; remove?
63bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
64bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
662f2472c42be8e80f00019594036744d902e09dcbTim Murray    static Object sRuntime;
672f2472c42be8e80f00019594036744d902e09dcbTim Murray    static Method registerNativeAllocation;
682f2472c42be8e80f00019594036744d902e09dcbTim Murray    static Method registerNativeFree;
69dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
7160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
72e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill        if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
73e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            try {
742f2472c42be8e80f00019594036744d902e09dcbTim Murray                Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
752f2472c42be8e80f00019594036744d902e09dcbTim Murray                Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
762f2472c42be8e80f00019594036744d902e09dcbTim Murray                sRuntime = get_runtime.invoke(null);
772f2472c42be8e80f00019594036744d902e09dcbTim Murray                registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
782f2472c42be8e80f00019594036744d902e09dcbTim Murray                registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
792f2472c42be8e80f00019594036744d902e09dcbTim Murray            } catch (Exception e) {
802f2472c42be8e80f00019594036744d902e09dcbTim Murray                Log.e(LOG_TAG, "Error loading GC methods: " + e);
812f2472c42be8e80f00019594036744d902e09dcbTim Murray                throw new RSRuntimeException("Error loading GC methods: " + e);
822f2472c42be8e80f00019594036744d902e09dcbTim Murray            }
832f2472c42be8e80f00019594036744d902e09dcbTim Murray            try {
84e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill                System.loadLibrary("rs_jni");
85e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill                _nInit();
86e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill                sInitialized = true;
87e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            } catch (UnsatisfiedLinkError e) {
88e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill                Log.e(LOG_TAG, "Error loading RS jni library: " + e);
89e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill                throw new RSRuntimeException("Error loading RS jni library: " + e);
90e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            }
9160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
9260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
9360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
9536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
97ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
98edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int nContextGetUserMessage(int con, int[] data);
991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
100edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int  nContextPeekMessage(int con, int[] subID);
1012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
1022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
1032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1047d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines    static File mCacheDir;
105a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
1065757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    // this should be a monotonically increasing ID
1075757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    // used in conjunction with the API version of a device
1085757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    static final long sMinorID = 1;
1095757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams
1105757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    /**
1115757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams     * Returns an identifier that can be used to identify a particular
1125757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams     * minor version of RS.
1135757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams     *
1145757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams     * @hide
1155757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams     */
1165757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    public static long getMinorID() {
1175757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams        return sMinorID;
1185757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams    }
1195757bf89c44e7a4805340b5634bec13a1caf39f8Jason Sams
120a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     /**
121a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Sets the directory to use as a persistent storage for the
122a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * renderscript object file cache.
123a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     *
124a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @hide
125a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @param cacheDir A directory the current process can write to
126a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
127a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    public static void setupDiskCache(File cacheDir) {
128e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill        if (!sInitialized) {
129e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            Log.e(LOG_TAG, "RenderScript.setupDiskCache() called when disabled");
130e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            return;
131e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill        }
132e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill
1337d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines        // Defer creation of cache path to nScriptCCreate().
1347d25a829d3da96fb6ac0d285aa1bfb2022271beeStephen Hines        mCacheDir = cacheDir;
135a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    }
136a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
13702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams    /**
13802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * ContextType specifies the specific type of context to be created.
13902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     *
14002d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     */
141add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public enum ContextType {
14202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
14302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * NORMAL context, this is the default and what shipping apps should
14402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * use.
14502d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
146add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        NORMAL (0),
14702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams
14802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
14902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * DEBUG context, perform extra runtime checks to validate the
15002d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * kernels and APIs are being used as intended.  Get and SetElementAt
15102d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * will be bounds checked in this mode.
15202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
153add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        DEBUG (1),
15402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams
15502d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams        /**
15602d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * PROFILE context, Intended to be used once the first time an
15702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * application is run on a new device.  This mode allows the runtime to
15802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         * do additional testing and performance tuning.
15902d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams         */
160add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        PROFILE (2);
161add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
162add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        int mID;
163add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        ContextType(int id) {
164add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams            mID = id;
165add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        }
166add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
16842028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines    ContextType mContextType;
169ff7256e757502279b1777127a12eba235be679aeJason Sams    ReentrantReadWriteLock mRWLock;
17042028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
1722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
1734382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreateGL(int dev, int ver, int sdkVer,
17411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
17511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
17611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
17711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1782c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
1794382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
18011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
18111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
18211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
18311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1842c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
1854382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
18611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
18711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
1882c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
190add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    native int  rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
191add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
192add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return rsnContextCreate(dev, ver, sdkVer, contextType);
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
196d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
197ff7256e757502279b1777127a12eba235be679aeJason Sams
198ff7256e757502279b1777127a12eba235be679aeJason Sams        // take teardown lock
199ff7256e757502279b1777127a12eba235be679aeJason Sams        // teardown lock can only be taken when no objects are being destroyed
200ff7256e757502279b1777127a12eba235be679aeJason Sams        ReentrantReadWriteLock.WriteLock wlock = mRWLock.writeLock();
201ff7256e757502279b1777127a12eba235be679aeJason Sams        wlock.lock();
202ff7256e757502279b1777127a12eba235be679aeJason Sams
203ff7256e757502279b1777127a12eba235be679aeJason Sams        int curCon = mContext;
204ff7256e757502279b1777127a12eba235be679aeJason Sams        // context is considered dead as of this point
205ff7256e757502279b1777127a12eba235be679aeJason Sams        mContext = 0;
206ff7256e757502279b1777127a12eba235be679aeJason Sams
207ff7256e757502279b1777127a12eba235be679aeJason Sams        wlock.unlock();
208ff7256e757502279b1777127a12eba235be679aeJason Sams        rsnContextDestroy(curCon);
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
212d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
2142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
215faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
216faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
217faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
218faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        rsnContextSetSurfaceTexture(mContext, w, h, sur);
219faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
2212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
222d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
227d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
2292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
232d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
2342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
236455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    native void rsnContextSendMessage(int con, int id, int[] data);
237455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    synchronized void nContextSendMessage(int id, int[] data) {
238455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        validate();
239455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        rsnContextSendMessage(mContext, id, data);
240455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
241455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
2422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
2432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
244d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
2462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
2482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
249d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
2512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
2532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
254d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
2562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
259d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
2612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
2632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
264d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
2662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
2682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
269d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
2712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
2732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
274d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
2762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
2782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
279d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
2812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
2842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
285d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
2872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
2892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
290d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
2922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
293ff7256e757502279b1777127a12eba235be679aeJason Sams    // nObjDestroy is explicitly _not_ synchronous to prevent crashes in finalizers
2942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
295ff7256e757502279b1777127a12eba235be679aeJason Sams    void nObjDestroy(int id) {
296d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
297d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
298d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
299d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
300d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
301d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
3022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
3052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
306d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
3082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
30970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
31070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
311d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
31270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
3132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
3152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
316d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
3182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    native void rsnElementGetSubElements(int con, int id,
3207d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                         int[] IDs, String[] names, int[] arraySizes);
3217d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
322d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3237d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
3242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
326b109cc78616abee7291eb42094cd156b5db3355dJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
327b109cc78616abee7291eb42094cd156b5db3355dJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
328d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
329b109cc78616abee7291eb42094cd156b5db3355dJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
3302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
3322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
333d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
3352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
337857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
338857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
339d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
340857d0c7017da763a420e825fffa2f260eb982c97Jason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
3412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
3435476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
344d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3455476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
34626ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
347a314551d69098537337c970da615a8f8af58e1f1Tim Murray
348a314551d69098537337c970da615a8f8af58e1f1Tim Murray    native int  rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
349a314551d69098537337c970da615a8f8af58e1f1Tim Murray    synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
350a314551d69098537337c970da615a8f8af58e1f1Tim Murray        validate();
351a314551d69098537337c970da615a8f8af58e1f1Tim Murray        return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
352a314551d69098537337c970da615a8f8af58e1f1Tim Murray    }
353a314551d69098537337c970da615a8f8af58e1f1Tim Murray
354a314551d69098537337c970da615a8f8af58e1f1Tim Murray
3555476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
3565476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
357d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3585476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
35967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
3602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
3612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
362d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3655476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
3665476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
367d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3685476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
3695476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
3705476b450e50939940dcf3f15c92335cee2fc572dJason Sams
3714ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
3724ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
373d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3744ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
3754ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
3764ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3774ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3785476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
3795476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
380d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3815476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
3825476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
38372226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    native Surface rsnAllocationGetSurface(int con, int alloc);
38472226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    synchronized Surface nAllocationGetSurface(int alloc) {
385615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams        validate();
38672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams        return rsnAllocationGetSurface(mContext, alloc);
387fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    }
388fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
389fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    synchronized void nAllocationSetSurface(int alloc, Surface sur) {
390163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
391fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams        rsnAllocationSetSurface(mContext, alloc, sur);
392163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
393163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoSend(int con, int alloc);
394163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoSend(int alloc) {
395163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
396163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoSend(mContext, alloc);
397163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
398163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoReceive(int con, int alloc);
399163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoReceive(int alloc) {
400163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
401163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoReceive(mContext, alloc);
402163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
403163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
404615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
405f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
406f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
407d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
408f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
409f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
4104ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
4114ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
412d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4134ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
4142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
41749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
41849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
419d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
42049a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
4212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
42249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
42349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
424d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
42549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
4262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
42749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
42849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
429d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
43049a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
4312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
43249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
43349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
434d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
43549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
43649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
43749a05d7b82956009f03acbb92a064eed054eb031Jason Sams
43849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
43949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
440d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
44149a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
444304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    native void rsnAllocationData2D(int con,
445304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstAlloc, int dstXoff, int dstYoff,
446304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstMip, int dstFace,
447304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int width, int height,
448304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcAlloc, int srcXoff, int srcYoff,
449304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcMip, int srcFace);
450304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
451304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int dstMip, int dstFace,
452304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int width, int height,
453304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcAlloc, int srcXoff, int srcYoff,
454304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcMip, int srcFace) {
455304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        validate();
456304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        rsnAllocationData2D(mContext,
457304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstAlloc, dstXoff, dstYoff,
458304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
459304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
460304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcAlloc, srcXoff, srcYoff,
461304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
462304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    }
463304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
464fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
465fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
466d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
467fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
468fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
469fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
470fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
471d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
472fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
473fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
47449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
47549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
476d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
47749a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
47949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
48049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
481d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
48249a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
484fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
485fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
486d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
487fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
488fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
48949a05d7b82956009f03acbb92a064eed054eb031Jason Sams
490b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con,
491b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
492b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstMip,
493b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int width, int height, int depth,
494b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
495b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcMip);
496b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
497b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int dstMip,
498b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int width, int height, int depth,
499b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
500b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcMip) {
501b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
502b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext,
503b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstAlloc, dstXoff, dstYoff, dstZoff,
504b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstMip, width, height, depth,
505b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
506b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
507b05d689653b1bc94836f716f29e9578677c29075Jason Sams
508b05d689653b1bc94836f716f29e9578677c29075Jason 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);
509b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
510b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
511b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
512b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
513b05d689653b1bc94836f716f29e9578677c29075Jason 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);
514b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
515b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
516b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
517b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
518b05d689653b1bc94836f716f29e9578677c29075Jason 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);
519b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
520b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
521b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
522b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
523b05d689653b1bc94836f716f29e9578677c29075Jason 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);
524b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
525b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
526b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
527b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
528b05d689653b1bc94836f716f29e9578677c29075Jason Sams
529b05d689653b1bc94836f716f29e9578677c29075Jason Sams
530fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
531fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
532d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
533fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
534fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
535fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
536fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
537d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
538fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
539fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
542d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
5442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
547d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
5492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
5512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
552d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
5542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5565edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
5575edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
558d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5595edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
5605edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
5615edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
5622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
5632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
564d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
5662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
567b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
568b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
569d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
570b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
571b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
572b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
573b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
574d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
575b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
576b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
5772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
5782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
579d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
5812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
5832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
584d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
5862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
5882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
589d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
5912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
593e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
594e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
595d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
5972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
598b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
599b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
600d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
601b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
602b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
603b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
604b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
605d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
606b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
607b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
6082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
6092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
6102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
6112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
612d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
6142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
6162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
617d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
6192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
6212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
622d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
6242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6256e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
6266e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
627eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
628eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
629dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
630dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
6316e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
6326e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        validate();
6336e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (params == null) {
6346e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout);
6356e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        } else {
6366e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout, params);
6376e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
6386e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
639eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
640eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
641eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                            int xstart, int xend, int ystart, int yend, int zstart, int zend) {
642eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        validate();
643dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        if (params == null) {
644dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
645dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        } else {
646dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
647dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        }
648eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    }
649eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
6502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
6512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
652d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
6542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6557c4caadb939b1563328251c156262c179a685c70Tim Murray
6562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
6572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
658d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
6602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6617c4caadb939b1563328251c156262c179a685c70Tim Murray    native int rsnScriptGetVarI(int con, int id, int slot);
6627c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized int nScriptGetVarI(int id, int slot) {
6637c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6647c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarI(mContext, id, slot);
6657c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6667c4caadb939b1563328251c156262c179a685c70Tim Murray
667031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
668031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
669d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
670031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
671031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
6727c4caadb939b1563328251c156262c179a685c70Tim Murray    native long rsnScriptGetVarJ(int con, int id, int slot);
6737c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized long nScriptGetVarJ(int id, int slot) {
6747c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6757c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarJ(mContext, id, slot);
6767c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6777c4caadb939b1563328251c156262c179a685c70Tim Murray
6782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
6792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
680d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
6822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6837c4caadb939b1563328251c156262c179a685c70Tim Murray    native float rsnScriptGetVarF(int con, int id, int slot);
6847c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized float nScriptGetVarF(int id, int slot) {
6857c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6867c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarF(mContext, id, slot);
6877c4caadb939b1563328251c156262c179a685c70Tim Murray    }
688ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
689ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
690d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
691ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
692ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
6937c4caadb939b1563328251c156262c179a685c70Tim Murray    native double rsnScriptGetVarD(int con, int id, int slot);
6947c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized double nScriptGetVarD(int id, int slot) {
6957c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
6967c4caadb939b1563328251c156262c179a685c70Tim Murray        return rsnScriptGetVarD(mContext, id, slot);
6977c4caadb939b1563328251c156262c179a685c70Tim Murray    }
6982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
6992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
700d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
7022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7037c4caadb939b1563328251c156262c179a685c70Tim Murray    native void rsnScriptGetVarV(int con, int id, int slot, byte[] val);
7047c4caadb939b1563328251c156262c179a685c70Tim Murray    synchronized void nScriptGetVarV(int id, int slot, byte[] val) {
7057c4caadb939b1563328251c156262c179a685c70Tim Murray        validate();
7067c4caadb939b1563328251c156262c179a685c70Tim Murray        rsnScriptGetVarV(mContext, id, slot, val);
7077c4caadb939b1563328251c156262c179a685c70Tim Murray    }
708adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
709adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                  int e, int[] dims);
710adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
711adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                      int e, int[] dims) {
712adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        validate();
713adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
714adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    }
7156f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
7166f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
717d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7186f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
7196f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
7202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
721e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    native int  rsnScriptCCreate(int con, String resName, String cacheDir,
722e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                 byte[] script, int length);
723e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
724d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
725e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
7262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
7286ab97682fd444586ee135912a4210417a1c8781bJason Sams    native int  rsnScriptIntrinsicCreate(int con, int id, int eid);
7296ab97682fd444586ee135912a4210417a1c8781bJason Sams    synchronized int nScriptIntrinsicCreate(int id, int eid) {
7306ab97682fd444586ee135912a4210417a1c8781bJason Sams        validate();
7316ab97682fd444586ee135912a4210417a1c8781bJason Sams        return rsnScriptIntrinsicCreate(mContext, id, eid);
7326ab97682fd444586ee135912a4210417a1c8781bJason Sams    }
7336ab97682fd444586ee135912a4210417a1c8781bJason Sams
73408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
73508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
73608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
73708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
73808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
73908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
74008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptFieldIDCreate(int con, int sid, int slot);
74108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptFieldIDCreate(int sid, int slot) {
74208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
74308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptFieldIDCreate(mContext, sid, slot);
74408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
74508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
74608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
74708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
74808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
74908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
75008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
75108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
75208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
75308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
75408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
75508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetInput(mContext, group, kernel, alloc);
75608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
75708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
75808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
75908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
76008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
76108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
76208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
76308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
76408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupExecute(int con, int group);
76508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupExecute(int group) {
76608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
76708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupExecute(mContext, group);
76808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
76908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
770a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    native int  rsnSamplerCreate(int con, int magFilter, int minFilter,
771a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso);
772a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    synchronized int nSamplerCreate(int magFilter, int minFilter,
773a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso) {
774d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
775a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk        return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
7762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
778331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    native int  rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
779331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      boolean depthMask, boolean dither,
780331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      int srcMode, int dstMode, int depthFunc);
781331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
782331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         boolean depthMask, boolean dither,
783331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         int srcMode, int dstMode, int depthFunc) {
784d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
785bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams        return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
786bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams                                     dstMode, depthFunc);
7872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
78994aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
79094aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
791d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
79294aaed38467c71a6c804f0e18b41346a4013c25bJason Sams        return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
7932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
7952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
7962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
797d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
7992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
8012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
802d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
8042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
8062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
807d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
8092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8102123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
8112123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
812d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8132123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, texNames, params);
8142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
8162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
817d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8182123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, texNames, params);
8192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
82125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    native int  rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
82225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
823d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
82425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk        return rsnMeshCreate(mContext, vtx, idx, prim);
8259d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
8262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
8272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
828d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
8302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
8322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
833d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
8352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
8372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
838d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
8402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
8422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
843d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
8442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
8452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
8462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
847f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
848f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
849f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        validate();
850f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
851f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    }
85260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
853bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
854bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
855650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
856bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
85760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
8588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
8598cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
8608cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
8618cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
8628cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
8638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
86452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
865ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
8668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
86702f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
868f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
8698cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
8708cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
8718cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
8728cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
8738cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
8748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
8758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
8768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
8778cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
8788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
8798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
8803a2914132146f340511425d7f78540098606b512Stephen Hines    Element mElement_FONT;
881a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
8823c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
8833c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
8843c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
8853c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
8863c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
8873c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
8883c0dfbab807a459622aeade4940daddf482dec66Jason Sams
8898cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
8908cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
8918cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
892836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
893836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_2;
894836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_3;
895836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_4;
896836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
897836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_2;
898836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_3;
8998cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
9007d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
901836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_2;
902836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_3;
903836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_4;
904836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
905836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_2;
906836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_3;
907836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_4;
908836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
909836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_2;
910836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_3;
911836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_4;
912836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
913836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_2;
914836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_3;
915836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_4;
916836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
917836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_2;
918836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_3;
919836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_4;
920836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
921836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_2;
922836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_3;
923836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_4;
924836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
925836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_2;
926836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_3;
927836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_4;
928836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
929932e78e9903342e3494983fd3463084caab4ba42Tim Murray    Element mElement_YUV;
930932e78e9903342e3494983fd3463084caab4ba42Tim Murray
9311d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
9321d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
9331d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
9341d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
9354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
9364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
9374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
9384d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
9394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
9404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
9416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_NEAREST;
9426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR;
9436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
9444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
945d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
946d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
947d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
948d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
949d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
950d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
951d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
952d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
95332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
95460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
95543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
95660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
9579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
958c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * The base class from which an application should derive in order
959c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * to receive RS messages from scripts. When a script calls {@code
960c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * rsSendToClient}, the data fields will be filled, and the run
961c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * method will be called on a separate thread.  This will occur
962c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * some time after {@code rsSendToClient} completes in the script,
963c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * as {@code rsSendToClient} is asynchronous. Message handlers are
964c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * not guaranteed to have completed when {@link
965c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * android.renderscript.RenderScript#finish} returns.
96627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
96727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
968bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
969516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
970516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
9711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
972516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
973516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
974516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
9759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
976c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * If an application is expecting messages, it should set this
977c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * field to an instance of {@link RSMessageHandler}.  This
978c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * instance will receive all the user messages sent from {@code
979c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * sendToClient} by scripts from this context.
98027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
98127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
982bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
983bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
984bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
985bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
986bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
987bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
988bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
989bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
990516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
9919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
99202d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * Place a message into the message queue to be sent back to the message
99302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * handler once all previous commands have been executed.
994455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     *
995455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param id
996455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param data
997455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     */
998455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    public void sendMessage(int id, int[] data) {
999455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        nContextSendMessage(id, data);
1000455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
1001455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
1002455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    /**
1003c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * The runtime error handler base class.  An application should derive from this class
1004c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * if it wishes to install an error handler.  When errors occur at runtime,
1005c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * the fields in this class will be filled, and the run method will be called.
100627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
100727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1008bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
10091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
10101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
10111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
10121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
10131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
101427676fe24be7444a174c15df476e49adc5335d03Jason Sams
10159c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
101627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
101727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
1018c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * {@link RSRuntimeException} will instead be thrown with details about the error.
101927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
102027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
102127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1022bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
1023bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
1024bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
1025bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
1026bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
1027bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
1028bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
1029bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
10301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1032c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * RenderScript worker thread priority enumeration.  The default value is
1033c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * NORMAL.  Applications wishing to do background processing should set
1034c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * their priority to LOW to avoid starving forground processes.
103527676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
10367d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
1037260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
1038260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        NORMAL (Process.THREAD_PRIORITY_DISPLAY);
10397d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
10407d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
10417d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
10427d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
10437d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
10447d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
10457d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1046771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
1047771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
1048c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
1049771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
1050771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
1051771bebb94054d06f97284379c93a2620613513c3Jason Sams
105227676fe24be7444a174c15df476e49adc5335d03Jason Sams
10539c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
105427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
105527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
105627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
105727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1058bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
10595dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
10607d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
10617d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
10627d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1063bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
1064516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
1065516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
1066bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
10671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1068bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1069bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1070bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1071bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1072bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
1073739c8263a10d34f5acba7fce2052012d1545d10bJason Sams        static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
1074516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
107542028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines        static final int RS_ERROR_FATAL_DEBUG = 0x0800;
1076bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
1077add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
1078516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
1079516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
1080516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
1081516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1082516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
1083516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1084516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
1085516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
1086516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
1087516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
10882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
1089516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
10901d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
1091edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
1092bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
1093bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
10941c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10951c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
10961c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
10971c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
10981c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
1099edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1100edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        RS_MESSAGE_TO_CLIENT_USER) {
1101c11e25c4e653124def1fb18e203b894f42106cbeTim Murray                        throw new RSDriverException("Error processing message from RenderScript.");
1102edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    }
11031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
11051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
11061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
11071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
11081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
11091d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
11101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
1111516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
1112ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
1113516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
11141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
11151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
11161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
11171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
111842028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    // Throw RSRuntimeException under the following conditions:
111942028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    //
112042028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    // 1) It is an unknown fatal error.
112142028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    // 2) It is a debug fatal error, and we are not in a
112242028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    //    debug context.
112342028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    // 3) It is a debug fatal error, and we do not have an
112442028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    //    error callback.
112542028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                    if (subID >= RS_ERROR_FATAL_UNKNOWN ||
112642028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                        (subID >= RS_ERROR_FATAL_DEBUG &&
112742028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                         (mRS.mContextType != ContextType.DEBUG ||
112842028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines                          mRS.mErrorCallback == null))) {
1129add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1130add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
1131add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
11321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
11331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
11341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
11351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
11361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
1137a4b7bc97862e01d38b483524f1d1cf433d29e294Jason Sams                        android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
1138be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // Do not throw here. In these cases, we do not have
1139be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // a fatal error.
11401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
11411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
11421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
11431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1144739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1145739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                    Allocation.sendBufferNotification(subID);
1146739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                    continue;
1147739c8263a10d34f5acba7fce2052012d1545d10bJason Sams                }
1148739c8263a10d34f5acba7fce2052012d1545d10bJason Sams
11491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
11501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
11511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
11521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
11531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
11541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
11551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
1156516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
1157516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
1158da67debe22159fdf0bbeca6340766ebe2b8e67a3Tim Murray            //Log.d(LOG_TAG, "MessageThread exiting.");
1159516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
1160516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
1161516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
11626b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
116342028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines        mContextType = ContextType.NORMAL;
11641a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        if (ctx != null) {
11651a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams            mApplicationContext = ctx.getApplicationContext();
11661a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        }
1167ff7256e757502279b1777127a12eba235be679aeJason Sams        mRWLock = new ReentrantReadWriteLock();
116860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
116960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
11709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
11716b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
117227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
11736b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
11746b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
11756b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
11766b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
11776b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
11786b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
11799c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1180add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @hide
1181add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1182add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion) {
1183add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, sdkVersion, ContextType.NORMAL);
1184add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1185add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1186add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
1187c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Create a RenderScript context.
118827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
11891a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @hide
11906b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
119127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
119227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1193add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
1194e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill        if (!sInitialized) {
1195e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
1196e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill            return null;
1197e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill        }
1198e4d9a01bfc7451afff1ed399a5801c7aa2af2831Dan Morrill
11996b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
1200704ff64b099406bb328898a7443921f22dbffd6dJason Sams
1201704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
1202add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
120342028a87568c2b7b5ff3691df7c345bbc5802adeStephen Hines        rs.mContextType = ct;
12042698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        if (rs.mContext == 0) {
12052698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams            throw new RSDriverException("Failed to create RS context.");
12062698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        }
1207704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
1208704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
1209704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
1210efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
1211efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
12129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1213c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Create a RenderScript context.
12141a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     *
12151a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @param ctx The context.
12161a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @return RenderScript
12171a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     */
12181a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    public static RenderScript create(Context ctx) {
1219add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, ContextType.NORMAL);
1220add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1221add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1222add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
1223c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Create a RenderScript context.
1224add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1225add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1226add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @param ctx The context.
122702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams     * @param ct The type of context to be created.
1228add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @return RenderScript
1229add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1230add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, ContextType ct) {
12311a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int v = ctx.getApplicationInfo().targetSdkVersion;
1232add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, v, ct);
12331a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    }
12341a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams
12359c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
123627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
123727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
123827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
123927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1240bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
12415dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
1242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
1243715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
1244715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
12459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1246c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Wait for any pending asynchronous opeations (such as copies to a RS
1247c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * allocation or RS script executions) to complete.
124827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
124927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
125096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
125196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
125296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
125396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
12549c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1255c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Destroys this RenderScript context.  Once this function is called,
1256c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * using this context or any objects belonging to this context is
1257c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * illegal.
125827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
125927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1260f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
12615dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
1262ff7256e757502279b1777127a12eba235be679aeJason Sams        nContextFinish();
1263ff7256e757502279b1777127a12eba235be679aeJason Sams
12642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
1265516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
1266a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
1267a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
1268a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
1269a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
1270516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
12712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
1272f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
1273f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
1274f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
1275f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
127602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1277a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
1278a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
1279a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
1280a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
1281bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
12826b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
1283e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            return o.getID(this);
1284d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
12856b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
128660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
128760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
1288