blob: d5af2767bb40bd9a5013303c830924798354b2e2 [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 Samsbf6ef8d2010-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 Samsbf6ef8d2010-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 Sams3eaa3382009-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 Samsadd26dc2013-02-22 18:43:45 -0800100 public enum ContextType {
101 NORMAL (0),
102 DEBUG (1),
103 PROFILE (2);
104
105 int mID;
106 ContextType(int id) {
107 mID = id;
108 }
109 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800110
Jason Sams2e1872f2010-08-17 16:25:41 -0700111 // Methods below are wrapped to protect the non-threadsafe
112 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -0700113 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700114 int colorMin, int colorPref,
115 int alphaMin, int alphaPref,
116 int depthMin, int depthPref,
117 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700118 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -0700119 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700120 int colorMin, int colorPref,
121 int alphaMin, int alphaPref,
122 int depthMin, int depthPref,
123 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700124 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700125 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700126 alphaMin, alphaPref, depthMin, depthPref,
127 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700128 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700129 }
Jason Samsadd26dc2013-02-22 18:43:45 -0800130 native int rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
131 synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
132 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700133 }
134 native void rsnContextDestroy(int con);
135 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800136 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 rsnContextDestroy(mContext);
138 }
139 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
140 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800141 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700142 rsnContextSetSurface(mContext, w, h, sur);
143 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700144 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
145 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
146 validate();
147 rsnContextSetSurfaceTexture(mContext, w, h, sur);
148 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700149 native void rsnContextSetPriority(int con, int p);
150 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800151 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700152 rsnContextSetPriority(mContext, p);
153 }
154 native void rsnContextDump(int con, int bits);
155 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800156 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700157 rsnContextDump(mContext, bits);
158 }
159 native void rsnContextFinish(int con);
160 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800161 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700162 rsnContextFinish(mContext);
163 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700164
Jason Sams455d6442013-02-05 19:20:18 -0800165 native void rsnContextSendMessage(int con, int id, int[] data);
166 synchronized void nContextSendMessage(int id, int[] data) {
167 validate();
168 rsnContextSendMessage(mContext, id, data);
169 }
170
Jason Sams2e1872f2010-08-17 16:25:41 -0700171 native void rsnContextBindRootScript(int con, int script);
172 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800173 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700174 rsnContextBindRootScript(mContext, script);
175 }
176 native void rsnContextBindSampler(int con, int sampler, int slot);
177 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800178 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700179 rsnContextBindSampler(mContext, sampler, slot);
180 }
181 native void rsnContextBindProgramStore(int con, int pfs);
182 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800183 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 rsnContextBindProgramStore(mContext, pfs);
185 }
186 native void rsnContextBindProgramFragment(int con, int pf);
187 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800188 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 rsnContextBindProgramFragment(mContext, pf);
190 }
191 native void rsnContextBindProgramVertex(int con, int pv);
192 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700194 rsnContextBindProgramVertex(mContext, pv);
195 }
196 native void rsnContextBindProgramRaster(int con, int pr);
197 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800198 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 rsnContextBindProgramRaster(mContext, pr);
200 }
201 native void rsnContextPause(int con);
202 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 rsnContextPause(mContext);
205 }
206 native void rsnContextResume(int con);
207 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700209 rsnContextResume(mContext);
210 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700211
Jason Sams2e1872f2010-08-17 16:25:41 -0700212 native void rsnAssignName(int con, int obj, byte[] name);
213 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800214 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700215 rsnAssignName(mContext, obj, name);
216 }
217 native String rsnGetName(int con, int obj);
218 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700220 return rsnGetName(mContext, obj);
221 }
222 native void rsnObjDestroy(int con, int id);
223 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800224 // There is a race condition here. The calling code may be run
225 // by the gc while teardown is occuring. This protects againts
226 // deleting dead objects.
227 if (mContext != 0) {
228 rsnObjDestroy(mContext, id);
229 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700230 }
Jason Samsfe08d992009-05-27 14:45:32 -0700231
Jason Sams2e1872f2010-08-17 16:25:41 -0700232 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
233 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800234 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 return rsnElementCreate(mContext, type, kind, norm, vecSize);
236 }
Jason Sams70d4e502010-09-02 17:35:23 -0700237 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
238 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700240 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700241 }
242 native void rsnElementGetNativeData(int con, int id, int[] elementData);
243 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800244 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700245 rsnElementGetNativeData(mContext, id, elementData);
246 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700247 native void rsnElementGetSubElements(int con, int id,
248 int[] IDs, String[] names, int[] arraySizes);
249 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800250 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700251 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700252 }
Jason Sams768bc022009-09-21 19:41:04 -0700253
Jason Samsb109cc72013-01-07 18:20:12 -0800254 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
255 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800257 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700258 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700259 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
260 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800261 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700262 rsnTypeGetNativeData(mContext, id, typeData);
263 }
Jason Sams768bc022009-09-21 19:41:04 -0700264
Jason Sams857d0c72011-11-23 15:02:15 -0800265 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
266 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800267 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800268 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700269 }
Jason Sams5476b452010-12-08 16:14:36 -0800270 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
271 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800272 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800273 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700274 }
Tim Murraya3145512012-12-04 17:59:29 -0800275
276 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
277 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
278 validate();
279 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
280 }
281
282
Jason Sams5476b452010-12-08 16:14:36 -0800283 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
284 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800285 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800286 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800287 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700288 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
289 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800290 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700291 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
292 }
Jason Sams5476b452010-12-08 16:14:36 -0800293 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
294 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800295 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800296 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
297 }
298
Jason Sams4ef66502010-12-10 16:03:15 -0800299 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
300 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800301 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800302 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
303 }
304
305
Jason Sams5476b452010-12-08 16:14:36 -0800306 native void rsnAllocationSyncAll(int con, int alloc, int src);
307 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800308 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800309 rsnAllocationSyncAll(mContext, alloc, src);
310 }
Jason Sams72226e02013-02-22 12:45:54 -0800311 native Surface rsnAllocationGetSurface(int con, int alloc);
312 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800313 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800314 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700315 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700316 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
317 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800318 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700319 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800320 }
321 native void rsnAllocationIoSend(int con, int alloc);
322 synchronized void nAllocationIoSend(int alloc) {
323 validate();
324 rsnAllocationIoSend(mContext, alloc);
325 }
326 native void rsnAllocationIoReceive(int con, int alloc);
327 synchronized void nAllocationIoReceive(int alloc) {
328 validate();
329 rsnAllocationIoReceive(mContext, alloc);
330 }
331
Jason Sams615e7ce2012-01-13 14:01:20 -0800332
Jason Samsf7086092011-01-12 13:28:37 -0800333 native void rsnAllocationGenerateMipmaps(int con, int alloc);
334 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800335 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800336 rsnAllocationGenerateMipmaps(mContext, alloc);
337 }
Jason Sams4ef66502010-12-10 16:03:15 -0800338 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
339 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800340 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800341 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700342 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700343
Jason Sams49a05d72010-12-29 14:31:29 -0800344
345 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
346 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800347 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800348 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700349 }
Jason Sams49a05d72010-12-29 14:31:29 -0800350 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
351 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800352 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800353 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
354 }
355 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
356 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800357 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800358 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
359 }
360 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
361 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800362 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800363 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700365
Jason Sams49a05d72010-12-29 14:31:29 -0800366 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
367 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800368 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800369 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700370 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700371
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700372 native void rsnAllocationData2D(int con,
373 int dstAlloc, int dstXoff, int dstYoff,
374 int dstMip, int dstFace,
375 int width, int height,
376 int srcAlloc, int srcXoff, int srcYoff,
377 int srcMip, int srcFace);
378 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
379 int dstMip, int dstFace,
380 int width, int height,
381 int srcAlloc, int srcXoff, int srcYoff,
382 int srcMip, int srcFace) {
383 validate();
384 rsnAllocationData2D(mContext,
385 dstAlloc, dstXoff, dstYoff,
386 dstMip, dstFace,
387 width, height,
388 srcAlloc, srcXoff, srcYoff,
389 srcMip, srcFace);
390 }
391
Jason Samsfa445b92011-01-07 17:00:07 -0800392 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
393 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 -0800394 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800395 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
396 }
397 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
398 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 -0800399 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800400 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
401 }
Jason Sams49a05d72010-12-29 14:31:29 -0800402 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
403 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 -0800404 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800405 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700406 }
Jason Sams49a05d72010-12-29 14:31:29 -0800407 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
408 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 -0800409 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800410 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700411 }
Jason Samsfa445b92011-01-07 17:00:07 -0800412 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
413 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800414 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800415 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
416 }
Jason Sams49a05d72010-12-29 14:31:29 -0800417
Jason Samsb05d6892013-04-09 15:59:24 -0700418 native void rsnAllocationData3D(int con,
419 int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
420 int dstMip,
421 int width, int height, int depth,
422 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
423 int srcMip);
424 synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
425 int dstMip,
426 int width, int height, int depth,
427 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
428 int srcMip) {
429 validate();
430 rsnAllocationData3D(mContext,
431 dstAlloc, dstXoff, dstYoff, dstZoff,
432 dstMip, width, height, depth,
433 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
434 }
435
436 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);
437 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, byte[] d, int sizeBytes) {
438 validate();
439 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
440 }
441 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);
442 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, short[] d, int sizeBytes) {
443 validate();
444 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
445 }
446 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);
447 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, int[] d, int sizeBytes) {
448 validate();
449 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
450 }
451 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);
452 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip, int w, int h, int depth, float[] d, int sizeBytes) {
453 validate();
454 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes);
455 }
456
457
Jason Samsfa445b92011-01-07 17:00:07 -0800458 native void rsnAllocationRead(int con, int id, byte[] d);
459 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800460 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800461 rsnAllocationRead(mContext, id, d);
462 }
463 native void rsnAllocationRead(int con, int id, short[] d);
464 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800465 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800466 rsnAllocationRead(mContext, id, d);
467 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700468 native void rsnAllocationRead(int con, int id, int[] d);
469 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800470 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700471 rsnAllocationRead(mContext, id, d);
472 }
473 native void rsnAllocationRead(int con, int id, float[] d);
474 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800475 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700476 rsnAllocationRead(mContext, id, d);
477 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 native int rsnAllocationGetType(int con, int id);
479 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800480 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700481 return rsnAllocationGetType(mContext, id);
482 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700483
Jason Sams5edc6082010-10-05 13:32:49 -0700484 native void rsnAllocationResize1D(int con, int id, int dimX);
485 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800486 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700487 rsnAllocationResize1D(mContext, id, dimX);
488 }
Jason Sams5edc6082010-10-05 13:32:49 -0700489
Jason Sams2e1872f2010-08-17 16:25:41 -0700490 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
491 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800492 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700493 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
494 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800495 native int rsnFileA3DCreateFromFile(int con, String path);
496 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800497 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800498 return rsnFileA3DCreateFromFile(mContext, path);
499 }
500 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
501 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800502 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800503 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
504 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700505 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
506 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800507 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700508 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
509 }
510 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
511 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800512 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700513 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
514 }
515 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
516 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800517 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700518 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
519 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700520
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800521 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
522 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800523 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700524 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
525 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800526 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
527 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800528 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800529 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
530 }
531 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
532 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800533 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800534 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
535 }
Jason Sams22534172009-08-04 16:58:20 -0700536
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700537
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
539 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800540 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700541 rsnScriptBindAllocation(mContext, script, alloc, slot);
542 }
543 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
544 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800545 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700546 rsnScriptSetTimeZone(mContext, script, timeZone);
547 }
548 native void rsnScriptInvoke(int con, int id, int slot);
549 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800550 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700551 rsnScriptInvoke(mContext, id, slot);
552 }
Jason Sams6e494d32011-04-27 16:33:11 -0700553 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
554 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800555 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
556 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800557 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
558 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700559 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
560 validate();
561 if (params == null) {
562 rsnScriptForEach(mContext, id, slot, ain, aout);
563 } else {
564 rsnScriptForEach(mContext, id, slot, ain, aout, params);
565 }
566 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800567
568 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
569 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
570 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800571 if (params == null) {
572 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
573 } else {
574 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
575 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800576 }
577
Jason Sams2e1872f2010-08-17 16:25:41 -0700578 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
579 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800580 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700581 rsnScriptInvokeV(mContext, id, slot, params);
582 }
583 native void rsnScriptSetVarI(int con, int id, int slot, int val);
584 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800585 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700586 rsnScriptSetVarI(mContext, id, slot, val);
587 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700588 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
589 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800590 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700591 rsnScriptSetVarJ(mContext, id, slot, val);
592 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700593 native void rsnScriptSetVarF(int con, int id, int slot, float val);
594 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800595 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700596 rsnScriptSetVarF(mContext, id, slot, val);
597 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700598 native void rsnScriptSetVarD(int con, int id, int slot, double val);
599 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800600 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700601 rsnScriptSetVarD(mContext, id, slot, val);
602 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700603 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
604 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800605 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700606 rsnScriptSetVarV(mContext, id, slot, val);
607 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700608 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
609 int e, int[] dims);
610 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
611 int e, int[] dims) {
612 validate();
613 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
614 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800615 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
616 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800617 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800618 rsnScriptSetVarObj(mContext, id, slot, val);
619 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700620
Jason Samse4a06c52011-03-16 16:29:28 -0700621 native int rsnScriptCCreate(int con, String resName, String cacheDir,
622 byte[] script, int length);
623 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800624 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700625 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700626 }
Jason Samsebfb4362009-09-23 13:57:02 -0700627
Jason Sams6ab97682012-08-10 12:09:43 -0700628 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
629 synchronized int nScriptIntrinsicCreate(int id, int eid) {
630 validate();
631 return rsnScriptIntrinsicCreate(mContext, id, eid);
632 }
633
Jason Sams08a81582012-09-18 12:32:10 -0700634 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
635 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
636 validate();
637 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
638 }
639
640 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
641 synchronized int nScriptFieldIDCreate(int sid, int slot) {
642 validate();
643 return rsnScriptFieldIDCreate(mContext, sid, slot);
644 }
645
646 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
647 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
648 validate();
649 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
650 }
651
652 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
653 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
654 validate();
655 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
656 }
657
658 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
659 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
660 validate();
661 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
662 }
663
664 native void rsnScriptGroupExecute(int con, int group);
665 synchronized void nScriptGroupExecute(int group) {
666 validate();
667 rsnScriptGroupExecute(mContext, group);
668 }
669
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700670 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
671 int wrapS, int wrapT, int wrapR, float aniso);
672 synchronized int nSamplerCreate(int magFilter, int minFilter,
673 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800674 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700675 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700676 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800677
Jason Sams331bf9b2011-04-06 11:23:54 -0700678 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
679 boolean depthMask, boolean dither,
680 int srcMode, int dstMode, int depthFunc);
681 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
682 boolean depthMask, boolean dither,
683 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800684 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700685 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
686 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700687 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700688
Jason Sams94aaed32011-09-23 14:18:53 -0700689 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
690 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800691 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700692 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700693 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700694
Jason Sams2e1872f2010-08-17 16:25:41 -0700695 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
696 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800697 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700698 rsnProgramBindConstants(mContext, pv, slot, mID);
699 }
700 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
701 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800702 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700703 rsnProgramBindTexture(mContext, vpf, slot, a);
704 }
705 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
706 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800707 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700708 rsnProgramBindSampler(mContext, vpf, slot, s);
709 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800710 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
711 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800712 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800713 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700714 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800715 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
716 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800717 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800718 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700719 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700720
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700721 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
722 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800723 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700724 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800725 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700726 native int rsnMeshGetVertexBufferCount(int con, int id);
727 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800728 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700729 return rsnMeshGetVertexBufferCount(mContext, id);
730 }
731 native int rsnMeshGetIndexCount(int con, int id);
732 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800733 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700734 return rsnMeshGetIndexCount(mContext, id);
735 }
736 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
737 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800738 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700739 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
740 }
741 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
742 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800743 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700744 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
745 }
746
Jason Samsf15ed012011-10-31 13:23:43 -0700747 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
748 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
749 validate();
750 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
751 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700752
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800753 int mDev;
754 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700755 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800756 MessageThread mMessageThread;
Tim Murrayf8c033d2013-04-09 14:33:32 -0700757 GCThread mGCThread;
758
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700759
Jason Sams8cb39de2010-06-01 15:47:01 -0700760 Element mElement_U8;
761 Element mElement_I8;
762 Element mElement_U16;
763 Element mElement_I16;
764 Element mElement_U32;
765 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700766 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700767 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700768 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700769 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700770 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700771
Jason Sams8cb39de2010-06-01 15:47:01 -0700772 Element mElement_ELEMENT;
773 Element mElement_TYPE;
774 Element mElement_ALLOCATION;
775 Element mElement_SAMPLER;
776 Element mElement_SCRIPT;
777 Element mElement_MESH;
778 Element mElement_PROGRAM_FRAGMENT;
779 Element mElement_PROGRAM_VERTEX;
780 Element mElement_PROGRAM_RASTER;
781 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700782 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700783
Jason Sams3c0dfba2009-09-27 17:50:38 -0700784 Element mElement_A_8;
785 Element mElement_RGB_565;
786 Element mElement_RGB_888;
787 Element mElement_RGBA_5551;
788 Element mElement_RGBA_4444;
789 Element mElement_RGBA_8888;
790
Jason Sams8cb39de2010-06-01 15:47:01 -0700791 Element mElement_FLOAT_2;
792 Element mElement_FLOAT_3;
793 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700794
795 Element mElement_DOUBLE_2;
796 Element mElement_DOUBLE_3;
797 Element mElement_DOUBLE_4;
798
799 Element mElement_UCHAR_2;
800 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700801 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800802
Stephen Hines836c4a52011-06-01 14:38:10 -0700803 Element mElement_CHAR_2;
804 Element mElement_CHAR_3;
805 Element mElement_CHAR_4;
806
807 Element mElement_USHORT_2;
808 Element mElement_USHORT_3;
809 Element mElement_USHORT_4;
810
811 Element mElement_SHORT_2;
812 Element mElement_SHORT_3;
813 Element mElement_SHORT_4;
814
815 Element mElement_UINT_2;
816 Element mElement_UINT_3;
817 Element mElement_UINT_4;
818
819 Element mElement_INT_2;
820 Element mElement_INT_3;
821 Element mElement_INT_4;
822
823 Element mElement_ULONG_2;
824 Element mElement_ULONG_3;
825 Element mElement_ULONG_4;
826
827 Element mElement_LONG_2;
828 Element mElement_LONG_3;
829 Element mElement_LONG_4;
830
Jason Sams1d45c472010-08-25 14:31:48 -0700831 Element mElement_MATRIX_4X4;
832 Element mElement_MATRIX_3X3;
833 Element mElement_MATRIX_2X2;
834
Jason Sams4d339932010-05-11 14:03:58 -0700835 Sampler mSampler_CLAMP_NEAREST;
836 Sampler mSampler_CLAMP_LINEAR;
837 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
838 Sampler mSampler_WRAP_NEAREST;
839 Sampler mSampler_WRAP_LINEAR;
840 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800841 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
842 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
843 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700844
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700845 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
846 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700847 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
848 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700849
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700850 ProgramRaster mProgramRaster_CULL_BACK;
851 ProgramRaster mProgramRaster_CULL_FRONT;
852 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700853
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700854 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700855 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700856
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700857 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800858 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800859 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800860 * fields will be filled in and then the run method called by a message
861 * handling thread. This will occur some time after sendToClient completes
862 * in the script.
863 *
864 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800865 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700866 protected int[] mData;
867 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800868 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700869 public void run() {
870 }
871 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700872 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800873 * If an application is expecting messages it should set this field to an
874 * instance of RSMessage. This instance will receive all the user messages
875 * sent from sendToClient by scripts from this context.
876 *
877 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800878 RSMessageHandler mMessageCallback = null;
879
880 public void setMessageHandler(RSMessageHandler msg) {
881 mMessageCallback = msg;
882 }
883 public RSMessageHandler getMessageHandler() {
884 return mMessageCallback;
885 }
Jason Sams516c3192009-10-06 13:58:47 -0700886
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700887 /**
Jason Sams455d6442013-02-05 19:20:18 -0800888 * @hide
889 *
890 * @param id
891 * @param data
892 */
893 public void sendMessage(int id, int[] data) {
894 nContextSendMessage(id, data);
895 }
896
897 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800898 * Runtime error base class. An application should derive from this class
899 * if it wishes to install an error handler. When errors occur at runtime
900 * the fields in this class will be filled and the run method called.
901 *
902 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800903 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800904 protected String mErrorMessage;
905 protected int mErrorNum;
906 public void run() {
907 }
908 }
Jason Sams27676fe2010-11-10 17:00:59 -0800909
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700910 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800911 * Application Error handler. All runtime errors will be dispatched to the
912 * instance of RSAsyncError set here. If this field is null a
913 * RSRuntimeException will instead be thrown with details about the error.
914 * This will cause program termaination.
915 *
916 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800917 RSErrorHandler mErrorCallback = null;
918
919 public void setErrorHandler(RSErrorHandler msg) {
920 mErrorCallback = msg;
921 }
922 public RSErrorHandler getErrorHandler() {
923 return mErrorCallback;
924 }
Jason Sams1c415172010-11-08 17:06:46 -0800925
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700926 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800927 * RenderScript worker threads priority enumeration. The default value is
928 * NORMAL. Applications wishing to do background processing such as
929 * wallpapers should set their priority to LOW to avoid starving forground
930 * processes.
931 */
Jason Sams7d787b42009-11-15 12:14:26 -0800932 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700933 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
934 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800935
936 int mID;
937 Priority(int id) {
938 mID = id;
939 }
940 }
941
Jason Sams771bebb2009-12-07 12:40:12 -0800942 void validate() {
943 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700944 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800945 }
946 }
947
Jason Sams27676fe2010-11-10 17:00:59 -0800948
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700949 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800950 * Change the priority of the worker threads for this context.
951 *
952 * @param p New priority to be set.
953 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800954 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800955 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800956 nContextSetPriority(p.mID);
957 }
958
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800959 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700960 RenderScript mRS;
961 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800962 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800963
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800964 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
965 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
966 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
967 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
968 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700969
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800970 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800971
Jason Sams516c3192009-10-06 13:58:47 -0700972 MessageThread(RenderScript rs) {
973 super("RSMessageThread");
974 mRS = rs;
975
976 }
977
978 public void run() {
979 // This function is a temporary solution. The final solution will
980 // used typed allocations where the message id is the type indicator.
981 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700982 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700983 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700984 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700985 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800986 int size = mAuxData[1];
987 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800988
989 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
990 if ((size>>2) >= rbuf.length) {
991 rbuf = new int[(size + 3) >> 2];
992 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700993 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
994 RS_MESSAGE_TO_CLIENT_USER) {
995 throw new RSDriverException("Error processing message from Renderscript.");
996 }
Jason Sams1c415172010-11-08 17:06:46 -0800997
998 if(mRS.mMessageCallback != null) {
999 mRS.mMessageCallback.mData = rbuf;
1000 mRS.mMessageCallback.mID = subID;
1001 mRS.mMessageCallback.mLength = size;
1002 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001003 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001004 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001005 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001006 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001007 }
Jason Sams1c415172010-11-08 17:06:46 -08001008
1009 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1010 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1011
Jason Samsadd9d962010-11-22 16:20:16 -08001012 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
1013 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1014 }
1015
Jason Sams1c415172010-11-08 17:06:46 -08001016 if(mRS.mErrorCallback != null) {
1017 mRS.mErrorCallback.mErrorMessage = e;
1018 mRS.mErrorCallback.mErrorNum = subID;
1019 mRS.mErrorCallback.run();
1020 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001021 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001022 // Do not throw here. In these cases, we do not have
1023 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001024 }
1025 continue;
1026 }
1027
1028 // 2: teardown.
1029 // But we want to avoid starving other threads during
1030 // teardown by yielding until the next line in the destructor
1031 // can execute to set mRun = false
1032 try {
1033 sleep(1, 0);
1034 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001035 }
Jason Sams516c3192009-10-06 13:58:47 -07001036 }
Jason Sams3bc47d42009-11-12 15:10:25 -08001037 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001038 }
1039 }
1040
Tim Murrayf8c033d2013-04-09 14:33:32 -07001041 static class GCThread extends Thread {
1042 RenderScript mRS;
1043 boolean mRun = true;
1044
1045 int currentSize = 0;
1046 final static int targetSize = 256*1024*1024; // call System.gc after 256MB of allocs
1047
1048 GCThread(RenderScript rs) {
1049 super("RSGCThread");
1050 mRS = rs;
1051
1052 }
1053
1054 public void run() {
1055 while(mRun) {
1056 boolean doGC = false;
1057 synchronized(this) {
1058 if (currentSize >= targetSize) {
1059 doGC = true;
1060 }
1061 }
1062 if (doGC == true) {
1063 System.gc();
1064 }
1065 try {
1066 sleep(1, 0);
1067 } catch(InterruptedException e) {
1068 }
1069 }
1070 Log.d(LOG_TAG, "GCThread exiting.");
1071 }
1072
1073 public synchronized void addAllocSize(int bytes) {
1074 currentSize += bytes;
1075 }
1076
1077 public synchronized void removeAllocSize(int bytes) {
1078 currentSize -= bytes;
1079 }
1080
1081 }
1082
1083
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001084 RenderScript(Context ctx) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001085 if (ctx != null) {
1086 mApplicationContext = ctx.getApplicationContext();
1087 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001088 }
1089
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001090 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001091 * Gets the application context associated with the RenderScript context.
1092 *
1093 * @return The application context.
1094 */
1095 public final Context getApplicationContext() {
1096 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001097 }
1098
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001099 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001100 * @hide
1101 */
1102 public static RenderScript create(Context ctx, int sdkVersion) {
1103 return create(ctx, sdkVersion, ContextType.NORMAL);
1104 }
1105
Tim Murrayf8c033d2013-04-09 14:33:32 -07001106 void addAllocSizeForGC(int bytes) {
1107 mGCThread.addAllocSize(bytes);
1108 }
1109
1110 void removeAllocSizeForGC(int bytes) {
1111 mGCThread.removeAllocSize(bytes);
1112 }
1113
1114
Jason Samsadd26dc2013-02-22 18:43:45 -08001115 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001116 * Create a basic RenderScript context.
1117 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001118 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001119 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001120 * @return RenderScript
1121 */
Jason Samsadd26dc2013-02-22 18:43:45 -08001122 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001123 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001124
1125 rs.mDev = rs.nDeviceCreate();
Jason Samsadd26dc2013-02-22 18:43:45 -08001126 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
Jason Sams26985362011-05-03 15:01:58 -07001127 if (rs.mContext == 0) {
1128 throw new RSDriverException("Failed to create RS context.");
1129 }
Jason Sams704ff642010-02-09 16:05:07 -08001130 rs.mMessageThread = new MessageThread(rs);
Tim Murrayf8c033d2013-04-09 14:33:32 -07001131 rs.mGCThread = new GCThread(rs);
Jason Sams704ff642010-02-09 16:05:07 -08001132 rs.mMessageThread.start();
Tim Murrayf8c033d2013-04-09 14:33:32 -07001133 rs.mGCThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001134 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001135 }
1136
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001137 /**
Jason Sams1a4e1f32012-02-24 17:51:24 -08001138 * Create a basic RenderScript context.
1139 *
1140 * @param ctx The context.
1141 * @return RenderScript
1142 */
1143 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001144 return create(ctx, ContextType.NORMAL);
1145 }
1146
1147 /**
1148 * Create a basic RenderScript context.
1149 *
1150 * @hide
1151 *
1152 * @param ctx The context.
1153 * @return RenderScript
1154 */
1155 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001156 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Samsadd26dc2013-02-22 18:43:45 -08001157 return create(ctx, v, ct);
Jason Sams1a4e1f32012-02-24 17:51:24 -08001158 }
1159
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001160 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001161 * Print the currently available debugging information about the state of
1162 * the RS context to the log.
1163 *
Jason Sams27676fe2010-11-10 17:00:59 -08001164 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001165 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001166 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001167 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001168 }
1169
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001170 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001171 * Wait for any commands in the fifo between the java bindings and native to
1172 * be processed.
1173 *
1174 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001175 public void finish() {
1176 nContextFinish();
1177 }
1178
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001179 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001180 * Destroy this renderscript context. Once this function is called its no
1181 * longer legal to use this or any objects created by this context.
1182 *
1183 */
Jason Samsf5b45962009-08-25 14:49:07 -07001184 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001185 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001186 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001187 mMessageThread.mRun = false;
Tim Murrayf8c033d2013-04-09 14:33:32 -07001188 mGCThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001189 try {
1190 mMessageThread.join();
Tim Murrayf8c033d2013-04-09 14:33:32 -07001191 mGCThread.join();
Jason Samsa8bf9422010-09-16 13:43:19 -07001192 } catch(InterruptedException e) {
1193 }
Jason Sams516c3192009-10-06 13:58:47 -07001194
Jason Sams2e1872f2010-08-17 16:25:41 -07001195 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001196 mContext = 0;
1197
1198 nDeviceDestroy(mDev);
1199 mDev = 0;
1200 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001201
Jason Samsa9e7a052009-09-25 14:51:22 -07001202 boolean isAlive() {
1203 return mContext != 0;
1204 }
1205
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001206 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001207 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001208 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001209 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001210 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001211 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001212}