blob: 56303f712b67674cfa6ef7fbd56ef96d37627166 [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 Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Stephen Hines4382467a2011-08-01 15:02:34 -070022import android.content.pm.ApplicationInfo;
23import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080024import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070025import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070026import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070027import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070028import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070029import android.util.Log;
30import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070031
Jack Palevich60aa3ea2009-05-26 13:45:08 -070032
Stephen Hines4382467a2011-08-01 15:02:34 -070033
Jason Samse29d4712009-07-23 15:19:03 -070034/**
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080035 * Renderscript base master class. An instance of this class creates native
Jason Sams27676fe2010-11-10 17:00:59 -080036 * worker threads for processing commands from this object. This base class
37 * does not provide any extended capabilities beyond simple data processing.
38 * For extended capabilities use derived classes such as RenderScriptGL.
39 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080040 * <div class="special reference">
41 * <h3>Developer Guides</h3>
42 * <p>For more information about creating an application that uses Renderscript, read the
43 * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
44 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070045 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046public class RenderScript {
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 */
Romain Guy650a3eb2009-08-31 14:06:43 -070058 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080059 static boolean sInitialized;
60 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061
Jason Samsdba3ba52009-07-30 14:56:12 -070062
Jack Palevich60aa3ea2009-05-26 13:45:08 -070063 static {
64 sInitialized = false;
65 try {
Jason Samse29d4712009-07-23 15:19:03 -070066 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070067 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068 sInitialized = true;
69 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080070 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
71 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070072 }
73 }
74
Jason Sams2e1872f2010-08-17 16:25:41 -070075 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070076 native int nDeviceCreate();
77 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070078 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070079 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080080 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070081 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070082 native void nContextInitToClient(int con);
83 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070084
Jason Sams718cd1f2009-12-23 14:35:29 -080085
Jason Sams2e1872f2010-08-17 16:25:41 -070086 // Methods below are wrapped to protect the non-threadsafe
87 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -070088 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070089 int colorMin, int colorPref,
90 int alphaMin, int alphaPref,
91 int depthMin, int depthPref,
92 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070093 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -070094 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -070095 int colorMin, int colorPref,
96 int alphaMin, int alphaPref,
97 int depthMin, int depthPref,
98 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -070099 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700100 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700101 alphaMin, alphaPref, depthMin, depthPref,
102 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700103 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700104 }
Stephen Hines4382467a2011-08-01 15:02:34 -0700105 native int rsnContextCreate(int dev, int ver, int sdkVer);
106 synchronized int nContextCreate(int dev, int ver, int sdkVer) {
107 return rsnContextCreate(dev, ver, sdkVer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700108 }
109 native void rsnContextDestroy(int con);
110 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800111 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700112 rsnContextDestroy(mContext);
113 }
114 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
115 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800116 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700117 rsnContextSetSurface(mContext, w, h, sur);
118 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700119 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
120 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
121 validate();
122 rsnContextSetSurfaceTexture(mContext, w, h, sur);
123 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 native void rsnContextSetPriority(int con, int p);
125 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800126 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700127 rsnContextSetPriority(mContext, p);
128 }
129 native void rsnContextDump(int con, int bits);
130 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800131 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700132 rsnContextDump(mContext, bits);
133 }
134 native void rsnContextFinish(int con);
135 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800136 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 rsnContextFinish(mContext);
138 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700139
Jason Sams2e1872f2010-08-17 16:25:41 -0700140 native void rsnContextBindRootScript(int con, int script);
141 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800142 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700143 rsnContextBindRootScript(mContext, script);
144 }
145 native void rsnContextBindSampler(int con, int sampler, int slot);
146 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800147 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700148 rsnContextBindSampler(mContext, sampler, slot);
149 }
150 native void rsnContextBindProgramStore(int con, int pfs);
151 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800152 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700153 rsnContextBindProgramStore(mContext, pfs);
154 }
155 native void rsnContextBindProgramFragment(int con, int pf);
156 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800157 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700158 rsnContextBindProgramFragment(mContext, pf);
159 }
160 native void rsnContextBindProgramVertex(int con, int pv);
161 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800162 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700163 rsnContextBindProgramVertex(mContext, pv);
164 }
165 native void rsnContextBindProgramRaster(int con, int pr);
166 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800167 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700168 rsnContextBindProgramRaster(mContext, pr);
169 }
170 native void rsnContextPause(int con);
171 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800172 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700173 rsnContextPause(mContext);
174 }
175 native void rsnContextResume(int con);
176 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800177 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 rsnContextResume(mContext);
179 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700180
Jason Sams2e1872f2010-08-17 16:25:41 -0700181 native void rsnAssignName(int con, int obj, byte[] name);
182 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800183 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 rsnAssignName(mContext, obj, name);
185 }
186 native String rsnGetName(int con, int obj);
187 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800188 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 return rsnGetName(mContext, obj);
190 }
191 native void rsnObjDestroy(int con, int id);
192 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 // There is a race condition here. The calling code may be run
194 // by the gc while teardown is occuring. This protects againts
195 // deleting dead objects.
196 if (mContext != 0) {
197 rsnObjDestroy(mContext, id);
198 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 }
Jason Samsfe08d992009-05-27 14:45:32 -0700200
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
202 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 return rsnElementCreate(mContext, type, kind, norm, vecSize);
205 }
Jason Sams70d4e502010-09-02 17:35:23 -0700206 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
207 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700209 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700210 }
211 native void rsnElementGetNativeData(int con, int id, int[] elementData);
212 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800213 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700214 rsnElementGetNativeData(mContext, id, elementData);
215 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700216 native void rsnElementGetSubElements(int con, int id,
217 int[] IDs, String[] names, int[] arraySizes);
218 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700220 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 }
Jason Sams768bc022009-09-21 19:41:04 -0700222
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800223 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
224 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800225 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800226 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700227 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700228 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
229 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800230 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700231 rsnTypeGetNativeData(mContext, id, typeData);
232 }
Jason Sams768bc022009-09-21 19:41:04 -0700233
Jason Sams857d0c72011-11-23 15:02:15 -0800234 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
235 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800236 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800237 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700238 }
Jason Sams5476b452010-12-08 16:14:36 -0800239 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
240 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800241 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800242 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700243 }
Jason Sams5476b452010-12-08 16:14:36 -0800244 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
245 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800246 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800247 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800248 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700249 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
250 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800251 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700252 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
253 }
Jason Sams5476b452010-12-08 16:14:36 -0800254 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
255 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800257 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
258 }
259
Jason Sams4ef66502010-12-10 16:03:15 -0800260 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
261 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800262 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800263 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
264 }
265
266
Jason Sams5476b452010-12-08 16:14:36 -0800267 native void rsnAllocationSyncAll(int con, int alloc, int src);
268 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800269 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800270 rsnAllocationSyncAll(mContext, alloc, src);
271 }
Jason Sams615e7ce2012-01-13 14:01:20 -0800272 native int rsnAllocationGetSurfaceTextureID(int con, int alloc);
273 synchronized int nAllocationGetSurfaceTextureID(int alloc) {
274 validate();
275 return rsnAllocationGetSurfaceTextureID(mContext, alloc);
276 }
Jason Sams163766c2012-02-15 12:04:24 -0800277 native void rsnAllocationSetSurfaceTexture(int con, int alloc, SurfaceTexture sur);
278 synchronized void nAllocationSetSurfaceTexture(int alloc, SurfaceTexture sur) {
279 validate();
280 rsnAllocationSetSurfaceTexture(mContext, alloc, sur);
281 }
282 native void rsnAllocationIoSend(int con, int alloc);
283 synchronized void nAllocationIoSend(int alloc) {
284 validate();
285 rsnAllocationIoSend(mContext, alloc);
286 }
287 native void rsnAllocationIoReceive(int con, int alloc);
288 synchronized void nAllocationIoReceive(int alloc) {
289 validate();
290 rsnAllocationIoReceive(mContext, alloc);
291 }
292
Jason Sams615e7ce2012-01-13 14:01:20 -0800293
Jason Samsf7086092011-01-12 13:28:37 -0800294 native void rsnAllocationGenerateMipmaps(int con, int alloc);
295 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800296 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800297 rsnAllocationGenerateMipmaps(mContext, alloc);
298 }
Jason Sams4ef66502010-12-10 16:03:15 -0800299 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
300 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800301 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800302 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700303 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700304
Jason Sams49a05d72010-12-29 14:31:29 -0800305
306 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
307 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800308 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800309 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700310 }
Jason Sams49a05d72010-12-29 14:31:29 -0800311 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
312 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800313 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800314 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
315 }
316 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
317 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800318 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800319 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
320 }
321 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
322 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800323 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800324 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700325 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700326
Jason Sams49a05d72010-12-29 14:31:29 -0800327 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
328 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800329 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800330 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700331 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700332
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700333 native void rsnAllocationData2D(int con,
334 int dstAlloc, int dstXoff, int dstYoff,
335 int dstMip, int dstFace,
336 int width, int height,
337 int srcAlloc, int srcXoff, int srcYoff,
338 int srcMip, int srcFace);
339 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
340 int dstMip, int dstFace,
341 int width, int height,
342 int srcAlloc, int srcXoff, int srcYoff,
343 int srcMip, int srcFace) {
344 validate();
345 rsnAllocationData2D(mContext,
346 dstAlloc, dstXoff, dstYoff,
347 dstMip, dstFace,
348 width, height,
349 srcAlloc, srcXoff, srcYoff,
350 srcMip, srcFace);
351 }
352
Jason Samsfa445b92011-01-07 17:00:07 -0800353 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
354 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800355 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800356 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
357 }
358 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
359 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800360 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800361 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
362 }
Jason Sams49a05d72010-12-29 14:31:29 -0800363 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
364 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800365 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800366 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700367 }
Jason Sams49a05d72010-12-29 14:31:29 -0800368 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
369 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800370 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800371 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700372 }
Jason Samsfa445b92011-01-07 17:00:07 -0800373 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
374 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800375 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800376 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
377 }
Jason Sams49a05d72010-12-29 14:31:29 -0800378
Jason Samsfa445b92011-01-07 17:00:07 -0800379 native void rsnAllocationRead(int con, int id, byte[] d);
380 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800381 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800382 rsnAllocationRead(mContext, id, d);
383 }
384 native void rsnAllocationRead(int con, int id, short[] d);
385 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800386 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800387 rsnAllocationRead(mContext, id, d);
388 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700389 native void rsnAllocationRead(int con, int id, int[] d);
390 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800391 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700392 rsnAllocationRead(mContext, id, d);
393 }
394 native void rsnAllocationRead(int con, int id, float[] d);
395 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800396 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700397 rsnAllocationRead(mContext, id, d);
398 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700399 native int rsnAllocationGetType(int con, int id);
400 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800401 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700402 return rsnAllocationGetType(mContext, id);
403 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700404
Jason Sams5edc6082010-10-05 13:32:49 -0700405 native void rsnAllocationResize1D(int con, int id, int dimX);
406 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800407 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700408 rsnAllocationResize1D(mContext, id, dimX);
409 }
410 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
411 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800412 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700413 rsnAllocationResize2D(mContext, id, dimX, dimY);
414 }
415
Jason Sams2e1872f2010-08-17 16:25:41 -0700416 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
417 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800418 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700419 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
420 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800421 native int rsnFileA3DCreateFromFile(int con, String path);
422 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800423 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800424 return rsnFileA3DCreateFromFile(mContext, path);
425 }
426 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
427 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800428 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800429 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
430 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700431 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
432 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800433 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700434 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
435 }
436 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
437 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800438 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700439 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
440 }
441 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
442 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800443 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700444 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
445 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700446
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800447 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
448 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800449 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700450 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
451 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800452 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
453 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800454 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800455 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
456 }
457 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
458 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800459 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800460 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
461 }
Jason Sams22534172009-08-04 16:58:20 -0700462
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700463
Jason Sams2e1872f2010-08-17 16:25:41 -0700464 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
465 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800466 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700467 rsnScriptBindAllocation(mContext, script, alloc, slot);
468 }
469 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
470 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700472 rsnScriptSetTimeZone(mContext, script, timeZone);
473 }
474 native void rsnScriptInvoke(int con, int id, int slot);
475 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800476 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700477 rsnScriptInvoke(mContext, id, slot);
478 }
Jason Sams6e494d32011-04-27 16:33:11 -0700479 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
480 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
481 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
482 validate();
483 if (params == null) {
484 rsnScriptForEach(mContext, id, slot, ain, aout);
485 } else {
486 rsnScriptForEach(mContext, id, slot, ain, aout, params);
487 }
488 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700489 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
490 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800491 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700492 rsnScriptInvokeV(mContext, id, slot, params);
493 }
494 native void rsnScriptSetVarI(int con, int id, int slot, int val);
495 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800496 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700497 rsnScriptSetVarI(mContext, id, slot, val);
498 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700499 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
500 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800501 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700502 rsnScriptSetVarJ(mContext, id, slot, val);
503 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700504 native void rsnScriptSetVarF(int con, int id, int slot, float val);
505 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800506 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700507 rsnScriptSetVarF(mContext, id, slot, val);
508 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700509 native void rsnScriptSetVarD(int con, int id, int slot, double val);
510 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800511 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700512 rsnScriptSetVarD(mContext, id, slot, val);
513 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700514 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
515 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800516 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700517 rsnScriptSetVarV(mContext, id, slot, val);
518 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800519 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
520 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800521 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800522 rsnScriptSetVarObj(mContext, id, slot, val);
523 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700524
Jason Samse4a06c52011-03-16 16:29:28 -0700525 native int rsnScriptCCreate(int con, String resName, String cacheDir,
526 byte[] script, int length);
527 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800528 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700529 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700530 }
Jason Samsebfb4362009-09-23 13:57:02 -0700531
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700532 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
533 int wrapS, int wrapT, int wrapR, float aniso);
534 synchronized int nSamplerCreate(int magFilter, int minFilter,
535 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800536 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700537 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800539
Jason Sams331bf9b2011-04-06 11:23:54 -0700540 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
541 boolean depthMask, boolean dither,
542 int srcMode, int dstMode, int depthFunc);
543 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
544 boolean depthMask, boolean dither,
545 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800546 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700547 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
548 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700549 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700550
Jason Sams94aaed32011-09-23 14:18:53 -0700551 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
552 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800553 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700554 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700555 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700556
Jason Sams2e1872f2010-08-17 16:25:41 -0700557 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
558 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800559 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700560 rsnProgramBindConstants(mContext, pv, slot, mID);
561 }
562 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
563 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800564 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700565 rsnProgramBindTexture(mContext, vpf, slot, a);
566 }
567 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
568 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800569 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700570 rsnProgramBindSampler(mContext, vpf, slot, s);
571 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700572 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
573 synchronized int nProgramFragmentCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800574 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700575 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700576 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700577 native int rsnProgramVertexCreate(int con, String shader, int[] params);
578 synchronized int nProgramVertexCreate(String shader, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800579 validate();
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700580 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700581 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700582
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700583 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
584 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800585 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700586 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800587 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700588 native int rsnMeshGetVertexBufferCount(int con, int id);
589 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800590 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700591 return rsnMeshGetVertexBufferCount(mContext, id);
592 }
593 native int rsnMeshGetIndexCount(int con, int id);
594 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800595 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700596 return rsnMeshGetIndexCount(mContext, id);
597 }
598 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
599 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800600 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700601 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
602 }
603 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
604 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800605 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700606 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
607 }
608
Jason Samsf15ed012011-10-31 13:23:43 -0700609 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
610 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
611 validate();
612 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
613 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700614
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800615 int mDev;
616 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700617 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800618 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700619
Jason Sams8cb39de2010-06-01 15:47:01 -0700620 Element mElement_U8;
621 Element mElement_I8;
622 Element mElement_U16;
623 Element mElement_I16;
624 Element mElement_U32;
625 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700626 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700627 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700628 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700629 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700630 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700631
Jason Sams8cb39de2010-06-01 15:47:01 -0700632 Element mElement_ELEMENT;
633 Element mElement_TYPE;
634 Element mElement_ALLOCATION;
635 Element mElement_SAMPLER;
636 Element mElement_SCRIPT;
637 Element mElement_MESH;
638 Element mElement_PROGRAM_FRAGMENT;
639 Element mElement_PROGRAM_VERTEX;
640 Element mElement_PROGRAM_RASTER;
641 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700642
Jason Sams3c0dfba2009-09-27 17:50:38 -0700643 Element mElement_A_8;
644 Element mElement_RGB_565;
645 Element mElement_RGB_888;
646 Element mElement_RGBA_5551;
647 Element mElement_RGBA_4444;
648 Element mElement_RGBA_8888;
649
Jason Sams8cb39de2010-06-01 15:47:01 -0700650 Element mElement_FLOAT_2;
651 Element mElement_FLOAT_3;
652 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700653
654 Element mElement_DOUBLE_2;
655 Element mElement_DOUBLE_3;
656 Element mElement_DOUBLE_4;
657
658 Element mElement_UCHAR_2;
659 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700660 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800661
Stephen Hines836c4a52011-06-01 14:38:10 -0700662 Element mElement_CHAR_2;
663 Element mElement_CHAR_3;
664 Element mElement_CHAR_4;
665
666 Element mElement_USHORT_2;
667 Element mElement_USHORT_3;
668 Element mElement_USHORT_4;
669
670 Element mElement_SHORT_2;
671 Element mElement_SHORT_3;
672 Element mElement_SHORT_4;
673
674 Element mElement_UINT_2;
675 Element mElement_UINT_3;
676 Element mElement_UINT_4;
677
678 Element mElement_INT_2;
679 Element mElement_INT_3;
680 Element mElement_INT_4;
681
682 Element mElement_ULONG_2;
683 Element mElement_ULONG_3;
684 Element mElement_ULONG_4;
685
686 Element mElement_LONG_2;
687 Element mElement_LONG_3;
688 Element mElement_LONG_4;
689
Jason Sams1d45c472010-08-25 14:31:48 -0700690 Element mElement_MATRIX_4X4;
691 Element mElement_MATRIX_3X3;
692 Element mElement_MATRIX_2X2;
693
Jason Sams4d339932010-05-11 14:03:58 -0700694 Sampler mSampler_CLAMP_NEAREST;
695 Sampler mSampler_CLAMP_LINEAR;
696 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
697 Sampler mSampler_WRAP_NEAREST;
698 Sampler mSampler_WRAP_LINEAR;
699 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
700
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700701 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
702 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700703 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
704 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700705
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700706 ProgramRaster mProgramRaster_CULL_BACK;
707 ProgramRaster mProgramRaster_CULL_FRONT;
708 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700709
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700710 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700711 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700712
Jason Sams27676fe2010-11-10 17:00:59 -0800713 /**
714 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800715 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800716 * fields will be filled in and then the run method called by a message
717 * handling thread. This will occur some time after sendToClient completes
718 * in the script.
719 *
720 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800721 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700722 protected int[] mData;
723 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800724 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700725 public void run() {
726 }
727 }
Jason Sams27676fe2010-11-10 17:00:59 -0800728 /**
729 * If an application is expecting messages it should set this field to an
730 * instance of RSMessage. This instance will receive all the user messages
731 * sent from sendToClient by scripts from this context.
732 *
733 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800734 RSMessageHandler mMessageCallback = null;
735
736 public void setMessageHandler(RSMessageHandler msg) {
737 mMessageCallback = msg;
738 }
739 public RSMessageHandler getMessageHandler() {
740 return mMessageCallback;
741 }
Jason Sams516c3192009-10-06 13:58:47 -0700742
Jason Sams27676fe2010-11-10 17:00:59 -0800743 /**
744 * Runtime error base class. An application should derive from this class
745 * if it wishes to install an error handler. When errors occur at runtime
746 * the fields in this class will be filled and the run method called.
747 *
748 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800749 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800750 protected String mErrorMessage;
751 protected int mErrorNum;
752 public void run() {
753 }
754 }
Jason Sams27676fe2010-11-10 17:00:59 -0800755
756 /**
757 * Application Error handler. All runtime errors will be dispatched to the
758 * instance of RSAsyncError set here. If this field is null a
759 * RSRuntimeException will instead be thrown with details about the error.
760 * This will cause program termaination.
761 *
762 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800763 RSErrorHandler mErrorCallback = null;
764
765 public void setErrorHandler(RSErrorHandler msg) {
766 mErrorCallback = msg;
767 }
768 public RSErrorHandler getErrorHandler() {
769 return mErrorCallback;
770 }
Jason Sams1c415172010-11-08 17:06:46 -0800771
Jason Sams27676fe2010-11-10 17:00:59 -0800772 /**
773 * RenderScript worker threads priority enumeration. The default value is
774 * NORMAL. Applications wishing to do background processing such as
775 * wallpapers should set their priority to LOW to avoid starving forground
776 * processes.
777 */
Jason Sams7d787b42009-11-15 12:14:26 -0800778 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700779 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
780 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800781
782 int mID;
783 Priority(int id) {
784 mID = id;
785 }
786 }
787
Jason Sams771bebb2009-12-07 12:40:12 -0800788 void validate() {
789 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700790 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800791 }
792 }
793
Jason Sams27676fe2010-11-10 17:00:59 -0800794
795 /**
796 * Change the priority of the worker threads for this context.
797 *
798 * @param p New priority to be set.
799 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800800 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800801 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800802 nContextSetPriority(p.mID);
803 }
804
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800805 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700806 RenderScript mRS;
807 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800808 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800809
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800810 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
811 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
812 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
813 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
814 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700815
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800816 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800817
Jason Sams516c3192009-10-06 13:58:47 -0700818 MessageThread(RenderScript rs) {
819 super("RSMessageThread");
820 mRS = rs;
821
822 }
823
824 public void run() {
825 // This function is a temporary solution. The final solution will
826 // used typed allocations where the message id is the type indicator.
827 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700828 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700829 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700830 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700831 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800832 int size = mAuxData[1];
833 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800834
835 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
836 if ((size>>2) >= rbuf.length) {
837 rbuf = new int[(size + 3) >> 2];
838 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700839 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
840 RS_MESSAGE_TO_CLIENT_USER) {
841 throw new RSDriverException("Error processing message from Renderscript.");
842 }
Jason Sams1c415172010-11-08 17:06:46 -0800843
844 if(mRS.mMessageCallback != null) {
845 mRS.mMessageCallback.mData = rbuf;
846 mRS.mMessageCallback.mID = subID;
847 mRS.mMessageCallback.mLength = size;
848 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700849 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800850 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700851 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700852 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700853 }
Jason Sams1c415172010-11-08 17:06:46 -0800854
855 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
856 String e = mRS.nContextGetErrorMessage(mRS.mContext);
857
Jason Samsadd9d962010-11-22 16:20:16 -0800858 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
859 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
860 }
861
Jason Sams1c415172010-11-08 17:06:46 -0800862 if(mRS.mErrorCallback != null) {
863 mRS.mErrorCallback.mErrorMessage = e;
864 mRS.mErrorCallback.mErrorNum = subID;
865 mRS.mErrorCallback.run();
866 } else {
Stephen Hinesbe74bdd2012-02-03 15:29:36 -0800867 // Do not throw here. In these cases, we do not have
868 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -0800869 }
870 continue;
871 }
872
873 // 2: teardown.
874 // But we want to avoid starving other threads during
875 // teardown by yielding until the next line in the destructor
876 // can execute to set mRun = false
877 try {
878 sleep(1, 0);
879 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700880 }
Jason Sams516c3192009-10-06 13:58:47 -0700881 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800882 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700883 }
884 }
885
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800886 RenderScript(Context ctx) {
887 mApplicationContext = ctx.getApplicationContext();
888 }
889
890 /**
891 * Gets the application context associated with the RenderScript context.
892 *
893 * @return The application context.
894 */
895 public final Context getApplicationContext() {
896 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700897 }
898
Stephen Hines4382467a2011-08-01 15:02:34 -0700899 static int getTargetSdkVersion(Context ctx) {
Jason Sams85397d82011-10-06 17:54:45 -0700900 return ctx.getApplicationInfo().targetSdkVersion;
Stephen Hines4382467a2011-08-01 15:02:34 -0700901 }
902
Jason Sams27676fe2010-11-10 17:00:59 -0800903 /**
904 * Create a basic RenderScript context.
905 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800906 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800907 * @return RenderScript
908 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800909 public static RenderScript create(Context ctx) {
910 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800911
Stephen Hines4382467a2011-08-01 15:02:34 -0700912 int sdkVersion = getTargetSdkVersion(ctx);
913
Jason Sams704ff642010-02-09 16:05:07 -0800914 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700915 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700916 if (rs.mContext == 0) {
917 throw new RSDriverException("Failed to create RS context.");
918 }
Jason Sams704ff642010-02-09 16:05:07 -0800919 rs.mMessageThread = new MessageThread(rs);
920 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800921 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800922 }
923
Jason Sams27676fe2010-11-10 17:00:59 -0800924 /**
925 * Print the currently available debugging information about the state of
926 * the RS context to the log.
927 *
Jason Sams27676fe2010-11-10 17:00:59 -0800928 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800929 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800930 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800931 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800932 }
933
Jason Sams27676fe2010-11-10 17:00:59 -0800934 /**
935 * Wait for any commands in the fifo between the java bindings and native to
936 * be processed.
937 *
938 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700939 public void finish() {
940 nContextFinish();
941 }
942
Jason Sams27676fe2010-11-10 17:00:59 -0800943 /**
944 * Destroy this renderscript context. Once this function is called its no
945 * longer legal to use this or any objects created by this context.
946 *
947 */
Jason Samsf5b45962009-08-25 14:49:07 -0700948 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800949 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700950 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700951 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700952 try {
953 mMessageThread.join();
954 } catch(InterruptedException e) {
955 }
Jason Sams516c3192009-10-06 13:58:47 -0700956
Jason Sams2e1872f2010-08-17 16:25:41 -0700957 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700958 mContext = 0;
959
960 nDeviceDestroy(mDev);
961 mDev = 0;
962 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700963
Jason Samsa9e7a052009-09-25 14:51:22 -0700964 boolean isAlive() {
965 return mContext != 0;
966 }
967
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800968 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700969 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800970 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700971 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700972 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700973 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700974}