blob: 126b8c7ed46aa3d4dffb89b39867c61cb36993ca [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
Tim Murray47f31582015-04-07 15:43:24 -070019import java.io.File;
Tim Murray2f2472c2013-08-22 14:55:26 -070020import java.lang.reflect.Method;
Tim Murray06b45672014-01-07 11:13:56 -080021import java.util.concurrent.locks.ReentrantReadWriteLock;
Jason Sams36e612a2009-07-31 16:26:13 -070022
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080023import android.content.Context;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080024import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070025import android.graphics.Bitmap;
Jason Samsfaa32b32011-06-20 16:58:04 -070026import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070027import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070028import android.util.Log;
29import android.view.Surface;
Dan Morrille4d9a012013-03-28 18:10:43 -070030import android.os.SystemProperties;
Tim Murray6d7a53c2013-05-23 16:59:23 -070031import android.os.Trace;
Jason Samse16da122015-03-18 17:04:18 -070032import java.util.ArrayList;
Stephen Hines4382467a2011-08-01 15:02:34 -070033
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070034/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070035 * This class provides access to a RenderScript context, which controls RenderScript
36 * initialization, resource management, and teardown. An instance of the RenderScript
37 * class must be created before any other RS objects can be created.
Jason Sams27676fe2010-11-10 17:00:59 -080038 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080039 * <div class="special reference">
40 * <h3>Developer Guides</h3>
Tim Murrayc11e25c2013-04-09 11:01:01 -070041 * <p>For more information about creating an application that uses RenderScript, read the
42 * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080043 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070044 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070045public class RenderScript {
Tim Murray6d7a53c2013-05-23 16:59:23 -070046 static final long TRACE_TAG = Trace.TRACE_TAG_RS;
47
Jason Sams3bc47d42009-11-12 15:10:25 -080048 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d72010-12-06 15:59:59 -080049 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070050 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070051 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070052
Jason Samse16da122015-03-18 17:04:18 -070053 static private ArrayList<RenderScript> mProcessContextList = new ArrayList<RenderScript>();
54 private boolean mIsProcessContext = false;
55 private int mContextFlags = 0;
56 private int mContextSdkVersion = 0;
57
58
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080059 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080061 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070062 * We use a class initializer to allow the native code to cache some
63 * field offsets.
64 */
Dan Morrille4d9a012013-03-28 18:10:43 -070065 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // TODO: now used locally; remove?
Jason Samsbf6ef8d72010-12-06 15:59:59 -080066 static boolean sInitialized;
67 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068
Tim Murray2f2472c2013-08-22 14:55:26 -070069 static Object sRuntime;
70 static Method registerNativeAllocation;
71 static Method registerNativeFree;
Jason Samsdba3ba52009-07-30 14:56:12 -070072
Jason Sams26e90512014-05-07 14:23:27 -070073 /*
Tim Murrayfd710e72014-06-06 11:10:45 -070074 * Context creation flag that specifies a normal context.
Jason Sams26e90512014-05-07 14:23:27 -070075 */
Tim Murrayfd710e72014-06-06 11:10:45 -070076 public static final int CREATE_FLAG_NONE = 0x0000;
Jason Sams26e90512014-05-07 14:23:27 -070077
78 /*
79 * Context creation flag which specifies a context optimized for low
80 * latency over peak performance. This is a hint and may have no effect
81 * on some implementations.
82 */
Tim Murrayfd710e72014-06-06 11:10:45 -070083 public static final int CREATE_FLAG_LOW_LATENCY = 0x0002;
Jason Sams26e90512014-05-07 14:23:27 -070084
85 /*
86 * Context creation flag which specifies a context optimized for long
87 * battery life over peak performance. This is a hint and may have no effect
88 * on some implementations.
89 */
Tim Murrayfd710e72014-06-06 11:10:45 -070090 public static final int CREATE_FLAG_LOW_POWER = 0x0004;
Jason Sams26e90512014-05-07 14:23:27 -070091
Tim Murray56f9e6f2014-05-16 11:47:26 -070092 /*
93 * Detect the bitness of the VM to allow FieldPacker to do the right thing.
94 */
95 static native int rsnSystemGetPointerSize();
96 static int sPointerSize;
97
Jack Palevich60aa3ea2009-05-26 13:45:08 -070098 static {
99 sInitialized = false;
Dan Morrille4d9a012013-03-28 18:10:43 -0700100 if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
101 try {
Tim Murray2f2472c2013-08-22 14:55:26 -0700102 Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
103 Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
104 sRuntime = get_runtime.invoke(null);
105 registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
106 registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
107 } catch (Exception e) {
108 Log.e(LOG_TAG, "Error loading GC methods: " + e);
109 throw new RSRuntimeException("Error loading GC methods: " + e);
110 }
111 try {
Dan Morrille4d9a012013-03-28 18:10:43 -0700112 System.loadLibrary("rs_jni");
113 _nInit();
114 sInitialized = true;
Tim Murray56f9e6f2014-05-16 11:47:26 -0700115 sPointerSize = rsnSystemGetPointerSize();
Dan Morrille4d9a012013-03-28 18:10:43 -0700116 } catch (UnsatisfiedLinkError e) {
117 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
118 throw new RSRuntimeException("Error loading RS jni library: " + e);
119 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700120 }
121 }
122
Jason Sams2e1872f2010-08-17 16:25:41 -0700123 // Non-threadsafe functions.
Tim Murrayeff663f2013-11-15 13:08:30 -0800124 native long nDeviceCreate();
125 native void nDeviceDestroy(long dev);
126 native void nDeviceSetConfig(long dev, int param, int value);
127 native int nContextGetUserMessage(long con, int[] data);
128 native String nContextGetErrorMessage(long con);
129 native int nContextPeekMessage(long con, int[] subID);
130 native void nContextInitToClient(long con);
131 native void nContextDeinitToClient(long con);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700132
Tim Murray67cc2d02014-02-06 16:39:38 -0800133 // this should be a monotonically increasing ID
134 // used in conjunction with the API version of a device
135 static final long sMinorID = 1;
136
137 /**
138 * Returns an identifier that can be used to identify a particular
139 * minor version of RS.
140 *
141 * @hide
142 */
143 public static long getMinorID() {
144 return sMinorID;
145 }
146
Jason Sams02d56d92013-04-12 16:40:50 -0700147 /**
148 * ContextType specifies the specific type of context to be created.
149 *
150 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800151 public enum ContextType {
Jason Sams02d56d92013-04-12 16:40:50 -0700152 /**
153 * NORMAL context, this is the default and what shipping apps should
154 * use.
155 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800156 NORMAL (0),
Jason Sams02d56d92013-04-12 16:40:50 -0700157
158 /**
159 * DEBUG context, perform extra runtime checks to validate the
160 * kernels and APIs are being used as intended. Get and SetElementAt
161 * will be bounds checked in this mode.
162 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800163 DEBUG (1),
Jason Sams02d56d92013-04-12 16:40:50 -0700164
165 /**
166 * PROFILE context, Intended to be used once the first time an
167 * application is run on a new device. This mode allows the runtime to
168 * do additional testing and performance tuning.
169 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800170 PROFILE (2);
171
172 int mID;
173 ContextType(int id) {
174 mID = id;
175 }
176 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800177
Stephen Hines42028a82013-04-17 19:22:01 -0700178 ContextType mContextType;
Tim Murray06b45672014-01-07 11:13:56 -0800179 ReentrantReadWriteLock mRWLock;
Stephen Hines42028a82013-04-17 19:22:01 -0700180
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 // Methods below are wrapped to protect the non-threadsafe
182 // lockless fifo.
Tim Murrayeff663f2013-11-15 13:08:30 -0800183 native long rsnContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700184 int colorMin, int colorPref,
185 int alphaMin, int alphaPref,
186 int depthMin, int depthPref,
187 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700188 int samplesMin, int samplesPref, float samplesQ, int dpi);
Tim Murrayeff663f2013-11-15 13:08:30 -0800189 synchronized long nContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700190 int colorMin, int colorPref,
191 int alphaMin, int alphaPref,
192 int depthMin, int depthPref,
193 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700194 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700195 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700196 alphaMin, alphaPref, depthMin, depthPref,
197 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700198 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800200 native long rsnContextCreate(long dev, int ver, int sdkVer, int contextType);
201 synchronized long nContextCreate(long dev, int ver, int sdkVer, int contextType) {
Jason Samsadd26dc2013-02-22 18:43:45 -0800202 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700203 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800204 native void rsnContextDestroy(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700205 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800206 validate();
Tim Murray06b45672014-01-07 11:13:56 -0800207
208 // take teardown lock
209 // teardown lock can only be taken when no objects are being destroyed
210 ReentrantReadWriteLock.WriteLock wlock = mRWLock.writeLock();
211 wlock.lock();
212
213 long curCon = mContext;
214 // context is considered dead as of this point
215 mContext = 0;
216
217 wlock.unlock();
218 rsnContextDestroy(curCon);
Jason Sams2e1872f2010-08-17 16:25:41 -0700219 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800220 native void rsnContextSetSurface(long con, int w, int h, Surface sur);
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800222 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700223 rsnContextSetSurface(mContext, w, h, sur);
224 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800225 native void rsnContextSetSurfaceTexture(long con, int w, int h, SurfaceTexture sur);
Jason Samsfaa32b32011-06-20 16:58:04 -0700226 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
227 validate();
228 rsnContextSetSurfaceTexture(mContext, w, h, sur);
229 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800230 native void rsnContextSetPriority(long con, int p);
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800232 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700233 rsnContextSetPriority(mContext, p);
234 }
Tim Murray47f31582015-04-07 15:43:24 -0700235 native void rsnContextSetCacheDir(long con, String cacheDir);
236 synchronized void nContextSetCacheDir(String cacheDir) {
237 validate();
238 rsnContextSetCacheDir(mContext, cacheDir);
239 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800240 native void rsnContextDump(long con, int bits);
Jason Sams2e1872f2010-08-17 16:25:41 -0700241 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800242 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700243 rsnContextDump(mContext, bits);
244 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800245 native void rsnContextFinish(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700246 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800247 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700248 rsnContextFinish(mContext);
249 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700250
Tim Murrayeff663f2013-11-15 13:08:30 -0800251 native void rsnContextSendMessage(long con, int id, int[] data);
Jason Sams455d6442013-02-05 19:20:18 -0800252 synchronized void nContextSendMessage(int id, int[] data) {
253 validate();
254 rsnContextSendMessage(mContext, id, data);
255 }
256
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000257 native void rsnContextBindRootScript(long con, long script);
258 synchronized void nContextBindRootScript(long script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800259 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700260 rsnContextBindRootScript(mContext, script);
261 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800262 native void rsnContextBindSampler(long con, int sampler, int slot);
Jason Sams2e1872f2010-08-17 16:25:41 -0700263 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800264 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700265 rsnContextBindSampler(mContext, sampler, slot);
266 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000267 native void rsnContextBindProgramStore(long con, long pfs);
268 synchronized void nContextBindProgramStore(long pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800269 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700270 rsnContextBindProgramStore(mContext, pfs);
271 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000272 native void rsnContextBindProgramFragment(long con, long pf);
273 synchronized void nContextBindProgramFragment(long pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800274 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700275 rsnContextBindProgramFragment(mContext, pf);
276 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000277 native void rsnContextBindProgramVertex(long con, long pv);
278 synchronized void nContextBindProgramVertex(long pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800279 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700280 rsnContextBindProgramVertex(mContext, pv);
281 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000282 native void rsnContextBindProgramRaster(long con, long pr);
283 synchronized void nContextBindProgramRaster(long pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800284 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700285 rsnContextBindProgramRaster(mContext, pr);
286 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800287 native void rsnContextPause(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700288 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800289 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700290 rsnContextPause(mContext);
291 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800292 native void rsnContextResume(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700293 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800294 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700295 rsnContextResume(mContext);
296 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700297
Yang Ni281c3252014-10-24 08:52:24 -0700298 native long rsnClosureCreate(long con, long kernelID, long returnValue,
299 long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
300 long[] depFieldIDs);
301 synchronized long nClosureCreate(long kernelID, long returnValue,
302 long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
303 long[] depFieldIDs) {
304 validate();
305 return rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
306 sizes, depClosures, depFieldIDs);
307 }
308
Yang Nibe392ad2015-01-23 17:16:02 -0800309 native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
310 long[] fieldIDs, long[] values, int[] sizes);
311 synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
312 long[] fieldIDs, long[] values, int[] sizes) {
313 validate();
314 return rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
315 values, sizes);
316 }
317
Yang Ni281c3252014-10-24 08:52:24 -0700318 native void rsnClosureSetArg(long con, long closureID, int index,
319 long value, int size);
320 synchronized void nClosureSetArg(long closureID, int index, long value,
321 int size) {
322 validate();
323 rsnClosureSetArg(mContext, closureID, index, value, size);
324 }
325
326 native void rsnClosureSetGlobal(long con, long closureID, long fieldID,
327 long value, int size);
328 // Does this have to be synchronized?
329 synchronized void nClosureSetGlobal(long closureID, long fieldID,
330 long value, int size) {
331 validate(); // TODO: is this necessary?
332 rsnClosureSetGlobal(mContext, closureID, fieldID, value, size);
333 }
334
Yang Niebf63402015-01-16 11:06:26 -0800335 native long rsnScriptGroup2Create(long con, String cachePath, long[] closures);
336 synchronized long nScriptGroup2Create(String cachePath, long[] closures) {
Yang Ni281c3252014-10-24 08:52:24 -0700337 validate();
Yang Niebf63402015-01-16 11:06:26 -0800338 return rsnScriptGroup2Create(mContext, cachePath, closures);
Yang Ni281c3252014-10-24 08:52:24 -0700339 }
340
341 native void rsnScriptGroup2Execute(long con, long groupID);
342 synchronized void nScriptGroup2Execute(long groupID) {
343 validate();
344 rsnScriptGroup2Execute(mContext, groupID);
345 }
346
Tim Murray460a0492013-11-19 12:45:54 -0800347 native void rsnAssignName(long con, long obj, byte[] name);
348 synchronized void nAssignName(long obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800349 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700350 rsnAssignName(mContext, obj, name);
351 }
Tim Murray460a0492013-11-19 12:45:54 -0800352 native String rsnGetName(long con, long obj);
353 synchronized String nGetName(long obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800354 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700355 return rsnGetName(mContext, obj);
356 }
Tim Murray06b45672014-01-07 11:13:56 -0800357
358 // nObjDestroy is explicitly _not_ synchronous to prevent crashes in finalizers
Tim Murray460a0492013-11-19 12:45:54 -0800359 native void rsnObjDestroy(long con, long id);
Tim Murray06b45672014-01-07 11:13:56 -0800360 void nObjDestroy(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800361 // There is a race condition here. The calling code may be run
362 // by the gc while teardown is occuring. This protects againts
363 // deleting dead objects.
364 if (mContext != 0) {
365 rsnObjDestroy(mContext, id);
366 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700367 }
Jason Samsfe08d992009-05-27 14:45:32 -0700368
Tim Murray460a0492013-11-19 12:45:54 -0800369 native long rsnElementCreate(long con, long type, int kind, boolean norm, int vecSize);
370 synchronized long nElementCreate(long type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800371 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700372 return rsnElementCreate(mContext, type, kind, norm, vecSize);
373 }
Ashok Bhat98071552014-02-12 09:54:43 +0000374 native long rsnElementCreate2(long con, long[] elements, String[] names, int[] arraySizes);
375 synchronized long nElementCreate2(long[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800376 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700377 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700378 }
Tim Murray460a0492013-11-19 12:45:54 -0800379 native void rsnElementGetNativeData(long con, long id, int[] elementData);
380 synchronized void nElementGetNativeData(long id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800381 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700382 rsnElementGetNativeData(mContext, id, elementData);
383 }
Tim Murray460a0492013-11-19 12:45:54 -0800384 native void rsnElementGetSubElements(long con, long id,
Ashok Bhat98071552014-02-12 09:54:43 +0000385 long[] IDs, String[] names, int[] arraySizes);
386 synchronized void nElementGetSubElements(long id, long[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800387 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700388 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700389 }
Jason Sams768bc022009-09-21 19:41:04 -0700390
Tim Murray460a0492013-11-19 12:45:54 -0800391 native long rsnTypeCreate(long con, long eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
392 synchronized long nTypeCreate(long eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800393 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800394 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700395 }
Ashok Bhat98071552014-02-12 09:54:43 +0000396 native void rsnTypeGetNativeData(long con, long id, long[] typeData);
397 synchronized void nTypeGetNativeData(long id, long[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800398 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700399 rsnTypeGetNativeData(mContext, id, typeData);
400 }
Jason Sams768bc022009-09-21 19:41:04 -0700401
Ashok Bhat98071552014-02-12 09:54:43 +0000402 native long rsnAllocationCreateTyped(long con, long type, int mip, int usage, long pointer);
403 synchronized long nAllocationCreateTyped(long type, int mip, int usage, long pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800404 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800405 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700406 }
Tim Murray460a0492013-11-19 12:45:54 -0800407 native long rsnAllocationCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
408 synchronized long nAllocationCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800409 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800410 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700411 }
Tim Murraya3145512012-12-04 17:59:29 -0800412
Tim Murray460a0492013-11-19 12:45:54 -0800413 native long rsnAllocationCreateBitmapBackedAllocation(long con, long type, int mip, Bitmap bmp, int usage);
414 synchronized long nAllocationCreateBitmapBackedAllocation(long type, int mip, Bitmap bmp, int usage) {
Tim Murraya3145512012-12-04 17:59:29 -0800415 validate();
416 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
417 }
418
Tim Murray460a0492013-11-19 12:45:54 -0800419 native long rsnAllocationCubeCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
420 synchronized long nAllocationCubeCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800421 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800422 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800423 }
Tim Murray460a0492013-11-19 12:45:54 -0800424 native long rsnAllocationCreateBitmapRef(long con, long type, Bitmap bmp);
425 synchronized long nAllocationCreateBitmapRef(long type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800426 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700427 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
428 }
Tim Murray460a0492013-11-19 12:45:54 -0800429 native long rsnAllocationCreateFromAssetStream(long con, int mips, int assetStream, int usage);
430 synchronized long nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800431 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800432 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
433 }
434
Tim Murray460a0492013-11-19 12:45:54 -0800435 native void rsnAllocationCopyToBitmap(long con, long alloc, Bitmap bmp);
436 synchronized void nAllocationCopyToBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800437 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800438 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
439 }
440
441
Tim Murray460a0492013-11-19 12:45:54 -0800442 native void rsnAllocationSyncAll(long con, long alloc, int src);
443 synchronized void nAllocationSyncAll(long alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800444 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800445 rsnAllocationSyncAll(mContext, alloc, src);
446 }
Tim Murray460a0492013-11-19 12:45:54 -0800447 native Surface rsnAllocationGetSurface(long con, long alloc);
448 synchronized Surface nAllocationGetSurface(long alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800449 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800450 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700451 }
Tim Murray460a0492013-11-19 12:45:54 -0800452 native void rsnAllocationSetSurface(long con, long alloc, Surface sur);
453 synchronized void nAllocationSetSurface(long alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800454 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700455 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800456 }
Tim Murray460a0492013-11-19 12:45:54 -0800457 native void rsnAllocationIoSend(long con, long alloc);
458 synchronized void nAllocationIoSend(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800459 validate();
460 rsnAllocationIoSend(mContext, alloc);
461 }
Tim Murray460a0492013-11-19 12:45:54 -0800462 native void rsnAllocationIoReceive(long con, long alloc);
463 synchronized void nAllocationIoReceive(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800464 validate();
465 rsnAllocationIoReceive(mContext, alloc);
466 }
467
Jason Sams615e7ce2012-01-13 14:01:20 -0800468
Tim Murray460a0492013-11-19 12:45:54 -0800469 native void rsnAllocationGenerateMipmaps(long con, long alloc);
470 synchronized void nAllocationGenerateMipmaps(long alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800472 rsnAllocationGenerateMipmaps(mContext, alloc);
473 }
Tim Murray460a0492013-11-19 12:45:54 -0800474 native void rsnAllocationCopyFromBitmap(long con, long alloc, Bitmap bmp);
475 synchronized void nAllocationCopyFromBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800476 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800477 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700479
Jason Sams49a05d72010-12-29 14:31:29 -0800480
Miao Wang87e908d2015-03-02 15:15:15 -0800481 native void rsnAllocationData1D(long con, long id, int off, int mip, int count, Object d, int sizeBytes, int dt,
482 int mSize, boolean usePadding);
483 synchronized void nAllocationData1D(long id, int off, int mip, int count, Object d, int sizeBytes, Element.DataType dt,
484 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800486 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700487 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700488
Miao Wangc8e237e2015-02-20 18:36:32 -0800489 native void rsnAllocationElementData(long con,long id, int xoff, int yoff, int zoff, int mip, int compIdx, byte[] d, int sizeBytes);
490 synchronized void nAllocationElementData(long id, int xoff, int yoff, int zoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800491 validate();
Miao Wangc8e237e2015-02-20 18:36:32 -0800492 rsnAllocationElementData(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700493 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700494
Tim Murrayeff663f2013-11-15 13:08:30 -0800495 native void rsnAllocationData2D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800496 long dstAlloc, int dstXoff, int dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700497 int dstMip, int dstFace,
498 int width, int height,
Tim Murray460a0492013-11-19 12:45:54 -0800499 long srcAlloc, int srcXoff, int srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700500 int srcMip, int srcFace);
Tim Murray460a0492013-11-19 12:45:54 -0800501 synchronized void nAllocationData2D(long dstAlloc, int dstXoff, int dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700502 int dstMip, int dstFace,
503 int width, int height,
Tim Murray460a0492013-11-19 12:45:54 -0800504 long srcAlloc, int srcXoff, int srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700505 int srcMip, int srcFace) {
506 validate();
507 rsnAllocationData2D(mContext,
508 dstAlloc, dstXoff, dstYoff,
509 dstMip, dstFace,
510 width, height,
511 srcAlloc, srcXoff, srcYoff,
512 srcMip, srcFace);
513 }
514
Tim Murray460a0492013-11-19 12:45:54 -0800515 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800516 int w, int h, Object d, int sizeBytes, int dt,
517 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800518 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800519 int w, int h, Object d, int sizeBytes, Element.DataType dt,
520 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800521 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800522 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700523 }
Jason Sams21659ac2013-11-06 15:08:07 -0800524
Tim Murray460a0492013-11-19 12:45:54 -0800525 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face, Bitmap b);
526 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800527 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800528 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
529 }
Jason Sams49a05d72010-12-29 14:31:29 -0800530
Tim Murrayeff663f2013-11-15 13:08:30 -0800531 native void rsnAllocationData3D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800532 long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700533 int dstMip,
534 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800535 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700536 int srcMip);
Tim Murray460a0492013-11-19 12:45:54 -0800537 synchronized void nAllocationData3D(long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700538 int dstMip,
539 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800540 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700541 int srcMip) {
542 validate();
543 rsnAllocationData3D(mContext,
544 dstAlloc, dstXoff, dstYoff, dstZoff,
545 dstMip, width, height, depth,
546 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
547 }
548
Tim Murray460a0492013-11-19 12:45:54 -0800549 native void rsnAllocationData3D(long con, long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800550 int w, int h, int depth, Object d, int sizeBytes, int dt,
551 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800552 synchronized void nAllocationData3D(long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800553 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
554 int mSize, boolean usePadding) {
Jason Samsb05d6892013-04-09 15:59:24 -0700555 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800556 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes,
557 dt.mID, mSize, usePadding);
Jason Samsb05d6892013-04-09 15:59:24 -0700558 }
Jason Samsb05d6892013-04-09 15:59:24 -0700559
Miao Wang87e908d2015-03-02 15:15:15 -0800560 native void rsnAllocationRead(long con, long id, Object d, int dt, int mSize, boolean usePadding);
561 synchronized void nAllocationRead(long id, Object d, Element.DataType dt, int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800562 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800563 rsnAllocationRead(mContext, id, d, dt.mID, mSize, usePadding);
Jason Samsfa445b92011-01-07 17:00:07 -0800564 }
Jason Sams21659ac2013-11-06 15:08:07 -0800565
Tim Murray460a0492013-11-19 12:45:54 -0800566 native void rsnAllocationRead1D(long con, long id, int off, int mip, int count, Object d,
Miao Wang87e908d2015-03-02 15:15:15 -0800567 int sizeBytes, int dt, int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800568 synchronized void nAllocationRead1D(long id, int off, int mip, int count, Object d,
Miao Wang87e908d2015-03-02 15:15:15 -0800569 int sizeBytes, Element.DataType dt, int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800570 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800571 rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Samsfa445b92011-01-07 17:00:07 -0800572 }
Jason Sams21659ac2013-11-06 15:08:07 -0800573
Miao Wangc8e237e2015-02-20 18:36:32 -0800574 native void rsnAllocationElementRead(long con,long id, int xoff, int yoff, int zoff,
Miao Wang45cec0a2015-03-04 16:40:21 -0800575 int mip, int compIdx, byte[] d, int sizeBytes);
Miao Wangc8e237e2015-02-20 18:36:32 -0800576 synchronized void nAllocationElementRead(long id, int xoff, int yoff, int zoff,
Miao Wang45cec0a2015-03-04 16:40:21 -0800577 int mip, int compIdx, byte[] d, int sizeBytes) {
Miao Wangc8e237e2015-02-20 18:36:32 -0800578 validate();
Miao Wang45cec0a2015-03-04 16:40:21 -0800579 rsnAllocationElementRead(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
Miao Wangc8e237e2015-02-20 18:36:32 -0800580 }
581
Tim Murray460a0492013-11-19 12:45:54 -0800582 native void rsnAllocationRead2D(long con, long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800583 int w, int h, Object d, int sizeBytes, int dt,
584 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800585 synchronized void nAllocationRead2D(long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800586 int w, int h, Object d, int sizeBytes, Element.DataType dt,
587 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800588 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800589 rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700590 }
Jason Sams21659ac2013-11-06 15:08:07 -0800591
Miao Wangc8e237e2015-02-20 18:36:32 -0800592 native void rsnAllocationRead3D(long con, long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800593 int w, int h, int depth, Object d, int sizeBytes, int dt,
594 int mSize, boolean usePadding);
Miao Wangc8e237e2015-02-20 18:36:32 -0800595 synchronized void nAllocationRead3D(long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800596 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
597 int mSize, boolean usePadding) {
Miao Wangc8e237e2015-02-20 18:36:32 -0800598 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800599 rsnAllocationRead3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID, mSize, usePadding);
Miao Wangc8e237e2015-02-20 18:36:32 -0800600 }
601
Tim Murray460a0492013-11-19 12:45:54 -0800602 native long rsnAllocationGetType(long con, long id);
603 synchronized long nAllocationGetType(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800604 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700605 return rsnAllocationGetType(mContext, id);
606 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700607
Tim Murray460a0492013-11-19 12:45:54 -0800608 native void rsnAllocationResize1D(long con, long id, int dimX);
609 synchronized void nAllocationResize1D(long id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800610 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700611 rsnAllocationResize1D(mContext, id, dimX);
612 }
Jason Sams5edc6082010-10-05 13:32:49 -0700613
Jason Sams46ba27e32015-02-06 17:45:15 -0800614 native long rsnAllocationAdapterCreate(long con, long allocId, long typeId);
615 synchronized long nAllocationAdapterCreate(long allocId, long typeId) {
616 validate();
617 return rsnAllocationAdapterCreate(mContext, allocId, typeId);
618 }
619
620 native void rsnAllocationAdapterOffset(long con, long id, int x, int y, int z,
621 int mip, int face, int a1, int a2, int a3, int a4);
622 synchronized void nAllocationAdapterOffset(long id, int x, int y, int z,
623 int mip, int face, int a1, int a2, int a3, int a4) {
624 validate();
625 rsnAllocationAdapterOffset(mContext, id, x, y, z, mip, face, a1, a2, a3, a4);
626 }
627
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000628 native long rsnFileA3DCreateFromAssetStream(long con, long assetStream);
629 synchronized long nFileA3DCreateFromAssetStream(long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800630 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700631 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
632 }
Tim Murray460a0492013-11-19 12:45:54 -0800633 native long rsnFileA3DCreateFromFile(long con, String path);
634 synchronized long nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800635 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800636 return rsnFileA3DCreateFromFile(mContext, path);
637 }
Tim Murray460a0492013-11-19 12:45:54 -0800638 native long rsnFileA3DCreateFromAsset(long con, AssetManager mgr, String path);
639 synchronized long nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800640 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800641 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
642 }
Tim Murray460a0492013-11-19 12:45:54 -0800643 native int rsnFileA3DGetNumIndexEntries(long con, long fileA3D);
644 synchronized int nFileA3DGetNumIndexEntries(long fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800645 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700646 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
647 }
Tim Murray460a0492013-11-19 12:45:54 -0800648 native void rsnFileA3DGetIndexEntries(long con, long fileA3D, int numEntries, int[] IDs, String[] names);
649 synchronized void nFileA3DGetIndexEntries(long fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800650 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700651 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
652 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000653 native long rsnFileA3DGetEntryByIndex(long con, long fileA3D, int index);
654 synchronized long nFileA3DGetEntryByIndex(long fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800655 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700656 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
657 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700658
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000659 native long rsnFontCreateFromFile(long con, String fileName, float size, int dpi);
660 synchronized long nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800661 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700662 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
663 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000664 native long rsnFontCreateFromAssetStream(long con, String name, float size, int dpi, long assetStream);
665 synchronized long nFontCreateFromAssetStream(String name, float size, int dpi, long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800666 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800667 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
668 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000669 native long rsnFontCreateFromAsset(long con, AssetManager mgr, String path, float size, int dpi);
670 synchronized long nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800671 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800672 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
673 }
Jason Sams22534172009-08-04 16:58:20 -0700674
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700675
Tim Murray460a0492013-11-19 12:45:54 -0800676 native void rsnScriptBindAllocation(long con, long script, long alloc, int slot);
677 synchronized void nScriptBindAllocation(long script, long alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800678 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700679 rsnScriptBindAllocation(mContext, script, alloc, slot);
680 }
Tim Murray460a0492013-11-19 12:45:54 -0800681 native void rsnScriptSetTimeZone(long con, long script, byte[] timeZone);
682 synchronized void nScriptSetTimeZone(long script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800683 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700684 rsnScriptSetTimeZone(mContext, script, timeZone);
685 }
Tim Murray460a0492013-11-19 12:45:54 -0800686 native void rsnScriptInvoke(long con, long id, int slot);
687 synchronized void nScriptInvoke(long id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800688 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700689 rsnScriptInvoke(mContext, id, slot);
690 }
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700691
692 native void rsnScriptForEach(long con, long id, int slot, long[] ains,
693 long aout, byte[] params, int[] limits);
694
695 synchronized void nScriptForEach(long id, int slot, long[] ains, long aout,
696 byte[] params, int[] limits) {
Jason Sams6e494d32011-04-27 16:33:11 -0700697 validate();
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700698 rsnScriptForEach(mContext, id, slot, ains, aout, params, limits);
Chris Wailes94961062014-06-11 12:01:28 -0700699 }
700
Tim Murray460a0492013-11-19 12:45:54 -0800701 native void rsnScriptInvokeV(long con, long id, int slot, byte[] params);
702 synchronized void nScriptInvokeV(long id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800703 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700704 rsnScriptInvokeV(mContext, id, slot, params);
705 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700706
Tim Murray460a0492013-11-19 12:45:54 -0800707 native void rsnScriptSetVarI(long con, long id, int slot, int val);
708 synchronized void nScriptSetVarI(long id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800709 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700710 rsnScriptSetVarI(mContext, id, slot, val);
711 }
Tim Murray460a0492013-11-19 12:45:54 -0800712 native int rsnScriptGetVarI(long con, long id, int slot);
713 synchronized int nScriptGetVarI(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700714 validate();
715 return rsnScriptGetVarI(mContext, id, slot);
716 }
717
Tim Murray460a0492013-11-19 12:45:54 -0800718 native void rsnScriptSetVarJ(long con, long id, int slot, long val);
719 synchronized void nScriptSetVarJ(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800720 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700721 rsnScriptSetVarJ(mContext, id, slot, val);
722 }
Tim Murray460a0492013-11-19 12:45:54 -0800723 native long rsnScriptGetVarJ(long con, long id, int slot);
724 synchronized long nScriptGetVarJ(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700725 validate();
726 return rsnScriptGetVarJ(mContext, id, slot);
727 }
728
Tim Murray460a0492013-11-19 12:45:54 -0800729 native void rsnScriptSetVarF(long con, long id, int slot, float val);
730 synchronized void nScriptSetVarF(long id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800731 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700732 rsnScriptSetVarF(mContext, id, slot, val);
733 }
Tim Murray460a0492013-11-19 12:45:54 -0800734 native float rsnScriptGetVarF(long con, long id, int slot);
735 synchronized float nScriptGetVarF(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700736 validate();
737 return rsnScriptGetVarF(mContext, id, slot);
738 }
Tim Murray460a0492013-11-19 12:45:54 -0800739 native void rsnScriptSetVarD(long con, long id, int slot, double val);
740 synchronized void nScriptSetVarD(long id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800741 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700742 rsnScriptSetVarD(mContext, id, slot, val);
743 }
Tim Murray460a0492013-11-19 12:45:54 -0800744 native double rsnScriptGetVarD(long con, long id, int slot);
745 synchronized double nScriptGetVarD(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700746 validate();
747 return rsnScriptGetVarD(mContext, id, slot);
748 }
Tim Murray460a0492013-11-19 12:45:54 -0800749 native void rsnScriptSetVarV(long con, long id, int slot, byte[] val);
750 synchronized void nScriptSetVarV(long id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800751 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700752 rsnScriptSetVarV(mContext, id, slot, val);
753 }
Tim Murray460a0492013-11-19 12:45:54 -0800754 native void rsnScriptGetVarV(long con, long id, int slot, byte[] val);
755 synchronized void nScriptGetVarV(long id, int slot, byte[] val) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700756 validate();
757 rsnScriptGetVarV(mContext, id, slot, val);
758 }
Tim Murray460a0492013-11-19 12:45:54 -0800759 native void rsnScriptSetVarVE(long con, long id, int slot, byte[] val,
760 long e, int[] dims);
761 synchronized void nScriptSetVarVE(long id, int slot, byte[] val,
762 long e, int[] dims) {
Stephen Hinesadeb8092012-04-20 14:26:06 -0700763 validate();
764 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
765 }
Tim Murray460a0492013-11-19 12:45:54 -0800766 native void rsnScriptSetVarObj(long con, long id, int slot, long val);
767 synchronized void nScriptSetVarObj(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800768 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800769 rsnScriptSetVarObj(mContext, id, slot, val);
770 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700771
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000772 native long rsnScriptCCreate(long con, String resName, String cacheDir,
Jason Samse4a06c52011-03-16 16:29:28 -0700773 byte[] script, int length);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000774 synchronized long nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800775 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700776 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700777 }
Jason Samsebfb4362009-09-23 13:57:02 -0700778
Tim Murray460a0492013-11-19 12:45:54 -0800779 native long rsnScriptIntrinsicCreate(long con, int id, long eid);
780 synchronized long nScriptIntrinsicCreate(int id, long eid) {
Jason Sams6ab97682012-08-10 12:09:43 -0700781 validate();
782 return rsnScriptIntrinsicCreate(mContext, id, eid);
783 }
784
Tim Murray460a0492013-11-19 12:45:54 -0800785 native long rsnScriptKernelIDCreate(long con, long sid, int slot, int sig);
786 synchronized long nScriptKernelIDCreate(long sid, int slot, int sig) {
Jason Sams08a81582012-09-18 12:32:10 -0700787 validate();
788 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
789 }
790
Yang Nibe392ad2015-01-23 17:16:02 -0800791 native long rsnScriptInvokeIDCreate(long con, long sid, int slot);
792 synchronized long nScriptInvokeIDCreate(long sid, int slot) {
793 validate();
794 return rsnScriptInvokeIDCreate(mContext, sid, slot);
795 }
796
Tim Murray460a0492013-11-19 12:45:54 -0800797 native long rsnScriptFieldIDCreate(long con, long sid, int slot);
798 synchronized long nScriptFieldIDCreate(long sid, int slot) {
Jason Sams08a81582012-09-18 12:32:10 -0700799 validate();
800 return rsnScriptFieldIDCreate(mContext, sid, slot);
801 }
802
Ashok Bhat98071552014-02-12 09:54:43 +0000803 native long rsnScriptGroupCreate(long con, long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types);
804 synchronized long nScriptGroupCreate(long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types) {
Jason Sams08a81582012-09-18 12:32:10 -0700805 validate();
806 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
807 }
808
Tim Murray460a0492013-11-19 12:45:54 -0800809 native void rsnScriptGroupSetInput(long con, long group, long kernel, long alloc);
810 synchronized void nScriptGroupSetInput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700811 validate();
812 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
813 }
814
Tim Murray460a0492013-11-19 12:45:54 -0800815 native void rsnScriptGroupSetOutput(long con, long group, long kernel, long alloc);
816 synchronized void nScriptGroupSetOutput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700817 validate();
818 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
819 }
820
Tim Murray460a0492013-11-19 12:45:54 -0800821 native void rsnScriptGroupExecute(long con, long group);
822 synchronized void nScriptGroupExecute(long group) {
Jason Sams08a81582012-09-18 12:32:10 -0700823 validate();
824 rsnScriptGroupExecute(mContext, group);
825 }
826
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000827 native long rsnSamplerCreate(long con, int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700828 int wrapS, int wrapT, int wrapR, float aniso);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000829 synchronized long nSamplerCreate(int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700830 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800831 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700832 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700833 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800834
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000835 native long rsnProgramStoreCreate(long con, boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700836 boolean depthMask, boolean dither,
837 int srcMode, int dstMode, int depthFunc);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000838 synchronized long nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700839 boolean depthMask, boolean dither,
840 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800841 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700842 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
843 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700844 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700845
Tim Murray460a0492013-11-19 12:45:54 -0800846 native long rsnProgramRasterCreate(long con, boolean pointSprite, int cullMode);
847 synchronized long nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800848 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700849 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700850 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700851
Tim Murray460a0492013-11-19 12:45:54 -0800852 native void rsnProgramBindConstants(long con, long pv, int slot, long mID);
853 synchronized void nProgramBindConstants(long pv, int slot, long mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800854 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700855 rsnProgramBindConstants(mContext, pv, slot, mID);
856 }
Tim Murray460a0492013-11-19 12:45:54 -0800857 native void rsnProgramBindTexture(long con, long vpf, int slot, long a);
858 synchronized void nProgramBindTexture(long vpf, int slot, long a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800859 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700860 rsnProgramBindTexture(mContext, vpf, slot, a);
861 }
Tim Murray460a0492013-11-19 12:45:54 -0800862 native void rsnProgramBindSampler(long con, long vpf, int slot, long s);
863 synchronized void nProgramBindSampler(long vpf, int slot, long s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800864 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700865 rsnProgramBindSampler(mContext, vpf, slot, s);
866 }
Ashok Bhat98071552014-02-12 09:54:43 +0000867 native long rsnProgramFragmentCreate(long con, String shader, String[] texNames, long[] params);
868 synchronized long nProgramFragmentCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800869 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800870 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700871 }
Ashok Bhat98071552014-02-12 09:54:43 +0000872 native long rsnProgramVertexCreate(long con, String shader, String[] texNames, long[] params);
873 synchronized long nProgramVertexCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800874 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800875 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700876 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700877
Ashok Bhat98071552014-02-12 09:54:43 +0000878 native long rsnMeshCreate(long con, long[] vtx, long[] idx, int[] prim);
879 synchronized long nMeshCreate(long[] vtx, long[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800880 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700881 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800882 }
Tim Murray460a0492013-11-19 12:45:54 -0800883 native int rsnMeshGetVertexBufferCount(long con, long id);
884 synchronized int nMeshGetVertexBufferCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800885 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700886 return rsnMeshGetVertexBufferCount(mContext, id);
887 }
Tim Murray460a0492013-11-19 12:45:54 -0800888 native int rsnMeshGetIndexCount(long con, long id);
889 synchronized int nMeshGetIndexCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800890 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700891 return rsnMeshGetIndexCount(mContext, id);
892 }
Ashok Bhat98071552014-02-12 09:54:43 +0000893 native void rsnMeshGetVertices(long con, long id, long[] vtxIds, int vtxIdCount);
894 synchronized void nMeshGetVertices(long id, long[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800895 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700896 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
897 }
Ashok Bhat98071552014-02-12 09:54:43 +0000898 native void rsnMeshGetIndices(long con, long id, long[] idxIds, int[] primitives, int vtxIdCount);
899 synchronized void nMeshGetIndices(long id, long[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800900 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700901 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
902 }
903
Tim Murray25207df2015-01-12 16:47:56 -0800904 native void rsnScriptIntrinsicBLAS_Single(long con, long id, int func, int TransA,
905 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
906 float alpha, long A, long B, float beta, long C, int incX, int incY,
907 int KL, int KU);
908 synchronized void nScriptIntrinsicBLAS_Single(long id, int func, int TransA,
909 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
910 float alpha, long A, long B, float beta, long C, int incX, int incY,
911 int KL, int KU) {
912 validate();
913 rsnScriptIntrinsicBLAS_Single(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU);
914 }
915
916 native void rsnScriptIntrinsicBLAS_Double(long con, long id, int func, int TransA,
917 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
918 double alpha, long A, long B, double beta, long C, int incX, int incY,
919 int KL, int KU);
920 synchronized void nScriptIntrinsicBLAS_Double(long id, int func, int TransA,
921 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
922 double alpha, long A, long B, double beta, long C, int incX, int incY,
923 int KL, int KU) {
924 validate();
925 rsnScriptIntrinsicBLAS_Double(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU);
926 }
927
928 native void rsnScriptIntrinsicBLAS_Complex(long con, long id, int func, int TransA,
929 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
930 float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
931 int KL, int KU);
932 synchronized void nScriptIntrinsicBLAS_Complex(long id, int func, int TransA,
933 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
934 float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
935 int KL, int KU) {
936 validate();
937 rsnScriptIntrinsicBLAS_Complex(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU);
938 }
939
940 native void rsnScriptIntrinsicBLAS_Z(long con, long id, int func, int TransA,
941 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
942 double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
943 int KL, int KU);
944 synchronized void nScriptIntrinsicBLAS_Z(long id, int func, int TransA,
945 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
946 double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
947 int KL, int KU) {
948 validate();
949 rsnScriptIntrinsicBLAS_Z(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU);
950 }
951
952
Tim Murrayeff663f2013-11-15 13:08:30 -0800953 long mDev;
954 long mContext;
Jason Samsd22a6f02015-02-19 17:19:52 -0800955 private boolean mDestroyed = false;
956
Romain Guy650a3eb2009-08-31 14:06:43 -0700957 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800958 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700959
Jason Sams8cb39de2010-06-01 15:47:01 -0700960 Element mElement_U8;
961 Element mElement_I8;
962 Element mElement_U16;
963 Element mElement_I16;
964 Element mElement_U32;
965 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700966 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700967 Element mElement_I64;
Jason Samsa5835a22014-11-05 15:16:26 -0800968 Element mElement_F16;
Jason Sams8cb39de2010-06-01 15:47:01 -0700969 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700970 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700971 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700972
Jason Sams8cb39de2010-06-01 15:47:01 -0700973 Element mElement_ELEMENT;
974 Element mElement_TYPE;
975 Element mElement_ALLOCATION;
976 Element mElement_SAMPLER;
977 Element mElement_SCRIPT;
978 Element mElement_MESH;
979 Element mElement_PROGRAM_FRAGMENT;
980 Element mElement_PROGRAM_VERTEX;
981 Element mElement_PROGRAM_RASTER;
982 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700983 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700984
Jason Sams3c0dfba2009-09-27 17:50:38 -0700985 Element mElement_A_8;
986 Element mElement_RGB_565;
987 Element mElement_RGB_888;
988 Element mElement_RGBA_5551;
989 Element mElement_RGBA_4444;
990 Element mElement_RGBA_8888;
991
Jason Samsa5835a22014-11-05 15:16:26 -0800992 Element mElement_HALF_2;
993 Element mElement_HALF_3;
994 Element mElement_HALF_4;
995
Jason Sams8cb39de2010-06-01 15:47:01 -0700996 Element mElement_FLOAT_2;
997 Element mElement_FLOAT_3;
998 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700999
1000 Element mElement_DOUBLE_2;
1001 Element mElement_DOUBLE_3;
1002 Element mElement_DOUBLE_4;
1003
1004 Element mElement_UCHAR_2;
1005 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -07001006 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -08001007
Stephen Hines836c4a52011-06-01 14:38:10 -07001008 Element mElement_CHAR_2;
1009 Element mElement_CHAR_3;
1010 Element mElement_CHAR_4;
1011
1012 Element mElement_USHORT_2;
1013 Element mElement_USHORT_3;
1014 Element mElement_USHORT_4;
1015
1016 Element mElement_SHORT_2;
1017 Element mElement_SHORT_3;
1018 Element mElement_SHORT_4;
1019
1020 Element mElement_UINT_2;
1021 Element mElement_UINT_3;
1022 Element mElement_UINT_4;
1023
1024 Element mElement_INT_2;
1025 Element mElement_INT_3;
1026 Element mElement_INT_4;
1027
1028 Element mElement_ULONG_2;
1029 Element mElement_ULONG_3;
1030 Element mElement_ULONG_4;
1031
1032 Element mElement_LONG_2;
1033 Element mElement_LONG_3;
1034 Element mElement_LONG_4;
1035
Tim Murray932e78e2013-09-03 11:42:26 -07001036 Element mElement_YUV;
1037
Jason Sams1d45c472010-08-25 14:31:48 -07001038 Element mElement_MATRIX_4X4;
1039 Element mElement_MATRIX_3X3;
1040 Element mElement_MATRIX_2X2;
1041
Jason Sams4d339932010-05-11 14:03:58 -07001042 Sampler mSampler_CLAMP_NEAREST;
1043 Sampler mSampler_CLAMP_LINEAR;
1044 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
1045 Sampler mSampler_WRAP_NEAREST;
1046 Sampler mSampler_WRAP_LINEAR;
1047 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -08001048 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
1049 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
1050 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -07001051
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001052 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
1053 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001054 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
1055 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -07001056
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001057 ProgramRaster mProgramRaster_CULL_BACK;
1058 ProgramRaster mProgramRaster_CULL_FRONT;
1059 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -07001060
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001061 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -07001062 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001063
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001064 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001065 * The base class from which an application should derive in order
1066 * to receive RS messages from scripts. When a script calls {@code
1067 * rsSendToClient}, the data fields will be filled, and the run
1068 * method will be called on a separate thread. This will occur
1069 * some time after {@code rsSendToClient} completes in the script,
1070 * as {@code rsSendToClient} is asynchronous. Message handlers are
1071 * not guaranteed to have completed when {@link
1072 * android.renderscript.RenderScript#finish} returns.
Jason Sams27676fe2010-11-10 17:00:59 -08001073 *
1074 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001075 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -07001076 protected int[] mData;
1077 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -08001078 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -07001079 public void run() {
1080 }
1081 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001082 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001083 * If an application is expecting messages, it should set this
1084 * field to an instance of {@link RSMessageHandler}. This
1085 * instance will receive all the user messages sent from {@code
1086 * sendToClient} by scripts from this context.
Jason Sams27676fe2010-11-10 17:00:59 -08001087 *
1088 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001089 RSMessageHandler mMessageCallback = null;
1090
1091 public void setMessageHandler(RSMessageHandler msg) {
1092 mMessageCallback = msg;
1093 }
1094 public RSMessageHandler getMessageHandler() {
1095 return mMessageCallback;
1096 }
Jason Sams516c3192009-10-06 13:58:47 -07001097
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001098 /**
Jason Sams02d56d92013-04-12 16:40:50 -07001099 * Place a message into the message queue to be sent back to the message
1100 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -08001101 *
1102 * @param id
1103 * @param data
1104 */
1105 public void sendMessage(int id, int[] data) {
1106 nContextSendMessage(id, data);
1107 }
1108
1109 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001110 * The runtime error handler base class. An application should derive from this class
1111 * if it wishes to install an error handler. When errors occur at runtime,
1112 * the fields in this class will be filled, and the run method will be called.
Jason Sams27676fe2010-11-10 17:00:59 -08001113 *
1114 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001115 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -08001116 protected String mErrorMessage;
1117 protected int mErrorNum;
1118 public void run() {
1119 }
1120 }
Jason Sams27676fe2010-11-10 17:00:59 -08001121
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001122 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001123 * Application Error handler. All runtime errors will be dispatched to the
1124 * instance of RSAsyncError set here. If this field is null a
Tim Murrayc11e25c2013-04-09 11:01:01 -07001125 * {@link RSRuntimeException} will instead be thrown with details about the error.
Jason Sams27676fe2010-11-10 17:00:59 -08001126 * This will cause program termaination.
1127 *
1128 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001129 RSErrorHandler mErrorCallback = null;
1130
1131 public void setErrorHandler(RSErrorHandler msg) {
1132 mErrorCallback = msg;
1133 }
1134 public RSErrorHandler getErrorHandler() {
1135 return mErrorCallback;
1136 }
Jason Sams1c415172010-11-08 17:06:46 -08001137
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001138 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001139 * RenderScript worker thread priority enumeration. The default value is
1140 * NORMAL. Applications wishing to do background processing should set
1141 * their priority to LOW to avoid starving forground processes.
Jason Sams27676fe2010-11-10 17:00:59 -08001142 */
Jason Sams7d787b42009-11-15 12:14:26 -08001143 public enum Priority {
Jason Samsc9870c12015-01-21 12:55:14 -08001144 // These values used to represent official thread priority values
1145 // now they are simply enums to be used by the runtime side
1146 LOW (15),
1147 NORMAL (-8);
Jason Sams7d787b42009-11-15 12:14:26 -08001148
1149 int mID;
1150 Priority(int id) {
1151 mID = id;
1152 }
1153 }
1154
Jason Sams678cc7f2014-03-05 16:09:02 -08001155 void validateObject(BaseObj o) {
1156 if (o != null) {
1157 if (o.mRS != this) {
1158 throw new RSIllegalArgumentException("Attempting to use an object across contexts.");
1159 }
1160 }
1161 }
1162
Jason Sams771bebb2009-12-07 12:40:12 -08001163 void validate() {
1164 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -07001165 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -08001166 }
1167 }
1168
Jason Sams27676fe2010-11-10 17:00:59 -08001169
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001170 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001171 * Change the priority of the worker threads for this context.
1172 *
1173 * @param p New priority to be set.
1174 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001175 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -08001176 validate();
Jason Sams7d787b42009-11-15 12:14:26 -08001177 nContextSetPriority(p.mID);
1178 }
1179
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001180 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -07001181 RenderScript mRS;
1182 boolean mRun = true;
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001183 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001184
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001185 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1186 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1187 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1188 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1189 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001190 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001191
Stephen Hines42028a82013-04-17 19:22:01 -07001192 static final int RS_ERROR_FATAL_DEBUG = 0x0800;
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001193 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001194
Jason Sams516c3192009-10-06 13:58:47 -07001195 MessageThread(RenderScript rs) {
1196 super("RSMessageThread");
1197 mRS = rs;
1198
1199 }
1200
1201 public void run() {
1202 // This function is a temporary solution. The final solution will
1203 // used typed allocations where the message id is the type indicator.
1204 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001205 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001206 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001207 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001208 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001209 int size = mAuxData[1];
1210 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001211
1212 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1213 if ((size>>2) >= rbuf.length) {
1214 rbuf = new int[(size + 3) >> 2];
1215 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001216 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1217 RS_MESSAGE_TO_CLIENT_USER) {
Tim Murrayc11e25c2013-04-09 11:01:01 -07001218 throw new RSDriverException("Error processing message from RenderScript.");
Jason Samsedbfabd2011-05-17 15:01:29 -07001219 }
Jason Sams1c415172010-11-08 17:06:46 -08001220
1221 if(mRS.mMessageCallback != null) {
1222 mRS.mMessageCallback.mData = rbuf;
1223 mRS.mMessageCallback.mID = subID;
1224 mRS.mMessageCallback.mLength = size;
1225 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001226 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001227 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001228 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001229 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001230 }
Jason Sams1c415172010-11-08 17:06:46 -08001231
1232 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1233 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1234
Stephen Hines42028a82013-04-17 19:22:01 -07001235 // Throw RSRuntimeException under the following conditions:
1236 //
1237 // 1) It is an unknown fatal error.
1238 // 2) It is a debug fatal error, and we are not in a
1239 // debug context.
1240 // 3) It is a debug fatal error, and we do not have an
1241 // error callback.
1242 if (subID >= RS_ERROR_FATAL_UNKNOWN ||
1243 (subID >= RS_ERROR_FATAL_DEBUG &&
1244 (mRS.mContextType != ContextType.DEBUG ||
1245 mRS.mErrorCallback == null))) {
Jason Samsadd9d962010-11-22 16:20:16 -08001246 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1247 }
1248
Jason Sams1c415172010-11-08 17:06:46 -08001249 if(mRS.mErrorCallback != null) {
1250 mRS.mErrorCallback.mErrorMessage = e;
1251 mRS.mErrorCallback.mErrorNum = subID;
1252 mRS.mErrorCallback.run();
1253 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001254 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001255 // Do not throw here. In these cases, we do not have
1256 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001257 }
1258 continue;
1259 }
1260
Jason Sams739c8262013-04-11 18:07:52 -07001261 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
Tim Murrayb730d862014-08-18 16:14:24 -07001262 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1263 RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1264 throw new RSDriverException("Error processing message from RenderScript.");
1265 }
1266 long bufferID = ((long)rbuf[1] << 32L) + ((long)rbuf[0] & 0xffffffffL);
1267 Allocation.sendBufferNotification(bufferID);
Jason Sams739c8262013-04-11 18:07:52 -07001268 continue;
1269 }
1270
Jason Sams1c415172010-11-08 17:06:46 -08001271 // 2: teardown.
1272 // But we want to avoid starving other threads during
1273 // teardown by yielding until the next line in the destructor
1274 // can execute to set mRun = false
1275 try {
1276 sleep(1, 0);
1277 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001278 }
Jason Sams516c3192009-10-06 13:58:47 -07001279 }
Tim Murrayda67deb2013-05-09 12:02:50 -07001280 //Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001281 }
1282 }
1283
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001284 RenderScript(Context ctx) {
Stephen Hines42028a82013-04-17 19:22:01 -07001285 mContextType = ContextType.NORMAL;
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001286 if (ctx != null) {
1287 mApplicationContext = ctx.getApplicationContext();
1288 }
Tim Murray06b45672014-01-07 11:13:56 -08001289 mRWLock = new ReentrantReadWriteLock();
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001290 try {
Tim Murrayd11a6582014-12-16 09:59:09 -08001291 registerNativeAllocation.invoke(sRuntime, 4 * 1024 * 1024); // 4MB for GC sake
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001292 } catch (Exception e) {
1293 Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e);
1294 throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e);
1295 }
1296
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001297 }
1298
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001299 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001300 * Gets the application context associated with the RenderScript context.
1301 *
1302 * @return The application context.
1303 */
1304 public final Context getApplicationContext() {
1305 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001306 }
1307
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001308 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001309 * Create a RenderScript context.
Jason Sams27676fe2010-11-10 17:00:59 -08001310 *
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001311 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001312 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001313 * @return RenderScript
1314 */
Jason Samse16da122015-03-18 17:04:18 -07001315 private static RenderScript internalCreate(Context ctx, int sdkVersion, ContextType ct, int flags) {
Dan Morrille4d9a012013-03-28 18:10:43 -07001316 if (!sInitialized) {
1317 Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
1318 return null;
1319 }
1320
Jason Samsb69c7912014-05-20 18:48:35 -07001321 if ((flags & ~(CREATE_FLAG_LOW_LATENCY | CREATE_FLAG_LOW_POWER)) != 0) {
1322 throw new RSIllegalArgumentException("Invalid flags passed.");
1323 }
1324
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001325 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001326
1327 rs.mDev = rs.nDeviceCreate();
Tim Murrayfd710e72014-06-06 11:10:45 -07001328 rs.mContext = rs.nContextCreate(rs.mDev, flags, sdkVersion, ct.mID);
Stephen Hines42028a82013-04-17 19:22:01 -07001329 rs.mContextType = ct;
Jason Samse16da122015-03-18 17:04:18 -07001330 rs.mContextFlags = flags;
1331 rs.mContextSdkVersion = sdkVersion;
Jason Sams26985362011-05-03 15:01:58 -07001332 if (rs.mContext == 0) {
1333 throw new RSDriverException("Failed to create RS context.");
1334 }
Tim Murray47f31582015-04-07 15:43:24 -07001335
1336 // set up cache directory for entire context
1337 final String CACHE_PATH = "com.android.renderscript.cache";
1338 File f = new File(RenderScriptCacheDir.mCacheDir, CACHE_PATH);
1339 String mCachePath = f.getAbsolutePath();
1340 f.mkdirs();
1341 rs.nContextSetCacheDir(mCachePath);
1342
Jason Sams704ff642010-02-09 16:05:07 -08001343 rs.mMessageThread = new MessageThread(rs);
1344 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001345 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001346 }
1347
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001348 /**
Miao Wanga4e5adf2015-03-23 11:09:56 -07001349 * calls create(ctx, ContextType.NORMAL, CREATE_FLAG_NONE)
Jason Samse16da122015-03-18 17:04:18 -07001350 *
1351 * See documentation for @create for details
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001352 *
1353 * @param ctx The context.
1354 * @return RenderScript
1355 */
1356 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001357 return create(ctx, ContextType.NORMAL);
1358 }
1359
1360 /**
Miao Wanga4e5adf2015-03-23 11:09:56 -07001361 * calls create(ctx, ct, CREATE_FLAG_NONE)
Jason Samsadd26dc2013-02-22 18:43:45 -08001362 *
Jason Samse16da122015-03-18 17:04:18 -07001363 * See documentation for @create for details
Jason Samsadd26dc2013-02-22 18:43:45 -08001364 *
1365 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001366 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001367 * @return RenderScript
1368 */
1369 public static RenderScript create(Context ctx, ContextType ct) {
Jason Samse16da122015-03-18 17:04:18 -07001370 return create(ctx, ct, CREATE_FLAG_NONE);
Jason Sams26e90512014-05-07 14:23:27 -07001371 }
1372
Miao Wanga4e5adf2015-03-23 11:09:56 -07001373
1374 /**
Jason Samse16da122015-03-18 17:04:18 -07001375 * Gets or creates a RenderScript context of the specified type.
Jason Sams26e90512014-05-07 14:23:27 -07001376 *
Jason Samse16da122015-03-18 17:04:18 -07001377 * The returned context will be cached for future reuse within
1378 * the process. When an application is finished using
1379 * RenderScript it should call releaseAllContexts()
1380 *
1381 * A process context is a context designed for easy creation and
1382 * lifecycle management. Multiple calls to this function will
1383 * return the same object provided they are called with the same
1384 * options. This allows it to be used any time a RenderScript
1385 * context is needed.
1386 *
1387 * Prior to API 23 this always created a new context.
Jason Sams26e90512014-05-07 14:23:27 -07001388 *
1389 * @param ctx The context.
1390 * @param ct The type of context to be created.
1391 * @param flags The OR of the CREATE_FLAG_* options desired
1392 * @return RenderScript
1393 */
Tim Murrayfd710e72014-06-06 11:10:45 -07001394 public static RenderScript create(Context ctx, ContextType ct, int flags) {
Jason Sams26e90512014-05-07 14:23:27 -07001395 int v = ctx.getApplicationInfo().targetSdkVersion;
Miao Wanga4e5adf2015-03-23 11:09:56 -07001396 return create(ctx, v, ct, flags);
1397 }
1398
1399 /**
1400 * calls create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE)
1401 *
1402 * Used by the RenderScriptThunker to maintain backward compatibility.
1403 *
1404 * @hide
1405 * @param ctx The context.
1406 * @param sdkVersion The target SDK Version.
1407 * @return RenderScript
1408 */
1409 public static RenderScript create(Context ctx, int sdkVersion) {
1410 return create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE);
1411 }
1412
1413 /**
1414 * Gets or creates a RenderScript context of the specified type.
1415 *
1416 * @hide
1417 * @param ctx The context.
1418 * @param ct The type of context to be created.
1419 * @param sdkVersion The target SDK Version.
1420 * @param flags The OR of the CREATE_FLAG_* options desired
1421 * @return RenderScript
1422 */
1423 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, int flags) {
1424 if (sdkVersion < 23) {
1425 return internalCreate(ctx, sdkVersion, ct, flags);
Jason Samse16da122015-03-18 17:04:18 -07001426 }
1427
1428 synchronized (mProcessContextList) {
1429 for (RenderScript prs : mProcessContextList) {
1430 if ((prs.mContextType == ct) &&
1431 (prs.mContextFlags == flags) &&
Miao Wanga4e5adf2015-03-23 11:09:56 -07001432 (prs.mContextSdkVersion == sdkVersion)) {
Jason Samse16da122015-03-18 17:04:18 -07001433
1434 return prs;
1435 }
1436 }
1437
Miao Wanga4e5adf2015-03-23 11:09:56 -07001438 RenderScript prs = internalCreate(ctx, sdkVersion, ct, flags);
Jason Samse16da122015-03-18 17:04:18 -07001439 prs.mIsProcessContext = true;
1440 mProcessContextList.add(prs);
1441 return prs;
1442 }
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001443 }
1444
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001445 /**
Jason Samse16da122015-03-18 17:04:18 -07001446 * @hide
1447 *
1448 * Releases all the process contexts. This is the same as
1449 * calling .destroy() on each unique context retreived with
1450 * create(...). If no contexts have been created this
1451 * function does nothing.
1452 *
1453 * Typically you call this when your application is losing focus
1454 * and will not be using a context for some time.
1455 *
1456 * This has no effect on a context created with
1457 * createMultiContext()
1458 */
1459 public static void releaseAllContexts() {
1460 ArrayList<RenderScript> oldList;
1461 synchronized (mProcessContextList) {
1462 oldList = mProcessContextList;
1463 mProcessContextList = new ArrayList<RenderScript>();
1464 }
1465
1466 for (RenderScript prs : oldList) {
1467 prs.mIsProcessContext = false;
1468 prs.destroy();
1469 }
1470 oldList.clear();
1471 }
1472
1473
1474
1475 /**
1476 * Create a RenderScript context.
1477 *
1478 * This is an advanced function intended for applications which
1479 * need to create more than one RenderScript context to be used
1480 * at the same time.
1481 *
1482 * If you need a single context please use create()
1483 *
1484 * @hide
1485 * @param ctx The context.
1486 * @return RenderScript
1487 */
1488 public static RenderScript createMultiContext(Context ctx, ContextType ct, int flags, int API_number) {
1489 return internalCreate(ctx, API_number, ct, flags);
1490 }
1491
1492
1493 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001494 * Print the currently available debugging information about the state of
1495 * the RS context to the log.
1496 *
Jason Sams27676fe2010-11-10 17:00:59 -08001497 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001498 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001499 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001500 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001501 }
1502
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001503 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001504 * Wait for any pending asynchronous opeations (such as copies to a RS
1505 * allocation or RS script executions) to complete.
Jason Sams27676fe2010-11-10 17:00:59 -08001506 *
1507 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001508 public void finish() {
1509 nContextFinish();
1510 }
1511
Jason Samsd22a6f02015-02-19 17:19:52 -08001512 private void helpDestroy() {
1513 boolean shouldDestroy = false;
1514 synchronized(this) {
1515 if (!mDestroyed) {
1516 shouldDestroy = true;
1517 mDestroyed = true;
1518 }
1519 }
1520
1521 if (shouldDestroy) {
1522 nContextFinish();
1523
1524 nContextDeinitToClient(mContext);
1525 mMessageThread.mRun = false;
1526 try {
1527 mMessageThread.join();
1528 } catch(InterruptedException e) {
1529 }
1530
1531 nContextDestroy();
1532
1533 nDeviceDestroy(mDev);
1534 mDev = 0;
1535 }
1536 }
1537
1538 protected void finalize() throws Throwable {
1539 helpDestroy();
1540 super.finalize();
1541 }
1542
1543
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001544 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001545 * Destroys this RenderScript context. Once this function is called,
1546 * using this context or any objects belonging to this context is
1547 * illegal.
Jason Sams27676fe2010-11-10 17:00:59 -08001548 *
Jason Samse16da122015-03-18 17:04:18 -07001549 * API 23+, this function is a NOP if the context was created
1550 * with create(). Please use releaseAllContexts() to clean up
1551 * contexts created with the create function.
1552 *
Jason Sams27676fe2010-11-10 17:00:59 -08001553 */
Jason Samsf5b45962009-08-25 14:49:07 -07001554 public void destroy() {
Jason Samse16da122015-03-18 17:04:18 -07001555 if (mIsProcessContext) {
1556 // users cannot destroy a process context
1557 return;
1558 }
Jason Sams5dbfe932010-01-27 14:41:43 -08001559 validate();
Jason Samsd22a6f02015-02-19 17:19:52 -08001560 helpDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001561 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001562
Jason Samsa9e7a052009-09-25 14:51:22 -07001563 boolean isAlive() {
1564 return mContext != 0;
1565 }
1566
Tim Murray460a0492013-11-19 12:45:54 -08001567 long safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001568 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001569 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001570 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001571 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001572 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001573}