blob: 1264adc377681d74edf9ec6f6f401a63c426e525 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08002 * Copyright (C) 2008-2012 The Android Open Source Project
Jack Palevich60aa3ea2009-05-26 13:45:08 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Samsa6f338c2012-02-24 16:22:16 -080019import java.io.File;
Jason Samsfe1d5ff2012-03-23 11:47:26 -070020import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070021
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080022import android.content.Context;
Stephen Hines4382467a2011-08-01 15:02:34 -070023import android.content.pm.ApplicationInfo;
24import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080025import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070026import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070027import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070028import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070029import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070030import android.util.Log;
31import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070032
Jack Palevich60aa3ea2009-05-26 13:45:08 -070033
Stephen Hines4382467a2011-08-01 15:02:34 -070034
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070035/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070036 * This class provides access to a RenderScript context, which controls RenderScript
37 * initialization, resource management, and teardown. An instance of the RenderScript
38 * class must be created before any other RS objects can be created.
Jason Sams27676fe2010-11-10 17:00:59 -080039 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080040 * <div class="special reference">
41 * <h3>Developer Guides</h3>
Tim Murrayc11e25c2013-04-09 11:01:01 -070042 * <p>For more information about creating an application that uses RenderScript, read the
43 * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080044 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070045 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080047 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080048 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070049 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070050 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070051
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080052 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070053
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080054 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070055 * We use a class initializer to allow the native code to cache some
56 * field offsets.
57 */
Romain Guy650a3eb2009-08-31 14:06:43 -070058 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080059 static boolean sInitialized;
60 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061
Jason Samsdba3ba52009-07-30 14:56:12 -070062
Jack Palevich60aa3ea2009-05-26 13:45:08 -070063 static {
64 sInitialized = false;
65 try {
Jason Samse29d4712009-07-23 15:19:03 -070066 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070067 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068 sInitialized = true;
69 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080070 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
71 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070072 }
73 }
74
Jason Sams2e1872f2010-08-17 16:25:41 -070075 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070076 native int nDeviceCreate();
77 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070078 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070079 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080080 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070081 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070082 native void nContextInitToClient(int con);
83 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070084
Stephen Hines7d25a822013-04-09 23:51:56 -070085 static File mCacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -080086
87 /**
88 * Sets the directory to use as a persistent storage for the
89 * renderscript object file cache.
90 *
91 * @hide
92 * @param cacheDir A directory the current process can write to
93 */
Jason Samsa6f338c2012-02-24 16:22:16 -080094 public static void setupDiskCache(File cacheDir) {
Stephen Hines7d25a822013-04-09 23:51:56 -070095 // Defer creation of cache path to nScriptCCreate().
96 mCacheDir = cacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -080097 }
98
Jason Sams02d56d92013-04-12 16:40:50 -070099 /**
100 * ContextType specifies the specific type of context to be created.
101 *
102 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800103 public enum ContextType {
Jason Sams02d56d92013-04-12 16:40:50 -0700104 /**
105 * NORMAL context, this is the default and what shipping apps should
106 * use.
107 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800108 NORMAL (0),
Jason Sams02d56d92013-04-12 16:40:50 -0700109
110 /**
111 * DEBUG context, perform extra runtime checks to validate the
112 * kernels and APIs are being used as intended. Get and SetElementAt
113 * will be bounds checked in this mode.
114 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800115 DEBUG (1),
Jason Sams02d56d92013-04-12 16:40:50 -0700116
117 /**
118 * PROFILE context, Intended to be used once the first time an
119 * application is run on a new device. This mode allows the runtime to
120 * do additional testing and performance tuning.
121 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800122 PROFILE (2);
123
124 int mID;
125 ContextType(int id) {
126 mID = id;
127 }
128 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800129
Stephen Hines42028a82013-04-17 19:22:01 -0700130 ContextType mContextType;
131
Jason Sams2e1872f2010-08-17 16:25:41 -0700132 // Methods below are wrapped to protect the non-threadsafe
133 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -0700134 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700135 int colorMin, int colorPref,
136 int alphaMin, int alphaPref,
137 int depthMin, int depthPref,
138 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700139 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -0700140 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700141 int colorMin, int colorPref,
142 int alphaMin, int alphaPref,
143 int depthMin, int depthPref,
144 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700145 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700146 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700147 alphaMin, alphaPref, depthMin, depthPref,
148 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700149 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700150 }
Jason Samsadd26dc2013-02-22 18:43:45 -0800151 native int rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
152 synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
153 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700154 }
155 native void rsnContextDestroy(int con);
156 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800157 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700158 rsnContextDestroy(mContext);
159 }
160 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
161 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800162 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700163 rsnContextSetSurface(mContext, w, h, sur);
164 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700165 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
166 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
167 validate();
168 rsnContextSetSurfaceTexture(mContext, w, h, sur);
169 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700170 native void rsnContextSetPriority(int con, int p);
171 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800172 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700173 rsnContextSetPriority(mContext, p);
174 }
175 native void rsnContextDump(int con, int bits);
176 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800177 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 rsnContextDump(mContext, bits);
179 }
180 native void rsnContextFinish(int con);
181 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800182 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700183 rsnContextFinish(mContext);
184 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700185
Jason Sams455d6442013-02-05 19:20:18 -0800186 native void rsnContextSendMessage(int con, int id, int[] data);
187 synchronized void nContextSendMessage(int id, int[] data) {
188 validate();
189 rsnContextSendMessage(mContext, id, data);
190 }
191
Jason Sams2e1872f2010-08-17 16:25:41 -0700192 native void rsnContextBindRootScript(int con, int script);
193 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800194 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700195 rsnContextBindRootScript(mContext, script);
196 }
197 native void rsnContextBindSampler(int con, int sampler, int slot);
198 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800199 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700200 rsnContextBindSampler(mContext, sampler, slot);
201 }
202 native void rsnContextBindProgramStore(int con, int pfs);
203 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800204 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700205 rsnContextBindProgramStore(mContext, pfs);
206 }
207 native void rsnContextBindProgramFragment(int con, int pf);
208 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800209 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700210 rsnContextBindProgramFragment(mContext, pf);
211 }
212 native void rsnContextBindProgramVertex(int con, int pv);
213 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800214 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700215 rsnContextBindProgramVertex(mContext, pv);
216 }
217 native void rsnContextBindProgramRaster(int con, int pr);
218 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700220 rsnContextBindProgramRaster(mContext, pr);
221 }
222 native void rsnContextPause(int con);
223 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800224 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700225 rsnContextPause(mContext);
226 }
227 native void rsnContextResume(int con);
228 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800229 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700230 rsnContextResume(mContext);
231 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700232
Jason Sams2e1872f2010-08-17 16:25:41 -0700233 native void rsnAssignName(int con, int obj, byte[] name);
234 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800235 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700236 rsnAssignName(mContext, obj, name);
237 }
238 native String rsnGetName(int con, int obj);
239 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800240 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700241 return rsnGetName(mContext, obj);
242 }
243 native void rsnObjDestroy(int con, int id);
244 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800245 // There is a race condition here. The calling code may be run
246 // by the gc while teardown is occuring. This protects againts
247 // deleting dead objects.
248 if (mContext != 0) {
249 rsnObjDestroy(mContext, id);
250 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700251 }
Jason Samsfe08d992009-05-27 14:45:32 -0700252
Jason Sams2e1872f2010-08-17 16:25:41 -0700253 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
254 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800255 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700256 return rsnElementCreate(mContext, type, kind, norm, vecSize);
257 }
Jason Sams70d4e502010-09-02 17:35:23 -0700258 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
259 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800260 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700261 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700262 }
263 native void rsnElementGetNativeData(int con, int id, int[] elementData);
264 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800265 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700266 rsnElementGetNativeData(mContext, id, elementData);
267 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700268 native void rsnElementGetSubElements(int con, int id,
269 int[] IDs, String[] names, int[] arraySizes);
270 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800271 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700272 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700273 }
Jason Sams768bc022009-09-21 19:41:04 -0700274
Jason Samsb109cc72013-01-07 18:20:12 -0800275 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
276 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800277 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800278 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700279 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700280 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
281 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800282 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700283 rsnTypeGetNativeData(mContext, id, typeData);
284 }
Jason Sams768bc022009-09-21 19:41:04 -0700285
Jason Sams857d0c72011-11-23 15:02:15 -0800286 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
287 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800288 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800289 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700290 }
Jason Sams5476b452010-12-08 16:14:36 -0800291 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
292 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800293 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800294 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700295 }
Tim Murraya3145512012-12-04 17:59:29 -0800296
297 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
298 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
299 validate();
300 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
301 }
302
303
Jason Sams5476b452010-12-08 16:14:36 -0800304 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
305 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800306 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800307 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800308 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700309 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
310 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800311 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700312 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
313 }
Jason Sams5476b452010-12-08 16:14:36 -0800314 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
315 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800316 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800317 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
318 }
319
Jason Sams4ef66502010-12-10 16:03:15 -0800320 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
321 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800322 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800323 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
324 }
325
326
Jason Sams5476b452010-12-08 16:14:36 -0800327 native void rsnAllocationSyncAll(int con, int alloc, int src);
328 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800329 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800330 rsnAllocationSyncAll(mContext, alloc, src);
331 }
Jason Sams72226e02013-02-22 12:45:54 -0800332 native Surface rsnAllocationGetSurface(int con, int alloc);
333 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800334 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800335 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700336 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700337 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
338 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800339 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700340 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800341 }
342 native void rsnAllocationIoSend(int con, int alloc);
343 synchronized void nAllocationIoSend(int alloc) {
344 validate();
345 rsnAllocationIoSend(mContext, alloc);
346 }
347 native void rsnAllocationIoReceive(int con, int alloc);
348 synchronized void nAllocationIoReceive(int alloc) {
349 validate();
350 rsnAllocationIoReceive(mContext, alloc);
351 }
352
Jason Sams615e7ce2012-01-13 14:01:20 -0800353
Jason Samsf7086092011-01-12 13:28:37 -0800354 native void rsnAllocationGenerateMipmaps(int con, int alloc);
355 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800357 rsnAllocationGenerateMipmaps(mContext, alloc);
358 }
Jason Sams4ef66502010-12-10 16:03:15 -0800359 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
360 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800361 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800362 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700363 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700364
Jason Sams49a05d72010-12-29 14:31:29 -0800365
366 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
367 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800368 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800369 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700370 }
Jason Sams49a05d72010-12-29 14:31:29 -0800371 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
372 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800373 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800374 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
375 }
376 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
377 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800378 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800379 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
380 }
381 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
382 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800383 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800384 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700385 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700386
Jason Sams49a05d72010-12-29 14:31:29 -0800387 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
388 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800389 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800390 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700391 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700392
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700393 native void rsnAllocationData2D(int con,
394 int dstAlloc, int dstXoff, int dstYoff,
395 int dstMip, int dstFace,
396 int width, int height,
397 int srcAlloc, int srcXoff, int srcYoff,
398 int srcMip, int srcFace);
399 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
400 int dstMip, int dstFace,
401 int width, int height,
402 int srcAlloc, int srcXoff, int srcYoff,
403 int srcMip, int srcFace) {
404 validate();
405 rsnAllocationData2D(mContext,
406 dstAlloc, dstXoff, dstYoff,
407 dstMip, dstFace,
408 width, height,
409 srcAlloc, srcXoff, srcYoff,
410 srcMip, srcFace);
411 }
412
Jason Samsfa445b92011-01-07 17:00:07 -0800413 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
414 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800415 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800416 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
417 }
418 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
419 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800420 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800421 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
422 }
Jason Sams49a05d72010-12-29 14:31:29 -0800423 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
424 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800425 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800426 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700427 }
Jason Sams49a05d72010-12-29 14:31:29 -0800428 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
429 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800430 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800431 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700432 }
Jason Samsfa445b92011-01-07 17:00:07 -0800433 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
434 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800435 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800436 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
437 }
Jason Sams49a05d72010-12-29 14:31:29 -0800438
Jason Samsb05d6892013-04-09 15:59:24 -0700439 native void rsnAllocationData3D(int con,
440 int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
441 int dstMip,
442 int width, int height, int depth,
443 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
444 int srcMip);
445 synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
446 int dstMip,
447 int width, int height, int depth,
448 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
449 int srcMip) {
450 validate();
451 rsnAllocationData3D(mContext,
452 dstAlloc, dstXoff, dstYoff, dstZoff,
453 dstMip, width, height, depth,
454 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
455 }
456
457 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);
458 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
459 validate();
460 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
461 }
462 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);
463 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
464 validate();
465 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
466 }
467 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);
468 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
469 validate();
470 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
471 }
472 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);
473 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
474 validate();
475 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
476 }
477
478
Jason Samsfa445b92011-01-07 17:00:07 -0800479 native void rsnAllocationRead(int con, int id, byte[] d);
480 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800481 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800482 rsnAllocationRead(mContext, id, d);
483 }
484 native void rsnAllocationRead(int con, int id, short[] d);
485 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800486 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800487 rsnAllocationRead(mContext, id, d);
488 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700489 native void rsnAllocationRead(int con, int id, int[] d);
490 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800491 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 rsnAllocationRead(mContext, id, d);
493 }
494 native void rsnAllocationRead(int con, int id, float[] d);
495 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800496 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700497 rsnAllocationRead(mContext, id, d);
498 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700499 native int rsnAllocationGetType(int con, int id);
500 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800501 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700502 return rsnAllocationGetType(mContext, id);
503 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700504
Jason Sams5edc6082010-10-05 13:32:49 -0700505 native void rsnAllocationResize1D(int con, int id, int dimX);
506 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800507 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700508 rsnAllocationResize1D(mContext, id, dimX);
509 }
Jason Sams5edc6082010-10-05 13:32:49 -0700510
Jason Sams2e1872f2010-08-17 16:25:41 -0700511 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
512 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800513 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700514 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
515 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800516 native int rsnFileA3DCreateFromFile(int con, String path);
517 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800518 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800519 return rsnFileA3DCreateFromFile(mContext, path);
520 }
521 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
522 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800523 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800524 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
525 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700526 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
527 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800528 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700529 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
530 }
531 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
532 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800533 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700534 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
535 }
536 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
537 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800538 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700539 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
540 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700541
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800542 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
543 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800544 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700545 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
546 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800547 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
548 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800549 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800550 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
551 }
552 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
553 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800554 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800555 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
556 }
Jason Sams22534172009-08-04 16:58:20 -0700557
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700558
Jason Sams2e1872f2010-08-17 16:25:41 -0700559 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
560 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800561 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700562 rsnScriptBindAllocation(mContext, script, alloc, slot);
563 }
564 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
565 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800566 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700567 rsnScriptSetTimeZone(mContext, script, timeZone);
568 }
569 native void rsnScriptInvoke(int con, int id, int slot);
570 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800571 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700572 rsnScriptInvoke(mContext, id, slot);
573 }
Jason Sams6e494d32011-04-27 16:33:11 -0700574 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
575 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800576 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
577 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800578 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
579 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700580 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
581 validate();
582 if (params == null) {
583 rsnScriptForEach(mContext, id, slot, ain, aout);
584 } else {
585 rsnScriptForEach(mContext, id, slot, ain, aout, params);
586 }
587 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800588
589 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
590 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
591 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800592 if (params == null) {
593 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
594 } else {
595 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
596 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800597 }
598
Jason Sams2e1872f2010-08-17 16:25:41 -0700599 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
600 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800601 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700602 rsnScriptInvokeV(mContext, id, slot, params);
603 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700604
Jason Sams2e1872f2010-08-17 16:25:41 -0700605 native void rsnScriptSetVarI(int con, int id, int slot, int val);
606 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800607 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700608 rsnScriptSetVarI(mContext, id, slot, val);
609 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700610 native int rsnScriptGetVarI(int con, int id, int slot);
611 synchronized int nScriptGetVarI(int id, int slot) {
612 validate();
613 return rsnScriptGetVarI(mContext, id, slot);
614 }
615
Stephen Hines031ec58c2010-10-11 10:54:21 -0700616 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
617 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800618 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700619 rsnScriptSetVarJ(mContext, id, slot, val);
620 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700621 native long rsnScriptGetVarJ(int con, int id, int slot);
622 synchronized long nScriptGetVarJ(int id, int slot) {
623 validate();
624 return rsnScriptGetVarJ(mContext, id, slot);
625 }
626
Jason Sams2e1872f2010-08-17 16:25:41 -0700627 native void rsnScriptSetVarF(int con, int id, int slot, float val);
628 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800629 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700630 rsnScriptSetVarF(mContext, id, slot, val);
631 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700632 native float rsnScriptGetVarF(int con, int id, int slot);
633 synchronized float nScriptGetVarF(int id, int slot) {
634 validate();
635 return rsnScriptGetVarF(mContext, id, slot);
636 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700637 native void rsnScriptSetVarD(int con, int id, int slot, double val);
638 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800639 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700640 rsnScriptSetVarD(mContext, id, slot, val);
641 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700642 native double rsnScriptGetVarD(int con, int id, int slot);
643 synchronized double nScriptGetVarD(int id, int slot) {
644 validate();
645 return rsnScriptGetVarD(mContext, id, slot);
646 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700647 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
648 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800649 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700650 rsnScriptSetVarV(mContext, id, slot, val);
651 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700652 native void rsnScriptGetVarV(int con, int id, int slot, byte[] val);
653 synchronized void nScriptGetVarV(int id, int slot, byte[] val) {
654 validate();
655 rsnScriptGetVarV(mContext, id, slot, val);
656 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700657 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
658 int e, int[] dims);
659 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
660 int e, int[] dims) {
661 validate();
662 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
663 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800664 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
665 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800666 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800667 rsnScriptSetVarObj(mContext, id, slot, val);
668 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700669
Jason Samse4a06c52011-03-16 16:29:28 -0700670 native int rsnScriptCCreate(int con, String resName, String cacheDir,
671 byte[] script, int length);
672 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800673 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700674 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700675 }
Jason Samsebfb4362009-09-23 13:57:02 -0700676
Jason Sams6ab97682012-08-10 12:09:43 -0700677 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
678 synchronized int nScriptIntrinsicCreate(int id, int eid) {
679 validate();
680 return rsnScriptIntrinsicCreate(mContext, id, eid);
681 }
682
Jason Sams08a81582012-09-18 12:32:10 -0700683 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
684 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
685 validate();
686 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
687 }
688
689 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
690 synchronized int nScriptFieldIDCreate(int sid, int slot) {
691 validate();
692 return rsnScriptFieldIDCreate(mContext, sid, slot);
693 }
694
695 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
696 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
697 validate();
698 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
699 }
700
701 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
702 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
703 validate();
704 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
705 }
706
707 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
708 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
709 validate();
710 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
711 }
712
713 native void rsnScriptGroupExecute(int con, int group);
714 synchronized void nScriptGroupExecute(int group) {
715 validate();
716 rsnScriptGroupExecute(mContext, group);
717 }
718
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700719 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
720 int wrapS, int wrapT, int wrapR, float aniso);
721 synchronized int nSamplerCreate(int magFilter, int minFilter,
722 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800723 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700724 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700725 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800726
Jason Sams331bf9b2011-04-06 11:23:54 -0700727 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
728 boolean depthMask, boolean dither,
729 int srcMode, int dstMode, int depthFunc);
730 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
731 boolean depthMask, boolean dither,
732 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800733 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700734 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
735 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700736 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700737
Jason Sams94aaed32011-09-23 14:18:53 -0700738 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
739 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800740 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700741 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700742 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700743
Jason Sams2e1872f2010-08-17 16:25:41 -0700744 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
745 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800746 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700747 rsnProgramBindConstants(mContext, pv, slot, mID);
748 }
749 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
750 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800751 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700752 rsnProgramBindTexture(mContext, vpf, slot, a);
753 }
754 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
755 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800756 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700757 rsnProgramBindSampler(mContext, vpf, slot, s);
758 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800759 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
760 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800761 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800762 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700763 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800764 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
765 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800766 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800767 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700768 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700769
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700770 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
771 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800772 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700773 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800774 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700775 native int rsnMeshGetVertexBufferCount(int con, int id);
776 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800777 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700778 return rsnMeshGetVertexBufferCount(mContext, id);
779 }
780 native int rsnMeshGetIndexCount(int con, int id);
781 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800782 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700783 return rsnMeshGetIndexCount(mContext, id);
784 }
785 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
786 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800787 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700788 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
789 }
790 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
791 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800792 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700793 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
794 }
795
Jason Samsf15ed012011-10-31 13:23:43 -0700796 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
797 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
798 validate();
799 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
800 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700801
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800802 int mDev;
803 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700804 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800805 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700806
Jason Sams8cb39de2010-06-01 15:47:01 -0700807 Element mElement_U8;
808 Element mElement_I8;
809 Element mElement_U16;
810 Element mElement_I16;
811 Element mElement_U32;
812 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700813 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700814 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700815 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700816 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700817 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700818
Jason Sams8cb39de2010-06-01 15:47:01 -0700819 Element mElement_ELEMENT;
820 Element mElement_TYPE;
821 Element mElement_ALLOCATION;
822 Element mElement_SAMPLER;
823 Element mElement_SCRIPT;
824 Element mElement_MESH;
825 Element mElement_PROGRAM_FRAGMENT;
826 Element mElement_PROGRAM_VERTEX;
827 Element mElement_PROGRAM_RASTER;
828 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700829 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700830
Jason Sams3c0dfba2009-09-27 17:50:38 -0700831 Element mElement_A_8;
832 Element mElement_RGB_565;
833 Element mElement_RGB_888;
834 Element mElement_RGBA_5551;
835 Element mElement_RGBA_4444;
836 Element mElement_RGBA_8888;
837
Jason Sams8cb39de2010-06-01 15:47:01 -0700838 Element mElement_FLOAT_2;
839 Element mElement_FLOAT_3;
840 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700841
842 Element mElement_DOUBLE_2;
843 Element mElement_DOUBLE_3;
844 Element mElement_DOUBLE_4;
845
846 Element mElement_UCHAR_2;
847 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700848 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800849
Stephen Hines836c4a52011-06-01 14:38:10 -0700850 Element mElement_CHAR_2;
851 Element mElement_CHAR_3;
852 Element mElement_CHAR_4;
853
854 Element mElement_USHORT_2;
855 Element mElement_USHORT_3;
856 Element mElement_USHORT_4;
857
858 Element mElement_SHORT_2;
859 Element mElement_SHORT_3;
860 Element mElement_SHORT_4;
861
862 Element mElement_UINT_2;
863 Element mElement_UINT_3;
864 Element mElement_UINT_4;
865
866 Element mElement_INT_2;
867 Element mElement_INT_3;
868 Element mElement_INT_4;
869
870 Element mElement_ULONG_2;
871 Element mElement_ULONG_3;
872 Element mElement_ULONG_4;
873
874 Element mElement_LONG_2;
875 Element mElement_LONG_3;
876 Element mElement_LONG_4;
877
Jason Sams1d45c472010-08-25 14:31:48 -0700878 Element mElement_MATRIX_4X4;
879 Element mElement_MATRIX_3X3;
880 Element mElement_MATRIX_2X2;
881
Jason Sams4d339932010-05-11 14:03:58 -0700882 Sampler mSampler_CLAMP_NEAREST;
883 Sampler mSampler_CLAMP_LINEAR;
884 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
885 Sampler mSampler_WRAP_NEAREST;
886 Sampler mSampler_WRAP_LINEAR;
887 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800888 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
889 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
890 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700891
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700892 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
893 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700894 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
895 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700896
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700897 ProgramRaster mProgramRaster_CULL_BACK;
898 ProgramRaster mProgramRaster_CULL_FRONT;
899 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700900
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700901 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700902 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700903
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700904 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700905 * The base class from which an application should derive in order
906 * to receive RS messages from scripts. When a script calls {@code
907 * rsSendToClient}, the data fields will be filled, and the run
908 * method will be called on a separate thread. This will occur
909 * some time after {@code rsSendToClient} completes in the script,
910 * as {@code rsSendToClient} is asynchronous. Message handlers are
911 * not guaranteed to have completed when {@link
912 * android.renderscript.RenderScript#finish} returns.
Jason Sams27676fe2010-11-10 17:00:59 -0800913 *
914 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800915 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700916 protected int[] mData;
917 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800918 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700919 public void run() {
920 }
921 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700922 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700923 * If an application is expecting messages, it should set this
924 * field to an instance of {@link RSMessageHandler}. This
925 * instance will receive all the user messages sent from {@code
926 * sendToClient} by scripts from this context.
Jason Sams27676fe2010-11-10 17:00:59 -0800927 *
928 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800929 RSMessageHandler mMessageCallback = null;
930
931 public void setMessageHandler(RSMessageHandler msg) {
932 mMessageCallback = msg;
933 }
934 public RSMessageHandler getMessageHandler() {
935 return mMessageCallback;
936 }
Jason Sams516c3192009-10-06 13:58:47 -0700937
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700938 /**
Jason Sams02d56d92013-04-12 16:40:50 -0700939 * Place a message into the message queue to be sent back to the message
940 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -0800941 *
942 * @param id
943 * @param data
944 */
945 public void sendMessage(int id, int[] data) {
946 nContextSendMessage(id, data);
947 }
948
949 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700950 * The runtime error handler base class. An application should derive from this class
951 * if it wishes to install an error handler. When errors occur at runtime,
952 * the fields in this class will be filled, and the run method will be called.
Jason Sams27676fe2010-11-10 17:00:59 -0800953 *
954 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800955 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800956 protected String mErrorMessage;
957 protected int mErrorNum;
958 public void run() {
959 }
960 }
Jason Sams27676fe2010-11-10 17:00:59 -0800961
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700962 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800963 * Application Error handler. All runtime errors will be dispatched to the
964 * instance of RSAsyncError set here. If this field is null a
Tim Murrayc11e25c2013-04-09 11:01:01 -0700965 * {@link RSRuntimeException} will instead be thrown with details about the error.
Jason Sams27676fe2010-11-10 17:00:59 -0800966 * This will cause program termaination.
967 *
968 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800969 RSErrorHandler mErrorCallback = null;
970
971 public void setErrorHandler(RSErrorHandler msg) {
972 mErrorCallback = msg;
973 }
974 public RSErrorHandler getErrorHandler() {
975 return mErrorCallback;
976 }
Jason Sams1c415172010-11-08 17:06:46 -0800977
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700978 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700979 * RenderScript worker thread priority enumeration. The default value is
980 * NORMAL. Applications wishing to do background processing should set
981 * their priority to LOW to avoid starving forground processes.
Jason Sams27676fe2010-11-10 17:00:59 -0800982 */
Jason Sams7d787b42009-11-15 12:14:26 -0800983 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700984 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
985 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800986
987 int mID;
988 Priority(int id) {
989 mID = id;
990 }
991 }
992
Jason Sams771bebb2009-12-07 12:40:12 -0800993 void validate() {
994 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700995 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800996 }
997 }
998
Jason Sams27676fe2010-11-10 17:00:59 -0800999
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001000 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001001 * Change the priority of the worker threads for this context.
1002 *
1003 * @param p New priority to be set.
1004 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001005 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -08001006 validate();
Jason Sams7d787b42009-11-15 12:14:26 -08001007 nContextSetPriority(p.mID);
1008 }
1009
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001010 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -07001011 RenderScript mRS;
1012 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001013 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001014
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001015 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1016 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1017 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1018 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1019 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001020 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001021
Stephen Hines42028a82013-04-17 19:22:01 -07001022 static final int RS_ERROR_FATAL_DEBUG = 0x0800;
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001023 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001024
Jason Sams516c3192009-10-06 13:58:47 -07001025 MessageThread(RenderScript rs) {
1026 super("RSMessageThread");
1027 mRS = rs;
1028
1029 }
1030
1031 public void run() {
1032 // This function is a temporary solution. The final solution will
1033 // used typed allocations where the message id is the type indicator.
1034 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001035 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001036 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001037 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001038 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001039 int size = mAuxData[1];
1040 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001041
1042 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1043 if ((size>>2) >= rbuf.length) {
1044 rbuf = new int[(size + 3) >> 2];
1045 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001046 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1047 RS_MESSAGE_TO_CLIENT_USER) {
Tim Murrayc11e25c2013-04-09 11:01:01 -07001048 throw new RSDriverException("Error processing message from RenderScript.");
Jason Samsedbfabd2011-05-17 15:01:29 -07001049 }
Jason Sams1c415172010-11-08 17:06:46 -08001050
1051 if(mRS.mMessageCallback != null) {
1052 mRS.mMessageCallback.mData = rbuf;
1053 mRS.mMessageCallback.mID = subID;
1054 mRS.mMessageCallback.mLength = size;
1055 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001056 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001057 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001058 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001059 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001060 }
Jason Sams1c415172010-11-08 17:06:46 -08001061
1062 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1063 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1064
Stephen Hines42028a82013-04-17 19:22:01 -07001065 // Throw RSRuntimeException under the following conditions:
1066 //
1067 // 1) It is an unknown fatal error.
1068 // 2) It is a debug fatal error, and we are not in a
1069 // debug context.
1070 // 3) It is a debug fatal error, and we do not have an
1071 // error callback.
1072 if (subID >= RS_ERROR_FATAL_UNKNOWN ||
1073 (subID >= RS_ERROR_FATAL_DEBUG &&
1074 (mRS.mContextType != ContextType.DEBUG ||
1075 mRS.mErrorCallback == null))) {
Jason Samsadd9d962010-11-22 16:20:16 -08001076 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1077 }
1078
Jason Sams1c415172010-11-08 17:06:46 -08001079 if(mRS.mErrorCallback != null) {
1080 mRS.mErrorCallback.mErrorMessage = e;
1081 mRS.mErrorCallback.mErrorNum = subID;
1082 mRS.mErrorCallback.run();
1083 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001084 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001085 // Do not throw here. In these cases, we do not have
1086 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001087 }
1088 continue;
1089 }
1090
Jason Sams739c8262013-04-11 18:07:52 -07001091 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1092 Allocation.sendBufferNotification(subID);
1093 continue;
1094 }
1095
Jason Sams1c415172010-11-08 17:06:46 -08001096 // 2: teardown.
1097 // But we want to avoid starving other threads during
1098 // teardown by yielding until the next line in the destructor
1099 // can execute to set mRun = false
1100 try {
1101 sleep(1, 0);
1102 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001103 }
Jason Sams516c3192009-10-06 13:58:47 -07001104 }
Tim Murrayda67deb2013-05-09 12:02:50 -07001105 //Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001106 }
1107 }
1108
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001109 RenderScript(Context ctx) {
Stephen Hines42028a82013-04-17 19:22:01 -07001110 mContextType = ContextType.NORMAL;
Jason Sams1a4e1f32012-02-24 17:51:24 -08001111 if (ctx != null) {
1112 mApplicationContext = ctx.getApplicationContext();
1113 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001114 }
1115
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001116 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001117 * Gets the application context associated with the RenderScript context.
1118 *
1119 * @return The application context.
1120 */
1121 public final Context getApplicationContext() {
1122 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001123 }
1124
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001125 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001126 * @hide
1127 */
1128 public static RenderScript create(Context ctx, int sdkVersion) {
1129 return create(ctx, sdkVersion, ContextType.NORMAL);
1130 }
1131
1132 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001133 * Create a RenderScript context.
Jason Sams27676fe2010-11-10 17:00:59 -08001134 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001135 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001136 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001137 * @return RenderScript
1138 */
Jason Samsadd26dc2013-02-22 18:43:45 -08001139 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001140 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001141
1142 rs.mDev = rs.nDeviceCreate();
Jason Samsadd26dc2013-02-22 18:43:45 -08001143 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
Stephen Hines42028a82013-04-17 19:22:01 -07001144 rs.mContextType = ct;
Jason Sams26985362011-05-03 15:01:58 -07001145 if (rs.mContext == 0) {
1146 throw new RSDriverException("Failed to create RS context.");
1147 }
Jason Sams704ff642010-02-09 16:05:07 -08001148 rs.mMessageThread = new MessageThread(rs);
1149 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001150 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001151 }
1152
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001153 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001154 * Create a RenderScript context.
Jason Sams1a4e1f32012-02-24 17:51:24 -08001155 *
1156 * @param ctx The context.
1157 * @return RenderScript
1158 */
1159 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001160 return create(ctx, ContextType.NORMAL);
1161 }
1162
1163 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001164 * Create a RenderScript context.
Jason Samsadd26dc2013-02-22 18:43:45 -08001165 *
Jason Samsadd26dc2013-02-22 18:43:45 -08001166 *
1167 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001168 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001169 * @return RenderScript
1170 */
1171 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001172 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Samsadd26dc2013-02-22 18:43:45 -08001173 return create(ctx, v, ct);
Jason Sams1a4e1f32012-02-24 17:51:24 -08001174 }
1175
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001176 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001177 * Print the currently available debugging information about the state of
1178 * the RS context to the log.
1179 *
Jason Sams27676fe2010-11-10 17:00:59 -08001180 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001181 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001182 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001183 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001184 }
1185
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001186 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001187 * Wait for any pending asynchronous opeations (such as copies to a RS
1188 * allocation or RS script executions) to complete.
Jason Sams27676fe2010-11-10 17:00:59 -08001189 *
1190 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001191 public void finish() {
1192 nContextFinish();
1193 }
1194
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001195 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001196 * Destroys this RenderScript context. Once this function is called,
1197 * using this context or any objects belonging to this context is
1198 * illegal.
Jason Sams27676fe2010-11-10 17:00:59 -08001199 *
1200 */
Jason Samsf5b45962009-08-25 14:49:07 -07001201 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001202 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001203 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001204 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001205 try {
1206 mMessageThread.join();
1207 } catch(InterruptedException e) {
1208 }
Jason Sams516c3192009-10-06 13:58:47 -07001209
Jason Sams2e1872f2010-08-17 16:25:41 -07001210 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001211 mContext = 0;
1212
1213 nDeviceDestroy(mDev);
1214 mDev = 0;
1215 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001216
Jason Samsa9e7a052009-09-25 14:51:22 -07001217 boolean isAlive() {
1218 return mContext != 0;
1219 }
1220
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001221 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001222 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001223 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001224 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001225 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001226 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001227}