RenderScript.java revision b05d689653b1bc94836f716f29e9578677c29075
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;
2136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
226b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
234382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.ApplicationInfo;
244382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.PackageManager;
25b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukimport android.content.res.AssetManager;
26b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
27650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
28faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
29260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kastenimport android.os.Process;
3036e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
3136e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
3243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
3360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
344382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
359c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
363aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * Renderscript base master class.  An instance of this class creates native
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams * worker threads for processing commands from this object.  This base class
3827676fe24be7444a174c15df476e49adc5335d03Jason Sams * does not provide any extended capabilities beyond simple data processing.
3927676fe24be7444a174c15df476e49adc5335d03Jason Sams * For extended capabilities use derived classes such as RenderScriptGL.
4027676fe24be7444a174c15df476e49adc5335d03Jason Sams *
413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about creating an application that uses Renderscript, read the
44b47fa1699a02a96d5da8e175966e9584c6bd5565Scott Main * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
453aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
46e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
483bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
49bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
50650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
5143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    static final boolean LOG_ENABLED = false;
5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
536b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
59650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
60bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
61bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
63dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
67e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
6860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
6960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
71fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            Log.e(LOG_TAG, "Error loading RS jni library: " + e);
72fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            throw new RSRuntimeException("Error loading RS jni library: " + e);
7360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
7460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
7560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
7836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
79ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
80edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int nContextGetUserMessage(int con, int[] data);
811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
82edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int  nContextPeekMessage(int con, int[] subID);
832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
86a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    /**
87a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Name of the file that holds the object cache.
88a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
89a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    private static final String CACHE_PATH = "com.android.renderscript.cache";
901a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    static String mCachePath;
91a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
92a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     /**
93a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Sets the directory to use as a persistent storage for the
94a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * renderscript object file cache.
95a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     *
96a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @hide
97a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @param cacheDir A directory the current process can write to
98a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
99a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    public static void setupDiskCache(File cacheDir) {
100a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        File f = new File(cacheDir, CACHE_PATH);
101a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        mCachePath = f.getAbsolutePath();
102a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        f.mkdirs();
103a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    }
104a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
105add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public enum ContextType {
106add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        NORMAL (0),
107add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        DEBUG (1),
108add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        PROFILE (2);
109add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
110add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        int mID;
111add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        ContextType(int id) {
112add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams            mID = id;
113add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        }
114add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
1172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
1184382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreateGL(int dev, int ver, int sdkVer,
11911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
12011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
12111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
12211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1232c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
1244382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
12511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
12611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
12711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
12811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1292c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
1304382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
13111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
13211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
1332c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
135add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    native int  rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
136add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
137add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return rsnContextCreate(dev, ver, sdkVer, contextType);
1382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
141d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
146d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
149faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
150faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
151faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
152faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        rsnContextSetSurfaceTexture(mContext, w, h, sur);
153faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
1542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
156d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
161d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
166d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
170455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    native void rsnContextSendMessage(int con, int id, int[] data);
171455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    synchronized void nContextSendMessage(int id, int[] data) {
172455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        validate();
173455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        rsnContextSendMessage(mContext, id, data);
174455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
175455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
1762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
178d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
183d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
1852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
1872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
188d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
1902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
1922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
193d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
1952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
1972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
198d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
2002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
203d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
2052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
208d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
2102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
213d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
2152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
219d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
2212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
2232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
224d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
2282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
229d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
230d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
231d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
232d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
233d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
234d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
2382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
239d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
2412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
24270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
24370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
244d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
24570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
2462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
2482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
249d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
2512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    native void rsnElementGetSubElements(int con, int id,
2537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                         int[] IDs, String[] names, int[] arraySizes);
2547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
255d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
2572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
259b109cc78616abee7291eb42094cd156b5db3355dJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
260b109cc78616abee7291eb42094cd156b5db3355dJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
261d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
262b109cc78616abee7291eb42094cd156b5db3355dJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
2632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
2652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
266d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
2682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
270857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
271857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
272d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
273857d0c7017da763a420e825fffa2f260eb982c97Jason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
2742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2755476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2765476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
277d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2785476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
27926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
280a314551d69098537337c970da615a8f8af58e1f1Tim Murray
281a314551d69098537337c970da615a8f8af58e1f1Tim Murray    native int  rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
282a314551d69098537337c970da615a8f8af58e1f1Tim Murray    synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
283a314551d69098537337c970da615a8f8af58e1f1Tim Murray        validate();
284a314551d69098537337c970da615a8f8af58e1f1Tim Murray        return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
285a314551d69098537337c970da615a8f8af58e1f1Tim Murray    }
286a314551d69098537337c970da615a8f8af58e1f1Tim Murray
287a314551d69098537337c970da615a8f8af58e1f1Tim Murray
2885476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2895476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
290d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2915476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
29267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
2932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
2942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
295d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
2972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2985476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
2995476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
300d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3015476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
3025476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
3035476b450e50939940dcf3f15c92335cee2fc572dJason Sams
3044ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
3054ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
306d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3074ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
3084ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
3094ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3104ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
3115476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
3125476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
313d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3145476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
3155476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
31672226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    native Surface rsnAllocationGetSurface(int con, int alloc);
31772226e0543461133b9e177a3e78ae50b0c65e797Jason Sams    synchronized Surface nAllocationGetSurface(int alloc) {
318615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams        validate();
31972226e0543461133b9e177a3e78ae50b0c65e797Jason Sams        return rsnAllocationGetSurface(mContext, alloc);
320fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    }
321fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
322fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    synchronized void nAllocationSetSurface(int alloc, Surface sur) {
323163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
324fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams        rsnAllocationSetSurface(mContext, alloc, sur);
325163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
326163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoSend(int con, int alloc);
327163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoSend(int alloc) {
328163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
329163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoSend(mContext, alloc);
330163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
331163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoReceive(int con, int alloc);
332163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoReceive(int alloc) {
333163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
334163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoReceive(mContext, alloc);
335163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
336163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
337615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
338f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
339f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
340d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
341f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
342f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
3434ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
3444ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
345d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3464ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
3472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
35049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
35149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
352d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
35349a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
35549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
35649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
357d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
35849a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
36049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
36149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
362d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
36349a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
36549a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
36649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
367d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
36849a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
36949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
37049a05d7b82956009f03acbb92a064eed054eb031Jason Sams
37149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
37249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
373d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
37449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
3752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
377304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    native void rsnAllocationData2D(int con,
378304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstAlloc, int dstXoff, int dstYoff,
379304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstMip, int dstFace,
380304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int width, int height,
381304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcAlloc, int srcXoff, int srcYoff,
382304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcMip, int srcFace);
383304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
384304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int dstMip, int dstFace,
385304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int width, int height,
386304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcAlloc, int srcXoff, int srcYoff,
387304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcMip, int srcFace) {
388304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        validate();
389304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        rsnAllocationData2D(mContext,
390304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstAlloc, dstXoff, dstYoff,
391304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
392304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
393304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcAlloc, srcXoff, srcYoff,
394304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
395304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    }
396304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
397fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
398fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
399d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
400fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
401fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
402fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
403fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
404d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
405fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
406fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
40749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
40849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
409d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
41049a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
41249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
41349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
414d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
41549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
4162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
417fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
418fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
419d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
420fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
421fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
42249a05d7b82956009f03acbb92a064eed054eb031Jason Sams
423b05d689653b1bc94836f716f29e9578677c29075Jason Sams    native void rsnAllocationData3D(int con,
424b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
425b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int dstMip,
426b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int width, int height, int depth,
427b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
428b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                    int srcMip);
429b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
430b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int dstMip,
431b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int width, int height, int depth,
432b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
433b05d689653b1bc94836f716f29e9578677c29075Jason Sams                                        int srcMip) {
434b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
435b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext,
436b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstAlloc, dstXoff, dstYoff, dstZoff,
437b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            dstMip, width, height, depth,
438b05d689653b1bc94836f716f29e9578677c29075Jason Sams                            srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
439b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
440b05d689653b1bc94836f716f29e9578677c29075Jason Sams
441b05d689653b1bc94836f716f29e9578677c29075Jason 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);
442b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
443b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
444b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
445b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
446b05d689653b1bc94836f716f29e9578677c29075Jason 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);
447b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
448b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
449b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
450b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
451b05d689653b1bc94836f716f29e9578677c29075Jason 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);
452b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
453b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
454b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
455b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
456b05d689653b1bc94836f716f29e9578677c29075Jason 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);
457b05d689653b1bc94836f716f29e9578677c29075Jason Sams    synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
458b05d689653b1bc94836f716f29e9578677c29075Jason Sams        validate();
459b05d689653b1bc94836f716f29e9578677c29075Jason Sams        rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
460b05d689653b1bc94836f716f29e9578677c29075Jason Sams    }
461b05d689653b1bc94836f716f29e9578677c29075Jason Sams
462b05d689653b1bc94836f716f29e9578677c29075Jason Sams
463fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
464fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
465d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
466fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
467fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
468fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
469fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
470d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
471fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
472fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
4732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
4742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
475d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
4792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
480d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
4842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
485d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
4872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4895edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
4905edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
491d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4925edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
4935edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
4945edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
4962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
497d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
4992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
500b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
501b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
502d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
503b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
504b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
505b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
506b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
507d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
508b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
509b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
5102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
5112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
512d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
5142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
517d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
5192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
5212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
522d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
5242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
526e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
527e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
528d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
531b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
532b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
533d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
534b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
535b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
536b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
537b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
538d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
539b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
540b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
5442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
545d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
5472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
5492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
550d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
5522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
5542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
555d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
5572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5586e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
5596e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
560eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
561eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
562dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines    native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
563dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines                                        int xstart, int xend, int ystart, int yend, int zstart, int zend);
5646e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
5656e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        validate();
5666e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (params == null) {
5676e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout);
5686e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        } else {
5696e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout, params);
5706e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
5716e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
572eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
573eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
574eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray                                            int xstart, int xend, int ystart, int yend, int zstart, int zend) {
575eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray        validate();
576dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        if (params == null) {
577dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
578dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        } else {
579dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines            rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
580dac6ed0b69b23ab25757085dd5ce68092516ee2fStephen Hines        }
581eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray    }
582eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray
5832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
5842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
585d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
5872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
5892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
590d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
5922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
593031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
594031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
595d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
596031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
597031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
5982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
5992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
600d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
6022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
603ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
604ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
605d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
606ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
607ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
6082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
6092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
610d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
6122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
613adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
614adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                  int e, int[] dims);
615adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
616adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                      int e, int[] dims) {
617adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        validate();
618adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
619adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    }
6206f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
6216f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
622d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6236f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
6246f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
6252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
626e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    native int  rsnScriptCCreate(int con, String resName, String cacheDir,
627e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                 byte[] script, int length);
628e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
629d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
630e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
6312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
6336ab97682fd444586ee135912a4210417a1c8781bJason Sams    native int  rsnScriptIntrinsicCreate(int con, int id, int eid);
6346ab97682fd444586ee135912a4210417a1c8781bJason Sams    synchronized int nScriptIntrinsicCreate(int id, int eid) {
6356ab97682fd444586ee135912a4210417a1c8781bJason Sams        validate();
6366ab97682fd444586ee135912a4210417a1c8781bJason Sams        return rsnScriptIntrinsicCreate(mContext, id, eid);
6376ab97682fd444586ee135912a4210417a1c8781bJason Sams    }
6386ab97682fd444586ee135912a4210417a1c8781bJason Sams
63908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
64008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
64108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
64208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
64308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
64408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
64508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptFieldIDCreate(int con, int sid, int slot);
64608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptFieldIDCreate(int sid, int slot) {
64708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
64808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptFieldIDCreate(mContext, sid, slot);
64908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
65008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
65108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
65208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
65308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
65408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
65508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
65608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
65708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
65808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
65908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
66008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetInput(mContext, group, kernel, alloc);
66108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
66208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
66308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
66408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
66508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
66608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
66708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
66808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
66908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupExecute(int con, int group);
67008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupExecute(int group) {
67108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
67208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupExecute(mContext, group);
67308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
67408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
675a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    native int  rsnSamplerCreate(int con, int magFilter, int minFilter,
676a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso);
677a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    synchronized int nSamplerCreate(int magFilter, int minFilter,
678a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso) {
679d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
680a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk        return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
6812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
683331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    native int  rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
684331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      boolean depthMask, boolean dither,
685331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      int srcMode, int dstMode, int depthFunc);
686331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
687331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         boolean depthMask, boolean dither,
688331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         int srcMode, int dstMode, int depthFunc) {
689d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
690bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams        return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
691bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams                                     dstMode, depthFunc);
6922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
69494aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
69594aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
696d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
69794aaed38467c71a6c804f0e18b41346a4013c25bJason Sams        return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
6982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
7002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
7012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
702d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
7042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
7062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
707d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
7092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
7112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
712d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
7142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7152123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
7162123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
717d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7182123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, texNames, params);
7192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7202123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
7212123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
722d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7232123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, texNames, params);
7242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
72625999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    native int  rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
72725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
728d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
72925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk        return rsnMeshCreate(mContext, vtx, idx, prim);
7309d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
7312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
7322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
733d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
7352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
7372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
738d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
7402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
7422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
743d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
7452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
7472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
748d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
7492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
7502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
7512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
752f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
753f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
754f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        validate();
755f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
756f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    }
75760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
758bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
759bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
760650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
761bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
76260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
7638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
7648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
7658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
7668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
7678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
7688cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
76952d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
770ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
7718cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
77202f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
773f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
7748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
7758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
7768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
7778cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
7788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
7798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
7808cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
7818cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
7828cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
7838cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
7848cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
7853a2914132146f340511425d7f78540098606b512Stephen Hines    Element mElement_FONT;
786a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
7873c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
7883c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
7893c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
7903c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
7913c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
7923c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
7933c0dfbab807a459622aeade4940daddf482dec66Jason Sams
7948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
7958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
7968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
797836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
798836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_2;
799836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_3;
800836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_4;
801836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
802836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_2;
803836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_3;
8048cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
8057d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
806836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_2;
807836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_3;
808836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_4;
809836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
810836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_2;
811836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_3;
812836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_4;
813836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
814836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_2;
815836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_3;
816836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_4;
817836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
818836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_2;
819836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_3;
820836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_4;
821836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
822836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_2;
823836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_3;
824836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_4;
825836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
826836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_2;
827836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_3;
828836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_4;
829836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
830836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_2;
831836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_3;
832836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_4;
833836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
8341d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
8351d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
8361d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
8371d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
8384d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
8394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
8404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
8414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
8424d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
8434d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
8446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_NEAREST;
8456b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR;
8466b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
8474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
848d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
849d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
850d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
851d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
852d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
853d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
854d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
855d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
85632e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
85760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
85843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
85960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
8609c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
86127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
8628cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * coming from their scripts.  When a script calls sendToClient the data
86327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
86427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
86527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
86627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
86727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
868bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
869516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
870516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
8711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
872516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
873516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
874516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
8759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
87627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
87727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
87827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
87927676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
88027676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
881bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
882bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
883bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
884bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
885bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
886bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
887bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
888bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
889516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
8909c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
891455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @hide
892455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     *
893455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param id
894455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     * @param data
895455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams     */
896455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    public void sendMessage(int id, int[] data) {
897455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams        nContextSendMessage(id, data);
898455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    }
899455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams
900455d64426615e5d269a3bd05cd91b67c3811fcdfJason Sams    /**
90127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
90227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
90327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
90427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
90527676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
906bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
9071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
9081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
9091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
9101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
9111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
91227676fe24be7444a174c15df476e49adc5335d03Jason Sams
9139c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
91427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
91527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
91627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
91727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
91827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
91927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
920bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
921bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
922bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
923bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
924bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
925bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
926bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
927bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
9281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9299c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
93027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
93127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
93227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
93327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
93427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
9357d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
936260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
937260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        NORMAL (Process.THREAD_PRIORITY_DISPLAY);
9387d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
9397d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
9407d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
9417d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
9427d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
9437d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
9447d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
945771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
946771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
947c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
948771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
949771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
950771bebb94054d06f97284379c93a2620613513c3Jason Sams
95127676fe24be7444a174c15df476e49adc5335d03Jason Sams
9529c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
95327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
95427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
95527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
95627676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
957bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
9585dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
9597d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
9607d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
9617d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
962bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
963516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
964516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
965bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
9661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
967bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
968bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
969bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
970bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
971bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
972516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
973bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
974add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
975516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
976516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
977516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
978516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
979516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
980516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
981516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
982516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
983516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
984516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
9852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
986516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
9871d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
988edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
989bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
990bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
9911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9921c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
9931c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
9941c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
9951c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
996edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
997edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        RS_MESSAGE_TO_CLIENT_USER) {
998edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        throw new RSDriverException("Error processing message from Renderscript.");
999edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    }
10001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10011c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
10021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
10031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
10041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
10051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
10061d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
10071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
1008516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
1009ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
1010516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
10111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
10131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
10141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
1015add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
1016add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1017add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
1018add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
10191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
10201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
10211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
10221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
10231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
1024a4b7bc97862e01d38b483524f1d1cf433d29e294Jason Sams                        android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
1025be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // Do not throw here. In these cases, we do not have
1026be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // a fatal error.
10271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
10281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
10291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
10301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
10311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
10321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
10331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
10341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
10351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
10361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
10371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
1038516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
1039516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
10403bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
1041516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
1042516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
1043516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
10446b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
10451a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        if (ctx != null) {
10461a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams            mApplicationContext = ctx.getApplicationContext();
10471a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        }
104860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
104960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
10509c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
10516b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
105227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
10536b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
10546b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
10556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
10566b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
10576b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
10586b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
10599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1060add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @hide
1061add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1062add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion) {
1063add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, sdkVersion, ContextType.NORMAL);
1064add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1065add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1066add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
10676b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Create a basic RenderScript context.
106827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
10691a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @hide
10706b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
107127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
107227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1073add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
10746b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
1075704ff64b099406bb328898a7443921f22dbffd6dJason Sams
1076704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
1077add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
10782698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        if (rs.mContext == 0) {
10792698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams            throw new RSDriverException("Failed to create RS context.");
10802698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        }
1081704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
1082704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
1083704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
1084efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
1085efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
10869c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
10871a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * Create a basic RenderScript context.
10881a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     *
10891a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @param ctx The context.
10901a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @return RenderScript
10911a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     */
10921a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    public static RenderScript create(Context ctx) {
1093add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, ContextType.NORMAL);
1094add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    }
1095add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams
1096add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    /**
1097add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * Create a basic RenderScript context.
1098add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1099add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @hide
1100add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     *
1101add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @param ctx The context.
1102add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     * @return RenderScript
1103add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams     */
1104add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams    public static RenderScript create(Context ctx, ContextType ct) {
11051a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int v = ctx.getApplicationInfo().targetSdkVersion;
1106add26dca07cc5a5c935bc68f57bee2c1cd96a79eJason Sams        return create(ctx, v, ct);
11071a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    }
11081a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams
11099c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
111027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
111127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
111227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
111327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
11155dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
1116bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
1117715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
1118715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
11199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
112027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
112127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
112227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
112327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
112496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
112596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
112696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
112796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
11289c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
112927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
113027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
113127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
113227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1133f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
11345dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
11352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
1136516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
1137a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
1138a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
1139a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
1140a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
1141516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
11422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
1143f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
1144f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
1145f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
1146f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
1147f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
114802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1149a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
1150a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
1151a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
1152a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
1153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
11546b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
1155e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            return o.getID(this);
1156d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
11576b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
115860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
115960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
1160