blob: 60f381c657acd7ec5023561b3ef4eaf786eb6628 [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
Jason Samsa6f338c2012-02-24 16:22:16 -080086 /**
87 * Name of the file that holds the object cache.
88 */
89 private static final String CACHE_PATH = "com.android.renderscript.cache";
Jason Sams1a4e1f32012-02-24 17:51:24 -080090 static String mCachePath;
Jason Samsa6f338c2012-02-24 16:22:16 -080091
92 /**
93 * Sets the directory to use as a persistent storage for the
94 * renderscript object file cache.
95 *
96 * @hide
97 * @param cacheDir A directory the current process can write to
98 */
Jason Samsa6f338c2012-02-24 16:22:16 -080099 public static void setupDiskCache(File cacheDir) {
100 File f = new File(cacheDir, CACHE_PATH);
101 mCachePath = f.getAbsolutePath();
102 f.mkdirs();
103 }
104
Jason Samsadd26dc2013-02-22 18:43:45 -0800105 public enum ContextType {
106 NORMAL (0),
107 DEBUG (1),
108 PROFILE (2);
109
110 int mID;
111 ContextType(int id) {
112 mID = id;
113 }
114 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800115
Jason Sams2e1872f2010-08-17 16:25:41 -0700116 // Methods below are wrapped to protect the non-threadsafe
117 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -0700118 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700119 int colorMin, int colorPref,
120 int alphaMin, int alphaPref,
121 int depthMin, int depthPref,
122 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700123 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -0700124 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700125 int colorMin, int colorPref,
126 int alphaMin, int alphaPref,
127 int depthMin, int depthPref,
128 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700129 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700130 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700131 alphaMin, alphaPref, depthMin, depthPref,
132 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700133 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700134 }
Jason Samsadd26dc2013-02-22 18:43:45 -0800135 native int rsnContextCreate(int dev, int ver, int sdkVer, int contextType);
136 synchronized int nContextCreate(int dev, int ver, int sdkVer, int contextType) {
137 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700138 }
139 native void rsnContextDestroy(int con);
140 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800141 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700142 rsnContextDestroy(mContext);
143 }
144 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
145 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800146 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700147 rsnContextSetSurface(mContext, w, h, sur);
148 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700149 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
150 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
151 validate();
152 rsnContextSetSurfaceTexture(mContext, w, h, sur);
153 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700154 native void rsnContextSetPriority(int con, int p);
155 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800156 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700157 rsnContextSetPriority(mContext, p);
158 }
159 native void rsnContextDump(int con, int bits);
160 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800161 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700162 rsnContextDump(mContext, bits);
163 }
164 native void rsnContextFinish(int con);
165 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800166 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700167 rsnContextFinish(mContext);
168 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700169
Jason Sams455d6442013-02-05 19:20:18 -0800170 native void rsnContextSendMessage(int con, int id, int[] data);
171 synchronized void nContextSendMessage(int id, int[] data) {
172 validate();
173 rsnContextSendMessage(mContext, id, data);
174 }
175
Jason Sams2e1872f2010-08-17 16:25:41 -0700176 native void rsnContextBindRootScript(int con, int script);
177 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800178 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700179 rsnContextBindRootScript(mContext, script);
180 }
181 native void rsnContextBindSampler(int con, int sampler, int slot);
182 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800183 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 rsnContextBindSampler(mContext, sampler, slot);
185 }
186 native void rsnContextBindProgramStore(int con, int pfs);
187 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800188 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 rsnContextBindProgramStore(mContext, pfs);
190 }
191 native void rsnContextBindProgramFragment(int con, int pf);
192 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700194 rsnContextBindProgramFragment(mContext, pf);
195 }
196 native void rsnContextBindProgramVertex(int con, int pv);
197 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800198 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 rsnContextBindProgramVertex(mContext, pv);
200 }
201 native void rsnContextBindProgramRaster(int con, int pr);
202 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 rsnContextBindProgramRaster(mContext, pr);
205 }
206 native void rsnContextPause(int con);
207 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700209 rsnContextPause(mContext);
210 }
211 native void rsnContextResume(int con);
212 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800213 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 rsnContextResume(mContext);
215 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700216
Jason Sams2e1872f2010-08-17 16:25:41 -0700217 native void rsnAssignName(int con, int obj, byte[] name);
218 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700220 rsnAssignName(mContext, obj, name);
221 }
222 native String rsnGetName(int con, int obj);
223 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800224 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700225 return rsnGetName(mContext, obj);
226 }
227 native void rsnObjDestroy(int con, int id);
228 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800229 // There is a race condition here. The calling code may be run
230 // by the gc while teardown is occuring. This protects againts
231 // deleting dead objects.
232 if (mContext != 0) {
233 rsnObjDestroy(mContext, id);
234 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 }
Jason Samsfe08d992009-05-27 14:45:32 -0700236
Jason Sams2e1872f2010-08-17 16:25:41 -0700237 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
238 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700240 return rsnElementCreate(mContext, type, kind, norm, vecSize);
241 }
Jason Sams70d4e502010-09-02 17:35:23 -0700242 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
243 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800244 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700245 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700246 }
247 native void rsnElementGetNativeData(int con, int id, int[] elementData);
248 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800249 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700250 rsnElementGetNativeData(mContext, id, elementData);
251 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700252 native void rsnElementGetSubElements(int con, int id,
253 int[] IDs, String[] names, int[] arraySizes);
254 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800255 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700256 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700257 }
Jason Sams768bc022009-09-21 19:41:04 -0700258
Jason Samsb109cc72013-01-07 18:20:12 -0800259 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
260 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800261 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800262 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700263 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700264 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
265 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800266 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700267 rsnTypeGetNativeData(mContext, id, typeData);
268 }
Jason Sams768bc022009-09-21 19:41:04 -0700269
Jason Sams857d0c72011-11-23 15:02:15 -0800270 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
271 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800272 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800273 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700274 }
Jason Sams5476b452010-12-08 16:14:36 -0800275 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
276 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800277 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800278 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700279 }
Tim Murraya3145512012-12-04 17:59:29 -0800280
281 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
282 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
283 validate();
284 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
285 }
286
287
Jason Sams5476b452010-12-08 16:14:36 -0800288 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
289 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800290 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800291 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800292 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700293 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
294 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800295 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700296 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
297 }
Jason Sams5476b452010-12-08 16:14:36 -0800298 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
299 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800300 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800301 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
302 }
303
Jason Sams4ef66502010-12-10 16:03:15 -0800304 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
305 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800306 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800307 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
308 }
309
310
Jason Sams5476b452010-12-08 16:14:36 -0800311 native void rsnAllocationSyncAll(int con, int alloc, int src);
312 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800313 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800314 rsnAllocationSyncAll(mContext, alloc, src);
315 }
Jason Sams72226e02013-02-22 12:45:54 -0800316 native Surface rsnAllocationGetSurface(int con, int alloc);
317 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800318 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800319 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700320 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700321 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
322 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800323 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700324 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800325 }
326 native void rsnAllocationIoSend(int con, int alloc);
327 synchronized void nAllocationIoSend(int alloc) {
328 validate();
329 rsnAllocationIoSend(mContext, alloc);
330 }
331 native void rsnAllocationIoReceive(int con, int alloc);
332 synchronized void nAllocationIoReceive(int alloc) {
333 validate();
334 rsnAllocationIoReceive(mContext, alloc);
335 }
336
Jason Sams615e7ce2012-01-13 14:01:20 -0800337
Jason Samsf7086092011-01-12 13:28:37 -0800338 native void rsnAllocationGenerateMipmaps(int con, int alloc);
339 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800340 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800341 rsnAllocationGenerateMipmaps(mContext, alloc);
342 }
Jason Sams4ef66502010-12-10 16:03:15 -0800343 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
344 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800345 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800346 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700347 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700348
Jason Sams49a05d72010-12-29 14:31:29 -0800349
350 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
351 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] 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);
Jason Sams2e1872f2010-08-17 16:25:41 -0700354 }
Jason Sams49a05d72010-12-29 14:31:29 -0800355 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
356 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] 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, byte[] d, int sizeBytes);
361 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] 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);
364 }
365 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
366 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] 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 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700370
Jason Sams49a05d72010-12-29 14:31:29 -0800371 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
372 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800373 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800374 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700375 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700376
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700377 native void rsnAllocationData2D(int con,
378 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 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
384 int dstMip, int dstFace,
385 int width, int height,
386 int srcAlloc, int srcXoff, int srcYoff,
387 int srcMip, int srcFace) {
388 validate();
389 rsnAllocationData2D(mContext,
390 dstAlloc, dstXoff, dstYoff,
391 dstMip, dstFace,
392 width, height,
393 srcAlloc, srcXoff, srcYoff,
394 srcMip, srcFace);
395 }
396
Jason Samsfa445b92011-01-07 17:00:07 -0800397 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
398 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 -0800399 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800400 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
401 }
402 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
403 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 -0800404 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800405 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
406 }
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, int[] d, int sizeBytes);
408 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 -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 Sams49a05d72010-12-29 14:31:29 -0800412 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
413 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 -0800414 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800415 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700416 }
Jason Samsfa445b92011-01-07 17:00:07 -0800417 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
418 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800419 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800420 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
421 }
Jason Sams49a05d72010-12-29 14:31:29 -0800422
Jason Samsfa445b92011-01-07 17:00:07 -0800423 native void rsnAllocationRead(int con, int id, byte[] d);
424 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800425 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800426 rsnAllocationRead(mContext, id, d);
427 }
428 native void rsnAllocationRead(int con, int id, short[] d);
429 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800430 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800431 rsnAllocationRead(mContext, id, d);
432 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700433 native void rsnAllocationRead(int con, int id, int[] d);
434 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800435 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700436 rsnAllocationRead(mContext, id, d);
437 }
438 native void rsnAllocationRead(int con, int id, float[] d);
439 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800440 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700441 rsnAllocationRead(mContext, id, d);
442 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700443 native int rsnAllocationGetType(int con, int id);
444 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800445 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700446 return rsnAllocationGetType(mContext, id);
447 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700448
Jason Sams5edc6082010-10-05 13:32:49 -0700449 native void rsnAllocationResize1D(int con, int id, int dimX);
450 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700452 rsnAllocationResize1D(mContext, id, dimX);
453 }
454 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
455 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800456 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700457 rsnAllocationResize2D(mContext, id, dimX, dimY);
458 }
459
Jason Sams2e1872f2010-08-17 16:25:41 -0700460 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
461 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800462 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700463 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
464 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800465 native int rsnFileA3DCreateFromFile(int con, String path);
466 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800467 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800468 return rsnFileA3DCreateFromFile(mContext, path);
469 }
470 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
471 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800472 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800473 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
474 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700475 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
476 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800477 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
479 }
480 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
481 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800482 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700483 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
484 }
485 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
486 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800487 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700488 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
489 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700490
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800491 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
492 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800493 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700494 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
495 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800496 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
497 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800498 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800499 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
500 }
501 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
502 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800503 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800504 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
505 }
Jason Sams22534172009-08-04 16:58:20 -0700506
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700507
Jason Sams2e1872f2010-08-17 16:25:41 -0700508 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
509 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800510 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700511 rsnScriptBindAllocation(mContext, script, alloc, slot);
512 }
513 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
514 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800515 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700516 rsnScriptSetTimeZone(mContext, script, timeZone);
517 }
518 native void rsnScriptInvoke(int con, int id, int slot);
519 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800520 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700521 rsnScriptInvoke(mContext, id, slot);
522 }
Jason Sams6e494d32011-04-27 16:33:11 -0700523 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
524 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800525 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
526 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800527 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
528 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700529 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
530 validate();
531 if (params == null) {
532 rsnScriptForEach(mContext, id, slot, ain, aout);
533 } else {
534 rsnScriptForEach(mContext, id, slot, ain, aout, params);
535 }
536 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800537
538 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
539 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
540 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800541 if (params == null) {
542 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
543 } else {
544 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
545 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800546 }
547
Jason Sams2e1872f2010-08-17 16:25:41 -0700548 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
549 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800550 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700551 rsnScriptInvokeV(mContext, id, slot, params);
552 }
553 native void rsnScriptSetVarI(int con, int id, int slot, int val);
554 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800555 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700556 rsnScriptSetVarI(mContext, id, slot, val);
557 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700558 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
559 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800560 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700561 rsnScriptSetVarJ(mContext, id, slot, val);
562 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700563 native void rsnScriptSetVarF(int con, int id, int slot, float val);
564 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800565 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700566 rsnScriptSetVarF(mContext, id, slot, val);
567 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700568 native void rsnScriptSetVarD(int con, int id, int slot, double val);
569 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800570 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700571 rsnScriptSetVarD(mContext, id, slot, val);
572 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700573 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
574 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800575 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700576 rsnScriptSetVarV(mContext, id, slot, val);
577 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700578 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
579 int e, int[] dims);
580 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
581 int e, int[] dims) {
582 validate();
583 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
584 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800585 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
586 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800587 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800588 rsnScriptSetVarObj(mContext, id, slot, val);
589 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700590
Jason Samse4a06c52011-03-16 16:29:28 -0700591 native int rsnScriptCCreate(int con, String resName, String cacheDir,
592 byte[] script, int length);
593 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800594 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700595 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700596 }
Jason Samsebfb4362009-09-23 13:57:02 -0700597
Jason Sams6ab97682012-08-10 12:09:43 -0700598 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
599 synchronized int nScriptIntrinsicCreate(int id, int eid) {
600 validate();
601 return rsnScriptIntrinsicCreate(mContext, id, eid);
602 }
603
Jason Sams08a81582012-09-18 12:32:10 -0700604 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
605 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
606 validate();
607 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
608 }
609
610 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
611 synchronized int nScriptFieldIDCreate(int sid, int slot) {
612 validate();
613 return rsnScriptFieldIDCreate(mContext, sid, slot);
614 }
615
616 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
617 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
618 validate();
619 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
620 }
621
622 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
623 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
624 validate();
625 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
626 }
627
628 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
629 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
630 validate();
631 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
632 }
633
634 native void rsnScriptGroupExecute(int con, int group);
635 synchronized void nScriptGroupExecute(int group) {
636 validate();
637 rsnScriptGroupExecute(mContext, group);
638 }
639
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700640 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
641 int wrapS, int wrapT, int wrapR, float aniso);
642 synchronized int nSamplerCreate(int magFilter, int minFilter,
643 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800644 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700645 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700646 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800647
Jason Sams331bf9b2011-04-06 11:23:54 -0700648 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
649 boolean depthMask, boolean dither,
650 int srcMode, int dstMode, int depthFunc);
651 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
652 boolean depthMask, boolean dither,
653 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800654 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700655 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
656 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700657 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700658
Jason Sams94aaed32011-09-23 14:18:53 -0700659 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
660 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800661 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700662 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700663 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700664
Jason Sams2e1872f2010-08-17 16:25:41 -0700665 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
666 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800667 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700668 rsnProgramBindConstants(mContext, pv, slot, mID);
669 }
670 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
671 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800672 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700673 rsnProgramBindTexture(mContext, vpf, slot, a);
674 }
675 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
676 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800677 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700678 rsnProgramBindSampler(mContext, vpf, slot, s);
679 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800680 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
681 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800682 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800683 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700684 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800685 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
686 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800687 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800688 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700689 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700690
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700691 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
692 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800693 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700694 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800695 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700696 native int rsnMeshGetVertexBufferCount(int con, int id);
697 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800698 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700699 return rsnMeshGetVertexBufferCount(mContext, id);
700 }
701 native int rsnMeshGetIndexCount(int con, int id);
702 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800703 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700704 return rsnMeshGetIndexCount(mContext, id);
705 }
706 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
707 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800708 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700709 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
710 }
711 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
712 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800713 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700714 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
715 }
716
Jason Samsf15ed012011-10-31 13:23:43 -0700717 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
718 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
719 validate();
720 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
721 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700722
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800723 int mDev;
724 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700725 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800726 MessageThread mMessageThread;
Tim Murrayf8c033d2013-04-09 14:33:32 -0700727 GCThread mGCThread;
728
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700729
Jason Sams8cb39de2010-06-01 15:47:01 -0700730 Element mElement_U8;
731 Element mElement_I8;
732 Element mElement_U16;
733 Element mElement_I16;
734 Element mElement_U32;
735 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700736 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700737 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700738 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700739 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700740 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700741
Jason Sams8cb39de2010-06-01 15:47:01 -0700742 Element mElement_ELEMENT;
743 Element mElement_TYPE;
744 Element mElement_ALLOCATION;
745 Element mElement_SAMPLER;
746 Element mElement_SCRIPT;
747 Element mElement_MESH;
748 Element mElement_PROGRAM_FRAGMENT;
749 Element mElement_PROGRAM_VERTEX;
750 Element mElement_PROGRAM_RASTER;
751 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700752 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700753
Jason Sams3c0dfba2009-09-27 17:50:38 -0700754 Element mElement_A_8;
755 Element mElement_RGB_565;
756 Element mElement_RGB_888;
757 Element mElement_RGBA_5551;
758 Element mElement_RGBA_4444;
759 Element mElement_RGBA_8888;
760
Jason Sams8cb39de2010-06-01 15:47:01 -0700761 Element mElement_FLOAT_2;
762 Element mElement_FLOAT_3;
763 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700764
765 Element mElement_DOUBLE_2;
766 Element mElement_DOUBLE_3;
767 Element mElement_DOUBLE_4;
768
769 Element mElement_UCHAR_2;
770 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700771 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800772
Stephen Hines836c4a52011-06-01 14:38:10 -0700773 Element mElement_CHAR_2;
774 Element mElement_CHAR_3;
775 Element mElement_CHAR_4;
776
777 Element mElement_USHORT_2;
778 Element mElement_USHORT_3;
779 Element mElement_USHORT_4;
780
781 Element mElement_SHORT_2;
782 Element mElement_SHORT_3;
783 Element mElement_SHORT_4;
784
785 Element mElement_UINT_2;
786 Element mElement_UINT_3;
787 Element mElement_UINT_4;
788
789 Element mElement_INT_2;
790 Element mElement_INT_3;
791 Element mElement_INT_4;
792
793 Element mElement_ULONG_2;
794 Element mElement_ULONG_3;
795 Element mElement_ULONG_4;
796
797 Element mElement_LONG_2;
798 Element mElement_LONG_3;
799 Element mElement_LONG_4;
800
Jason Sams1d45c472010-08-25 14:31:48 -0700801 Element mElement_MATRIX_4X4;
802 Element mElement_MATRIX_3X3;
803 Element mElement_MATRIX_2X2;
804
Jason Sams4d339932010-05-11 14:03:58 -0700805 Sampler mSampler_CLAMP_NEAREST;
806 Sampler mSampler_CLAMP_LINEAR;
807 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
808 Sampler mSampler_WRAP_NEAREST;
809 Sampler mSampler_WRAP_LINEAR;
810 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800811 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
812 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
813 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700814
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700815 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
816 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700817 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
818 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700819
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700820 ProgramRaster mProgramRaster_CULL_BACK;
821 ProgramRaster mProgramRaster_CULL_FRONT;
822 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700823
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700824 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700825 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700826
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700827 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800828 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800829 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800830 * fields will be filled in and then the run method called by a message
831 * handling thread. This will occur some time after sendToClient completes
832 * in the script.
833 *
834 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800835 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700836 protected int[] mData;
837 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800838 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700839 public void run() {
840 }
841 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700842 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800843 * If an application is expecting messages it should set this field to an
844 * instance of RSMessage. This instance will receive all the user messages
845 * sent from sendToClient by scripts from this context.
846 *
847 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800848 RSMessageHandler mMessageCallback = null;
849
850 public void setMessageHandler(RSMessageHandler msg) {
851 mMessageCallback = msg;
852 }
853 public RSMessageHandler getMessageHandler() {
854 return mMessageCallback;
855 }
Jason Sams516c3192009-10-06 13:58:47 -0700856
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700857 /**
Jason Sams455d6442013-02-05 19:20:18 -0800858 * @hide
859 *
860 * @param id
861 * @param data
862 */
863 public void sendMessage(int id, int[] data) {
864 nContextSendMessage(id, data);
865 }
866
867 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800868 * Runtime error base class. An application should derive from this class
869 * if it wishes to install an error handler. When errors occur at runtime
870 * the fields in this class will be filled and the run method called.
871 *
872 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800873 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800874 protected String mErrorMessage;
875 protected int mErrorNum;
876 public void run() {
877 }
878 }
Jason Sams27676fe2010-11-10 17:00:59 -0800879
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700880 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800881 * Application Error handler. All runtime errors will be dispatched to the
882 * instance of RSAsyncError set here. If this field is null a
883 * RSRuntimeException will instead be thrown with details about the error.
884 * This will cause program termaination.
885 *
886 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800887 RSErrorHandler mErrorCallback = null;
888
889 public void setErrorHandler(RSErrorHandler msg) {
890 mErrorCallback = msg;
891 }
892 public RSErrorHandler getErrorHandler() {
893 return mErrorCallback;
894 }
Jason Sams1c415172010-11-08 17:06:46 -0800895
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700896 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800897 * RenderScript worker threads priority enumeration. The default value is
898 * NORMAL. Applications wishing to do background processing such as
899 * wallpapers should set their priority to LOW to avoid starving forground
900 * processes.
901 */
Jason Sams7d787b42009-11-15 12:14:26 -0800902 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700903 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
904 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800905
906 int mID;
907 Priority(int id) {
908 mID = id;
909 }
910 }
911
Jason Sams771bebb2009-12-07 12:40:12 -0800912 void validate() {
913 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700914 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800915 }
916 }
917
Jason Sams27676fe2010-11-10 17:00:59 -0800918
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700919 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800920 * Change the priority of the worker threads for this context.
921 *
922 * @param p New priority to be set.
923 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800924 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800925 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800926 nContextSetPriority(p.mID);
927 }
928
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800929 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700930 RenderScript mRS;
931 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800932 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800933
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800934 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
935 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
936 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
937 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
938 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700939
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800940 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800941
Jason Sams516c3192009-10-06 13:58:47 -0700942 MessageThread(RenderScript rs) {
943 super("RSMessageThread");
944 mRS = rs;
945
946 }
947
948 public void run() {
949 // This function is a temporary solution. The final solution will
950 // used typed allocations where the message id is the type indicator.
951 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700952 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700953 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700954 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700955 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800956 int size = mAuxData[1];
957 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800958
959 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
960 if ((size>>2) >= rbuf.length) {
961 rbuf = new int[(size + 3) >> 2];
962 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700963 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
964 RS_MESSAGE_TO_CLIENT_USER) {
965 throw new RSDriverException("Error processing message from Renderscript.");
966 }
Jason Sams1c415172010-11-08 17:06:46 -0800967
968 if(mRS.mMessageCallback != null) {
969 mRS.mMessageCallback.mData = rbuf;
970 mRS.mMessageCallback.mID = subID;
971 mRS.mMessageCallback.mLength = size;
972 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700973 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800974 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700975 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700976 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700977 }
Jason Sams1c415172010-11-08 17:06:46 -0800978
979 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
980 String e = mRS.nContextGetErrorMessage(mRS.mContext);
981
Jason Samsadd9d962010-11-22 16:20:16 -0800982 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
983 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
984 }
985
Jason Sams1c415172010-11-08 17:06:46 -0800986 if(mRS.mErrorCallback != null) {
987 mRS.mErrorCallback.mErrorMessage = e;
988 mRS.mErrorCallback.mErrorNum = subID;
989 mRS.mErrorCallback.run();
990 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -0800991 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -0800992 // Do not throw here. In these cases, we do not have
993 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -0800994 }
995 continue;
996 }
997
998 // 2: teardown.
999 // But we want to avoid starving other threads during
1000 // teardown by yielding until the next line in the destructor
1001 // can execute to set mRun = false
1002 try {
1003 sleep(1, 0);
1004 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001005 }
Jason Sams516c3192009-10-06 13:58:47 -07001006 }
Jason Sams3bc47d42009-11-12 15:10:25 -08001007 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001008 }
1009 }
1010
Tim Murrayf8c033d2013-04-09 14:33:32 -07001011 static class GCThread extends Thread {
1012 RenderScript mRS;
1013 boolean mRun = true;
1014
1015 int currentSize = 0;
1016 final static int targetSize = 256*1024*1024; // call System.gc after 256MB of allocs
1017
1018 GCThread(RenderScript rs) {
1019 super("RSGCThread");
1020 mRS = rs;
1021
1022 }
1023
1024 public void run() {
1025 while(mRun) {
1026 boolean doGC = false;
1027 synchronized(this) {
1028 if (currentSize >= targetSize) {
1029 doGC = true;
1030 }
1031 }
1032 if (doGC == true) {
1033 System.gc();
1034 }
1035 try {
1036 sleep(1, 0);
1037 } catch(InterruptedException e) {
1038 }
1039 }
1040 Log.d(LOG_TAG, "GCThread exiting.");
1041 }
1042
1043 public synchronized void addAllocSize(int bytes) {
1044 currentSize += bytes;
1045 }
1046
1047 public synchronized void removeAllocSize(int bytes) {
1048 currentSize -= bytes;
1049 }
1050
1051 }
1052
1053
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001054 RenderScript(Context ctx) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001055 if (ctx != null) {
1056 mApplicationContext = ctx.getApplicationContext();
1057 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001058 }
1059
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001060 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001061 * Gets the application context associated with the RenderScript context.
1062 *
1063 * @return The application context.
1064 */
1065 public final Context getApplicationContext() {
1066 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001067 }
1068
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001069 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001070 * @hide
1071 */
1072 public static RenderScript create(Context ctx, int sdkVersion) {
1073 return create(ctx, sdkVersion, ContextType.NORMAL);
1074 }
1075
Tim Murrayf8c033d2013-04-09 14:33:32 -07001076 void addAllocSizeForGC(int bytes) {
1077 mGCThread.addAllocSize(bytes);
1078 }
1079
1080 void removeAllocSizeForGC(int bytes) {
1081 mGCThread.removeAllocSize(bytes);
1082 }
1083
1084
Jason Samsadd26dc2013-02-22 18:43:45 -08001085 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001086 * Create a basic RenderScript context.
1087 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001088 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001089 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001090 * @return RenderScript
1091 */
Jason Samsadd26dc2013-02-22 18:43:45 -08001092 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001093 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001094
1095 rs.mDev = rs.nDeviceCreate();
Jason Samsadd26dc2013-02-22 18:43:45 -08001096 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
Jason Sams26985362011-05-03 15:01:58 -07001097 if (rs.mContext == 0) {
1098 throw new RSDriverException("Failed to create RS context.");
1099 }
Jason Sams704ff642010-02-09 16:05:07 -08001100 rs.mMessageThread = new MessageThread(rs);
Tim Murrayf8c033d2013-04-09 14:33:32 -07001101 rs.mGCThread = new GCThread(rs);
Jason Sams704ff642010-02-09 16:05:07 -08001102 rs.mMessageThread.start();
Tim Murrayf8c033d2013-04-09 14:33:32 -07001103 rs.mGCThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001104 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001105 }
1106
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001107 /**
Jason Sams1a4e1f32012-02-24 17:51:24 -08001108 * Create a basic RenderScript context.
1109 *
1110 * @param ctx The context.
1111 * @return RenderScript
1112 */
1113 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001114 return create(ctx, ContextType.NORMAL);
1115 }
1116
1117 /**
1118 * Create a basic RenderScript context.
1119 *
1120 * @hide
1121 *
1122 * @param ctx The context.
1123 * @return RenderScript
1124 */
1125 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001126 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Samsadd26dc2013-02-22 18:43:45 -08001127 return create(ctx, v, ct);
Jason Sams1a4e1f32012-02-24 17:51:24 -08001128 }
1129
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001130 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001131 * Print the currently available debugging information about the state of
1132 * the RS context to the log.
1133 *
Jason Sams27676fe2010-11-10 17:00:59 -08001134 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001135 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001136 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001137 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001138 }
1139
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001140 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001141 * Wait for any commands in the fifo between the java bindings and native to
1142 * be processed.
1143 *
1144 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001145 public void finish() {
1146 nContextFinish();
1147 }
1148
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001149 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001150 * Destroy this renderscript context. Once this function is called its no
1151 * longer legal to use this or any objects created by this context.
1152 *
1153 */
Jason Samsf5b45962009-08-25 14:49:07 -07001154 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001155 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001156 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001157 mMessageThread.mRun = false;
Tim Murrayf8c033d2013-04-09 14:33:32 -07001158 mGCThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001159 try {
1160 mMessageThread.join();
Tim Murrayf8c033d2013-04-09 14:33:32 -07001161 mGCThread.join();
Jason Samsa8bf9422010-09-16 13:43:19 -07001162 } catch(InterruptedException e) {
1163 }
Jason Sams516c3192009-10-06 13:58:47 -07001164
Jason Sams2e1872f2010-08-17 16:25:41 -07001165 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001166 mContext = 0;
1167
1168 nDeviceDestroy(mDev);
1169 mDev = 0;
1170 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001171
Jason Samsa9e7a052009-09-25 14:51:22 -07001172 boolean isAlive() {
1173 return mContext != 0;
1174 }
1175
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001176 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001177 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001178 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001179 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001180 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001181 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001182}