blob: 94aa8578d2332ee9d227db2a55d22a3af495f30b [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08002 * Copyright (C) 2008-2012 The Android Open Source Project
Jack Palevich60aa3ea2009-05-26 13:45:08 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Samsa6f338c2012-02-24 16:22:16 -080019import java.io.File;
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;
Stephen Hines4382467a2011-08-01 15:02:34 -070032
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070033/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070034 * This class provides access to a RenderScript context, which controls RenderScript
35 * initialization, resource management, and teardown. An instance of the RenderScript
36 * class must be created before any other RS objects can be created.
Jason Sams27676fe2010-11-10 17:00:59 -080037 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080038 * <div class="special reference">
39 * <h3>Developer Guides</h3>
Tim Murrayc11e25c2013-04-09 11:01:01 -070040 * <p>For more information about creating an application that uses RenderScript, read the
41 * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080042 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070043 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070044public class RenderScript {
Tim Murray6d7a53c2013-05-23 16:59:23 -070045 static final long TRACE_TAG = Trace.TRACE_TAG_RS;
46
Jason Sams3bc47d42009-11-12 15:10:25 -080047 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080048 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070049 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070050 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070051
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080052 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070053
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080054 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070055 * We use a class initializer to allow the native code to cache some
56 * field offsets.
57 */
Dan Morrille4d9a012013-03-28 18:10:43 -070058 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // TODO: now used locally; remove?
Jason Samsbf6ef8d2010-12-06 15:59:59 -080059 static boolean sInitialized;
60 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061
Tim Murray2f2472c2013-08-22 14:55:26 -070062 static Object sRuntime;
63 static Method registerNativeAllocation;
64 static Method registerNativeFree;
Jason Samsdba3ba52009-07-30 14:56:12 -070065
Jason Sams26e90512014-05-07 14:23:27 -070066 /*
Tim Murrayfd710e72014-06-06 11:10:45 -070067 * Context creation flag that specifies a normal context.
Jason Sams26e90512014-05-07 14:23:27 -070068 */
Tim Murrayfd710e72014-06-06 11:10:45 -070069 public static final int CREATE_FLAG_NONE = 0x0000;
Jason Sams26e90512014-05-07 14:23:27 -070070
71 /*
72 * Context creation flag which specifies a context optimized for low
73 * latency over peak performance. This is a hint and may have no effect
74 * on some implementations.
75 */
Tim Murrayfd710e72014-06-06 11:10:45 -070076 public static final int CREATE_FLAG_LOW_LATENCY = 0x0002;
Jason Sams26e90512014-05-07 14:23:27 -070077
78 /*
79 * Context creation flag which specifies a context optimized for long
80 * battery life 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_POWER = 0x0004;
Jason Sams26e90512014-05-07 14:23:27 -070084
Tim Murray56f9e6f2014-05-16 11:47:26 -070085 /*
86 * Detect the bitness of the VM to allow FieldPacker to do the right thing.
87 */
88 static native int rsnSystemGetPointerSize();
89 static int sPointerSize;
90
Jack Palevich60aa3ea2009-05-26 13:45:08 -070091 static {
92 sInitialized = false;
Dan Morrille4d9a012013-03-28 18:10:43 -070093 if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
94 try {
Tim Murray2f2472c2013-08-22 14:55:26 -070095 Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
96 Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
97 sRuntime = get_runtime.invoke(null);
98 registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
99 registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
100 } catch (Exception e) {
101 Log.e(LOG_TAG, "Error loading GC methods: " + e);
102 throw new RSRuntimeException("Error loading GC methods: " + e);
103 }
104 try {
Dan Morrille4d9a012013-03-28 18:10:43 -0700105 System.loadLibrary("rs_jni");
106 _nInit();
107 sInitialized = true;
Tim Murray56f9e6f2014-05-16 11:47:26 -0700108 sPointerSize = rsnSystemGetPointerSize();
Dan Morrille4d9a012013-03-28 18:10:43 -0700109 } catch (UnsatisfiedLinkError e) {
110 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
111 throw new RSRuntimeException("Error loading RS jni library: " + e);
112 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700113 }
114 }
115
Jason Sams2e1872f2010-08-17 16:25:41 -0700116 // Non-threadsafe functions.
Tim Murrayeff663f2013-11-15 13:08:30 -0800117 native long nDeviceCreate();
118 native void nDeviceDestroy(long dev);
119 native void nDeviceSetConfig(long dev, int param, int value);
120 native int nContextGetUserMessage(long con, int[] data);
121 native String nContextGetErrorMessage(long con);
122 native int nContextPeekMessage(long con, int[] subID);
123 native void nContextInitToClient(long con);
124 native void nContextDeinitToClient(long con);
Jason Sams3eaa3382009-06-10 15:04:38 -0700125
Stephen Hines7d25a822013-04-09 23:51:56 -0700126 static File mCacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -0800127
Tim Murray67cc2d02014-02-06 16:39:38 -0800128 // this should be a monotonically increasing ID
129 // used in conjunction with the API version of a device
130 static final long sMinorID = 1;
131
132 /**
133 * Returns an identifier that can be used to identify a particular
134 * minor version of RS.
135 *
136 * @hide
137 */
138 public static long getMinorID() {
139 return sMinorID;
140 }
141
Jason Samsa6f338c2012-02-24 16:22:16 -0800142 /**
143 * Sets the directory to use as a persistent storage for the
144 * renderscript object file cache.
145 *
146 * @hide
147 * @param cacheDir A directory the current process can write to
148 */
Jason Samsa6f338c2012-02-24 16:22:16 -0800149 public static void setupDiskCache(File cacheDir) {
Dan Morrille4d9a012013-03-28 18:10:43 -0700150 if (!sInitialized) {
151 Log.e(LOG_TAG, "RenderScript.setupDiskCache() called when disabled");
152 return;
153 }
154
Stephen Hines7d25a822013-04-09 23:51:56 -0700155 // Defer creation of cache path to nScriptCCreate().
156 mCacheDir = cacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -0800157 }
158
Jason Sams02d56d92013-04-12 16:40:50 -0700159 /**
160 * ContextType specifies the specific type of context to be created.
161 *
162 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800163 public enum ContextType {
Jason Sams02d56d92013-04-12 16:40:50 -0700164 /**
165 * NORMAL context, this is the default and what shipping apps should
166 * use.
167 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800168 NORMAL (0),
Jason Sams02d56d92013-04-12 16:40:50 -0700169
170 /**
171 * DEBUG context, perform extra runtime checks to validate the
172 * kernels and APIs are being used as intended. Get and SetElementAt
173 * will be bounds checked in this mode.
174 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800175 DEBUG (1),
Jason Sams02d56d92013-04-12 16:40:50 -0700176
177 /**
178 * PROFILE context, Intended to be used once the first time an
179 * application is run on a new device. This mode allows the runtime to
180 * do additional testing and performance tuning.
181 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800182 PROFILE (2);
183
184 int mID;
185 ContextType(int id) {
186 mID = id;
187 }
188 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800189
Stephen Hines42028a82013-04-17 19:22:01 -0700190 ContextType mContextType;
Tim Murray06b45672014-01-07 11:13:56 -0800191 ReentrantReadWriteLock mRWLock;
Stephen Hines42028a82013-04-17 19:22:01 -0700192
Jason Sams2e1872f2010-08-17 16:25:41 -0700193 // Methods below are wrapped to protect the non-threadsafe
194 // lockless fifo.
Tim Murrayeff663f2013-11-15 13:08:30 -0800195 native long rsnContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700196 int colorMin, int colorPref,
197 int alphaMin, int alphaPref,
198 int depthMin, int depthPref,
199 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700200 int samplesMin, int samplesPref, float samplesQ, int dpi);
Tim Murrayeff663f2013-11-15 13:08:30 -0800201 synchronized long nContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700202 int colorMin, int colorPref,
203 int alphaMin, int alphaPref,
204 int depthMin, int depthPref,
205 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700206 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700207 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700208 alphaMin, alphaPref, depthMin, depthPref,
209 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700210 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700211 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800212 native long rsnContextCreate(long dev, int ver, int sdkVer, int contextType);
213 synchronized long nContextCreate(long dev, int ver, int sdkVer, int contextType) {
Jason Samsadd26dc2013-02-22 18:43:45 -0800214 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700215 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800216 native void rsnContextDestroy(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700217 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800218 validate();
Tim Murray06b45672014-01-07 11:13:56 -0800219
220 // take teardown lock
221 // teardown lock can only be taken when no objects are being destroyed
222 ReentrantReadWriteLock.WriteLock wlock = mRWLock.writeLock();
223 wlock.lock();
224
225 long curCon = mContext;
226 // context is considered dead as of this point
227 mContext = 0;
228
229 wlock.unlock();
230 rsnContextDestroy(curCon);
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800232 native void rsnContextSetSurface(long con, int w, int h, Surface sur);
Jason Sams2e1872f2010-08-17 16:25:41 -0700233 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800234 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700235 rsnContextSetSurface(mContext, w, h, sur);
236 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800237 native void rsnContextSetSurfaceTexture(long con, int w, int h, SurfaceTexture sur);
Jason Samsfaa32b32011-06-20 16:58:04 -0700238 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
239 validate();
240 rsnContextSetSurfaceTexture(mContext, w, h, sur);
241 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800242 native void rsnContextSetPriority(long con, int p);
Jason Sams2e1872f2010-08-17 16:25:41 -0700243 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800244 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700245 rsnContextSetPriority(mContext, p);
246 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800247 native void rsnContextDump(long con, int bits);
Jason Sams2e1872f2010-08-17 16:25:41 -0700248 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800249 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700250 rsnContextDump(mContext, bits);
251 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800252 native void rsnContextFinish(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700253 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800254 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700255 rsnContextFinish(mContext);
256 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700257
Tim Murrayeff663f2013-11-15 13:08:30 -0800258 native void rsnContextSendMessage(long con, int id, int[] data);
Jason Sams455d6442013-02-05 19:20:18 -0800259 synchronized void nContextSendMessage(int id, int[] data) {
260 validate();
261 rsnContextSendMessage(mContext, id, data);
262 }
263
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000264 native void rsnContextBindRootScript(long con, long script);
265 synchronized void nContextBindRootScript(long script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800266 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700267 rsnContextBindRootScript(mContext, script);
268 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800269 native void rsnContextBindSampler(long con, int sampler, int slot);
Jason Sams2e1872f2010-08-17 16:25:41 -0700270 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800271 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700272 rsnContextBindSampler(mContext, sampler, slot);
273 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000274 native void rsnContextBindProgramStore(long con, long pfs);
275 synchronized void nContextBindProgramStore(long pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800276 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700277 rsnContextBindProgramStore(mContext, pfs);
278 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000279 native void rsnContextBindProgramFragment(long con, long pf);
280 synchronized void nContextBindProgramFragment(long pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800281 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700282 rsnContextBindProgramFragment(mContext, pf);
283 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000284 native void rsnContextBindProgramVertex(long con, long pv);
285 synchronized void nContextBindProgramVertex(long pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800286 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700287 rsnContextBindProgramVertex(mContext, pv);
288 }
Narayan Kamath78c0ce52014-03-19 10:15:51 +0000289 native void rsnContextBindProgramRaster(long con, long pr);
290 synchronized void nContextBindProgramRaster(long pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800291 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700292 rsnContextBindProgramRaster(mContext, pr);
293 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800294 native void rsnContextPause(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700295 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800296 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700297 rsnContextPause(mContext);
298 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800299 native void rsnContextResume(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700300 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800301 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700302 rsnContextResume(mContext);
303 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700304
Yang Ni281c3252014-10-24 08:52:24 -0700305 native long rsnClosureCreate(long con, long kernelID, long returnValue,
306 long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
307 long[] depFieldIDs);
308 synchronized long nClosureCreate(long kernelID, long returnValue,
309 long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
310 long[] depFieldIDs) {
311 validate();
312 return rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
313 sizes, depClosures, depFieldIDs);
314 }
315
Yang Nibe392ad2015-01-23 17:16:02 -0800316 native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
317 long[] fieldIDs, long[] values, int[] sizes);
318 synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
319 long[] fieldIDs, long[] values, int[] sizes) {
320 validate();
321 return rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
322 values, sizes);
323 }
324
Yang Ni281c3252014-10-24 08:52:24 -0700325 native void rsnClosureSetArg(long con, long closureID, int index,
326 long value, int size);
327 synchronized void nClosureSetArg(long closureID, int index, long value,
328 int size) {
329 validate();
330 rsnClosureSetArg(mContext, closureID, index, value, size);
331 }
332
333 native void rsnClosureSetGlobal(long con, long closureID, long fieldID,
334 long value, int size);
335 // Does this have to be synchronized?
336 synchronized void nClosureSetGlobal(long closureID, long fieldID,
337 long value, int size) {
338 validate(); // TODO: is this necessary?
339 rsnClosureSetGlobal(mContext, closureID, fieldID, value, size);
340 }
341
Yang Niebf63402015-01-16 11:06:26 -0800342 native long rsnScriptGroup2Create(long con, String cachePath, long[] closures);
343 synchronized long nScriptGroup2Create(String cachePath, long[] closures) {
Yang Ni281c3252014-10-24 08:52:24 -0700344 validate();
Yang Niebf63402015-01-16 11:06:26 -0800345 return rsnScriptGroup2Create(mContext, cachePath, closures);
Yang Ni281c3252014-10-24 08:52:24 -0700346 }
347
348 native void rsnScriptGroup2Execute(long con, long groupID);
349 synchronized void nScriptGroup2Execute(long groupID) {
350 validate();
351 rsnScriptGroup2Execute(mContext, groupID);
352 }
353
Tim Murray460a0492013-11-19 12:45:54 -0800354 native void rsnAssignName(long con, long obj, byte[] name);
355 synchronized void nAssignName(long obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700357 rsnAssignName(mContext, obj, name);
358 }
Tim Murray460a0492013-11-19 12:45:54 -0800359 native String rsnGetName(long con, long obj);
360 synchronized String nGetName(long obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800361 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700362 return rsnGetName(mContext, obj);
363 }
Tim Murray06b45672014-01-07 11:13:56 -0800364
365 // nObjDestroy is explicitly _not_ synchronous to prevent crashes in finalizers
Tim Murray460a0492013-11-19 12:45:54 -0800366 native void rsnObjDestroy(long con, long id);
Tim Murray06b45672014-01-07 11:13:56 -0800367 void nObjDestroy(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800368 // There is a race condition here. The calling code may be run
369 // by the gc while teardown is occuring. This protects againts
370 // deleting dead objects.
371 if (mContext != 0) {
372 rsnObjDestroy(mContext, id);
373 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700374 }
Jason Samsfe08d992009-05-27 14:45:32 -0700375
Tim Murray460a0492013-11-19 12:45:54 -0800376 native long rsnElementCreate(long con, long type, int kind, boolean norm, int vecSize);
377 synchronized long nElementCreate(long type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800378 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700379 return rsnElementCreate(mContext, type, kind, norm, vecSize);
380 }
Ashok Bhat98071552014-02-12 09:54:43 +0000381 native long rsnElementCreate2(long con, long[] elements, String[] names, int[] arraySizes);
382 synchronized long nElementCreate2(long[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800383 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700384 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700385 }
Tim Murray460a0492013-11-19 12:45:54 -0800386 native void rsnElementGetNativeData(long con, long id, int[] elementData);
387 synchronized void nElementGetNativeData(long id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800388 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700389 rsnElementGetNativeData(mContext, id, elementData);
390 }
Tim Murray460a0492013-11-19 12:45:54 -0800391 native void rsnElementGetSubElements(long con, long id,
Ashok Bhat98071552014-02-12 09:54:43 +0000392 long[] IDs, String[] names, int[] arraySizes);
393 synchronized void nElementGetSubElements(long id, long[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800394 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700395 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700396 }
Jason Sams768bc022009-09-21 19:41:04 -0700397
Tim Murray460a0492013-11-19 12:45:54 -0800398 native long rsnTypeCreate(long con, long eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
399 synchronized long nTypeCreate(long eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800400 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800401 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700402 }
Ashok Bhat98071552014-02-12 09:54:43 +0000403 native void rsnTypeGetNativeData(long con, long id, long[] typeData);
404 synchronized void nTypeGetNativeData(long id, long[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800405 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700406 rsnTypeGetNativeData(mContext, id, typeData);
407 }
Jason Sams768bc022009-09-21 19:41:04 -0700408
Ashok Bhat98071552014-02-12 09:54:43 +0000409 native long rsnAllocationCreateTyped(long con, long type, int mip, int usage, long pointer);
410 synchronized long nAllocationCreateTyped(long type, int mip, int usage, long pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800411 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800412 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700413 }
Tim Murray460a0492013-11-19 12:45:54 -0800414 native long rsnAllocationCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
415 synchronized long nAllocationCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800416 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800417 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700418 }
Tim Murraya3145512012-12-04 17:59:29 -0800419
Tim Murray460a0492013-11-19 12:45:54 -0800420 native long rsnAllocationCreateBitmapBackedAllocation(long con, long type, int mip, Bitmap bmp, int usage);
421 synchronized long nAllocationCreateBitmapBackedAllocation(long type, int mip, Bitmap bmp, int usage) {
Tim Murraya3145512012-12-04 17:59:29 -0800422 validate();
423 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
424 }
425
Tim Murray460a0492013-11-19 12:45:54 -0800426 native long rsnAllocationCubeCreateFromBitmap(long con, long type, int mip, Bitmap bmp, int usage);
427 synchronized long nAllocationCubeCreateFromBitmap(long type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800428 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800429 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800430 }
Tim Murray460a0492013-11-19 12:45:54 -0800431 native long rsnAllocationCreateBitmapRef(long con, long type, Bitmap bmp);
432 synchronized long nAllocationCreateBitmapRef(long type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800433 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700434 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
435 }
Tim Murray460a0492013-11-19 12:45:54 -0800436 native long rsnAllocationCreateFromAssetStream(long con, int mips, int assetStream, int usage);
437 synchronized long nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800438 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800439 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
440 }
441
Tim Murray460a0492013-11-19 12:45:54 -0800442 native void rsnAllocationCopyToBitmap(long con, long alloc, Bitmap bmp);
443 synchronized void nAllocationCopyToBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800444 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800445 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
446 }
447
448
Tim Murray460a0492013-11-19 12:45:54 -0800449 native void rsnAllocationSyncAll(long con, long alloc, int src);
450 synchronized void nAllocationSyncAll(long alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800452 rsnAllocationSyncAll(mContext, alloc, src);
453 }
Tim Murray460a0492013-11-19 12:45:54 -0800454 native Surface rsnAllocationGetSurface(long con, long alloc);
455 synchronized Surface nAllocationGetSurface(long alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800456 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800457 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700458 }
Tim Murray460a0492013-11-19 12:45:54 -0800459 native void rsnAllocationSetSurface(long con, long alloc, Surface sur);
460 synchronized void nAllocationSetSurface(long alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800461 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700462 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800463 }
Tim Murray460a0492013-11-19 12:45:54 -0800464 native void rsnAllocationIoSend(long con, long alloc);
465 synchronized void nAllocationIoSend(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800466 validate();
467 rsnAllocationIoSend(mContext, alloc);
468 }
Tim Murray460a0492013-11-19 12:45:54 -0800469 native void rsnAllocationIoReceive(long con, long alloc);
470 synchronized void nAllocationIoReceive(long alloc) {
Jason Sams163766c2012-02-15 12:04:24 -0800471 validate();
472 rsnAllocationIoReceive(mContext, alloc);
473 }
474
Jason Sams615e7ce2012-01-13 14:01:20 -0800475
Tim Murray460a0492013-11-19 12:45:54 -0800476 native void rsnAllocationGenerateMipmaps(long con, long alloc);
477 synchronized void nAllocationGenerateMipmaps(long alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800478 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800479 rsnAllocationGenerateMipmaps(mContext, alloc);
480 }
Tim Murray460a0492013-11-19 12:45:54 -0800481 native void rsnAllocationCopyFromBitmap(long con, long alloc, Bitmap bmp);
482 synchronized void nAllocationCopyFromBitmap(long alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800483 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800484 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700485 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700486
Jason Sams49a05d72010-12-29 14:31:29 -0800487
Tim Murray460a0492013-11-19 12:45:54 -0800488 native void rsnAllocationData1D(long con, long id, int off, int mip, int count, Object d, int sizeBytes, int dt);
489 synchronized void nAllocationData1D(long id, int off, int mip, int count, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800490 validate();
Jason Samse729a942013-11-06 11:22:02 -0800491 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700493
Tim Murray460a0492013-11-19 12:45:54 -0800494 native void rsnAllocationElementData1D(long con,long id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
495 synchronized void nAllocationElementData1D(long id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800496 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800497 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700499
Tim Murrayeff663f2013-11-15 13:08:30 -0800500 native void rsnAllocationData2D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800501 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);
Tim Murray460a0492013-11-19 12:45:54 -0800506 synchronized void nAllocationData2D(long dstAlloc, int dstXoff, int dstYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700507 int dstMip, int dstFace,
508 int width, int height,
Tim Murray460a0492013-11-19 12:45:54 -0800509 long srcAlloc, int srcXoff, int srcYoff,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700510 int srcMip, int srcFace) {
511 validate();
512 rsnAllocationData2D(mContext,
513 dstAlloc, dstXoff, dstYoff,
514 dstMip, dstFace,
515 width, height,
516 srcAlloc, srcXoff, srcYoff,
517 srcMip, srcFace);
518 }
519
Tim Murray460a0492013-11-19 12:45:54 -0800520 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face,
Jason Samse729a942013-11-06 11:22:02 -0800521 int w, int h, Object d, int sizeBytes, int dt);
Tim Murray460a0492013-11-19 12:45:54 -0800522 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face,
Jason Samse729a942013-11-06 11:22:02 -0800523 int w, int h, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800524 validate();
Jason Samse729a942013-11-06 11:22:02 -0800525 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700526 }
Jason Sams21659ac2013-11-06 15:08:07 -0800527
Tim Murray460a0492013-11-19 12:45:54 -0800528 native void rsnAllocationData2D(long con, long id, int xoff, int yoff, int mip, int face, Bitmap b);
529 synchronized void nAllocationData2D(long id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800530 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800531 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
532 }
Jason Sams49a05d72010-12-29 14:31:29 -0800533
Tim Murrayeff663f2013-11-15 13:08:30 -0800534 native void rsnAllocationData3D(long con,
Tim Murray460a0492013-11-19 12:45:54 -0800535 long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700536 int dstMip,
537 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800538 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700539 int srcMip);
Tim Murray460a0492013-11-19 12:45:54 -0800540 synchronized void nAllocationData3D(long dstAlloc, int dstXoff, int dstYoff, int dstZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700541 int dstMip,
542 int width, int height, int depth,
Tim Murray460a0492013-11-19 12:45:54 -0800543 long srcAlloc, int srcXoff, int srcYoff, int srcZoff,
Jason Samsb05d6892013-04-09 15:59:24 -0700544 int srcMip) {
545 validate();
546 rsnAllocationData3D(mContext,
547 dstAlloc, dstXoff, dstYoff, dstZoff,
548 dstMip, width, height, depth,
549 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
550 }
551
Tim Murray460a0492013-11-19 12:45:54 -0800552 native void rsnAllocationData3D(long con, long id, int xoff, int yoff, int zoff, int mip,
Jason Samse729a942013-11-06 11:22:02 -0800553 int w, int h, int depth, Object d, int sizeBytes, int dt);
Tim Murray460a0492013-11-19 12:45:54 -0800554 synchronized void nAllocationData3D(long id, int xoff, int yoff, int zoff, int mip,
Jason Samse729a942013-11-06 11:22:02 -0800555 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsb05d6892013-04-09 15:59:24 -0700556 validate();
Jason Samse729a942013-11-06 11:22:02 -0800557 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID);
Jason Samsb05d6892013-04-09 15:59:24 -0700558 }
Jason Samsb05d6892013-04-09 15:59:24 -0700559
Tim Murray460a0492013-11-19 12:45:54 -0800560 native void rsnAllocationRead(long con, long id, Object d, int dt);
561 synchronized void nAllocationRead(long id, Object d, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800562 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800563 rsnAllocationRead(mContext, id, d, dt.mID);
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,
Jason Sams21659ac2013-11-06 15:08:07 -0800567 int sizeBytes, int dt);
Tim Murray460a0492013-11-19 12:45:54 -0800568 synchronized void nAllocationRead1D(long id, int off, int mip, int count, Object d,
Jason Sams21659ac2013-11-06 15:08:07 -0800569 int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800570 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800571 rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID);
Jason Samsfa445b92011-01-07 17:00:07 -0800572 }
Jason Sams21659ac2013-11-06 15:08:07 -0800573
Tim Murray460a0492013-11-19 12:45:54 -0800574 native void rsnAllocationRead2D(long con, long id, int xoff, int yoff, int mip, int face,
Jason Sams21659ac2013-11-06 15:08:07 -0800575 int w, int h, Object d, int sizeBytes, int dt);
Tim Murray460a0492013-11-19 12:45:54 -0800576 synchronized void nAllocationRead2D(long id, int xoff, int yoff, int mip, int face,
Jason Sams21659ac2013-11-06 15:08:07 -0800577 int w, int h, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800578 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800579 rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700580 }
Jason Sams21659ac2013-11-06 15:08:07 -0800581
Tim Murray460a0492013-11-19 12:45:54 -0800582 native long rsnAllocationGetType(long con, long id);
583 synchronized long nAllocationGetType(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800584 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700585 return rsnAllocationGetType(mContext, id);
586 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700587
Tim Murray460a0492013-11-19 12:45:54 -0800588 native void rsnAllocationResize1D(long con, long id, int dimX);
589 synchronized void nAllocationResize1D(long id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800590 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700591 rsnAllocationResize1D(mContext, id, dimX);
592 }
Jason Sams5edc6082010-10-05 13:32:49 -0700593
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000594 native long rsnFileA3DCreateFromAssetStream(long con, long assetStream);
595 synchronized long nFileA3DCreateFromAssetStream(long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800596 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700597 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
598 }
Tim Murray460a0492013-11-19 12:45:54 -0800599 native long rsnFileA3DCreateFromFile(long con, String path);
600 synchronized long nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800601 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800602 return rsnFileA3DCreateFromFile(mContext, path);
603 }
Tim Murray460a0492013-11-19 12:45:54 -0800604 native long rsnFileA3DCreateFromAsset(long con, AssetManager mgr, String path);
605 synchronized long nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800606 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800607 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
608 }
Tim Murray460a0492013-11-19 12:45:54 -0800609 native int rsnFileA3DGetNumIndexEntries(long con, long fileA3D);
610 synchronized int nFileA3DGetNumIndexEntries(long fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800611 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700612 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
613 }
Tim Murray460a0492013-11-19 12:45:54 -0800614 native void rsnFileA3DGetIndexEntries(long con, long fileA3D, int numEntries, int[] IDs, String[] names);
615 synchronized void nFileA3DGetIndexEntries(long fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800616 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700617 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
618 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000619 native long rsnFileA3DGetEntryByIndex(long con, long fileA3D, int index);
620 synchronized long nFileA3DGetEntryByIndex(long fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800621 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700622 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
623 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700624
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000625 native long rsnFontCreateFromFile(long con, String fileName, float size, int dpi);
626 synchronized long nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800627 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700628 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
629 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000630 native long rsnFontCreateFromAssetStream(long con, String name, float size, int dpi, long assetStream);
631 synchronized long nFontCreateFromAssetStream(String name, float size, int dpi, long assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800632 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800633 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
634 }
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000635 native long rsnFontCreateFromAsset(long con, AssetManager mgr, String path, float size, int dpi);
636 synchronized long nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800637 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800638 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
639 }
Jason Sams22534172009-08-04 16:58:20 -0700640
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700641
Tim Murray460a0492013-11-19 12:45:54 -0800642 native void rsnScriptBindAllocation(long con, long script, long alloc, int slot);
643 synchronized void nScriptBindAllocation(long script, long alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800644 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700645 rsnScriptBindAllocation(mContext, script, alloc, slot);
646 }
Tim Murray460a0492013-11-19 12:45:54 -0800647 native void rsnScriptSetTimeZone(long con, long script, byte[] timeZone);
648 synchronized void nScriptSetTimeZone(long script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800649 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700650 rsnScriptSetTimeZone(mContext, script, timeZone);
651 }
Tim Murray460a0492013-11-19 12:45:54 -0800652 native void rsnScriptInvoke(long con, long id, int slot);
653 synchronized void nScriptInvoke(long id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800654 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700655 rsnScriptInvoke(mContext, id, slot);
656 }
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700657
658 native void rsnScriptForEach(long con, long id, int slot, long[] ains,
659 long aout, byte[] params, int[] limits);
660
661 synchronized void nScriptForEach(long id, int slot, long[] ains, long aout,
662 byte[] params, int[] limits) {
Jason Sams6e494d32011-04-27 16:33:11 -0700663 validate();
Chris Wailesbe7b1de2014-07-15 10:56:14 -0700664 rsnScriptForEach(mContext, id, slot, ains, aout, params, limits);
Chris Wailes94961062014-06-11 12:01:28 -0700665 }
666
Tim Murray460a0492013-11-19 12:45:54 -0800667 native void rsnScriptInvokeV(long con, long id, int slot, byte[] params);
668 synchronized void nScriptInvokeV(long id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800669 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700670 rsnScriptInvokeV(mContext, id, slot, params);
671 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700672
Tim Murray460a0492013-11-19 12:45:54 -0800673 native void rsnScriptSetVarI(long con, long id, int slot, int val);
674 synchronized void nScriptSetVarI(long id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800675 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700676 rsnScriptSetVarI(mContext, id, slot, val);
677 }
Tim Murray460a0492013-11-19 12:45:54 -0800678 native int rsnScriptGetVarI(long con, long id, int slot);
679 synchronized int nScriptGetVarI(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700680 validate();
681 return rsnScriptGetVarI(mContext, id, slot);
682 }
683
Tim Murray460a0492013-11-19 12:45:54 -0800684 native void rsnScriptSetVarJ(long con, long id, int slot, long val);
685 synchronized void nScriptSetVarJ(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800686 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700687 rsnScriptSetVarJ(mContext, id, slot, val);
688 }
Tim Murray460a0492013-11-19 12:45:54 -0800689 native long rsnScriptGetVarJ(long con, long id, int slot);
690 synchronized long nScriptGetVarJ(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700691 validate();
692 return rsnScriptGetVarJ(mContext, id, slot);
693 }
694
Tim Murray460a0492013-11-19 12:45:54 -0800695 native void rsnScriptSetVarF(long con, long id, int slot, float val);
696 synchronized void nScriptSetVarF(long id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800697 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700698 rsnScriptSetVarF(mContext, id, slot, val);
699 }
Tim Murray460a0492013-11-19 12:45:54 -0800700 native float rsnScriptGetVarF(long con, long id, int slot);
701 synchronized float nScriptGetVarF(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700702 validate();
703 return rsnScriptGetVarF(mContext, id, slot);
704 }
Tim Murray460a0492013-11-19 12:45:54 -0800705 native void rsnScriptSetVarD(long con, long id, int slot, double val);
706 synchronized void nScriptSetVarD(long id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800707 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700708 rsnScriptSetVarD(mContext, id, slot, val);
709 }
Tim Murray460a0492013-11-19 12:45:54 -0800710 native double rsnScriptGetVarD(long con, long id, int slot);
711 synchronized double nScriptGetVarD(long id, int slot) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700712 validate();
713 return rsnScriptGetVarD(mContext, id, slot);
714 }
Tim Murray460a0492013-11-19 12:45:54 -0800715 native void rsnScriptSetVarV(long con, long id, int slot, byte[] val);
716 synchronized void nScriptSetVarV(long id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800717 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700718 rsnScriptSetVarV(mContext, id, slot, val);
719 }
Tim Murray460a0492013-11-19 12:45:54 -0800720 native void rsnScriptGetVarV(long con, long id, int slot, byte[] val);
721 synchronized void nScriptGetVarV(long id, int slot, byte[] val) {
Tim Murray7c4caad2013-04-10 16:21:40 -0700722 validate();
723 rsnScriptGetVarV(mContext, id, slot, val);
724 }
Tim Murray460a0492013-11-19 12:45:54 -0800725 native void rsnScriptSetVarVE(long con, long id, int slot, byte[] val,
726 long e, int[] dims);
727 synchronized void nScriptSetVarVE(long id, int slot, byte[] val,
728 long e, int[] dims) {
Stephen Hinesadeb8092012-04-20 14:26:06 -0700729 validate();
730 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
731 }
Tim Murray460a0492013-11-19 12:45:54 -0800732 native void rsnScriptSetVarObj(long con, long id, int slot, long val);
733 synchronized void nScriptSetVarObj(long id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800734 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800735 rsnScriptSetVarObj(mContext, id, slot, val);
736 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700737
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000738 native long rsnScriptCCreate(long con, String resName, String cacheDir,
Jason Samse4a06c52011-03-16 16:29:28 -0700739 byte[] script, int length);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000740 synchronized long nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800741 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700742 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700743 }
Jason Samsebfb4362009-09-23 13:57:02 -0700744
Tim Murray460a0492013-11-19 12:45:54 -0800745 native long rsnScriptIntrinsicCreate(long con, int id, long eid);
746 synchronized long nScriptIntrinsicCreate(int id, long eid) {
Jason Sams6ab97682012-08-10 12:09:43 -0700747 validate();
748 return rsnScriptIntrinsicCreate(mContext, id, eid);
749 }
750
Tim Murray460a0492013-11-19 12:45:54 -0800751 native long rsnScriptKernelIDCreate(long con, long sid, int slot, int sig);
752 synchronized long nScriptKernelIDCreate(long sid, int slot, int sig) {
Jason Sams08a81582012-09-18 12:32:10 -0700753 validate();
754 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
755 }
756
Yang Nibe392ad2015-01-23 17:16:02 -0800757 native long rsnScriptInvokeIDCreate(long con, long sid, int slot);
758 synchronized long nScriptInvokeIDCreate(long sid, int slot) {
759 validate();
760 return rsnScriptInvokeIDCreate(mContext, sid, slot);
761 }
762
Tim Murray460a0492013-11-19 12:45:54 -0800763 native long rsnScriptFieldIDCreate(long con, long sid, int slot);
764 synchronized long nScriptFieldIDCreate(long sid, int slot) {
Jason Sams08a81582012-09-18 12:32:10 -0700765 validate();
766 return rsnScriptFieldIDCreate(mContext, sid, slot);
767 }
768
Ashok Bhat98071552014-02-12 09:54:43 +0000769 native long rsnScriptGroupCreate(long con, long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types);
770 synchronized long nScriptGroupCreate(long[] kernels, long[] src, long[] dstk, long[] dstf, long[] types) {
Jason Sams08a81582012-09-18 12:32:10 -0700771 validate();
772 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
773 }
774
Tim Murray460a0492013-11-19 12:45:54 -0800775 native void rsnScriptGroupSetInput(long con, long group, long kernel, long alloc);
776 synchronized void nScriptGroupSetInput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700777 validate();
778 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
779 }
780
Tim Murray460a0492013-11-19 12:45:54 -0800781 native void rsnScriptGroupSetOutput(long con, long group, long kernel, long alloc);
782 synchronized void nScriptGroupSetOutput(long group, long kernel, long alloc) {
Jason Sams08a81582012-09-18 12:32:10 -0700783 validate();
784 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
785 }
786
Tim Murray460a0492013-11-19 12:45:54 -0800787 native void rsnScriptGroupExecute(long con, long group);
788 synchronized void nScriptGroupExecute(long group) {
Jason Sams08a81582012-09-18 12:32:10 -0700789 validate();
790 rsnScriptGroupExecute(mContext, group);
791 }
792
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000793 native long rsnSamplerCreate(long con, int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700794 int wrapS, int wrapT, int wrapR, float aniso);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000795 synchronized long nSamplerCreate(int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700796 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800797 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700798 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700799 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800800
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000801 native long rsnProgramStoreCreate(long con, boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700802 boolean depthMask, boolean dither,
803 int srcMode, int dstMode, int depthFunc);
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000804 synchronized long nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700805 boolean depthMask, boolean dither,
806 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800807 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700808 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
809 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700810 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700811
Tim Murray460a0492013-11-19 12:45:54 -0800812 native long rsnProgramRasterCreate(long con, boolean pointSprite, int cullMode);
813 synchronized long nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800814 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700815 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700816 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700817
Tim Murray460a0492013-11-19 12:45:54 -0800818 native void rsnProgramBindConstants(long con, long pv, int slot, long mID);
819 synchronized void nProgramBindConstants(long pv, int slot, long mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800820 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700821 rsnProgramBindConstants(mContext, pv, slot, mID);
822 }
Tim Murray460a0492013-11-19 12:45:54 -0800823 native void rsnProgramBindTexture(long con, long vpf, int slot, long a);
824 synchronized void nProgramBindTexture(long vpf, int slot, long a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800825 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700826 rsnProgramBindTexture(mContext, vpf, slot, a);
827 }
Tim Murray460a0492013-11-19 12:45:54 -0800828 native void rsnProgramBindSampler(long con, long vpf, int slot, long s);
829 synchronized void nProgramBindSampler(long vpf, int slot, long s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800830 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700831 rsnProgramBindSampler(mContext, vpf, slot, s);
832 }
Ashok Bhat98071552014-02-12 09:54:43 +0000833 native long rsnProgramFragmentCreate(long con, String shader, String[] texNames, long[] params);
834 synchronized long nProgramFragmentCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800835 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800836 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700837 }
Ashok Bhat98071552014-02-12 09:54:43 +0000838 native long rsnProgramVertexCreate(long con, String shader, String[] texNames, long[] params);
839 synchronized long nProgramVertexCreate(String shader, String[] texNames, long[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800840 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800841 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700842 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700843
Ashok Bhat98071552014-02-12 09:54:43 +0000844 native long rsnMeshCreate(long con, long[] vtx, long[] idx, int[] prim);
845 synchronized long nMeshCreate(long[] vtx, long[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800846 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700847 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800848 }
Tim Murray460a0492013-11-19 12:45:54 -0800849 native int rsnMeshGetVertexBufferCount(long con, long id);
850 synchronized int nMeshGetVertexBufferCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800851 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700852 return rsnMeshGetVertexBufferCount(mContext, id);
853 }
Tim Murray460a0492013-11-19 12:45:54 -0800854 native int rsnMeshGetIndexCount(long con, long id);
855 synchronized int nMeshGetIndexCount(long id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800856 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700857 return rsnMeshGetIndexCount(mContext, id);
858 }
Ashok Bhat98071552014-02-12 09:54:43 +0000859 native void rsnMeshGetVertices(long con, long id, long[] vtxIds, int vtxIdCount);
860 synchronized void nMeshGetVertices(long id, long[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800861 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700862 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
863 }
Ashok Bhat98071552014-02-12 09:54:43 +0000864 native void rsnMeshGetIndices(long con, long id, long[] idxIds, int[] primitives, int vtxIdCount);
865 synchronized void nMeshGetIndices(long id, long[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800866 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700867 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
868 }
869
Ashok Bhat0e0c0882014-02-04 14:57:58 +0000870 native long rsnPathCreate(long con, int prim, boolean isStatic, long vtx, long loop, float q);
871 synchronized long nPathCreate(int prim, boolean isStatic, long vtx, long loop, float q) {
Jason Samsf15ed012011-10-31 13:23:43 -0700872 validate();
873 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
874 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700875
Tim Murrayeff663f2013-11-15 13:08:30 -0800876 long mDev;
877 long mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700878 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800879 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700880
Jason Sams8cb39de2010-06-01 15:47:01 -0700881 Element mElement_U8;
882 Element mElement_I8;
883 Element mElement_U16;
884 Element mElement_I16;
885 Element mElement_U32;
886 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700887 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700888 Element mElement_I64;
Jason Samsa5835a22014-11-05 15:16:26 -0800889 Element mElement_F16;
Jason Sams8cb39de2010-06-01 15:47:01 -0700890 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700891 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700892 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700893
Jason Sams8cb39de2010-06-01 15:47:01 -0700894 Element mElement_ELEMENT;
895 Element mElement_TYPE;
896 Element mElement_ALLOCATION;
897 Element mElement_SAMPLER;
898 Element mElement_SCRIPT;
899 Element mElement_MESH;
900 Element mElement_PROGRAM_FRAGMENT;
901 Element mElement_PROGRAM_VERTEX;
902 Element mElement_PROGRAM_RASTER;
903 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700904 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700905
Jason Sams3c0dfba2009-09-27 17:50:38 -0700906 Element mElement_A_8;
907 Element mElement_RGB_565;
908 Element mElement_RGB_888;
909 Element mElement_RGBA_5551;
910 Element mElement_RGBA_4444;
911 Element mElement_RGBA_8888;
912
Jason Samsa5835a22014-11-05 15:16:26 -0800913 Element mElement_HALF_2;
914 Element mElement_HALF_3;
915 Element mElement_HALF_4;
916
Jason Sams8cb39de2010-06-01 15:47:01 -0700917 Element mElement_FLOAT_2;
918 Element mElement_FLOAT_3;
919 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700920
921 Element mElement_DOUBLE_2;
922 Element mElement_DOUBLE_3;
923 Element mElement_DOUBLE_4;
924
925 Element mElement_UCHAR_2;
926 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700927 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800928
Stephen Hines836c4a52011-06-01 14:38:10 -0700929 Element mElement_CHAR_2;
930 Element mElement_CHAR_3;
931 Element mElement_CHAR_4;
932
933 Element mElement_USHORT_2;
934 Element mElement_USHORT_3;
935 Element mElement_USHORT_4;
936
937 Element mElement_SHORT_2;
938 Element mElement_SHORT_3;
939 Element mElement_SHORT_4;
940
941 Element mElement_UINT_2;
942 Element mElement_UINT_3;
943 Element mElement_UINT_4;
944
945 Element mElement_INT_2;
946 Element mElement_INT_3;
947 Element mElement_INT_4;
948
949 Element mElement_ULONG_2;
950 Element mElement_ULONG_3;
951 Element mElement_ULONG_4;
952
953 Element mElement_LONG_2;
954 Element mElement_LONG_3;
955 Element mElement_LONG_4;
956
Tim Murray932e78e2013-09-03 11:42:26 -0700957 Element mElement_YUV;
958
Jason Sams1d45c472010-08-25 14:31:48 -0700959 Element mElement_MATRIX_4X4;
960 Element mElement_MATRIX_3X3;
961 Element mElement_MATRIX_2X2;
962
Jason Sams4d339932010-05-11 14:03:58 -0700963 Sampler mSampler_CLAMP_NEAREST;
964 Sampler mSampler_CLAMP_LINEAR;
965 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
966 Sampler mSampler_WRAP_NEAREST;
967 Sampler mSampler_WRAP_LINEAR;
968 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800969 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
970 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
971 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700972
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700973 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
974 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700975 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
976 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700977
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700978 ProgramRaster mProgramRaster_CULL_BACK;
979 ProgramRaster mProgramRaster_CULL_FRONT;
980 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700981
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700982 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700983 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700984
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700985 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700986 * The base class from which an application should derive in order
987 * to receive RS messages from scripts. When a script calls {@code
988 * rsSendToClient}, the data fields will be filled, and the run
989 * method will be called on a separate thread. This will occur
990 * some time after {@code rsSendToClient} completes in the script,
991 * as {@code rsSendToClient} is asynchronous. Message handlers are
992 * not guaranteed to have completed when {@link
993 * android.renderscript.RenderScript#finish} returns.
Jason Sams27676fe2010-11-10 17:00:59 -0800994 *
995 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800996 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700997 protected int[] mData;
998 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800999 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -07001000 public void run() {
1001 }
1002 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001003 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001004 * If an application is expecting messages, it should set this
1005 * field to an instance of {@link RSMessageHandler}. This
1006 * instance will receive all the user messages sent from {@code
1007 * sendToClient} by scripts from this context.
Jason Sams27676fe2010-11-10 17:00:59 -08001008 *
1009 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001010 RSMessageHandler mMessageCallback = null;
1011
1012 public void setMessageHandler(RSMessageHandler msg) {
1013 mMessageCallback = msg;
1014 }
1015 public RSMessageHandler getMessageHandler() {
1016 return mMessageCallback;
1017 }
Jason Sams516c3192009-10-06 13:58:47 -07001018
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001019 /**
Jason Sams02d56d92013-04-12 16:40:50 -07001020 * Place a message into the message queue to be sent back to the message
1021 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -08001022 *
1023 * @param id
1024 * @param data
1025 */
1026 public void sendMessage(int id, int[] data) {
1027 nContextSendMessage(id, data);
1028 }
1029
1030 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001031 * The runtime error handler base class. An application should derive from this class
1032 * if it wishes to install an error handler. When errors occur at runtime,
1033 * the fields in this class will be filled, and the run method will be called.
Jason Sams27676fe2010-11-10 17:00:59 -08001034 *
1035 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001036 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -08001037 protected String mErrorMessage;
1038 protected int mErrorNum;
1039 public void run() {
1040 }
1041 }
Jason Sams27676fe2010-11-10 17:00:59 -08001042
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001043 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001044 * Application Error handler. All runtime errors will be dispatched to the
1045 * instance of RSAsyncError set here. If this field is null a
Tim Murrayc11e25c2013-04-09 11:01:01 -07001046 * {@link RSRuntimeException} will instead be thrown with details about the error.
Jason Sams27676fe2010-11-10 17:00:59 -08001047 * This will cause program termaination.
1048 *
1049 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001050 RSErrorHandler mErrorCallback = null;
1051
1052 public void setErrorHandler(RSErrorHandler msg) {
1053 mErrorCallback = msg;
1054 }
1055 public RSErrorHandler getErrorHandler() {
1056 return mErrorCallback;
1057 }
Jason Sams1c415172010-11-08 17:06:46 -08001058
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001059 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001060 * RenderScript worker thread priority enumeration. The default value is
1061 * NORMAL. Applications wishing to do background processing should set
1062 * their priority to LOW to avoid starving forground processes.
Jason Sams27676fe2010-11-10 17:00:59 -08001063 */
Jason Sams7d787b42009-11-15 12:14:26 -08001064 public enum Priority {
Jason Samsc9870c12015-01-21 12:55:14 -08001065 // These values used to represent official thread priority values
1066 // now they are simply enums to be used by the runtime side
1067 LOW (15),
1068 NORMAL (-8);
Jason Sams7d787b42009-11-15 12:14:26 -08001069
1070 int mID;
1071 Priority(int id) {
1072 mID = id;
1073 }
1074 }
1075
Jason Sams678cc7f2014-03-05 16:09:02 -08001076 void validateObject(BaseObj o) {
1077 if (o != null) {
1078 if (o.mRS != this) {
1079 throw new RSIllegalArgumentException("Attempting to use an object across contexts.");
1080 }
1081 }
1082 }
1083
Jason Sams771bebb2009-12-07 12:40:12 -08001084 void validate() {
1085 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -07001086 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -08001087 }
1088 }
1089
Jason Sams27676fe2010-11-10 17:00:59 -08001090
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001091 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001092 * Change the priority of the worker threads for this context.
1093 *
1094 * @param p New priority to be set.
1095 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001096 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -08001097 validate();
Jason Sams7d787b42009-11-15 12:14:26 -08001098 nContextSetPriority(p.mID);
1099 }
1100
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001101 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -07001102 RenderScript mRS;
1103 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001104 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001105
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001106 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1107 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1108 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1109 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1110 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001111 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001112
Stephen Hines42028a82013-04-17 19:22:01 -07001113 static final int RS_ERROR_FATAL_DEBUG = 0x0800;
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001114 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001115
Jason Sams516c3192009-10-06 13:58:47 -07001116 MessageThread(RenderScript rs) {
1117 super("RSMessageThread");
1118 mRS = rs;
1119
1120 }
1121
1122 public void run() {
1123 // This function is a temporary solution. The final solution will
1124 // used typed allocations where the message id is the type indicator.
1125 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001126 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001127 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001128 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001129 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001130 int size = mAuxData[1];
1131 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001132
1133 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1134 if ((size>>2) >= rbuf.length) {
1135 rbuf = new int[(size + 3) >> 2];
1136 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001137 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1138 RS_MESSAGE_TO_CLIENT_USER) {
Tim Murrayc11e25c2013-04-09 11:01:01 -07001139 throw new RSDriverException("Error processing message from RenderScript.");
Jason Samsedbfabd2011-05-17 15:01:29 -07001140 }
Jason Sams1c415172010-11-08 17:06:46 -08001141
1142 if(mRS.mMessageCallback != null) {
1143 mRS.mMessageCallback.mData = rbuf;
1144 mRS.mMessageCallback.mID = subID;
1145 mRS.mMessageCallback.mLength = size;
1146 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001147 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001148 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001149 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001150 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001151 }
Jason Sams1c415172010-11-08 17:06:46 -08001152
1153 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1154 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1155
Stephen Hines42028a82013-04-17 19:22:01 -07001156 // Throw RSRuntimeException under the following conditions:
1157 //
1158 // 1) It is an unknown fatal error.
1159 // 2) It is a debug fatal error, and we are not in a
1160 // debug context.
1161 // 3) It is a debug fatal error, and we do not have an
1162 // error callback.
1163 if (subID >= RS_ERROR_FATAL_UNKNOWN ||
1164 (subID >= RS_ERROR_FATAL_DEBUG &&
1165 (mRS.mContextType != ContextType.DEBUG ||
1166 mRS.mErrorCallback == null))) {
Jason Samsadd9d962010-11-22 16:20:16 -08001167 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1168 }
1169
Jason Sams1c415172010-11-08 17:06:46 -08001170 if(mRS.mErrorCallback != null) {
1171 mRS.mErrorCallback.mErrorMessage = e;
1172 mRS.mErrorCallback.mErrorNum = subID;
1173 mRS.mErrorCallback.run();
1174 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001175 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001176 // Do not throw here. In these cases, we do not have
1177 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001178 }
1179 continue;
1180 }
1181
Jason Sams739c8262013-04-11 18:07:52 -07001182 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
Tim Murrayb730d862014-08-18 16:14:24 -07001183 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1184 RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1185 throw new RSDriverException("Error processing message from RenderScript.");
1186 }
1187 long bufferID = ((long)rbuf[1] << 32L) + ((long)rbuf[0] & 0xffffffffL);
1188 Allocation.sendBufferNotification(bufferID);
Jason Sams739c8262013-04-11 18:07:52 -07001189 continue;
1190 }
1191
Jason Sams1c415172010-11-08 17:06:46 -08001192 // 2: teardown.
1193 // But we want to avoid starving other threads during
1194 // teardown by yielding until the next line in the destructor
1195 // can execute to set mRun = false
1196 try {
1197 sleep(1, 0);
1198 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001199 }
Jason Sams516c3192009-10-06 13:58:47 -07001200 }
Tim Murrayda67deb2013-05-09 12:02:50 -07001201 //Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001202 }
1203 }
1204
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001205 RenderScript(Context ctx) {
Stephen Hines42028a82013-04-17 19:22:01 -07001206 mContextType = ContextType.NORMAL;
Jason Sams1a4e1f32012-02-24 17:51:24 -08001207 if (ctx != null) {
1208 mApplicationContext = ctx.getApplicationContext();
1209 }
Tim Murray06b45672014-01-07 11:13:56 -08001210 mRWLock = new ReentrantReadWriteLock();
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001211 try {
Tim Murrayd11a6582014-12-16 09:59:09 -08001212 registerNativeAllocation.invoke(sRuntime, 4 * 1024 * 1024); // 4MB for GC sake
Tim Murrayaefbd5f2014-12-12 11:34:48 -08001213 } catch (Exception e) {
1214 Log.e(RenderScript.LOG_TAG, "Couldn't invoke registerNativeAllocation:" + e);
1215 throw new RSRuntimeException("Couldn't invoke registerNativeAllocation:" + e);
1216 }
1217
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001218 }
1219
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001220 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001221 * Gets the application context associated with the RenderScript context.
1222 *
1223 * @return The application context.
1224 */
1225 public final Context getApplicationContext() {
1226 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001227 }
1228
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001229 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001230 * @hide
1231 */
1232 public static RenderScript create(Context ctx, int sdkVersion) {
Jason Sams26e90512014-05-07 14:23:27 -07001233 return create(ctx, sdkVersion, ContextType.NORMAL, CREATE_FLAG_NONE);
Jason Samsadd26dc2013-02-22 18:43:45 -08001234 }
1235
1236 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001237 * Create a RenderScript context.
Jason Sams27676fe2010-11-10 17:00:59 -08001238 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001239 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001240 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001241 * @return RenderScript
1242 */
Tim Murrayfd710e72014-06-06 11:10:45 -07001243 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct, int flags) {
Dan Morrille4d9a012013-03-28 18:10:43 -07001244 if (!sInitialized) {
1245 Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
1246 return null;
1247 }
1248
Jason Samsb69c7912014-05-20 18:48:35 -07001249 if ((flags & ~(CREATE_FLAG_LOW_LATENCY | CREATE_FLAG_LOW_POWER)) != 0) {
1250 throw new RSIllegalArgumentException("Invalid flags passed.");
1251 }
1252
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001253 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001254
1255 rs.mDev = rs.nDeviceCreate();
Tim Murrayfd710e72014-06-06 11:10:45 -07001256 rs.mContext = rs.nContextCreate(rs.mDev, flags, sdkVersion, ct.mID);
Stephen Hines42028a82013-04-17 19:22:01 -07001257 rs.mContextType = ct;
Jason Sams26985362011-05-03 15:01:58 -07001258 if (rs.mContext == 0) {
1259 throw new RSDriverException("Failed to create RS context.");
1260 }
Jason Sams704ff642010-02-09 16:05:07 -08001261 rs.mMessageThread = new MessageThread(rs);
1262 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001263 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001264 }
1265
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001266 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001267 * Create a RenderScript context.
Jason Sams1a4e1f32012-02-24 17:51:24 -08001268 *
1269 * @param ctx The context.
1270 * @return RenderScript
1271 */
1272 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001273 return create(ctx, ContextType.NORMAL);
1274 }
1275
1276 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001277 * Create a RenderScript context.
Jason Samsadd26dc2013-02-22 18:43:45 -08001278 *
Jason Samsadd26dc2013-02-22 18:43:45 -08001279 *
1280 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001281 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001282 * @return RenderScript
1283 */
1284 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001285 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Sams26e90512014-05-07 14:23:27 -07001286 return create(ctx, v, ct, CREATE_FLAG_NONE);
1287 }
1288
1289 /**
1290 * Create a RenderScript context.
1291 *
1292 *
1293 * @param ctx The context.
1294 * @param ct The type of context to be created.
1295 * @param flags The OR of the CREATE_FLAG_* options desired
1296 * @return RenderScript
1297 */
Tim Murrayfd710e72014-06-06 11:10:45 -07001298 public static RenderScript create(Context ctx, ContextType ct, int flags) {
Jason Sams26e90512014-05-07 14:23:27 -07001299 int v = ctx.getApplicationInfo().targetSdkVersion;
1300 return create(ctx, v, ct, flags);
Jason Sams1a4e1f32012-02-24 17:51:24 -08001301 }
1302
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001303 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001304 * Print the currently available debugging information about the state of
1305 * the RS context to the log.
1306 *
Jason Sams27676fe2010-11-10 17:00:59 -08001307 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001308 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001309 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001310 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001311 }
1312
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001313 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001314 * Wait for any pending asynchronous opeations (such as copies to a RS
1315 * allocation or RS script executions) to complete.
Jason Sams27676fe2010-11-10 17:00:59 -08001316 *
1317 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001318 public void finish() {
1319 nContextFinish();
1320 }
1321
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001322 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001323 * Destroys this RenderScript context. Once this function is called,
1324 * using this context or any objects belonging to this context is
1325 * illegal.
Jason Sams27676fe2010-11-10 17:00:59 -08001326 *
1327 */
Jason Samsf5b45962009-08-25 14:49:07 -07001328 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001329 validate();
Tim Murray06b45672014-01-07 11:13:56 -08001330 nContextFinish();
1331
Jason Sams2e1872f2010-08-17 16:25:41 -07001332 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001333 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001334 try {
1335 mMessageThread.join();
1336 } catch(InterruptedException e) {
1337 }
Jason Sams516c3192009-10-06 13:58:47 -07001338
Jason Sams2e1872f2010-08-17 16:25:41 -07001339 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001340
1341 nDeviceDestroy(mDev);
1342 mDev = 0;
1343 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001344
Jason Samsa9e7a052009-09-25 14:51:22 -07001345 boolean isAlive() {
1346 return mContext != 0;
1347 }
1348
Tim Murray460a0492013-11-19 12:45:54 -08001349 long safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001350 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001351 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001352 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001353 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001354 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001355}