blob: 320192a8b703487c8ea2a99879d6447259d594e1 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08002 * Copyright (C) 2008-2012 The Android Open Source Project
Jack Palevich60aa3ea2009-05-26 13:45:08 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Samsa6f338c2012-02-24 16:22:16 -080019import java.io.File;
Jason Samsfe1d5ff2012-03-23 11:47:26 -070020import java.lang.reflect.Field;
Tim Murray2f2472c2013-08-22 14:55:26 -070021import java.lang.reflect.Method;
Jason Sams36e612a2009-07-31 16:26:13 -070022
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080023import android.content.Context;
Stephen Hines4382467a2011-08-01 15:02:34 -070024import android.content.pm.ApplicationInfo;
25import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080026import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070027import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070028import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070029import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070030import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070031import android.util.Log;
32import android.view.Surface;
Dan Morrille4d9a012013-03-28 18:10:43 -070033import android.os.SystemProperties;
Tim Murray6d7a53c2013-05-23 16:59:23 -070034import android.os.Trace;
Stephen Hines4382467a2011-08-01 15:02:34 -070035
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070036/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070037 * This class provides access to a RenderScript context, which controls RenderScript
38 * initialization, resource management, and teardown. An instance of the RenderScript
39 * class must be created before any other RS objects can be created.
Jason Sams27676fe2010-11-10 17:00:59 -080040 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080041 * <div class="special reference">
42 * <h3>Developer Guides</h3>
Tim Murrayc11e25c2013-04-09 11:01:01 -070043 * <p>For more information about creating an application that uses RenderScript, read the
44 * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080045 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070046 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070047public class RenderScript {
Tim Murray6d7a53c2013-05-23 16:59:23 -070048 static final long TRACE_TAG = Trace.TRACE_TAG_RS;
49
Jason Sams3bc47d42009-11-12 15:10:25 -080050 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080051 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070052 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070053 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080055 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070056
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080057 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070058 * We use a class initializer to allow the native code to cache some
59 * field offsets.
60 */
Dan Morrille4d9a012013-03-28 18:10:43 -070061 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // TODO: now used locally; remove?
Jason Samsbf6ef8d2010-12-06 15:59:59 -080062 static boolean sInitialized;
63 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064
Tim Murray2f2472c2013-08-22 14:55:26 -070065 static Object sRuntime;
66 static Method registerNativeAllocation;
67 static Method registerNativeFree;
Jason Samsdba3ba52009-07-30 14:56:12 -070068
Jack Palevich60aa3ea2009-05-26 13:45:08 -070069 static {
70 sInitialized = false;
Dan Morrille4d9a012013-03-28 18:10:43 -070071 if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
72 try {
Tim Murray2f2472c2013-08-22 14:55:26 -070073 Class<?> vm_runtime = Class.forName("dalvik.system.VMRuntime");
74 Method get_runtime = vm_runtime.getDeclaredMethod("getRuntime");
75 sRuntime = get_runtime.invoke(null);
76 registerNativeAllocation = vm_runtime.getDeclaredMethod("registerNativeAllocation", Integer.TYPE);
77 registerNativeFree = vm_runtime.getDeclaredMethod("registerNativeFree", Integer.TYPE);
78 } catch (Exception e) {
79 Log.e(LOG_TAG, "Error loading GC methods: " + e);
80 throw new RSRuntimeException("Error loading GC methods: " + e);
81 }
82 try {
Dan Morrille4d9a012013-03-28 18:10:43 -070083 System.loadLibrary("rs_jni");
84 _nInit();
85 sInitialized = true;
86 } catch (UnsatisfiedLinkError e) {
87 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
88 throw new RSRuntimeException("Error loading RS jni library: " + e);
89 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -070090 }
91 }
92
Jason Sams2e1872f2010-08-17 16:25:41 -070093 // Non-threadsafe functions.
Tim Murrayeff663f2013-11-15 13:08:30 -080094 native long nDeviceCreate();
95 native void nDeviceDestroy(long dev);
96 native void nDeviceSetConfig(long dev, int param, int value);
97 native int nContextGetUserMessage(long con, int[] data);
98 native String nContextGetErrorMessage(long con);
99 native int nContextPeekMessage(long con, int[] subID);
100 native void nContextInitToClient(long con);
101 native void nContextDeinitToClient(long con);
Jason Sams3eaa3382009-06-10 15:04:38 -0700102
Stephen Hines7d25a822013-04-09 23:51:56 -0700103 static File mCacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -0800104
105 /**
106 * Sets the directory to use as a persistent storage for the
107 * renderscript object file cache.
108 *
109 * @hide
110 * @param cacheDir A directory the current process can write to
111 */
Jason Samsa6f338c2012-02-24 16:22:16 -0800112 public static void setupDiskCache(File cacheDir) {
Dan Morrille4d9a012013-03-28 18:10:43 -0700113 if (!sInitialized) {
114 Log.e(LOG_TAG, "RenderScript.setupDiskCache() called when disabled");
115 return;
116 }
117
Stephen Hines7d25a822013-04-09 23:51:56 -0700118 // Defer creation of cache path to nScriptCCreate().
119 mCacheDir = cacheDir;
Jason Samsa6f338c2012-02-24 16:22:16 -0800120 }
121
Jason Sams02d56d92013-04-12 16:40:50 -0700122 /**
123 * ContextType specifies the specific type of context to be created.
124 *
125 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800126 public enum ContextType {
Jason Sams02d56d92013-04-12 16:40:50 -0700127 /**
128 * NORMAL context, this is the default and what shipping apps should
129 * use.
130 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800131 NORMAL (0),
Jason Sams02d56d92013-04-12 16:40:50 -0700132
133 /**
134 * DEBUG context, perform extra runtime checks to validate the
135 * kernels and APIs are being used as intended. Get and SetElementAt
136 * will be bounds checked in this mode.
137 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800138 DEBUG (1),
Jason Sams02d56d92013-04-12 16:40:50 -0700139
140 /**
141 * PROFILE context, Intended to be used once the first time an
142 * application is run on a new device. This mode allows the runtime to
143 * do additional testing and performance tuning.
144 */
Jason Samsadd26dc2013-02-22 18:43:45 -0800145 PROFILE (2);
146
147 int mID;
148 ContextType(int id) {
149 mID = id;
150 }
151 }
Jason Sams718cd1f2009-12-23 14:35:29 -0800152
Stephen Hines42028a82013-04-17 19:22:01 -0700153 ContextType mContextType;
154
Jason Sams2e1872f2010-08-17 16:25:41 -0700155 // Methods below are wrapped to protect the non-threadsafe
156 // lockless fifo.
Tim Murrayeff663f2013-11-15 13:08:30 -0800157 native long rsnContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700158 int colorMin, int colorPref,
159 int alphaMin, int alphaPref,
160 int depthMin, int depthPref,
161 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700162 int samplesMin, int samplesPref, float samplesQ, int dpi);
Tim Murrayeff663f2013-11-15 13:08:30 -0800163 synchronized long nContextCreateGL(long dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700164 int colorMin, int colorPref,
165 int alphaMin, int alphaPref,
166 int depthMin, int depthPref,
167 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700168 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700169 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700170 alphaMin, alphaPref, depthMin, depthPref,
171 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700172 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700173 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800174 native long rsnContextCreate(long dev, int ver, int sdkVer, int contextType);
175 synchronized long nContextCreate(long dev, int ver, int sdkVer, int contextType) {
Jason Samsadd26dc2013-02-22 18:43:45 -0800176 return rsnContextCreate(dev, ver, sdkVer, contextType);
Jason Sams2e1872f2010-08-17 16:25:41 -0700177 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800178 native void rsnContextDestroy(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700179 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800180 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 rsnContextDestroy(mContext);
182 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800183 native void rsnContextSetSurface(long con, int w, int h, Surface sur);
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800185 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700186 rsnContextSetSurface(mContext, w, h, sur);
187 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800188 native void rsnContextSetSurfaceTexture(long con, int w, int h, SurfaceTexture sur);
Jason Samsfaa32b32011-06-20 16:58:04 -0700189 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
190 validate();
191 rsnContextSetSurfaceTexture(mContext, w, h, sur);
192 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800193 native void rsnContextSetPriority(long con, int p);
Jason Sams2e1872f2010-08-17 16:25:41 -0700194 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800195 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700196 rsnContextSetPriority(mContext, p);
197 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800198 native void rsnContextDump(long con, int bits);
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800200 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 rsnContextDump(mContext, bits);
202 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800203 native void rsnContextFinish(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800205 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700206 rsnContextFinish(mContext);
207 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700208
Tim Murrayeff663f2013-11-15 13:08:30 -0800209 native void rsnContextSendMessage(long con, int id, int[] data);
Jason Sams455d6442013-02-05 19:20:18 -0800210 synchronized void nContextSendMessage(int id, int[] data) {
211 validate();
212 rsnContextSendMessage(mContext, id, data);
213 }
214
Tim Murrayeff663f2013-11-15 13:08:30 -0800215 native void rsnContextBindRootScript(long con, int script);
Jason Sams2e1872f2010-08-17 16:25:41 -0700216 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800217 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700218 rsnContextBindRootScript(mContext, script);
219 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800220 native void rsnContextBindSampler(long con, int sampler, int slot);
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800222 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700223 rsnContextBindSampler(mContext, sampler, slot);
224 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800225 native void rsnContextBindProgramStore(long con, int pfs);
Jason Sams2e1872f2010-08-17 16:25:41 -0700226 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800227 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700228 rsnContextBindProgramStore(mContext, pfs);
229 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800230 native void rsnContextBindProgramFragment(long con, int pf);
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800232 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700233 rsnContextBindProgramFragment(mContext, pf);
234 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800235 native void rsnContextBindProgramVertex(long con, int pv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700236 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800237 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700238 rsnContextBindProgramVertex(mContext, pv);
239 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800240 native void rsnContextBindProgramRaster(long con, int pr);
Jason Sams2e1872f2010-08-17 16:25:41 -0700241 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800242 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700243 rsnContextBindProgramRaster(mContext, pr);
244 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800245 native void rsnContextPause(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700246 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800247 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700248 rsnContextPause(mContext);
249 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800250 native void rsnContextResume(long con);
Jason Sams2e1872f2010-08-17 16:25:41 -0700251 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800252 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700253 rsnContextResume(mContext);
254 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700255
Tim Murrayeff663f2013-11-15 13:08:30 -0800256 native void rsnAssignName(long con, int obj, byte[] name);
Jason Sams2e1872f2010-08-17 16:25:41 -0700257 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800258 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700259 rsnAssignName(mContext, obj, name);
260 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800261 native String rsnGetName(long con, int obj);
Jason Sams2e1872f2010-08-17 16:25:41 -0700262 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800263 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700264 return rsnGetName(mContext, obj);
265 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800266 native void rsnObjDestroy(long con, int id);
Jason Sams2e1872f2010-08-17 16:25:41 -0700267 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800268 // There is a race condition here. The calling code may be run
269 // by the gc while teardown is occuring. This protects againts
270 // deleting dead objects.
271 if (mContext != 0) {
272 rsnObjDestroy(mContext, id);
273 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700274 }
Jason Samsfe08d992009-05-27 14:45:32 -0700275
Tim Murrayeff663f2013-11-15 13:08:30 -0800276 native int rsnElementCreate(long con, int type, int kind, boolean norm, int vecSize);
Jason Sams2e1872f2010-08-17 16:25:41 -0700277 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800278 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700279 return rsnElementCreate(mContext, type, kind, norm, vecSize);
280 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800281 native int rsnElementCreate2(long con, int[] elements, String[] names, int[] arraySizes);
Jason Sams70d4e502010-09-02 17:35:23 -0700282 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800283 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700284 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700285 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800286 native void rsnElementGetNativeData(long con, int id, int[] elementData);
Jason Sams2e1872f2010-08-17 16:25:41 -0700287 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800288 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700289 rsnElementGetNativeData(mContext, id, elementData);
290 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800291 native void rsnElementGetSubElements(long con, int id,
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700292 int[] IDs, String[] names, int[] arraySizes);
293 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800294 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700295 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700296 }
Jason Sams768bc022009-09-21 19:41:04 -0700297
Tim Murrayeff663f2013-11-15 13:08:30 -0800298 native int rsnTypeCreate(long con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
Jason Samsb109cc72013-01-07 18:20:12 -0800299 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800300 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800301 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700302 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800303 native void rsnTypeGetNativeData(long con, int id, int[] typeData);
Jason Sams2e1872f2010-08-17 16:25:41 -0700304 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800305 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700306 rsnTypeGetNativeData(mContext, id, typeData);
307 }
Jason Sams768bc022009-09-21 19:41:04 -0700308
Tim Murrayeff663f2013-11-15 13:08:30 -0800309 native int rsnAllocationCreateTyped(long con, int type, int mip, int usage, int pointer);
Jason Sams857d0c72011-11-23 15:02:15 -0800310 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800311 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800312 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700313 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800314 native int rsnAllocationCreateFromBitmap(long con, int type, int mip, Bitmap bmp, int usage);
Jason Sams5476b452010-12-08 16:14:36 -0800315 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800316 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800317 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700318 }
Tim Murraya3145512012-12-04 17:59:29 -0800319
Tim Murrayeff663f2013-11-15 13:08:30 -0800320 native int rsnAllocationCreateBitmapBackedAllocation(long con, int type, int mip, Bitmap bmp, int usage);
Tim Murraya3145512012-12-04 17:59:29 -0800321 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
322 validate();
323 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
324 }
325
326
Tim Murrayeff663f2013-11-15 13:08:30 -0800327 native int rsnAllocationCubeCreateFromBitmap(long con, int type, int mip, Bitmap bmp, int usage);
Jason Sams5476b452010-12-08 16:14:36 -0800328 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800329 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800330 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800331 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800332 native int rsnAllocationCreateBitmapRef(long con, int type, Bitmap bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700333 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800334 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700335 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
336 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800337 native int rsnAllocationCreateFromAssetStream(long con, int mips, int assetStream, int usage);
Jason Sams5476b452010-12-08 16:14:36 -0800338 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800339 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800340 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
341 }
342
Tim Murrayeff663f2013-11-15 13:08:30 -0800343 native void rsnAllocationCopyToBitmap(long con, int alloc, Bitmap bmp);
Jason Sams4ef66502010-12-10 16:03:15 -0800344 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800345 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800346 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
347 }
348
349
Tim Murrayeff663f2013-11-15 13:08:30 -0800350 native void rsnAllocationSyncAll(long con, int alloc, int src);
Jason Sams5476b452010-12-08 16:14:36 -0800351 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800352 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800353 rsnAllocationSyncAll(mContext, alloc, src);
354 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800355 native Surface rsnAllocationGetSurface(long con, int alloc);
Jason Sams72226e02013-02-22 12:45:54 -0800356 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800357 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800358 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700359 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800360 native void rsnAllocationSetSurface(long con, int alloc, Surface sur);
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700361 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800362 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700363 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800364 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800365 native void rsnAllocationIoSend(long con, int alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800366 synchronized void nAllocationIoSend(int alloc) {
367 validate();
368 rsnAllocationIoSend(mContext, alloc);
369 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800370 native void rsnAllocationIoReceive(long con, int alloc);
Jason Sams163766c2012-02-15 12:04:24 -0800371 synchronized void nAllocationIoReceive(int alloc) {
372 validate();
373 rsnAllocationIoReceive(mContext, alloc);
374 }
375
Jason Sams615e7ce2012-01-13 14:01:20 -0800376
Tim Murrayeff663f2013-11-15 13:08:30 -0800377 native void rsnAllocationGenerateMipmaps(long con, int alloc);
Jason Samsf7086092011-01-12 13:28:37 -0800378 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800379 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800380 rsnAllocationGenerateMipmaps(mContext, alloc);
381 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800382 native void rsnAllocationCopyFromBitmap(long con, int alloc, Bitmap bmp);
Jason Sams4ef66502010-12-10 16:03:15 -0800383 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800384 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800385 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700386 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700387
Jason Sams49a05d72010-12-29 14:31:29 -0800388
Tim Murrayeff663f2013-11-15 13:08:30 -0800389 native void rsnAllocationData1D(long con, int id, int off, int mip, int count, Object d, int sizeBytes, int dt);
Jason Samse729a942013-11-06 11:22:02 -0800390 synchronized void nAllocationData1D(int id, int off, int mip, int count, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800391 validate();
Jason Samse729a942013-11-06 11:22:02 -0800392 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700393 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700394
Tim Murrayeff663f2013-11-15 13:08:30 -0800395 native void rsnAllocationElementData1D(long con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
Jason Sams49a05d72010-12-29 14:31:29 -0800396 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800397 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800398 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700399 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700400
Tim Murrayeff663f2013-11-15 13:08:30 -0800401 native void rsnAllocationData2D(long con,
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700402 int dstAlloc, int dstXoff, int dstYoff,
403 int dstMip, int dstFace,
404 int width, int height,
405 int srcAlloc, int srcXoff, int srcYoff,
406 int srcMip, int srcFace);
407 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
408 int dstMip, int dstFace,
409 int width, int height,
410 int srcAlloc, int srcXoff, int srcYoff,
411 int srcMip, int srcFace) {
412 validate();
413 rsnAllocationData2D(mContext,
414 dstAlloc, dstXoff, dstYoff,
415 dstMip, dstFace,
416 width, height,
417 srcAlloc, srcXoff, srcYoff,
418 srcMip, srcFace);
419 }
420
Tim Murrayeff663f2013-11-15 13:08:30 -0800421 native void rsnAllocationData2D(long con, int id, int xoff, int yoff, int mip, int face,
Jason Samse729a942013-11-06 11:22:02 -0800422 int w, int h, Object d, int sizeBytes, int dt);
423 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face,
424 int w, int h, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800425 validate();
Jason Samse729a942013-11-06 11:22:02 -0800426 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700427 }
Jason Sams21659ac2013-11-06 15:08:07 -0800428
Tim Murrayeff663f2013-11-15 13:08:30 -0800429 native void rsnAllocationData2D(long con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
Jason Samsfa445b92011-01-07 17:00:07 -0800430 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800431 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800432 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
433 }
Jason Sams49a05d72010-12-29 14:31:29 -0800434
Tim Murrayeff663f2013-11-15 13:08:30 -0800435 native void rsnAllocationData3D(long con,
Jason Samsb05d6892013-04-09 15:59:24 -0700436 int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
437 int dstMip,
438 int width, int height, int depth,
439 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
440 int srcMip);
441 synchronized void nAllocationData3D(int dstAlloc, int dstXoff, int dstYoff, int dstZoff,
442 int dstMip,
443 int width, int height, int depth,
444 int srcAlloc, int srcXoff, int srcYoff, int srcZoff,
445 int srcMip) {
446 validate();
447 rsnAllocationData3D(mContext,
448 dstAlloc, dstXoff, dstYoff, dstZoff,
449 dstMip, width, height, depth,
450 srcAlloc, srcXoff, srcYoff, srcZoff, srcMip);
451 }
452
Tim Murrayeff663f2013-11-15 13:08:30 -0800453 native void rsnAllocationData3D(long con, int id, int xoff, int yoff, int zoff, int mip,
Jason Samse729a942013-11-06 11:22:02 -0800454 int w, int h, int depth, Object d, int sizeBytes, int dt);
455 synchronized void nAllocationData3D(int id, int xoff, int yoff, int zoff, int mip,
456 int w, int h, int depth, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsb05d6892013-04-09 15:59:24 -0700457 validate();
Jason Samse729a942013-11-06 11:22:02 -0800458 rsnAllocationData3D(mContext, id, xoff, yoff, zoff, mip, w, h, depth, d, sizeBytes, dt.mID);
Jason Samsb05d6892013-04-09 15:59:24 -0700459 }
Jason Samsb05d6892013-04-09 15:59:24 -0700460
Tim Murrayeff663f2013-11-15 13:08:30 -0800461 native void rsnAllocationRead(long con, int id, Object d, int dt);
Jason Sams21659ac2013-11-06 15:08:07 -0800462 synchronized void nAllocationRead(int id, Object d, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800463 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800464 rsnAllocationRead(mContext, id, d, dt.mID);
Jason Samsfa445b92011-01-07 17:00:07 -0800465 }
Jason Sams21659ac2013-11-06 15:08:07 -0800466
Tim Murrayeff663f2013-11-15 13:08:30 -0800467 native void rsnAllocationRead1D(long con, int id, int off, int mip, int count, Object d,
Jason Sams21659ac2013-11-06 15:08:07 -0800468 int sizeBytes, int dt);
469 synchronized void nAllocationRead1D(int id, int off, int mip, int count, Object d,
470 int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800472 rsnAllocationRead1D(mContext, id, off, mip, count, d, sizeBytes, dt.mID);
Jason Samsfa445b92011-01-07 17:00:07 -0800473 }
Jason Sams21659ac2013-11-06 15:08:07 -0800474
Tim Murrayeff663f2013-11-15 13:08:30 -0800475 native void rsnAllocationRead2D(long con, int id, int xoff, int yoff, int mip, int face,
Jason Sams21659ac2013-11-06 15:08:07 -0800476 int w, int h, Object d, int sizeBytes, int dt);
477 synchronized void nAllocationRead2D(int id, int xoff, int yoff, int mip, int face,
478 int w, int h, Object d, int sizeBytes, Element.DataType dt) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800479 validate();
Jason Sams21659ac2013-11-06 15:08:07 -0800480 rsnAllocationRead2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes, dt.mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700481 }
Jason Sams21659ac2013-11-06 15:08:07 -0800482
Tim Murrayeff663f2013-11-15 13:08:30 -0800483 native int rsnAllocationGetType(long con, int id);
Jason Sams2e1872f2010-08-17 16:25:41 -0700484 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800485 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700486 return rsnAllocationGetType(mContext, id);
487 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700488
Tim Murrayeff663f2013-11-15 13:08:30 -0800489 native void rsnAllocationResize1D(long con, int id, int dimX);
Jason Sams5edc6082010-10-05 13:32:49 -0700490 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800491 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700492 rsnAllocationResize1D(mContext, id, dimX);
493 }
Jason Sams5edc6082010-10-05 13:32:49 -0700494
Tim Murrayeff663f2013-11-15 13:08:30 -0800495 native int rsnFileA3DCreateFromAssetStream(long con, int assetStream);
Jason Sams2e1872f2010-08-17 16:25:41 -0700496 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800497 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
499 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800500 native int rsnFileA3DCreateFromFile(long con, String path);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800501 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800502 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800503 return rsnFileA3DCreateFromFile(mContext, path);
504 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800505 native int rsnFileA3DCreateFromAsset(long con, AssetManager mgr, String path);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800506 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800507 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800508 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
509 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800510 native int rsnFileA3DGetNumIndexEntries(long con, int fileA3D);
Jason Sams2e1872f2010-08-17 16:25:41 -0700511 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800512 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700513 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
514 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800515 native void rsnFileA3DGetIndexEntries(long con, int fileA3D, int numEntries, int[] IDs, String[] names);
Jason Sams2e1872f2010-08-17 16:25:41 -0700516 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800517 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700518 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
519 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800520 native int rsnFileA3DGetEntryByIndex(long con, int fileA3D, int index);
Jason Sams2e1872f2010-08-17 16:25:41 -0700521 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800522 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700523 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
524 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700525
Tim Murrayeff663f2013-11-15 13:08:30 -0800526 native int rsnFontCreateFromFile(long con, String fileName, float size, int dpi);
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800527 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800528 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700529 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
530 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800531 native int rsnFontCreateFromAssetStream(long con, String name, float size, int dpi, int assetStream);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800532 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800533 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800534 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
535 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800536 native int rsnFontCreateFromAsset(long con, AssetManager mgr, String path, float size, int dpi);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800537 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800538 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800539 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
540 }
Jason Sams22534172009-08-04 16:58:20 -0700541
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700542
Tim Murrayeff663f2013-11-15 13:08:30 -0800543 native void rsnScriptBindAllocation(long con, int script, int alloc, int slot);
Jason Sams2e1872f2010-08-17 16:25:41 -0700544 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800545 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700546 rsnScriptBindAllocation(mContext, script, alloc, slot);
547 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800548 native void rsnScriptSetTimeZone(long con, int script, byte[] timeZone);
Jason Sams2e1872f2010-08-17 16:25:41 -0700549 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800550 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700551 rsnScriptSetTimeZone(mContext, script, timeZone);
552 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800553 native void rsnScriptInvoke(long con, int id, int slot);
Jason Sams2e1872f2010-08-17 16:25:41 -0700554 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800555 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700556 rsnScriptInvoke(mContext, id, slot);
557 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800558 native void rsnScriptForEach(long con, int id, int slot, int ain, int aout, byte[] params);
559 native void rsnScriptForEach(long con, int id, int slot, int ain, int aout);
560 native void rsnScriptForEachClipped(long con, int id, int slot, int ain, int aout, byte[] params,
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800561 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Tim Murrayeff663f2013-11-15 13:08:30 -0800562 native void rsnScriptForEachClipped(long con, int id, int slot, int ain, int aout,
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800563 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700564 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
565 validate();
566 if (params == null) {
567 rsnScriptForEach(mContext, id, slot, ain, aout);
568 } else {
569 rsnScriptForEach(mContext, id, slot, ain, aout, params);
570 }
571 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800572
573 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
574 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
575 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800576 if (params == null) {
577 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
578 } else {
579 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
580 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800581 }
582
Tim Murrayeff663f2013-11-15 13:08:30 -0800583 native void rsnScriptInvokeV(long con, int id, int slot, byte[] params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700584 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800585 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700586 rsnScriptInvokeV(mContext, id, slot, params);
587 }
Tim Murray7c4caad2013-04-10 16:21:40 -0700588
Tim Murrayeff663f2013-11-15 13:08:30 -0800589 native void rsnScriptSetVarI(long con, int id, int slot, int val);
Jason Sams2e1872f2010-08-17 16:25:41 -0700590 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800591 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700592 rsnScriptSetVarI(mContext, id, slot, val);
593 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800594 native int rsnScriptGetVarI(long con, int id, int slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700595 synchronized int nScriptGetVarI(int id, int slot) {
596 validate();
597 return rsnScriptGetVarI(mContext, id, slot);
598 }
599
Tim Murrayeff663f2013-11-15 13:08:30 -0800600 native void rsnScriptSetVarJ(long con, int id, int slot, long val);
Stephen Hines031ec58c2010-10-11 10:54:21 -0700601 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800602 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700603 rsnScriptSetVarJ(mContext, id, slot, val);
604 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800605 native long rsnScriptGetVarJ(long con, int id, int slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700606 synchronized long nScriptGetVarJ(int id, int slot) {
607 validate();
608 return rsnScriptGetVarJ(mContext, id, slot);
609 }
610
Tim Murrayeff663f2013-11-15 13:08:30 -0800611 native void rsnScriptSetVarF(long con, int id, int slot, float val);
Jason Sams2e1872f2010-08-17 16:25:41 -0700612 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800613 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700614 rsnScriptSetVarF(mContext, id, slot, val);
615 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800616 native float rsnScriptGetVarF(long con, int id, int slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700617 synchronized float nScriptGetVarF(int id, int slot) {
618 validate();
619 return rsnScriptGetVarF(mContext, id, slot);
620 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800621 native void rsnScriptSetVarD(long con, int id, int slot, double val);
Stephen Hinesca54ec32010-09-20 17:20:30 -0700622 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800623 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700624 rsnScriptSetVarD(mContext, id, slot, val);
625 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800626 native double rsnScriptGetVarD(long con, int id, int slot);
Tim Murray7c4caad2013-04-10 16:21:40 -0700627 synchronized double nScriptGetVarD(int id, int slot) {
628 validate();
629 return rsnScriptGetVarD(mContext, id, slot);
630 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800631 native void rsnScriptSetVarV(long con, int id, int slot, byte[] val);
Jason Sams2e1872f2010-08-17 16:25:41 -0700632 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800633 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700634 rsnScriptSetVarV(mContext, id, slot, val);
635 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800636 native void rsnScriptGetVarV(long con, int id, int slot, byte[] val);
Tim Murray7c4caad2013-04-10 16:21:40 -0700637 synchronized void nScriptGetVarV(int id, int slot, byte[] val) {
638 validate();
639 rsnScriptGetVarV(mContext, id, slot, val);
640 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800641 native void rsnScriptSetVarVE(long con, int id, int slot, byte[] val,
Stephen Hinesadeb8092012-04-20 14:26:06 -0700642 int e, int[] dims);
643 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
644 int e, int[] dims) {
645 validate();
646 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
647 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800648 native void rsnScriptSetVarObj(long con, int id, int slot, int val);
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800649 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800650 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800651 rsnScriptSetVarObj(mContext, id, slot, val);
652 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700653
Tim Murrayeff663f2013-11-15 13:08:30 -0800654 native int rsnScriptCCreate(long con, String resName, String cacheDir,
Jason Samse4a06c52011-03-16 16:29:28 -0700655 byte[] script, int length);
656 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800657 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700658 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700659 }
Jason Samsebfb4362009-09-23 13:57:02 -0700660
Tim Murrayeff663f2013-11-15 13:08:30 -0800661 native int rsnScriptIntrinsicCreate(long con, int id, int eid);
Jason Sams6ab97682012-08-10 12:09:43 -0700662 synchronized int nScriptIntrinsicCreate(int id, int eid) {
663 validate();
664 return rsnScriptIntrinsicCreate(mContext, id, eid);
665 }
666
Tim Murrayeff663f2013-11-15 13:08:30 -0800667 native int rsnScriptKernelIDCreate(long con, int sid, int slot, int sig);
Jason Sams08a81582012-09-18 12:32:10 -0700668 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
669 validate();
670 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
671 }
672
Tim Murrayeff663f2013-11-15 13:08:30 -0800673 native int rsnScriptFieldIDCreate(long con, int sid, int slot);
Jason Sams08a81582012-09-18 12:32:10 -0700674 synchronized int nScriptFieldIDCreate(int sid, int slot) {
675 validate();
676 return rsnScriptFieldIDCreate(mContext, sid, slot);
677 }
678
Tim Murrayeff663f2013-11-15 13:08:30 -0800679 native int rsnScriptGroupCreate(long con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
Jason Sams08a81582012-09-18 12:32:10 -0700680 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
681 validate();
682 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
683 }
684
Tim Murrayeff663f2013-11-15 13:08:30 -0800685 native void rsnScriptGroupSetInput(long con, int group, int kernel, int alloc);
Jason Sams08a81582012-09-18 12:32:10 -0700686 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
687 validate();
688 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
689 }
690
Tim Murrayeff663f2013-11-15 13:08:30 -0800691 native void rsnScriptGroupSetOutput(long con, int group, int kernel, int alloc);
Jason Sams08a81582012-09-18 12:32:10 -0700692 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
693 validate();
694 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
695 }
696
Tim Murrayeff663f2013-11-15 13:08:30 -0800697 native void rsnScriptGroupExecute(long con, int group);
Jason Sams08a81582012-09-18 12:32:10 -0700698 synchronized void nScriptGroupExecute(int group) {
699 validate();
700 rsnScriptGroupExecute(mContext, group);
701 }
702
Tim Murrayeff663f2013-11-15 13:08:30 -0800703 native int rsnSamplerCreate(long con, int magFilter, int minFilter,
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700704 int wrapS, int wrapT, int wrapR, float aniso);
705 synchronized int nSamplerCreate(int magFilter, int minFilter,
706 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800707 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700708 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700709 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800710
Tim Murrayeff663f2013-11-15 13:08:30 -0800711 native int rsnProgramStoreCreate(long con, boolean r, boolean g, boolean b, boolean a,
Jason Sams331bf9b2011-04-06 11:23:54 -0700712 boolean depthMask, boolean dither,
713 int srcMode, int dstMode, int depthFunc);
714 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
715 boolean depthMask, boolean dither,
716 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800717 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700718 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
719 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700720 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700721
Tim Murrayeff663f2013-11-15 13:08:30 -0800722 native int rsnProgramRasterCreate(long con, boolean pointSprite, int cullMode);
Jason Sams94aaed32011-09-23 14:18:53 -0700723 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800724 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700725 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700726 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700727
Tim Murrayeff663f2013-11-15 13:08:30 -0800728 native void rsnProgramBindConstants(long con, int pv, int slot, int mID);
Jason Sams2e1872f2010-08-17 16:25:41 -0700729 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800730 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700731 rsnProgramBindConstants(mContext, pv, slot, mID);
732 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800733 native void rsnProgramBindTexture(long con, int vpf, int slot, int a);
Jason Sams2e1872f2010-08-17 16:25:41 -0700734 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800735 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700736 rsnProgramBindTexture(mContext, vpf, slot, a);
737 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800738 native void rsnProgramBindSampler(long con, int vpf, int slot, int s);
Jason Sams2e1872f2010-08-17 16:25:41 -0700739 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800740 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700741 rsnProgramBindSampler(mContext, vpf, slot, s);
742 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800743 native int rsnProgramFragmentCreate(long con, String shader, String[] texNames, int[] params);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800744 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800745 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800746 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700747 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800748 native int rsnProgramVertexCreate(long con, String shader, String[] texNames, int[] params);
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800749 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800750 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800751 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700752 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700753
Tim Murrayeff663f2013-11-15 13:08:30 -0800754 native int rsnMeshCreate(long con, int[] vtx, int[] idx, int[] prim);
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700755 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800756 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700757 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800758 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800759 native int rsnMeshGetVertexBufferCount(long con, int id);
Jason Sams2e1872f2010-08-17 16:25:41 -0700760 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800761 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700762 return rsnMeshGetVertexBufferCount(mContext, id);
763 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800764 native int rsnMeshGetIndexCount(long con, int id);
Jason Sams2e1872f2010-08-17 16:25:41 -0700765 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800766 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700767 return rsnMeshGetIndexCount(mContext, id);
768 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800769 native void rsnMeshGetVertices(long con, int id, int[] vtxIds, int vtxIdCount);
Jason Sams2e1872f2010-08-17 16:25:41 -0700770 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800771 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700772 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
773 }
Tim Murrayeff663f2013-11-15 13:08:30 -0800774 native void rsnMeshGetIndices(long con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
Jason Sams2e1872f2010-08-17 16:25:41 -0700775 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800776 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700777 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
778 }
779
Tim Murrayeff663f2013-11-15 13:08:30 -0800780 native int rsnPathCreate(long con, int prim, boolean isStatic, int vtx, int loop, float q);
Jason Samsf15ed012011-10-31 13:23:43 -0700781 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
782 validate();
783 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
784 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700785
Tim Murrayeff663f2013-11-15 13:08:30 -0800786 long mDev;
787 long mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700788 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800789 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700790
Jason Sams8cb39de2010-06-01 15:47:01 -0700791 Element mElement_U8;
792 Element mElement_I8;
793 Element mElement_U16;
794 Element mElement_I16;
795 Element mElement_U32;
796 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700797 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700798 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700799 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700800 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700801 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700802
Jason Sams8cb39de2010-06-01 15:47:01 -0700803 Element mElement_ELEMENT;
804 Element mElement_TYPE;
805 Element mElement_ALLOCATION;
806 Element mElement_SAMPLER;
807 Element mElement_SCRIPT;
808 Element mElement_MESH;
809 Element mElement_PROGRAM_FRAGMENT;
810 Element mElement_PROGRAM_VERTEX;
811 Element mElement_PROGRAM_RASTER;
812 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700813 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700814
Jason Sams3c0dfba2009-09-27 17:50:38 -0700815 Element mElement_A_8;
816 Element mElement_RGB_565;
817 Element mElement_RGB_888;
818 Element mElement_RGBA_5551;
819 Element mElement_RGBA_4444;
820 Element mElement_RGBA_8888;
821
Jason Sams8cb39de2010-06-01 15:47:01 -0700822 Element mElement_FLOAT_2;
823 Element mElement_FLOAT_3;
824 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700825
826 Element mElement_DOUBLE_2;
827 Element mElement_DOUBLE_3;
828 Element mElement_DOUBLE_4;
829
830 Element mElement_UCHAR_2;
831 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700832 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800833
Stephen Hines836c4a52011-06-01 14:38:10 -0700834 Element mElement_CHAR_2;
835 Element mElement_CHAR_3;
836 Element mElement_CHAR_4;
837
838 Element mElement_USHORT_2;
839 Element mElement_USHORT_3;
840 Element mElement_USHORT_4;
841
842 Element mElement_SHORT_2;
843 Element mElement_SHORT_3;
844 Element mElement_SHORT_4;
845
846 Element mElement_UINT_2;
847 Element mElement_UINT_3;
848 Element mElement_UINT_4;
849
850 Element mElement_INT_2;
851 Element mElement_INT_3;
852 Element mElement_INT_4;
853
854 Element mElement_ULONG_2;
855 Element mElement_ULONG_3;
856 Element mElement_ULONG_4;
857
858 Element mElement_LONG_2;
859 Element mElement_LONG_3;
860 Element mElement_LONG_4;
861
Tim Murray932e78e2013-09-03 11:42:26 -0700862 Element mElement_YUV;
863
Jason Sams1d45c472010-08-25 14:31:48 -0700864 Element mElement_MATRIX_4X4;
865 Element mElement_MATRIX_3X3;
866 Element mElement_MATRIX_2X2;
867
Jason Sams4d339932010-05-11 14:03:58 -0700868 Sampler mSampler_CLAMP_NEAREST;
869 Sampler mSampler_CLAMP_LINEAR;
870 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
871 Sampler mSampler_WRAP_NEAREST;
872 Sampler mSampler_WRAP_LINEAR;
873 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800874 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
875 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
876 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700877
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700878 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
879 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700880 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
881 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700882
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700883 ProgramRaster mProgramRaster_CULL_BACK;
884 ProgramRaster mProgramRaster_CULL_FRONT;
885 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700886
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700887 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700888 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700889
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700890 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700891 * The base class from which an application should derive in order
892 * to receive RS messages from scripts. When a script calls {@code
893 * rsSendToClient}, the data fields will be filled, and the run
894 * method will be called on a separate thread. This will occur
895 * some time after {@code rsSendToClient} completes in the script,
896 * as {@code rsSendToClient} is asynchronous. Message handlers are
897 * not guaranteed to have completed when {@link
898 * android.renderscript.RenderScript#finish} returns.
Jason Sams27676fe2010-11-10 17:00:59 -0800899 *
900 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800901 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700902 protected int[] mData;
903 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800904 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700905 public void run() {
906 }
907 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700908 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700909 * If an application is expecting messages, it should set this
910 * field to an instance of {@link RSMessageHandler}. This
911 * instance will receive all the user messages sent from {@code
912 * sendToClient} by scripts from this context.
Jason Sams27676fe2010-11-10 17:00:59 -0800913 *
914 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800915 RSMessageHandler mMessageCallback = null;
916
917 public void setMessageHandler(RSMessageHandler msg) {
918 mMessageCallback = msg;
919 }
920 public RSMessageHandler getMessageHandler() {
921 return mMessageCallback;
922 }
Jason Sams516c3192009-10-06 13:58:47 -0700923
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700924 /**
Jason Sams02d56d92013-04-12 16:40:50 -0700925 * Place a message into the message queue to be sent back to the message
926 * handler once all previous commands have been executed.
Jason Sams455d6442013-02-05 19:20:18 -0800927 *
928 * @param id
929 * @param data
930 */
931 public void sendMessage(int id, int[] data) {
932 nContextSendMessage(id, data);
933 }
934
935 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700936 * The runtime error handler base class. An application should derive from this class
937 * if it wishes to install an error handler. When errors occur at runtime,
938 * the fields in this class will be filled, and the run method will be called.
Jason Sams27676fe2010-11-10 17:00:59 -0800939 *
940 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800941 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800942 protected String mErrorMessage;
943 protected int mErrorNum;
944 public void run() {
945 }
946 }
Jason Sams27676fe2010-11-10 17:00:59 -0800947
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700948 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800949 * Application Error handler. All runtime errors will be dispatched to the
950 * instance of RSAsyncError set here. If this field is null a
Tim Murrayc11e25c2013-04-09 11:01:01 -0700951 * {@link RSRuntimeException} will instead be thrown with details about the error.
Jason Sams27676fe2010-11-10 17:00:59 -0800952 * This will cause program termaination.
953 *
954 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800955 RSErrorHandler mErrorCallback = null;
956
957 public void setErrorHandler(RSErrorHandler msg) {
958 mErrorCallback = msg;
959 }
960 public RSErrorHandler getErrorHandler() {
961 return mErrorCallback;
962 }
Jason Sams1c415172010-11-08 17:06:46 -0800963
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700964 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700965 * RenderScript worker thread priority enumeration. The default value is
966 * NORMAL. Applications wishing to do background processing should set
967 * their priority to LOW to avoid starving forground processes.
Jason Sams27676fe2010-11-10 17:00:59 -0800968 */
Jason Sams7d787b42009-11-15 12:14:26 -0800969 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700970 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
971 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800972
973 int mID;
974 Priority(int id) {
975 mID = id;
976 }
977 }
978
Jason Sams771bebb2009-12-07 12:40:12 -0800979 void validate() {
980 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700981 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800982 }
983 }
984
Jason Sams27676fe2010-11-10 17:00:59 -0800985
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700986 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800987 * Change the priority of the worker threads for this context.
988 *
989 * @param p New priority to be set.
990 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800991 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800992 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800993 nContextSetPriority(p.mID);
994 }
995
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800996 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700997 RenderScript mRS;
998 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800999 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -08001000
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001001 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
1002 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
1003 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
1004 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
1005 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams739c8262013-04-11 18:07:52 -07001006 static final int RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5;
Jason Sams516c3192009-10-06 13:58:47 -07001007
Stephen Hines42028a82013-04-17 19:22:01 -07001008 static final int RS_ERROR_FATAL_DEBUG = 0x0800;
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001009 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -08001010
Jason Sams516c3192009-10-06 13:58:47 -07001011 MessageThread(RenderScript rs) {
1012 super("RSMessageThread");
1013 mRS = rs;
1014
1015 }
1016
1017 public void run() {
1018 // This function is a temporary solution. The final solution will
1019 // used typed allocations where the message id is the type indicator.
1020 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -07001021 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001022 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -07001023 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -07001024 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001025 int size = mAuxData[1];
1026 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -08001027
1028 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
1029 if ((size>>2) >= rbuf.length) {
1030 rbuf = new int[(size + 3) >> 2];
1031 }
Jason Samsedbfabd2011-05-17 15:01:29 -07001032 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
1033 RS_MESSAGE_TO_CLIENT_USER) {
Tim Murrayc11e25c2013-04-09 11:01:01 -07001034 throw new RSDriverException("Error processing message from RenderScript.");
Jason Samsedbfabd2011-05-17 15:01:29 -07001035 }
Jason Sams1c415172010-11-08 17:06:46 -08001036
1037 if(mRS.mMessageCallback != null) {
1038 mRS.mMessageCallback.mData = rbuf;
1039 mRS.mMessageCallback.mID = subID;
1040 mRS.mMessageCallback.mLength = size;
1041 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -07001042 } else {
Jason Sams1c415172010-11-08 17:06:46 -08001043 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -07001044 }
Stephen Hinesab98bb62010-09-24 14:38:30 -07001045 continue;
Jason Sams516c3192009-10-06 13:58:47 -07001046 }
Jason Sams1c415172010-11-08 17:06:46 -08001047
1048 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
1049 String e = mRS.nContextGetErrorMessage(mRS.mContext);
1050
Stephen Hines42028a82013-04-17 19:22:01 -07001051 // Throw RSRuntimeException under the following conditions:
1052 //
1053 // 1) It is an unknown fatal error.
1054 // 2) It is a debug fatal error, and we are not in a
1055 // debug context.
1056 // 3) It is a debug fatal error, and we do not have an
1057 // error callback.
1058 if (subID >= RS_ERROR_FATAL_UNKNOWN ||
1059 (subID >= RS_ERROR_FATAL_DEBUG &&
1060 (mRS.mContextType != ContextType.DEBUG ||
1061 mRS.mErrorCallback == null))) {
Jason Samsadd9d962010-11-22 16:20:16 -08001062 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
1063 }
1064
Jason Sams1c415172010-11-08 17:06:46 -08001065 if(mRS.mErrorCallback != null) {
1066 mRS.mErrorCallback.mErrorMessage = e;
1067 mRS.mErrorCallback.mErrorNum = subID;
1068 mRS.mErrorCallback.run();
1069 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -08001070 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08001071 // Do not throw here. In these cases, we do not have
1072 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -08001073 }
1074 continue;
1075 }
1076
Jason Sams739c8262013-04-11 18:07:52 -07001077 if (msg == RS_MESSAGE_TO_CLIENT_NEW_BUFFER) {
1078 Allocation.sendBufferNotification(subID);
1079 continue;
1080 }
1081
Jason Sams1c415172010-11-08 17:06:46 -08001082 // 2: teardown.
1083 // But we want to avoid starving other threads during
1084 // teardown by yielding until the next line in the destructor
1085 // can execute to set mRun = false
1086 try {
1087 sleep(1, 0);
1088 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -07001089 }
Jason Sams516c3192009-10-06 13:58:47 -07001090 }
Tim Murrayda67deb2013-05-09 12:02:50 -07001091 //Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -07001092 }
1093 }
1094
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001095 RenderScript(Context ctx) {
Stephen Hines42028a82013-04-17 19:22:01 -07001096 mContextType = ContextType.NORMAL;
Jason Sams1a4e1f32012-02-24 17:51:24 -08001097 if (ctx != null) {
1098 mApplicationContext = ctx.getApplicationContext();
1099 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001100 }
1101
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001102 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001103 * Gets the application context associated with the RenderScript context.
1104 *
1105 * @return The application context.
1106 */
1107 public final Context getApplicationContext() {
1108 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001109 }
1110
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001111 /**
Jason Samsadd26dc2013-02-22 18:43:45 -08001112 * @hide
1113 */
1114 public static RenderScript create(Context ctx, int sdkVersion) {
1115 return create(ctx, sdkVersion, ContextType.NORMAL);
1116 }
1117
1118 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001119 * Create a RenderScript context.
Jason Sams27676fe2010-11-10 17:00:59 -08001120 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001121 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001122 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001123 * @return RenderScript
1124 */
Jason Samsadd26dc2013-02-22 18:43:45 -08001125 public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
Dan Morrille4d9a012013-03-28 18:10:43 -07001126 if (!sInitialized) {
1127 Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
1128 return null;
1129 }
1130
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001131 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001132
1133 rs.mDev = rs.nDeviceCreate();
Jason Samsadd26dc2013-02-22 18:43:45 -08001134 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion, ct.mID);
Stephen Hines42028a82013-04-17 19:22:01 -07001135 rs.mContextType = ct;
Jason Sams26985362011-05-03 15:01:58 -07001136 if (rs.mContext == 0) {
1137 throw new RSDriverException("Failed to create RS context.");
1138 }
Jason Sams704ff642010-02-09 16:05:07 -08001139 rs.mMessageThread = new MessageThread(rs);
1140 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001141 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001142 }
1143
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001144 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001145 * Create a RenderScript context.
Jason Sams1a4e1f32012-02-24 17:51:24 -08001146 *
1147 * @param ctx The context.
1148 * @return RenderScript
1149 */
1150 public static RenderScript create(Context ctx) {
Jason Samsadd26dc2013-02-22 18:43:45 -08001151 return create(ctx, ContextType.NORMAL);
1152 }
1153
1154 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001155 * Create a RenderScript context.
Jason Samsadd26dc2013-02-22 18:43:45 -08001156 *
Jason Samsadd26dc2013-02-22 18:43:45 -08001157 *
1158 * @param ctx The context.
Jason Sams02d56d92013-04-12 16:40:50 -07001159 * @param ct The type of context to be created.
Jason Samsadd26dc2013-02-22 18:43:45 -08001160 * @return RenderScript
1161 */
1162 public static RenderScript create(Context ctx, ContextType ct) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001163 int v = ctx.getApplicationInfo().targetSdkVersion;
Jason Samsadd26dc2013-02-22 18:43:45 -08001164 return create(ctx, v, ct);
Jason Sams1a4e1f32012-02-24 17:51:24 -08001165 }
1166
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001167 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001168 * Print the currently available debugging information about the state of
1169 * the RS context to the log.
1170 *
Jason Sams27676fe2010-11-10 17:00:59 -08001171 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001172 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001173 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001174 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001175 }
1176
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001177 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001178 * Wait for any pending asynchronous opeations (such as copies to a RS
1179 * allocation or RS script executions) to complete.
Jason Sams27676fe2010-11-10 17:00:59 -08001180 *
1181 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001182 public void finish() {
1183 nContextFinish();
1184 }
1185
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001186 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -07001187 * Destroys this RenderScript context. Once this function is called,
1188 * using this context or any objects belonging to this context is
1189 * illegal.
Jason Sams27676fe2010-11-10 17:00:59 -08001190 *
1191 */
Jason Samsf5b45962009-08-25 14:49:07 -07001192 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001193 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001194 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001195 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001196 try {
1197 mMessageThread.join();
1198 } catch(InterruptedException e) {
1199 }
Jason Sams516c3192009-10-06 13:58:47 -07001200
Jason Sams2e1872f2010-08-17 16:25:41 -07001201 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001202 mContext = 0;
1203
1204 nDeviceDestroy(mDev);
1205 mDev = 0;
1206 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001207
Jason Samsa9e7a052009-09-25 14:51:22 -07001208 boolean isAlive() {
1209 return mContext != 0;
1210 }
1211
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001212 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001213 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001214 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001215 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001216 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001217 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001218}