blob: 6f614c3767e9c3904fd335c3ab7bbd38b51a3d62 [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/**
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080036 * Renderscript base master class. An instance of this class creates native
Jason Sams27676fe2010-11-10 17:00:59 -080037 * worker threads for processing commands from this object. This base class
38 * does not provide any extended capabilities beyond simple data processing.
39 * For extended capabilities use derived classes such as RenderScriptGL.
40 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080041 * <div class="special reference">
42 * <h3>Developer Guides</h3>
43 * <p>For more information about creating an application that uses Renderscript, read the
Scott Mainb47fa162013-02-05 14:23:13 -080044 * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080045 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070046 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070047public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080048 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d72010-12-06 15:59:59 -080049 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070050 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070051 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070052
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080053 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080055 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070056 * We use a class initializer to allow the native code to cache some
57 * field offsets.
58 */
Romain Guy650a3eb2009-08-31 14:06:43 -070059 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -080060 static boolean sInitialized;
61 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070062
Jason Samsdba3ba52009-07-30 14:56:12 -070063
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064 static {
65 sInitialized = false;
66 try {
Jason Samse29d4712009-07-23 15:19:03 -070067 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070069 sInitialized = true;
70 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080071 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
72 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070073 }
74 }
75
Jason Sams2e1872f2010-08-17 16:25:41 -070076 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070077 native int nDeviceCreate();
78 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070079 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070080 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080081 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070082 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070083 native void nContextInitToClient(int con);
84 native void nContextDeinitToClient(int con);
Jason Sams3eaa338e2009-06-10 15:04:38 -070085
Stephen Hines7d25a822013-04-09 23:51:56 -070086 static File mCacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -080087
88 /**
89 * Sets the directory to use as a persistent storage for the
90 * renderscript object file cache.
91 *
92 * @hide
93 * @param cacheDir A directory the current process can write to
94 */
Jason Samsa6f338c2012-02-24 16:22:16 -080095 public static void setupDiskCache(File cacheDir) {
Stephen Hines7d25a822013-04-09 23:51:56 -070096 // Defer creation of cache path to nScriptCCreate().
97 mCacheDir = cacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -080098 }
99
Jason Sams02d56d92013-04-12 16:40:50 -0700100 /**
101 * ContextType specifies the specific type of context to be created.
102 *
103 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800104 public enum ContextType {
Jason Sams02d56d92013-04-12 16:40:50 -0700105 /**
106 * NORMAL context, this is the default and what shipping apps should
107 * use.
108 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800109 NORMAL (0),
Jason Sams02d56d92013-04-12 16:40:50 -0700110
111 /**
112 * DEBUG context, perform extra runtime checks to validate the
113 * kernels and APIs are being used as intended. Get and SetElementAt
114 * will be bounds checked in this mode.
115 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800116 DEBUG (1),
Jason Sams02d56d92013-04-12 16:40:50 -0700117
118 /**
119 * PROFILE context, Intended to be used once the first time an
120 * application is run on a new device. This mode allows the runtime to
121 * do additional testing and performance tuning.
122 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800123 PROFILE (2);
124
125 int mID;
126 ContextType(int id) {
127 mID = id;
128 }
129 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800130
Jason Sams2e1872f2010-08-17 16:25:41 -0700131 // Methods below are wrapped to protect the non-threadsafe
132 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -0700133 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700134 int colorMin, int colorPref,
135 int alphaMin, int alphaPref,
136 int depthMin, int depthPref,
137 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700138 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -0700139 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700140 int colorMin, int colorPref,
141 int alphaMin, int alphaPref,
142 int depthMin, int depthPref,
143 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700144 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700145 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700146 alphaMin, alphaPref, depthMin, depthPref,
147 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700148 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700149 }
Jason Samsadd26dc2013-02-22 18:43:45 -0800150 native int rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
151 synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
152 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700153 }
154 native void rsnContextDestroy(int con);
155 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800156 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700157 rsnContextDestroy(mContext);
158 }
159 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
160 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800161 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700162 rsnContextSetSurface(mContext, w, h, sur);
163 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700164 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
165 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
166 validate();
167 rsnContextSetSurfaceTexture(mContext, w, h, sur);
168 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700169 native void rsnContextSetPriority(int con, int p);
170 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800171 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700172 rsnContextSetPriority(mContext, p);
173 }
174 native void rsnContextDump(int con, int bits);
175 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800176 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700177 rsnContextDump(mContext, bits);
178 }
179 native void rsnContextFinish(int con);
180 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800181 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700182 rsnContextFinish(mContext);
183 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700184
Jason Sams455d6442013-02-05 19:20:18 -0800185 native void rsnContextSendMessage(int con, int id, int[] data);
186 synchronized void nContextSendMessage(int id, int[] data) {
187 validate();
188 rsnContextSendMessage(mContext, id, data);
189 }
190
Jason Sams2e1872f2010-08-17 16:25:41 -0700191 native void rsnContextBindRootScript(int con, int script);
192 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700194 rsnContextBindRootScript(mContext, script);
195 }
196 native void rsnContextBindSampler(int con, int sampler, int slot);
197 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800198 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 rsnContextBindSampler(mContext, sampler, slot);
200 }
201 native void rsnContextBindProgramStore(int con, int pfs);
202 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 rsnContextBindProgramStore(mContext, pfs);
205 }
206 native void rsnContextBindProgramFragment(int con, int pf);
207 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700209 rsnContextBindProgramFragment(mContext, pf);
210 }
211 native void rsnContextBindProgramVertex(int con, int pv);
212 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800213 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 rsnContextBindProgramVertex(mContext, pv);
215 }
216 native void rsnContextBindProgramRaster(int con, int pr);
217 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800218 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700219 rsnContextBindProgramRaster(mContext, pr);
220 }
221 native void rsnContextPause(int con);
222 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800223 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 rsnContextPause(mContext);
225 }
226 native void rsnContextResume(int con);
227 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800228 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700229 rsnContextResume(mContext);
230 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700231
Jason Sams2e1872f2010-08-17 16:25:41 -0700232 native void rsnAssignName(int con, int obj, byte[] name);
233 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800234 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 rsnAssignName(mContext, obj, name);
236 }
237 native String rsnGetName(int con, int obj);
238 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700240 return rsnGetName(mContext, obj);
241 }
242 native void rsnObjDestroy(int con, int id);
243 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800244 // There is a race condition here. The calling code may be run
245 // by the gc while teardown is occuring. This protects againts
246 // deleting dead objects.
247 if (mContext != 0) {
248 rsnObjDestroy(mContext, id);
249 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700250 }
Jason Samsfe08d992009-05-27 14:45:32 -0700251
Jason Sams2e1872f2010-08-17 16:25:41 -0700252 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
253 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800254 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700255 return rsnElementCreate(mContext, type, kind, norm, vecSize);
256 }
Jason Sams70d4e502010-09-02 17:35:23 -0700257 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
258 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800259 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700260 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700261 }
262 native void rsnElementGetNativeData(int con, int id, int[] elementData);
263 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800264 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700265 rsnElementGetNativeData(mContext, id, elementData);
266 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700267 native void rsnElementGetSubElements(int con, int id,
268 int[] IDs, String[] names, int[] arraySizes);
269 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800270 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700271 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700272 }
Jason Sams768bc022009-09-21 19:41:04 -0700273
Jason Samsb109cc72013-01-07 18:20:12 -0800274 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
275 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800276 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800277 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700278 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700279 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
280 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800281 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700282 rsnTypeGetNativeData(mContext, id, typeData);
283 }
Jason Sams768bc022009-09-21 19:41:04 -0700284
Jason Sams857d0c72011-11-23 15:02:15 -0800285 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
286 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800287 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800288 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700289 }
Jason Sams5476b452010-12-08 16:14:36 -0800290 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
291 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800292 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800293 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700294 }
Tim Murraya3145512012-12-04 17:59:29 -0800295
296 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
297 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
298 validate();
299 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
300 }
301
302
Jason Sams5476b452010-12-08 16:14:36 -0800303 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
304 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800305 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800306 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800307 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700308 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
309 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800310 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700311 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
312 }
Jason Sams5476b452010-12-08 16:14:36 -0800313 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
314 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800315 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800316 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
317 }
318
Jason Sams4ef66502010-12-10 16:03:15 -0800319 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
320 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800321 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800322 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
323 }
324
325
Jason Sams5476b452010-12-08 16:14:36 -0800326 native void rsnAllocationSyncAll(int con, int alloc, int src);
327 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800328 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800329 rsnAllocationSyncAll(mContext, alloc, src);
330 }
Jason Sams72226e02013-02-22 12:45:54 -0800331 native Surface rsnAllocationGetSurface(int con, int alloc);
332 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800333 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800334 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700335 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700336 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
337 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800338 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700339 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800340 }
341 native void rsnAllocationIoSend(int con, int alloc);
342 synchronized void nAllocationIoSend(int alloc) {
343 validate();
344 rsnAllocationIoSend(mContext, alloc);
345 }
346 native void rsnAllocationIoReceive(int con, int alloc);
347 synchronized void nAllocationIoReceive(int alloc) {
348 validate();
349 rsnAllocationIoReceive(mContext, alloc);
350 }
351
Jason Sams615e7ce2012-01-13 14:01:20 -0800352
Jason Samsf7086092011-01-12 13:28:37 -0800353 native void rsnAllocationGenerateMipmaps(int con, int alloc);
354 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800355 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800356 rsnAllocationGenerateMipmaps(mContext, alloc);
357 }
Jason Sams4ef66502010-12-10 16:03:15 -0800358 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
359 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800360 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800361 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700362 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700363
Jason Sams49a05d72010-12-29 14:31:29 -0800364
365 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
366 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800367 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800368 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700369 }
Jason Sams49a05d72010-12-29 14:31:29 -0800370 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
371 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800372 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800373 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
374 }
375 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
376 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800377 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800378 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
379 }
380 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
381 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800382 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800383 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700384 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700385
Jason Sams49a05d72010-12-29 14:31:29 -0800386 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
387 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800388 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800389 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700390 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700391
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700392 native void rsnAllocationData2D(int con,
393 int dstAlloc, int dstXoff, int dstYoff,
394 int dstMip, int dstFace,
395 int width, int height,
396 int srcAlloc, int srcXoff, int srcYoff,
397 int srcMip, int srcFace);
398 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
399 int dstMip, int dstFace,
400 int width, int height,
401 int srcAlloc, int srcXoff, int srcYoff,
402 int srcMip, int srcFace) {
403 validate();
404 rsnAllocationData2D(mContext,
405 dstAlloc, dstXoff, dstYoff,
406 dstMip, dstFace,
407 width, height,
408 srcAlloc, srcXoff, srcYoff,
409 srcMip, srcFace);
410 }
411
Jason Samsfa445b92011-01-07 17:00:07 -0800412 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
413 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 -0800414 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800415 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
416 }
417 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
418 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 -0800419 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800420 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
421 }
Jason Sams49a05d72010-12-29 14:31:29 -0800422 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
423 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 -0800424 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800425 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700426 }
Jason Sams49a05d72010-12-29 14:31:29 -0800427 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
428 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 -0800429 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800430 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700431 }
Jason Samsfa445b92011-01-07 17:00:07 -0800432 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
433 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800434 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800435 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
436 }
Jason Sams49a05d72010-12-29 14:31:29 -0800437
Jason Samsb05d6892013-04-09 15:59:24 -0700438 native void rsnAllocationData3D(int con,
439 int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
440 int dstMip,
441 int width, int height, int depth,
442 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
443 int srcMip);
444 synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
445 int dstMip,
446 int width, int height, int depth,
447 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
448 int srcMip) {
449 validate();
450 rsnAllocationData3D(mContext,
451 dstAlloc, dstXoff, dstYoff, dstZoff,
452 dstMip, width, height, depth,
453 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
454 }
455
456 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);
457 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
458 validate();
459 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
460 }
461 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);
462 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
463 validate();
464 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
465 }
466 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);
467 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
468 validate();
469 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
470 }
471 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);
472 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
473 validate();
474 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
475 }
476
477
Jason Samsfa445b92011-01-07 17:00:07 -0800478 native void rsnAllocationRead(int con, int id, byte[] d);
479 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800480 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800481 rsnAllocationRead(mContext, id, d);
482 }
483 native void rsnAllocationRead(int con, int id, short[] d);
484 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800486 rsnAllocationRead(mContext, id, d);
487 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700488 native void rsnAllocationRead(int con, int id, int[] d);
489 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700491 rsnAllocationRead(mContext, id, d);
492 }
493 native void rsnAllocationRead(int con, int id, float[] d);
494 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800495 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700496 rsnAllocationRead(mContext, id, d);
497 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 native int rsnAllocationGetType(int con, int id);
499 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800500 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700501 return rsnAllocationGetType(mContext, id);
502 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700503
Jason Sams5edc6082010-10-05 13:32:49 -0700504 native void rsnAllocationResize1D(int con, int id, int dimX);
505 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800506 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700507 rsnAllocationResize1D(mContext, id, dimX);
508 }
Jason Sams5edc6082010-10-05 13:32:49 -0700509
Jason Sams2e1872f2010-08-17 16:25:41 -0700510 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
511 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800512 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700513 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
514 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800515 native int rsnFileA3DCreateFromFile(int con, String path);
516 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800517 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800518 return rsnFileA3DCreateFromFile(mContext, path);
519 }
520 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
521 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800522 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800523 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
524 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700525 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
526 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800527 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700528 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
529 }
530 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
531 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800532 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700533 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
534 }
535 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
536 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800537 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
539 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700540
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800541 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
542 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800543 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700544 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
545 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800546 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
547 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800548 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800549 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
550 }
551 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
552 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800553 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800554 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
555 }
Jason Sams22534172009-08-04 16:58:20 -0700556
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700557
Jason Sams2e1872f2010-08-17 16:25:41 -0700558 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
559 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800560 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700561 rsnScriptBindAllocation(mContext, script, alloc, slot);
562 }
563 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
564 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800565 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700566 rsnScriptSetTimeZone(mContext, script, timeZone);
567 }
568 native void rsnScriptInvoke(int con, int id, int slot);
569 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800570 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700571 rsnScriptInvoke(mContext, id, slot);
572 }
Jason Sams6e494d32011-04-27 16:33:11 -0700573 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
574 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800575 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
576 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800577 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
578 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700579 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
580 validate();
581 if (params == null) {
582 rsnScriptForEach(mContext, id, slot, ain, aout);
583 } else {
584 rsnScriptForEach(mContext, id, slot, ain, aout, params);
585 }
586 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800587
588 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
589 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
590 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800591 if (params == null) {
592 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
593 } else {
594 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
595 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800596 }
597
Jason Sams2e1872f2010-08-17 16:25:41 -0700598 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
599 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800600 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700601 rsnScriptInvokeV(mContext, id, slot, params);
602 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700603
Jason Sams2e1872f2010-08-17 16:25:41 -0700604 native void rsnScriptSetVarI(int con, int id, int slot, int val);
605 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800606 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700607 rsnScriptSetVarI(mContext, id, slot, val);
608 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700609 native int rsnScriptGetVarI(int con, int id, int slot);
610 synchronized int nScriptGetVarI(int id, int slot) {
611 validate();
612 return rsnScriptGetVarI(mContext, id, slot);
613 }
614
Stephen Hines031ec58c2010-10-11 10:54:21 -0700615 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
616 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800617 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700618 rsnScriptSetVarJ(mContext, id, slot, val);
619 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700620 native long rsnScriptGetVarJ(int con, int id, int slot);
621 synchronized long nScriptGetVarJ(int id, int slot) {
622 validate();
623 return rsnScriptGetVarJ(mContext, id, slot);
624 }
625
Jason Sams2e1872f2010-08-17 16:25:41 -0700626 native void rsnScriptSetVarF(int con, int id, int slot, float val);
627 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800628 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700629 rsnScriptSetVarF(mContext, id, slot, val);
630 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700631 native float rsnScriptGetVarF(int con, int id, int slot);
632 synchronized float nScriptGetVarF(int id, int slot) {
633 validate();
634 return rsnScriptGetVarF(mContext, id, slot);
635 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700636 native void rsnScriptSetVarD(int con, int id, int slot, double val);
637 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800638 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700639 rsnScriptSetVarD(mContext, id, slot, val);
640 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700641 native double rsnScriptGetVarD(int con, int id, int slot);
642 synchronized double nScriptGetVarD(int id, int slot) {
643 validate();
644 return rsnScriptGetVarD(mContext, id, slot);
645 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700646 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
647 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800648 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700649 rsnScriptSetVarV(mContext, id, slot, val);
650 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700651 native void rsnScriptGetVarV(int con, int id, int slot, byte[] val);
652 synchronized void nScriptGetVarV(int id, int slot, byte[] val) {
653 validate();
654 rsnScriptGetVarV(mContext, id, slot, val);
655 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700656 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
657 int e, int[] dims);
658 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
659 int e, int[] dims) {
660 validate();
661 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
662 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800663 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
664 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800665 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800666 rsnScriptSetVarObj(mContext, id, slot, val);
667 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700668
Jason Samse4a06c52011-03-16 16:29:28 -0700669 native int rsnScriptCCreate(int con, String resName, String cacheDir,
670 byte[] script, int length);
671 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800672 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700673 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700674 }
Jason Samsebfb4362009-09-23 13:57:02 -0700675
Jason Sams6ab97682012-08-10 12:09:43 -0700676 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
677 synchronized int nScriptIntrinsicCreate(int id, int eid) {
678 validate();
679 return rsnScriptIntrinsicCreate(mContext, id, eid);
680 }
681
Jason Sams08a81582012-09-18 12:32:10 -0700682 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
683 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
684 validate();
685 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
686 }
687
688 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
689 synchronized int nScriptFieldIDCreate(int sid, int slot) {
690 validate();
691 return rsnScriptFieldIDCreate(mContext, sid, slot);
692 }
693
694 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
695 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
696 validate();
697 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
698 }
699
700 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
701 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
702 validate();
703 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
704 }
705
706 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
707 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
708 validate();
709 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
710 }
711
712 native void rsnScriptGroupExecute(int con, int group);
713 synchronized void nScriptGroupExecute(int group) {
714 validate();
715 rsnScriptGroupExecute(mContext, group);
716 }
717
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700718 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
719 int wrapS, int wrapT, int wrapR, float aniso);
720 synchronized int nSamplerCreate(int magFilter, int minFilter,
721 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800722 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700723 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700724 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800725
Jason Sams331bf9b2011-04-06 11:23:54 -0700726 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
727 boolean depthMask, boolean dither,
728 int srcMode, int dstMode, int depthFunc);
729 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
730 boolean depthMask, boolean dither,
731 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800732 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700733 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
734 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700735 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700736
Jason Sams94aaed32011-09-23 14:18:53 -0700737 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
738 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800739 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700740 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700741 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700742
Jason Sams2e1872f2010-08-17 16:25:41 -0700743 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
744 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800745 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700746 rsnProgramBindConstants(mContext, pv, slot, mID);
747 }
748 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
749 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800750 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700751 rsnProgramBindTexture(mContext, vpf, slot, a);
752 }
753 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
754 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800755 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700756 rsnProgramBindSampler(mContext, vpf, slot, s);
757 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800758 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
759 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800760 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800761 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700762 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800763 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
764 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800765 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800766 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700767 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700768
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700769 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
770 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800771 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700772 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800773 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700774 native int rsnMeshGetVertexBufferCount(int con, int id);
775 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800776 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700777 return rsnMeshGetVertexBufferCount(mContext, id);
778 }
779 native int rsnMeshGetIndexCount(int con, int id);
780 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800781 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700782 return rsnMeshGetIndexCount(mContext, id);
783 }
784 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
785 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800786 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700787 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
788 }
789 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
790 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800791 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700792 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
793 }
794
Jason Samsf15ed012011-10-31 13:23:43 -0700795 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
796 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
797 validate();
798 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
799 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700800
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800801 int mDev;
802 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700803 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800804 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700805
Jason Sams8cb39de2010-06-01 15:47:01 -0700806 Element mElement_U8;
807 Element mElement_I8;
808 Element mElement_U16;
809 Element mElement_I16;
810 Element mElement_U32;
811 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700812 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700813 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700814 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700815 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700816 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700817
Jason Sams8cb39de2010-06-01 15:47:01 -0700818 Element mElement_ELEMENT;
819 Element mElement_TYPE;
820 Element mElement_ALLOCATION;
821 Element mElement_SAMPLER;
822 Element mElement_SCRIPT;
823 Element mElement_MESH;
824 Element mElement_PROGRAM_FRAGMENT;
825 Element mElement_PROGRAM_VERTEX;
826 Element mElement_PROGRAM_RASTER;
827 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700828 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700829
Jason Sams3c0dfba2009-09-27 17:50:38 -0700830 Element mElement_A_8;
831 Element mElement_RGB_565;
832 Element mElement_RGB_888;
833 Element mElement_RGBA_5551;
834 Element mElement_RGBA_4444;
835 Element mElement_RGBA_8888;
836
Jason Sams8cb39de2010-06-01 15:47:01 -0700837 Element mElement_FLOAT_2;
838 Element mElement_FLOAT_3;
839 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700840
841 Element mElement_DOUBLE_2;
842 Element mElement_DOUBLE_3;
843 Element mElement_DOUBLE_4;
844
845 Element mElement_UCHAR_2;
846 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700847 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800848
Stephen Hines836c4a52011-06-01 14:38:10 -0700849 Element mElement_CHAR_2;
850 Element mElement_CHAR_3;
851 Element mElement_CHAR_4;
852
853 Element mElement_USHORT_2;
854 Element mElement_USHORT_3;
855 Element mElement_USHORT_4;
856
857 Element mElement_SHORT_2;
858 Element mElement_SHORT_3;
859 Element mElement_SHORT_4;
860
861 Element mElement_UINT_2;
862 Element mElement_UINT_3;
863 Element mElement_UINT_4;
864
865 Element mElement_INT_2;
866 Element mElement_INT_3;
867 Element mElement_INT_4;
868
869 Element mElement_ULONG_2;
870 Element mElement_ULONG_3;
871 Element mElement_ULONG_4;
872
873 Element mElement_LONG_2;
874 Element mElement_LONG_3;
875 Element mElement_LONG_4;
876
Jason Sams1d45c472010-08-25 14:31:48 -0700877 Element mElement_MATRIX_4X4;
878 Element mElement_MATRIX_3X3;
879 Element mElement_MATRIX_2X2;
880
Jason Sams4d339932010-05-11 14:03:58 -0700881 Sampler mSampler_CLAMP_NEAREST;
882 Sampler mSampler_CLAMP_LINEAR;
883 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
884 Sampler mSampler_WRAP_NEAREST;
885 Sampler mSampler_WRAP_LINEAR;
886 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800887 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
888 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
889 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700890
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700891 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
892 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700893 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
894 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700895
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700896 ProgramRaster mProgramRaster_CULL_BACK;
897 ProgramRaster mProgramRaster_CULL_FRONT;
898 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700899
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700900 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700901 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700902
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700903 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800904 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800905 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800906 * fields will be filled in and then the run method called by a message
907 * handling thread. This will occur some time after sendToClient completes
908 * in the script.
909 *
910 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800911 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700912 protected int[] mData;
913 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800914 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700915 public void run() {
916 }
917 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700918 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800919 * If an application is expecting messages it should set this field to an
920 * instance of RSMessage. This instance will receive all the user messages
921 * sent from sendToClient by scripts from this context.
922 *
923 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800924 RSMessageHandler mMessageCallback = null;
925
926 public void setMessageHandler(RSMessageHandler msg) {
927 mMessageCallback = msg;
928 }
929 public RSMessageHandler getMessageHandler() {
930 return mMessageCallback;
931 }
Jason Sams516c3192009-10-06 13:58:47 -0700932
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700933 /**
Jason Sams02d56d92013-04-12 16:40:50 -0700934 * Place a message into the message queue to be sent back to the message
935 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -0800936 *
937 * @param id
938 * @param data
939 */
940 public void sendMessage(int id, int[] data) {
941 nContextSendMessage(id, data);
942 }
943
944 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800945 * Runtime error base class. An application should derive from this class
946 * if it wishes to install an error handler. When errors occur at runtime
947 * the fields in this class will be filled and the run method called.
948 *
949 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800950 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800951 protected String mErrorMessage;
952 protected int mErrorNum;
953 public void run() {
954 }
955 }
Jason Sams27676fe2010-11-10 17:00:59 -0800956
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700957 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800958 * Application Error handler. All runtime errors will be dispatched to the
959 * instance of RSAsyncError set here. If this field is null a
960 * RSRuntimeException will instead be thrown with details about the error.
961 * This will cause program termaination.
962 *
963 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800964 RSErrorHandler mErrorCallback = null;
965
966 public void setErrorHandler(RSErrorHandler msg) {
967 mErrorCallback = msg;
968 }
969 public RSErrorHandler getErrorHandler() {
970 return mErrorCallback;
971 }
Jason Sams1c415172010-11-08 17:06:46 -0800972
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700973 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800974 * RenderScript worker threads priority enumeration. The default value is
975 * NORMAL. Applications wishing to do background processing such as
976 * wallpapers should set their priority to LOW to avoid starving forground
977 * processes.
978 */
Jason Sams7d787b42009-11-15 12:14:26 -0800979 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700980 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
981 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800982
983 int mID;
984 Priority(int id) {
985 mID = id;
986 }
987 }
988
Jason Sams771bebb2009-12-07 12:40:12 -0800989 void validate() {
990 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700991 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800992 }
993 }
994
Jason Sams27676fe2010-11-10 17:00:59 -0800995
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700996 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800997 * Change the priority of the worker threads for this context.
998 *
999 * @param p New priority to be set.
1000 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001001 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -08001002 validate();
Jason Sams7d787b42009-11-15 12:14:26 -08001003 nContextSetPriority(p.mID);
1004 }
1005
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001006 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -07001007 RenderScript mRS;
1008 boolean mRun = true;
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001009 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001010
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001011 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1012 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1013 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1014 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1015 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001016 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001017
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001018 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001019
Jason Sams516c3192009-10-06 13:58:47 -07001020 MessageThread(RenderScript rs) {
1021 super("RSMessageThread");
1022 mRS = rs;
1023
1024 }
1025
1026 public void run() {
1027 // This function is a temporary solution. The final solution will
1028 // used typed allocations where the message id is the type indicator.
1029 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001030 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001031 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001032 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001033 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001034 int size = mAuxData[1];
1035 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001036
1037 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1038 if ((size>>2) >= rbuf.length) {
1039 rbuf = new int[(size + 3) >> 2];
1040 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001041 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1042 RS_MESSAGE_TO_CLIENT_USER) {
1043 throw new RSDriverException("Error processing message from Renderscript.");
1044 }
Jason Sams1c415172010-11-08 17:06:46 -08001045
1046 if(mRS.mMessageCallback != null) {
1047 mRS.mMessageCallback.mData = rbuf;
1048 mRS.mMessageCallback.mID = subID;
1049 mRS.mMessageCallback.mLength = size;
1050 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001051 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001052 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001053 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001054 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001055 }
Jason Sams1c415172010-11-08 17:06:46 -08001056
1057 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1058 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1059
Jason Samsadd9d962010-11-22 16:20:16 -08001060 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
1061 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1062 }
1063
Jason Sams1c415172010-11-08 17:06:46 -08001064 if(mRS.mErrorCallback != null) {
1065 mRS.mErrorCallback.mErrorMessage = e;
1066 mRS.mErrorCallback.mErrorNum = subID;
1067 mRS.mErrorCallback.run();
1068 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001069 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001070 // Do not throw here. In these cases, we do not have
1071 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001072 }
1073 continue;
1074 }
1075
Jason Sams739c8262013-04-11 18:07:52 -07001076 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1077 Allocation.sendBufferNotification(subID);
1078 continue;
1079 }
1080
Jason Sams1c415172010-11-08 17:06:46 -08001081 // 2: teardown.
1082 // But we want to avoid starving other threads during
1083 // teardown by yielding until the next line in the destructor
1084 // can execute to set mRun = false
1085 try {
1086 sleep(1, 0);
1087 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001088 }
Jason Sams516c3192009-10-06 13:58:47 -07001089 }
Jason Sams3bc47d42009-11-12 15:10:25 -08001090 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001091 }
1092 }
1093
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001094 RenderScript(Context ctx) {
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001095 if (ctx != null) {
1096 mApplicationContext = ctx.getApplicationContext();
1097 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001098 }
1099
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001100 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001101 * Gets the application context associated with the RenderScript context.
1102 *
1103 * @return The application context.
1104 */
1105 public final Context getApplicationContext() {
1106 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001107 }
1108
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001109 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001110 * @hide
1111 */
1112 public static RenderScript create(Context ctx, int sdkVersion) {
1113 return create(ctx, sdkVersion, ContextType.NORMAL);
1114 }
1115
1116 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001117 * Create a basic RenderScript context.
1118 *
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001119 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001120 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001121 * @return RenderScript
1122 */
Jason Samsadd26dc2013-02-22 18:43:45 -08001123 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001124 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001125
1126 rs.mDev = rs.nDeviceCreate();
Jason Samsadd26dc2013-02-22 18:43:45 -08001127 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
Jason Sams26985362011-05-03 15:01:58 -07001128 if (rs.mContext == 0) {
1129 throw new RSDriverException("Failed to create RS context.");
1130 }
Jason Sams704ff642010-02-09 16:05:07 -08001131 rs.mMessageThread = new MessageThread(rs);
1132 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001133 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001134 }
1135
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001136 /**
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001137 * Create a basic RenderScript context.
1138 *
1139 * @param ctx The context.
1140 * @return RenderScript
1141 */
1142 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001143 return create(ctx, ContextType.NORMAL);
1144 }
1145
1146 /**
1147 * Create a basic RenderScript context.
1148 *
Jason Samsadd26dc2013-02-22 18:43:45 -08001149 *
1150 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001151 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001152 * @return RenderScript
1153 */
1154 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001155 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Samsadd26dc2013-02-22 18:43:45 -08001156 return create(ctx, v, ct);
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001157 }
1158
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001159 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001160 * Print the currently available debugging information about the state of
1161 * the RS context to the log.
1162 *
Jason Sams27676fe2010-11-10 17:00:59 -08001163 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001164 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001165 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001166 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001167 }
1168
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001169 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001170 * Wait for any commands in the fifo between the java bindings and native to
1171 * be processed.
1172 *
1173 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001174 public void finish() {
1175 nContextFinish();
1176 }
1177
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001178 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001179 * Destroy this renderscript context. Once this function is called its no
1180 * longer legal to use this or any objects created by this context.
1181 *
1182 */
Jason Samsf5b45962009-08-25 14:49:07 -07001183 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001184 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001185 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001186 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001187 try {
1188 mMessageThread.join();
1189 } catch(InterruptedException e) {
1190 }
Jason Sams516c3192009-10-06 13:58:47 -07001191
Jason Sams2e1872f2010-08-17 16:25:41 -07001192 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001193 mContext = 0;
1194
1195 nDeviceDestroy(mDev);
1196 mDev = 0;
1197 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001198
Jason Samsa9e7a052009-09-25 14:51:22 -07001199 boolean isAlive() {
1200 return mContext != 0;
1201 }
1202
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001203 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001204 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001205 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001206 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001207 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001208 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001209}