blob: 24bc2c16ce031a2305ff204e90395e18c5a2ee2e [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();
Yang Ni4e90b9b2015-04-30 16:13:54 -0700305 long c = rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
Yang Ni281c3252014-10-24 08:52:24 -0700306 sizes, depClosures, depFieldIDs);
Yang Ni4e90b9b2015-04-30 16:13:54 -0700307 if (c == 0) {
308 throw new RSRuntimeException("Failed creating closure.");
309 }
310 return c;
Yang Ni281c3252014-10-24 08:52:24 -0700311 }
312
Yang Nibe392ad2015-01-23 17:16:02 -0800313 native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
314 long[] fieldIDs, long[] values, int[] sizes);
315 synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
316 long[] fieldIDs, long[] values, int[] sizes) {
317 validate();
Yang Ni4e90b9b2015-04-30 16:13:54 -0700318 long c = rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
Yang Nibe392ad2015-01-23 17:16:02 -0800319 values, sizes);
Yang Ni4e90b9b2015-04-30 16:13:54 -0700320 if (c == 0) {
321 throw new RSRuntimeException("Failed creating closure.");
322 }
323 return c;
Yang Nibe392ad2015-01-23 17:16:02 -0800324 }
325
Yang Ni281c3252014-10-24 08:52:24 -0700326 native void rsnClosureSetArg(long con, long closureID, int index,
327 long value, int size);
328 synchronized void nClosureSetArg(long closureID, int index, long value,
329 int size) {
330 validate();
331 rsnClosureSetArg(mContext, closureID, index, value, size);
332 }
333
334 native void rsnClosureSetGlobal(long con, long closureID, long fieldID,
335 long value, int size);
336 // Does this have to be synchronized?
337 synchronized void nClosureSetGlobal(long closureID, long fieldID,
338 long value, int size) {
339 validate(); // TODO: is this necessary?
340 rsnClosureSetGlobal(mContext, closureID, fieldID, value, size);
341 }
342
Yang Ni35be56c2015-04-02 17:47:56 -0700343 native long rsnScriptGroup2Create(long con, String name, String cachePath,
344 long[] closures);
345 synchronized long nScriptGroup2Create(String name, String cachePath,
346 long[] closures) {
Yang Ni281c3252014-10-24 08:52:24 -0700347 validate();
Yang Ni4e90b9b2015-04-30 16:13:54 -0700348 long g = rsnScriptGroup2Create(mContext, name, cachePath, closures);
349 if (g == 0) {
350 throw new RSRuntimeException("Failed creating script group.");
351 }
352 return g;
Yang Ni281c3252014-10-24 08:52:24 -0700353 }
354
355 native void rsnScriptGroup2Execute(long con, long groupID);
356 synchronized void nScriptGroup2Execute(long groupID) {
357 validate();
358 rsnScriptGroup2Execute(mContext, groupID);
359 }
360
Tim Murray460a0492013-11-19 12:45:54 -0800361 native void rsnAssignName(long con, long obj, byte[] name);
362 synchronized void nAssignName(long obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800363 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 rsnAssignName(mContext, obj, name);
365 }
Tim Murray460a0492013-11-19 12:45:54 -0800366 native String rsnGetName(long con, long obj);
367 synchronized String nGetName(long obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800368 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700369 return rsnGetName(mContext, obj);
370 }
Tim Murray06b45672014-01-07 11:13:56 -0800371
372 // nObjDestroy is explicitly _not_ synchronous to prevent crashes in finalizers
Tim Murray460a0492013-11-19 12:45:54 -0800373 native void rsnObjDestroy(long con, long id);
Tim Murray06b45672014-01-07 11:13:56 -0800374 void nObjDestroy(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800375 // There is a race condition here. The calling code may be run
376 // by the gc while teardown is occuring. This protects againts
377 // deleting dead objects.
378 if (mContext != 0) {
379 rsnObjDestroy(mContext, id);
380 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700381 }
Jason Samsfe08d992009-05-27 14:45:32 -0700382
Tim Murray460a0492013-11-19 12:45:54 -0800383 native long rsnElementCreate(long con, long type, int kind, boolean norm, int vecSize);
384 synchronized long nElementCreate(long type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800385 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700386 return rsnElementCreate(mContext, type, kind, norm, vecSize);
387 }
Ashok Bhat98071552014-02-12 09:54:43 +0000388 native long rsnElementCreate2(long con, long[] elements, String[] names, int[] arraySizes);
389 synchronized long nElementCreate2(long[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800390 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700391 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700392 }
Tim Murray460a0492013-11-19 12:45:54 -0800393 native void rsnElementGetNativeData(long con, long id, int[] elementData);
394 synchronized void nElementGetNativeData(long id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800395 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700396 rsnElementGetNativeData(mContext, id, elementData);
397 }
Tim Murray460a0492013-11-19 12:45:54 -0800398 native void rsnElementGetSubElements(long con, long id,
Ashok Bhat98071552014-02-12 09:54:43 +0000399 long[] IDs, String[] names, int[] arraySizes);
400 synchronized void nElementGetSubElements(long id, long[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800401 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700402 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700403 }
Jason Sams768bc022009-09-21 19:41:04 -0700404
Tim Murray460a0492013-11-19 12:45:54 -0800405 native long rsnTypeCreate(long con, long eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
406 synchronized long nTypeCreate(long eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800407 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800408 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700409 }
Ashok Bhat98071552014-02-12 09:54:43 +0000410 native void rsnTypeGetNativeData(long con, long id, long[] typeData);
411 synchronized void nTypeGetNativeData(long id, long[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800412 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700413 rsnTypeGetNativeData(mContext, id, typeData);
414 }
Jason Sams768bc022009-09-21 19:41:04 -0700415
Ashok Bhat98071552014-02-12 09:54:43 +0000416 native long rsnAllocationCreateTyped(long con, long type, int mip, int usage, long pointer);
417 synchronized long nAllocationCreateTyped(long type, int mip, int usage, long pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800418 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800419 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700420 }
Tim Murray460a0492013-11-19 12:45:54 -0800421 native long rsnAllocationCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
422 synchronized long nAllocationCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800423 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800424 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700425 }
Tim Murraya3145512012-12-04 17:59:29 -0800426
Tim Murray460a0492013-11-19 12:45:54 -0800427 native long rsnAllocationCreateBitmapBackedAllocation(long con, long type, int mip, Bitmap bmp, int usage);
428 synchronized long nAllocationCreateBitmapBackedAllocation(long type, int mip, Bitmap bmp, int usage) {
Tim Murraya3145512012-12-04 17:59:29 -0800429 validate();
430 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
431 }
432
Tim Murray460a0492013-11-19 12:45:54 -0800433 native long rsnAllocationCubeCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
434 synchronized long nAllocationCubeCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800435 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800436 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800437 }
Tim Murray460a0492013-11-19 12:45:54 -0800438 native long rsnAllocationCreateBitmapRef(long con, long type, Bitmap bmp);
439 synchronized long nAllocationCreateBitmapRef(long type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800440 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700441 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
442 }
Tim Murray460a0492013-11-19 12:45:54 -0800443 native long rsnAllocationCreateFromAssetStream(long con, int mips, int assetStream, int usage);
444 synchronized long nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800445 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800446 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
447 }
448
Tim Murray460a0492013-11-19 12:45:54 -0800449 native void rsnAllocationCopyToBitmap(long con, long alloc, Bitmap bmp);
450 synchronized void nAllocationCopyToBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800452 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
453 }
454
455
Tim Murray460a0492013-11-19 12:45:54 -0800456 native void rsnAllocationSyncAll(long con, long alloc, int src);
457 synchronized void nAllocationSyncAll(long alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800458 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800459 rsnAllocationSyncAll(mContext, alloc, src);
460 }
Tim Murray460a0492013-11-19 12:45:54 -0800461 native Surface rsnAllocationGetSurface(long con, long alloc);
462 synchronized Surface nAllocationGetSurface(long alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800463 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800464 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700465 }
Tim Murray460a0492013-11-19 12:45:54 -0800466 native void rsnAllocationSetSurface(long con, long alloc, Surface sur);
467 synchronized void nAllocationSetSurface(long alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800468 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700469 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800470 }
Tim Murray460a0492013-11-19 12:45:54 -0800471 native void rsnAllocationIoSend(long con, long alloc);
472 synchronized void nAllocationIoSend(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800473 validate();
474 rsnAllocationIoSend(mContext, alloc);
475 }
Tim Murray460a0492013-11-19 12:45:54 -0800476 native void rsnAllocationIoReceive(long con, long alloc);
477 synchronized void nAllocationIoReceive(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800478 validate();
479 rsnAllocationIoReceive(mContext, alloc);
480 }
481
Jason Sams615e7ce2012-01-13 14:01:20 -0800482
Tim Murray460a0492013-11-19 12:45:54 -0800483 native void rsnAllocationGenerateMipmaps(long con, long alloc);
484 synchronized void nAllocationGenerateMipmaps(long alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800486 rsnAllocationGenerateMipmaps(mContext, alloc);
487 }
Tim Murray460a0492013-11-19 12:45:54 -0800488 native void rsnAllocationCopyFromBitmap(long con, long alloc, Bitmap bmp);
489 synchronized void nAllocationCopyFromBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800491 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700493
Jason Sams49a05d72010-12-29 14:31:29 -0800494
Miao Wang87e908d2015-03-02 15:15:15 -0800495 native void rsnAllocationData1D(long con, long id, int off, int mip, int count, Object d, int sizeBytes, int dt,
496 int mSize, boolean usePadding);
497 synchronized void nAllocationData1D(long id, int off, int mip, int count, Object d, int sizeBytes, Element.DataType dt,
498 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800500 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700501 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700502
Miao Wangc8e237e2015-02-20 18:36:32 -0800503 native void rsnAllocationElementData(long con,long id, int xoff, int yoff, int zoff, int mip, int compIdx, byte[] d, int sizeBytes);
504 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 -0800505 validate();
Miao Wangc8e237e2015-02-20 18:36:32 -0800506 rsnAllocationElementData(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700507 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700508
Tim Murrayeff663f2013-11-15 13:08:30 -0800509 native void rsnAllocationData2D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800510 long dstAlloc, int dstXoff, int dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700511 int dstMip, int dstFace,
512 int width, int height,
Tim Murray460a0492013-11-19 12:45:54 -0800513 long srcAlloc, int srcXoff, int srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700514 int srcMip, int srcFace);
Tim Murray460a0492013-11-19 12:45:54 -0800515 synchronized void nAllocationData2D(long dstAlloc, int dstXoff, int dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700516 int dstMip, int dstFace,
517 int width, int height,
Tim Murray460a0492013-11-19 12:45:54 -0800518 long srcAlloc, int srcXoff, int srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700519 int srcMip, int srcFace) {
520 validate();
521 rsnAllocationData2D(mContext,
522 dstAlloc, dstXoff, dstYoff,
523 dstMip, dstFace,
524 width, height,
525 srcAlloc, srcXoff, srcYoff,
526 srcMip, srcFace);
527 }
528
Tim Murray460a0492013-11-19 12:45:54 -0800529 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800530 int w, int h, Object d, int sizeBytes, int dt,
531 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800532 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800533 int w, int h, Object d, int sizeBytes, Element.DataType dt,
534 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800535 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800536 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700537 }
Jason Sams21659ac2013-11-06 15:08:07 -0800538
Tim Murray460a0492013-11-19 12:45:54 -0800539 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face, Bitmap b);
540 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800541 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800542 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
543 }
Jason Sams49a05d72010-12-29 14:31:29 -0800544
Tim Murrayeff663f2013-11-15 13:08:30 -0800545 native void rsnAllocationData3D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800546 long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700547 int dstMip,
548 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800549 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700550 int srcMip);
Tim Murray460a0492013-11-19 12:45:54 -0800551 synchronized void nAllocationData3D(long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700552 int dstMip,
553 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800554 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700555 int srcMip) {
556 validate();
557 rsnAllocationData3D(mContext,
558 dstAlloc, dstXoff, dstYoff, dstZoff,
559 dstMip, width, height, depth,
560 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
561 }
562
Tim Murray460a0492013-11-19 12:45:54 -0800563 native void rsnAllocationData3D(long con, long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800564 int w, int h, int depth, Object d, int sizeBytes, int dt,
565 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800566 synchronized void nAllocationData3D(long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800567 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
568 int mSize, boolean usePadding) {
Jason Samsb05d6892013-04-09 15:59:24 -0700569 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800570 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes,
571 dt.mID, mSize, usePadding);
Jason Samsb05d6892013-04-09 15:59:24 -0700572 }
Jason Samsb05d6892013-04-09 15:59:24 -0700573
Miao Wang87e908d2015-03-02 15:15:15 -0800574 native void rsnAllocationRead(long con, long id, Object d, int dt, int mSize, boolean usePadding);
575 synchronized void nAllocationRead(long id, Object d, Element.DataType dt, int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800576 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800577 rsnAllocationRead(mContext, id, d, dt.mID, mSize, usePadding);
Jason Samsfa445b92011-01-07 17:00:07 -0800578 }
Jason Sams21659ac2013-11-06 15:08:07 -0800579
Tim Murray460a0492013-11-19 12:45:54 -0800580 native void rsnAllocationRead1D(long con, long id, int off, int mip, int count, Object d,
Miao Wang87e908d2015-03-02 15:15:15 -0800581 int sizeBytes, int dt, int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800582 synchronized void nAllocationRead1D(long id, int off, int mip, int count, Object d,
Miao Wang87e908d2015-03-02 15:15:15 -0800583 int sizeBytes, Element.DataType dt, int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800584 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800585 rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Samsfa445b92011-01-07 17:00:07 -0800586 }
Jason Sams21659ac2013-11-06 15:08:07 -0800587
Miao Wangc8e237e2015-02-20 18:36:32 -0800588 native void rsnAllocationElementRead(long con,long id, int xoff, int yoff, int zoff,
Miao Wang45cec0a2015-03-04 16:40:21 -0800589 int mip, int compIdx, byte[] d, int sizeBytes);
Miao Wangc8e237e2015-02-20 18:36:32 -0800590 synchronized void nAllocationElementRead(long id, int xoff, int yoff, int zoff,
Miao Wang45cec0a2015-03-04 16:40:21 -0800591 int mip, int compIdx, byte[] d, int sizeBytes) {
Miao Wangc8e237e2015-02-20 18:36:32 -0800592 validate();
Miao Wang45cec0a2015-03-04 16:40:21 -0800593 rsnAllocationElementRead(mContext, id, xoff, yoff, zoff, mip, compIdx, d, sizeBytes);
Miao Wangc8e237e2015-02-20 18:36:32 -0800594 }
595
Tim Murray460a0492013-11-19 12:45:54 -0800596 native void rsnAllocationRead2D(long con, long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800597 int w, int h, Object d, int sizeBytes, int dt,
598 int mSize, boolean usePadding);
Tim Murray460a0492013-11-19 12:45:54 -0800599 synchronized void nAllocationRead2D(long id, int xoff, int yoff, int mip, int face,
Miao Wang87e908d2015-03-02 15:15:15 -0800600 int w, int h, Object d, int sizeBytes, Element.DataType dt,
601 int mSize, boolean usePadding) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800602 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800603 rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID, mSize, usePadding);
Jason Sams2e1872f2010-08-17 16:25:41 -0700604 }
Jason Sams21659ac2013-11-06 15:08:07 -0800605
Miao Wangc8e237e2015-02-20 18:36:32 -0800606 native void rsnAllocationRead3D(long con, long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800607 int w, int h, int depth, Object d, int sizeBytes, int dt,
608 int mSize, boolean usePadding);
Miao Wangc8e237e2015-02-20 18:36:32 -0800609 synchronized void nAllocationRead3D(long id, int xoff, int yoff, int zoff, int mip,
Miao Wang87e908d2015-03-02 15:15:15 -0800610 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt,
611 int mSize, boolean usePadding) {
Miao Wangc8e237e2015-02-20 18:36:32 -0800612 validate();
Miao Wang87e908d2015-03-02 15:15:15 -0800613 rsnAllocationRead3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID, mSize, usePadding);
Miao Wangc8e237e2015-02-20 18:36:32 -0800614 }
615
Tim Murray460a0492013-11-19 12:45:54 -0800616 native long rsnAllocationGetType(long con, long id);
617 synchronized long nAllocationGetType(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800618 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700619 return rsnAllocationGetType(mContext, id);
620 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700621
Tim Murray460a0492013-11-19 12:45:54 -0800622 native void rsnAllocationResize1D(long con, long id, int dimX);
623 synchronized void nAllocationResize1D(long id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800624 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700625 rsnAllocationResize1D(mContext, id, dimX);
626 }
Jason Sams5edc6082010-10-05 13:32:49 -0700627
Jason Sams46ba27e32015-02-06 17:45:15 -0800628 native long rsnAllocationAdapterCreate(long con, long allocId, long typeId);
629 synchronized long nAllocationAdapterCreate(long allocId, long typeId) {
630 validate();
631 return rsnAllocationAdapterCreate(mContext, allocId, typeId);
632 }
633
634 native void rsnAllocationAdapterOffset(long con, long id, int x, int y, int z,
635 int mip, int face, int a1, int a2, int a3, int a4);
636 synchronized void nAllocationAdapterOffset(long id, int x, int y, int z,
637 int mip, int face, int a1, int a2, int a3, int a4) {
638 validate();
639 rsnAllocationAdapterOffset(mContext, id, x, y, z, mip, face, a1, a2, a3, a4);
640 }
641
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000642 native long rsnFileA3DCreateFromAssetStream(long con, long assetStream);
643 synchronized long nFileA3DCreateFromAssetStream(long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800644 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700645 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
646 }
Tim Murray460a0492013-11-19 12:45:54 -0800647 native long rsnFileA3DCreateFromFile(long con, String path);
648 synchronized long nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800649 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800650 return rsnFileA3DCreateFromFile(mContext, path);
651 }
Tim Murray460a0492013-11-19 12:45:54 -0800652 native long rsnFileA3DCreateFromAsset(long con, AssetManager mgr, String path);
653 synchronized long nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800654 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800655 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
656 }
Tim Murray460a0492013-11-19 12:45:54 -0800657 native int rsnFileA3DGetNumIndexEntries(long con, long fileA3D);
658 synchronized int nFileA3DGetNumIndexEntries(long fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800659 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700660 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
661 }
Tim Murray460a0492013-11-19 12:45:54 -0800662 native void rsnFileA3DGetIndexEntries(long con, long fileA3D, int numEntries, int[] IDs, String[] names);
663 synchronized void nFileA3DGetIndexEntries(long fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800664 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700665 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
666 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000667 native long rsnFileA3DGetEntryByIndex(long con, long fileA3D, int index);
668 synchronized long nFileA3DGetEntryByIndex(long fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800669 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700670 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
671 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700672
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000673 native long rsnFontCreateFromFile(long con, String fileName, float size, int dpi);
674 synchronized long nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800675 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700676 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
677 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000678 native long rsnFontCreateFromAssetStream(long con, String name, float size, int dpi, long assetStream);
679 synchronized long nFontCreateFromAssetStream(String name, float size, int dpi, long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800680 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800681 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
682 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000683 native long rsnFontCreateFromAsset(long con, AssetManager mgr, String path, float size, int dpi);
684 synchronized long nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800685 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800686 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
687 }
Jason Sams22534172009-08-04 16:58:20 -0700688
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700689
Tim Murray460a0492013-11-19 12:45:54 -0800690 native void rsnScriptBindAllocation(long con, long script, long alloc, int slot);
691 synchronized void nScriptBindAllocation(long script, long alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800692 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700693 rsnScriptBindAllocation(mContext, script, alloc, slot);
694 }
Tim Murray460a0492013-11-19 12:45:54 -0800695 native void rsnScriptSetTimeZone(long con, long script, byte[] timeZone);
696 synchronized void nScriptSetTimeZone(long script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800697 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700698 rsnScriptSetTimeZone(mContext, script, timeZone);
699 }
Tim Murray460a0492013-11-19 12:45:54 -0800700 native void rsnScriptInvoke(long con, long id, int slot);
701 synchronized void nScriptInvoke(long id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800702 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700703 rsnScriptInvoke(mContext, id, slot);
704 }
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700705
706 native void rsnScriptForEach(long con, long id, int slot, long[] ains,
707 long aout, byte[] params, int[] limits);
708
709 synchronized void nScriptForEach(long id, int slot, long[] ains, long aout,
710 byte[] params, int[] limits) {
Jason Sams6e494d32011-04-27 16:33:11 -0700711 validate();
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700712 rsnScriptForEach(mContext, id, slot, ains, aout, params, limits);
Chris Wailes94961062014-06-11 12:01:28 -0700713 }
714
Tim Murray460a0492013-11-19 12:45:54 -0800715 native void rsnScriptInvokeV(long con, long id, int slot, byte[] params);
716 synchronized void nScriptInvokeV(long id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800717 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700718 rsnScriptInvokeV(mContext, id, slot, params);
719 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700720
Tim Murray460a0492013-11-19 12:45:54 -0800721 native void rsnScriptSetVarI(long con, long id, int slot, int val);
722 synchronized void nScriptSetVarI(long id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800723 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700724 rsnScriptSetVarI(mContext, id, slot, val);
725 }
Tim Murray460a0492013-11-19 12:45:54 -0800726 native int rsnScriptGetVarI(long con, long id, int slot);
727 synchronized int nScriptGetVarI(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700728 validate();
729 return rsnScriptGetVarI(mContext, id, slot);
730 }
731
Tim Murray460a0492013-11-19 12:45:54 -0800732 native void rsnScriptSetVarJ(long con, long id, int slot, long val);
733 synchronized void nScriptSetVarJ(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800734 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700735 rsnScriptSetVarJ(mContext, id, slot, val);
736 }
Tim Murray460a0492013-11-19 12:45:54 -0800737 native long rsnScriptGetVarJ(long con, long id, int slot);
738 synchronized long nScriptGetVarJ(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700739 validate();
740 return rsnScriptGetVarJ(mContext, id, slot);
741 }
742
Tim Murray460a0492013-11-19 12:45:54 -0800743 native void rsnScriptSetVarF(long con, long id, int slot, float val);
744 synchronized void nScriptSetVarF(long id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800745 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700746 rsnScriptSetVarF(mContext, id, slot, val);
747 }
Tim Murray460a0492013-11-19 12:45:54 -0800748 native float rsnScriptGetVarF(long con, long id, int slot);
749 synchronized float nScriptGetVarF(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700750 validate();
751 return rsnScriptGetVarF(mContext, id, slot);
752 }
Tim Murray460a0492013-11-19 12:45:54 -0800753 native void rsnScriptSetVarD(long con, long id, int slot, double val);
754 synchronized void nScriptSetVarD(long id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800755 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700756 rsnScriptSetVarD(mContext, id, slot, val);
757 }
Tim Murray460a0492013-11-19 12:45:54 -0800758 native double rsnScriptGetVarD(long con, long id, int slot);
759 synchronized double nScriptGetVarD(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700760 validate();
761 return rsnScriptGetVarD(mContext, id, slot);
762 }
Tim Murray460a0492013-11-19 12:45:54 -0800763 native void rsnScriptSetVarV(long con, long id, int slot, byte[] val);
764 synchronized void nScriptSetVarV(long id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800765 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700766 rsnScriptSetVarV(mContext, id, slot, val);
767 }
Tim Murray460a0492013-11-19 12:45:54 -0800768 native void rsnScriptGetVarV(long con, long id, int slot, byte[] val);
769 synchronized void nScriptGetVarV(long id, int slot, byte[] val) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700770 validate();
771 rsnScriptGetVarV(mContext, id, slot, val);
772 }
Tim Murray460a0492013-11-19 12:45:54 -0800773 native void rsnScriptSetVarVE(long con, long id, int slot, byte[] val,
774 long e, int[] dims);
775 synchronized void nScriptSetVarVE(long id, int slot, byte[] val,
776 long e, int[] dims) {
Stephen Hinesadeb8092012-04-20 14:26:06 -0700777 validate();
778 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
779 }
Tim Murray460a0492013-11-19 12:45:54 -0800780 native void rsnScriptSetVarObj(long con, long id, int slot, long val);
781 synchronized void nScriptSetVarObj(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800782 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800783 rsnScriptSetVarObj(mContext, id, slot, val);
784 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700785
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000786 native long rsnScriptCCreate(long con, String resName, String cacheDir,
Jason Samse4a06c52011-03-16 16:29:28 -0700787 byte[] script, int length);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000788 synchronized long nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800789 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700790 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700791 }
Jason Samsebfb4362009-09-23 13:57:02 -0700792
Tim Murray460a0492013-11-19 12:45:54 -0800793 native long rsnScriptIntrinsicCreate(long con, int id, long eid);
794 synchronized long nScriptIntrinsicCreate(int id, long eid) {
Jason Sams6ab97682012-08-10 12:09:43 -0700795 validate();
796 return rsnScriptIntrinsicCreate(mContext, id, eid);
797 }
798
Tim Murray460a0492013-11-19 12:45:54 -0800799 native long rsnScriptKernelIDCreate(long con, long sid, int slot, int sig);
800 synchronized long nScriptKernelIDCreate(long sid, int slot, int sig) {
Jason Sams08a81582012-09-18 12:32:10 -0700801 validate();
802 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
803 }
804
Yang Nibe392ad2015-01-23 17:16:02 -0800805 native long rsnScriptInvokeIDCreate(long con, long sid, int slot);
806 synchronized long nScriptInvokeIDCreate(long sid, int slot) {
807 validate();
808 return rsnScriptInvokeIDCreate(mContext, sid, slot);
809 }
810
Tim Murray460a0492013-11-19 12:45:54 -0800811 native long rsnScriptFieldIDCreate(long con, long sid, int slot);
812 synchronized long nScriptFieldIDCreate(long sid, int slot) {
Jason Sams08a81582012-09-18 12:32:10 -0700813 validate();
814 return rsnScriptFieldIDCreate(mContext, sid, slot);
815 }
816
Ashok Bhat98071552014-02-12 09:54:43 +0000817 native long rsnScriptGroupCreate(long con, long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types);
818 synchronized long nScriptGroupCreate(long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types) {
Jason Sams08a81582012-09-18 12:32:10 -0700819 validate();
820 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
821 }
822
Tim Murray460a0492013-11-19 12:45:54 -0800823 native void rsnScriptGroupSetInput(long con, long group, long kernel, long alloc);
824 synchronized void nScriptGroupSetInput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700825 validate();
826 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
827 }
828
Tim Murray460a0492013-11-19 12:45:54 -0800829 native void rsnScriptGroupSetOutput(long con, long group, long kernel, long alloc);
830 synchronized void nScriptGroupSetOutput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700831 validate();
832 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
833 }
834
Tim Murray460a0492013-11-19 12:45:54 -0800835 native void rsnScriptGroupExecute(long con, long group);
836 synchronized void nScriptGroupExecute(long group) {
Jason Sams08a81582012-09-18 12:32:10 -0700837 validate();
838 rsnScriptGroupExecute(mContext, group);
839 }
840
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000841 native long rsnSamplerCreate(long con, int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700842 int wrapS, int wrapT, int wrapR, float aniso);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000843 synchronized long nSamplerCreate(int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700844 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800845 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700846 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700847 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800848
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000849 native long rsnProgramStoreCreate(long con, boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700850 boolean depthMask, boolean dither,
851 int srcMode, int dstMode, int depthFunc);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000852 synchronized long nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700853 boolean depthMask, boolean dither,
854 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800855 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700856 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
857 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700858 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700859
Tim Murray460a0492013-11-19 12:45:54 -0800860 native long rsnProgramRasterCreate(long con, boolean pointSprite, int cullMode);
861 synchronized long nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800862 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700863 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700864 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700865
Tim Murray460a0492013-11-19 12:45:54 -0800866 native void rsnProgramBindConstants(long con, long pv, int slot, long mID);
867 synchronized void nProgramBindConstants(long pv, int slot, long mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800868 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700869 rsnProgramBindConstants(mContext, pv, slot, mID);
870 }
Tim Murray460a0492013-11-19 12:45:54 -0800871 native void rsnProgramBindTexture(long con, long vpf, int slot, long a);
872 synchronized void nProgramBindTexture(long vpf, int slot, long a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800873 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700874 rsnProgramBindTexture(mContext, vpf, slot, a);
875 }
Tim Murray460a0492013-11-19 12:45:54 -0800876 native void rsnProgramBindSampler(long con, long vpf, int slot, long s);
877 synchronized void nProgramBindSampler(long vpf, int slot, long s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800878 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700879 rsnProgramBindSampler(mContext, vpf, slot, s);
880 }
Ashok Bhat98071552014-02-12 09:54:43 +0000881 native long rsnProgramFragmentCreate(long con, String shader, String[] texNames, long[] params);
882 synchronized long nProgramFragmentCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800883 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800884 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700885 }
Ashok Bhat98071552014-02-12 09:54:43 +0000886 native long rsnProgramVertexCreate(long con, String shader, String[] texNames, long[] params);
887 synchronized long nProgramVertexCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800888 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800889 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700890 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700891
Ashok Bhat98071552014-02-12 09:54:43 +0000892 native long rsnMeshCreate(long con, long[] vtx, long[] idx, int[] prim);
893 synchronized long nMeshCreate(long[] vtx, long[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800894 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700895 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800896 }
Tim Murray460a0492013-11-19 12:45:54 -0800897 native int rsnMeshGetVertexBufferCount(long con, long id);
898 synchronized int nMeshGetVertexBufferCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800899 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700900 return rsnMeshGetVertexBufferCount(mContext, id);
901 }
Tim Murray460a0492013-11-19 12:45:54 -0800902 native int rsnMeshGetIndexCount(long con, long id);
903 synchronized int nMeshGetIndexCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800904 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700905 return rsnMeshGetIndexCount(mContext, id);
906 }
Ashok Bhat98071552014-02-12 09:54:43 +0000907 native void rsnMeshGetVertices(long con, long id, long[] vtxIds, int vtxIdCount);
908 synchronized void nMeshGetVertices(long id, long[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800909 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700910 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
911 }
Ashok Bhat98071552014-02-12 09:54:43 +0000912 native void rsnMeshGetIndices(long con, long id, long[] idxIds, int[] primitives, int vtxIdCount);
913 synchronized void nMeshGetIndices(long id, long[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800914 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700915 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
916 }
917
Tim Murray25207df2015-01-12 16:47:56 -0800918 native void rsnScriptIntrinsicBLAS_Single(long con, long id, int func, int TransA,
919 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
920 float alpha, long A, long B, float beta, long C, int incX, int incY,
921 int KL, int KU);
922 synchronized void nScriptIntrinsicBLAS_Single(long id, int func, int TransA,
923 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
924 float alpha, long A, long B, float beta, long C, int incX, int incY,
925 int KL, int KU) {
926 validate();
927 rsnScriptIntrinsicBLAS_Single(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU);
928 }
929
930 native void rsnScriptIntrinsicBLAS_Double(long con, long id, int func, int TransA,
931 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
932 double alpha, long A, long B, double beta, long C, int incX, int incY,
933 int KL, int KU);
934 synchronized void nScriptIntrinsicBLAS_Double(long id, int func, int TransA,
935 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
936 double alpha, long A, long B, double beta, long C, int incX, int incY,
937 int KL, int KU) {
938 validate();
939 rsnScriptIntrinsicBLAS_Double(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alpha, A, B, beta, C, incX, incY, KL, KU);
940 }
941
942 native void rsnScriptIntrinsicBLAS_Complex(long con, long id, int func, int TransA,
943 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
944 float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
945 int KL, int KU);
946 synchronized void nScriptIntrinsicBLAS_Complex(long id, int func, int TransA,
947 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
948 float alphaX, float alphaY, long A, long B, float betaX, float betaY, long C, int incX, int incY,
949 int KL, int KU) {
950 validate();
951 rsnScriptIntrinsicBLAS_Complex(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU);
952 }
953
954 native void rsnScriptIntrinsicBLAS_Z(long con, long id, int func, int TransA,
955 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
956 double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
957 int KL, int KU);
958 synchronized void nScriptIntrinsicBLAS_Z(long id, int func, int TransA,
959 int TransB, int Side, int Uplo, int Diag, int M, int N, int K,
960 double alphaX, double alphaY, long A, long B, double betaX, double betaY, long C, int incX, int incY,
961 int KL, int KU) {
962 validate();
963 rsnScriptIntrinsicBLAS_Z(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU);
964 }
965
Tim Murray9cb16a22015-04-01 11:07:16 -0700966 native void rsnScriptIntrinsicBLAS_BNNM(long con, long id, int M, int N, int K,
967 long A, int a_offset, long B, int b_offset, long C, int c_offset,
968 int c_mult_int);
969 synchronized void nScriptIntrinsicBLAS_BNNM(long id, int M, int N, int K,
970 long A, int a_offset, long B, int b_offset, long C, int c_offset,
971 int c_mult_int) {
972 validate();
973 rsnScriptIntrinsicBLAS_BNNM(mContext, id, M, N, K, A, a_offset, B, b_offset, C, c_offset, c_mult_int);
974 }
975
976
Tim Murray25207df2015-01-12 16:47:56 -0800977
Tim Murrayeff663f2013-11-15 13:08:30 -0800978 long mDev;
979 long mContext;
Jason Samsd22a6f02015-02-19 17:19:52 -0800980 private boolean mDestroyed = false;
981
Romain Guy650a3eb2009-08-31 14:06:43 -0700982 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800983 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700984
Jason Sams8cb39de2010-06-01 15:47:01 -0700985 Element mElement_U8;
986 Element mElement_I8;
987 Element mElement_U16;
988 Element mElement_I16;
989 Element mElement_U32;
990 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700991 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700992 Element mElement_I64;
Jason Samsa5835a22014-11-05 15:16:26 -0800993 Element mElement_F16;
Jason Sams8cb39de2010-06-01 15:47:01 -0700994 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700995 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700996 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700997
Jason Sams8cb39de2010-06-01 15:47:01 -0700998 Element mElement_ELEMENT;
999 Element mElement_TYPE;
1000 Element mElement_ALLOCATION;
1001 Element mElement_SAMPLER;
1002 Element mElement_SCRIPT;
1003 Element mElement_MESH;
1004 Element mElement_PROGRAM_FRAGMENT;
1005 Element mElement_PROGRAM_VERTEX;
1006 Element mElement_PROGRAM_RASTER;
1007 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -07001008 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -07001009
Jason Sams3c0dfba2009-09-27 17:50:38 -07001010 Element mElement_A_8;
1011 Element mElement_RGB_565;
1012 Element mElement_RGB_888;
1013 Element mElement_RGBA_5551;
1014 Element mElement_RGBA_4444;
1015 Element mElement_RGBA_8888;
1016
Jason Samsa5835a22014-11-05 15:16:26 -08001017 Element mElement_HALF_2;
1018 Element mElement_HALF_3;
1019 Element mElement_HALF_4;
1020
Jason Sams8cb39de2010-06-01 15:47:01 -07001021 Element mElement_FLOAT_2;
1022 Element mElement_FLOAT_3;
1023 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -07001024
1025 Element mElement_DOUBLE_2;
1026 Element mElement_DOUBLE_3;
1027 Element mElement_DOUBLE_4;
1028
1029 Element mElement_UCHAR_2;
1030 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -07001031 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -08001032
Stephen Hines836c4a52011-06-01 14:38:10 -07001033 Element mElement_CHAR_2;
1034 Element mElement_CHAR_3;
1035 Element mElement_CHAR_4;
1036
1037 Element mElement_USHORT_2;
1038 Element mElement_USHORT_3;
1039 Element mElement_USHORT_4;
1040
1041 Element mElement_SHORT_2;
1042 Element mElement_SHORT_3;
1043 Element mElement_SHORT_4;
1044
1045 Element mElement_UINT_2;
1046 Element mElement_UINT_3;
1047 Element mElement_UINT_4;
1048
1049 Element mElement_INT_2;
1050 Element mElement_INT_3;
1051 Element mElement_INT_4;
1052
1053 Element mElement_ULONG_2;
1054 Element mElement_ULONG_3;
1055 Element mElement_ULONG_4;
1056
1057 Element mElement_LONG_2;
1058 Element mElement_LONG_3;
1059 Element mElement_LONG_4;
1060
Tim Murray932e78e2013-09-03 11:42:26 -07001061 Element mElement_YUV;
1062
Jason Sams1d45c472010-08-25 14:31:48 -07001063 Element mElement_MATRIX_4X4;
1064 Element mElement_MATRIX_3X3;
1065 Element mElement_MATRIX_2X2;
1066
Jason Sams4d339932010-05-11 14:03:58 -07001067 Sampler mSampler_CLAMP_NEAREST;
1068 Sampler mSampler_CLAMP_LINEAR;
1069 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
1070 Sampler mSampler_WRAP_NEAREST;
1071 Sampler mSampler_WRAP_LINEAR;
1072 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -08001073 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
1074 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
1075 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -07001076
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001077 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
1078 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001079 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
1080 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -07001081
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -07001082 ProgramRaster mProgramRaster_CULL_BACK;
1083 ProgramRaster mProgramRaster_CULL_FRONT;
1084 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -07001085
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001086 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -07001087 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001088
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001089 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001090 * The base class from which an application should derive in order
1091 * to receive RS messages from scripts. When a script calls {@code
1092 * rsSendToClient}, the data fields will be filled, and the run
1093 * method will be called on a separate thread. This will occur
1094 * some time after {@code rsSendToClient} completes in the script,
1095 * as {@code rsSendToClient} is asynchronous. Message handlers are
1096 * not guaranteed to have completed when {@link
1097 * android.renderscript.RenderScript#finish} returns.
Jason Sams27676fe2010-11-10 17:00:59 -08001098 *
1099 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001100 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -07001101 protected int[] mData;
1102 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -08001103 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -07001104 public void run() {
1105 }
1106 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001107 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001108 * If an application is expecting messages, it should set this
1109 * field to an instance of {@link RSMessageHandler}. This
1110 * instance will receive all the user messages sent from {@code
1111 * sendToClient} by scripts from this context.
Jason Sams27676fe2010-11-10 17:00:59 -08001112 *
1113 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001114 RSMessageHandler mMessageCallback = null;
1115
1116 public void setMessageHandler(RSMessageHandler msg) {
1117 mMessageCallback = msg;
1118 }
1119 public RSMessageHandler getMessageHandler() {
1120 return mMessageCallback;
1121 }
Jason Sams516c3192009-10-06 13:58:47 -07001122
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001123 /**
Jason Sams02d56d92013-04-12 16:40:50 -07001124 * Place a message into the message queue to be sent back to the message
1125 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -08001126 *
1127 * @param id
1128 * @param data
1129 */
1130 public void sendMessage(int id, int[] data) {
1131 nContextSendMessage(id, data);
1132 }
1133
1134 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001135 * The runtime error handler base class. An application should derive from this class
1136 * if it wishes to install an error handler. When errors occur at runtime,
1137 * the fields in this class will be filled, and the run method will be called.
Jason Sams27676fe2010-11-10 17:00:59 -08001138 *
1139 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001140 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -08001141 protected String mErrorMessage;
1142 protected int mErrorNum;
1143 public void run() {
1144 }
1145 }
Jason Sams27676fe2010-11-10 17:00:59 -08001146
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001147 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001148 * Application Error handler. All runtime errors will be dispatched to the
1149 * instance of RSAsyncError set here. If this field is null a
Tim Murrayc11e25c2013-04-09 11:01:01 -07001150 * {@link RSRuntimeException} will instead be thrown with details about the error.
Jason Sams27676fe2010-11-10 17:00:59 -08001151 * This will cause program termaination.
1152 *
1153 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001154 RSErrorHandler mErrorCallback = null;
1155
1156 public void setErrorHandler(RSErrorHandler msg) {
1157 mErrorCallback = msg;
1158 }
1159 public RSErrorHandler getErrorHandler() {
1160 return mErrorCallback;
1161 }
Jason Sams1c415172010-11-08 17:06:46 -08001162
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001163 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001164 * RenderScript worker thread priority enumeration. The default value is
1165 * NORMAL. Applications wishing to do background processing should set
1166 * their priority to LOW to avoid starving forground processes.
Jason Sams27676fe2010-11-10 17:00:59 -08001167 */
Jason Sams7d787b42009-11-15 12:14:26 -08001168 public enum Priority {
Jason Samsc9870c12015-01-21 12:55:14 -08001169 // These values used to represent official thread priority values
1170 // now they are simply enums to be used by the runtime side
1171 LOW (15),
1172 NORMAL (-8);
Jason Sams7d787b42009-11-15 12:14:26 -08001173
1174 int mID;
1175 Priority(int id) {
1176 mID = id;
1177 }
1178 }
1179
Jason Sams678cc7f2014-03-05 16:09:02 -08001180 void validateObject(BaseObj o) {
1181 if (o != null) {
1182 if (o.mRS != this) {
1183 throw new RSIllegalArgumentException("Attempting to use an object across contexts.");
1184 }
1185 }
1186 }
1187
Jason Sams771bebb2009-12-07 12:40:12 -08001188 void validate() {
1189 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -07001190 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -08001191 }
1192 }
1193
Jason Sams27676fe2010-11-10 17:00:59 -08001194
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001195 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001196 * Change the priority of the worker threads for this context.
1197 *
1198 * @param p New priority to be set.
1199 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001200 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -08001201 validate();
Jason Sams7d787b42009-11-15 12:14:26 -08001202 nContextSetPriority(p.mID);
1203 }
1204
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001205 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -07001206 RenderScript mRS;
1207 boolean mRun = true;
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001208 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001209
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001210 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1211 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1212 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1213 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1214 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001215 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001216
Stephen Hines42028a82013-04-17 19:22:01 -07001217 static final int RS_ERROR_FATAL_DEBUG = 0x0800;
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001218 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001219
Jason Sams516c3192009-10-06 13:58:47 -07001220 MessageThread(RenderScript rs) {
1221 super("RSMessageThread");
1222 mRS = rs;
1223
1224 }
1225
1226 public void run() {
1227 // This function is a temporary solution. The final solution will
1228 // used typed allocations where the message id is the type indicator.
1229 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001230 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001231 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001232 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001233 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001234 int size = mAuxData[1];
1235 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001236
1237 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1238 if ((size>>2) >= rbuf.length) {
1239 rbuf = new int[(size + 3) >> 2];
1240 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001241 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1242 RS_MESSAGE_TO_CLIENT_USER) {
Tim Murrayc11e25c2013-04-09 11:01:01 -07001243 throw new RSDriverException("Error processing message from RenderScript.");
Jason Samsedbfabd2011-05-17 15:01:29 -07001244 }
Jason Sams1c415172010-11-08 17:06:46 -08001245
1246 if(mRS.mMessageCallback != null) {
1247 mRS.mMessageCallback.mData = rbuf;
1248 mRS.mMessageCallback.mID = subID;
1249 mRS.mMessageCallback.mLength = size;
1250 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001251 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001252 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001253 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001254 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001255 }
Jason Sams1c415172010-11-08 17:06:46 -08001256
1257 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1258 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1259
Stephen Hines42028a82013-04-17 19:22:01 -07001260 // Throw RSRuntimeException under the following conditions:
1261 //
1262 // 1) It is an unknown fatal error.
1263 // 2) It is a debug fatal error, and we are not in a
1264 // debug context.
1265 // 3) It is a debug fatal error, and we do not have an
1266 // error callback.
1267 if (subID >= RS_ERROR_FATAL_UNKNOWN ||
1268 (subID >= RS_ERROR_FATAL_DEBUG &&
1269 (mRS.mContextType != ContextType.DEBUG ||
1270 mRS.mErrorCallback == null))) {
Jason Samsadd9d962010-11-22 16:20:16 -08001271 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1272 }
1273
Jason Sams1c415172010-11-08 17:06:46 -08001274 if(mRS.mErrorCallback != null) {
1275 mRS.mErrorCallback.mErrorMessage = e;
1276 mRS.mErrorCallback.mErrorNum = subID;
1277 mRS.mErrorCallback.run();
1278 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001279 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001280 // Do not throw here. In these cases, we do not have
1281 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001282 }
1283 continue;
1284 }
1285
Jason Sams739c8262013-04-11 18:07:52 -07001286 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
Tim Murrayb730d862014-08-18 16:14:24 -07001287 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1288 RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1289 throw new RSDriverException("Error processing message from RenderScript.");
1290 }
1291 long bufferID = ((long)rbuf[1] << 32L) + ((long)rbuf[0] & 0xffffffffL);
1292 Allocation.sendBufferNotification(bufferID);
Jason Sams739c8262013-04-11 18:07:52 -07001293 continue;
1294 }
1295
Jason Sams1c415172010-11-08 17:06:46 -08001296 // 2: teardown.
1297 // But we want to avoid starving other threads during
1298 // teardown by yielding until the next line in the destructor
1299 // can execute to set mRun = false
1300 try {
1301 sleep(1, 0);
1302 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001303 }
Jason Sams516c3192009-10-06 13:58:47 -07001304 }
Tim Murrayda67deb2013-05-09 12:02:50 -07001305 //Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001306 }
1307 }
1308
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001309 RenderScript(Context ctx) {
Stephen Hines42028a82013-04-17 19:22:01 -07001310 mContextType = ContextType.NORMAL;
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001311 if (ctx != null) {
1312 mApplicationContext = ctx.getApplicationContext();
1313 }
Tim Murray06b45672014-01-07 11:13:56 -08001314 mRWLock = new ReentrantReadWriteLock();
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001315 try {
Tim Murrayd11a6582014-12-16 09:59:09 -08001316 registerNativeAllocation.invoke(sRuntime, 4 * 1024 * 1024); // 4MB for GC sake
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001317 } catch (Exception e) {
1318 Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e);
1319 throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e);
1320 }
1321
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001322 }
1323
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001324 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001325 * Gets the application context associated with the RenderScript context.
1326 *
1327 * @return The application context.
1328 */
1329 public final Context getApplicationContext() {
1330 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001331 }
1332
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001333 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001334 * Create a RenderScript context.
Jason Sams27676fe2010-11-10 17:00:59 -08001335 *
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001336 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001337 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001338 * @return RenderScript
1339 */
Jason Samse16da122015-03-18 17:04:18 -07001340 private static RenderScript internalCreate(Context ctx, int sdkVersion, ContextType ct, int flags) {
Dan Morrille4d9a012013-03-28 18:10:43 -07001341 if (!sInitialized) {
1342 Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
1343 return null;
1344 }
1345
Jason Samsb69c7912014-05-20 18:48:35 -07001346 if ((flags & ~(CREATE_FLAG_LOW_LATENCY | CREATE_FLAG_LOW_POWER)) != 0) {
1347 throw new RSIllegalArgumentException("Invalid flags passed.");
1348 }
1349
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001350 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001351
1352 rs.mDev = rs.nDeviceCreate();
Tim Murrayfd710e72014-06-06 11:10:45 -07001353 rs.mContext = rs.nContextCreate(rs.mDev, flags, sdkVersion, ct.mID);
Stephen Hines42028a82013-04-17 19:22:01 -07001354 rs.mContextType = ct;
Jason Samse16da122015-03-18 17:04:18 -07001355 rs.mContextFlags = flags;
1356 rs.mContextSdkVersion = sdkVersion;
Jason Sams26985362011-05-03 15:01:58 -07001357 if (rs.mContext == 0) {
1358 throw new RSDriverException("Failed to create RS context.");
1359 }
Tim Murray47f31582015-04-07 15:43:24 -07001360
1361 // set up cache directory for entire context
1362 final String CACHE_PATH = "com.android.renderscript.cache";
1363 File f = new File(RenderScriptCacheDir.mCacheDir, CACHE_PATH);
1364 String mCachePath = f.getAbsolutePath();
1365 f.mkdirs();
1366 rs.nContextSetCacheDir(mCachePath);
1367
Jason Sams704ff642010-02-09 16:05:07 -08001368 rs.mMessageThread = new MessageThread(rs);
1369 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001370 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001371 }
1372
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001373 /**
Miao Wanga4e5adf2015-03-23 11:09:56 -07001374 * calls create(ctx, ContextType.NORMAL, CREATE_FLAG_NONE)
Jason Samse16da122015-03-18 17:04:18 -07001375 *
1376 * See documentation for @create for details
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001377 *
1378 * @param ctx The context.
1379 * @return RenderScript
1380 */
1381 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001382 return create(ctx, ContextType.NORMAL);
1383 }
1384
1385 /**
Miao Wanga4e5adf2015-03-23 11:09:56 -07001386 * calls create(ctx, ct, CREATE_FLAG_NONE)
Jason Samsadd26dc2013-02-22 18:43:45 -08001387 *
Jason Samse16da122015-03-18 17:04:18 -07001388 * See documentation for @create for details
Jason Samsadd26dc2013-02-22 18:43:45 -08001389 *
1390 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001391 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001392 * @return RenderScript
1393 */
1394 public static RenderScript create(Context ctx, ContextType ct) {
Jason Samse16da122015-03-18 17:04:18 -07001395 return create(ctx, ct, CREATE_FLAG_NONE);
Jason Sams26e90512014-05-07 14:23:27 -07001396 }
1397
Miao Wanga4e5adf2015-03-23 11:09:56 -07001398
1399 /**
Jason Samse16da122015-03-18 17:04:18 -07001400 * Gets or creates a RenderScript context of the specified type.
Jason Sams26e90512014-05-07 14:23:27 -07001401 *
Jason Samse16da122015-03-18 17:04:18 -07001402 * The returned context will be cached for future reuse within
1403 * the process. When an application is finished using
1404 * RenderScript it should call releaseAllContexts()
1405 *
1406 * A process context is a context designed for easy creation and
1407 * lifecycle management. Multiple calls to this function will
1408 * return the same object provided they are called with the same
1409 * options. This allows it to be used any time a RenderScript
1410 * context is needed.
1411 *
1412 * Prior to API 23 this always created a new context.
Jason Sams26e90512014-05-07 14:23:27 -07001413 *
1414 * @param ctx The context.
1415 * @param ct The type of context to be created.
1416 * @param flags The OR of the CREATE_FLAG_* options desired
1417 * @return RenderScript
1418 */
Tim Murrayfd710e72014-06-06 11:10:45 -07001419 public static RenderScript create(Context ctx, ContextType ct, int flags) {
Jason Sams26e90512014-05-07 14:23:27 -07001420 int v = ctx.getApplicationInfo().targetSdkVersion;
Miao Wanga4e5adf2015-03-23 11:09:56 -07001421 return create(ctx, v, ct, flags);
1422 }
1423
1424 /**
1425 * calls create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE)
1426 *
1427 * Used by the RenderScriptThunker to maintain backward compatibility.
1428 *
1429 * @hide
1430 * @param ctx The context.
1431 * @param sdkVersion The target SDK Version.
1432 * @return RenderScript
1433 */
1434 public static RenderScript create(Context ctx, int sdkVersion) {
1435 return create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE);
1436 }
1437
1438 /**
1439 * Gets or creates a RenderScript context of the specified type.
1440 *
1441 * @hide
1442 * @param ctx The context.
1443 * @param ct The type of context to be created.
1444 * @param sdkVersion The target SDK Version.
1445 * @param flags The OR of the CREATE_FLAG_* options desired
1446 * @return RenderScript
1447 */
1448 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, int flags) {
1449 if (sdkVersion < 23) {
1450 return internalCreate(ctx, sdkVersion, ct, flags);
Jason Samse16da122015-03-18 17:04:18 -07001451 }
1452
1453 synchronized (mProcessContextList) {
1454 for (RenderScript prs : mProcessContextList) {
1455 if ((prs.mContextType == ct) &&
1456 (prs.mContextFlags == flags) &&
Miao Wanga4e5adf2015-03-23 11:09:56 -07001457 (prs.mContextSdkVersion == sdkVersion)) {
Jason Samse16da122015-03-18 17:04:18 -07001458
1459 return prs;
1460 }
1461 }
1462
Miao Wanga4e5adf2015-03-23 11:09:56 -07001463 RenderScript prs = internalCreate(ctx, sdkVersion, ct, flags);
Jason Samse16da122015-03-18 17:04:18 -07001464 prs.mIsProcessContext = true;
1465 mProcessContextList.add(prs);
1466 return prs;
1467 }
Jason Sams1a4e1f3e2012-02-24 17:51:24 -08001468 }
1469
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001470 /**
Jason Samse16da122015-03-18 17:04:18 -07001471 * @hide
1472 *
1473 * Releases all the process contexts. This is the same as
1474 * calling .destroy() on each unique context retreived with
1475 * create(...). If no contexts have been created this
1476 * function does nothing.
1477 *
1478 * Typically you call this when your application is losing focus
1479 * and will not be using a context for some time.
1480 *
1481 * This has no effect on a context created with
1482 * createMultiContext()
1483 */
1484 public static void releaseAllContexts() {
1485 ArrayList<RenderScript> oldList;
1486 synchronized (mProcessContextList) {
1487 oldList = mProcessContextList;
1488 mProcessContextList = new ArrayList<RenderScript>();
1489 }
1490
1491 for (RenderScript prs : oldList) {
1492 prs.mIsProcessContext = false;
1493 prs.destroy();
1494 }
1495 oldList.clear();
1496 }
1497
1498
1499
1500 /**
1501 * Create a RenderScript context.
1502 *
1503 * This is an advanced function intended for applications which
1504 * need to create more than one RenderScript context to be used
1505 * at the same time.
1506 *
1507 * If you need a single context please use create()
1508 *
1509 * @hide
1510 * @param ctx The context.
1511 * @return RenderScript
1512 */
1513 public static RenderScript createMultiContext(Context ctx, ContextType ct, int flags, int API_number) {
1514 return internalCreate(ctx, API_number, ct, flags);
1515 }
1516
1517
1518 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001519 * Print the currently available debugging information about the state of
1520 * the RS context to the log.
1521 *
Jason Sams27676fe2010-11-10 17:00:59 -08001522 */
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001523 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001524 validate();
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001525 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001526 }
1527
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001528 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001529 * Wait for any pending asynchronous opeations (such as copies to a RS
1530 * allocation or RS script executions) to complete.
Jason Sams27676fe2010-11-10 17:00:59 -08001531 *
1532 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001533 public void finish() {
1534 nContextFinish();
1535 }
1536
Jason Samsd22a6f02015-02-19 17:19:52 -08001537 private void helpDestroy() {
1538 boolean shouldDestroy = false;
1539 synchronized(this) {
1540 if (!mDestroyed) {
1541 shouldDestroy = true;
1542 mDestroyed = true;
1543 }
1544 }
1545
1546 if (shouldDestroy) {
1547 nContextFinish();
1548
1549 nContextDeinitToClient(mContext);
1550 mMessageThread.mRun = false;
1551 try {
1552 mMessageThread.join();
1553 } catch(InterruptedException e) {
1554 }
1555
1556 nContextDestroy();
1557
1558 nDeviceDestroy(mDev);
1559 mDev = 0;
1560 }
1561 }
1562
1563 protected void finalize() throws Throwable {
1564 helpDestroy();
1565 super.finalize();
1566 }
1567
1568
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001569 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001570 * Destroys this RenderScript context. Once this function is called,
1571 * using this context or any objects belonging to this context is
1572 * illegal.
Jason Sams27676fe2010-11-10 17:00:59 -08001573 *
Jason Samse16da122015-03-18 17:04:18 -07001574 * API 23+, this function is a NOP if the context was created
1575 * with create(). Please use releaseAllContexts() to clean up
1576 * contexts created with the create function.
1577 *
Jason Sams27676fe2010-11-10 17:00:59 -08001578 */
Jason Samsf5b45962009-08-25 14:49:07 -07001579 public void destroy() {
Jason Samse16da122015-03-18 17:04:18 -07001580 if (mIsProcessContext) {
1581 // users cannot destroy a process context
1582 return;
1583 }
Jason Sams5dbfe932010-01-27 14:41:43 -08001584 validate();
Jason Samsd22a6f02015-02-19 17:19:52 -08001585 helpDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001586 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001587
Jason Samsa9e7a052009-09-25 14:51:22 -07001588 boolean isAlive() {
1589 return mContext != 0;
1590 }
1591
Tim Murray460a0492013-11-19 12:45:54 -08001592 long safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001593 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001594 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001595 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001596 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001597 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001598}